Jump to content

Pacman Collision detection 2D array

- - - - -

  • Please log in to reply
No replies to this topic

#1
jannemoon

jannemoon

    Newbie

  • Members
  • Pip
  • 1 posts
me and a friend of my have to make pacman but now we wan't our pacman not to go through walls but we don't have a clue how to do this? here is our code

namespace WindowsFormsApplication1
{

public partial class frmMain : Form
{
private Graphics paper;
private Image imgWall, imgDot;
private Pacman pacman;
private Dots dots;
int a;



private const int breedte = 15;
private int[,] _Level1;
private int position = 2;

public frmMain()
{
InitializeComponent();
paper = pictureBox1.CreateGraphics();
pacman = new Pacman(pictureBox1);
dots = new Dots(pictureBox1);

}

private void frmMain_Load(object sender, EventArgs e)
{

const int iMapWidth = 28;
const int iMapHeight = 28;

_Level1 = new int[iMapWidth,iMapHeight]{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1},
{1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1},
{1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1},
{1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1},
{1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1},
{1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,1,0,1,1,0,1,1,1,2,2,1,1,1,0,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,1,0,0,0,0,1,1,2,2,2,2,1,1,0,0,0,0,1,1,1,1,1,1},
{1,1,1,1,1,1,0,1,1,0,1,1,2,2,2,2,1,1,0,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1},
{1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1},
{1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1},
{1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1},
{1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1},
{1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1},
{1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1},
{1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1},
{1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
}




private void timer_Tick(object sender, EventArgs e)
{
paper.Clear(Color.Black);
drawPacman();
positionPacman();
drawLevel();

}

private void drawLevel()
{
Brush potloodWall = new SolidBrush(Color.Gray);
Brush potloodPath = new SolidBrush(Color.Black);
imgWall = Image.FromFile("Sprites/Sprite_wall.png");
imgDot = Image.FromFile("Sprites/dot.png");
int x = 15;
int y = 15;

// walls [i,j]

//.GetLength(0) => eerste dimensie (hoogte)
//.Getlength(1) => tweede dimensie (breedte)

for (int i = 0; i < _Level1.GetLength(0); i++)
{
// DOE DIT ZOLANG "i" KLEINER IS DAN "3"

for (int j = 0; j < _Level1.GetLength(1); j++)
{
// DOE DIT ZOLANG "J" KLEINER IS DAN "3"

if (_Level1[i, j] == 0) // als inhoud array [i,j] = 0 {teken path}
{
paper.DrawImage(imgDot, x, y, 15, 15);
x += 15;
}

if (_Level1[i, j] == 1) // als inhoud array [i,j] != 0 {teken wall}
{
paper.DrawImage(imgWall, x, y, 15, 15);
x += 15;
}

if (_Level1[i, j] == 2)
{
paper.FillRectangle(potloodPath, x, y, 15, 15);
x += 15;
}

if (x > (breedte * _Level1.GetLength(1))) // Begint nieuwe regel
{
y += 15;
x = 15;
}
}
}
}

private void drawPacman()
{
pacman.Display(paper);
}

private void drawDot()
{
dots.Display(paper);
}

#region move-event
private void frmMain_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
position = 1;
if (a == _Level1.GetLength(1))
{
pacman.MoveLeft();
}
else
{
pacman.MoveRight();
}
}

if (e.KeyCode == Keys.Left)
{
position = 2;
if (a == _Level1.GetLength(1))
{
pacman.MoveRight();
}
else
{
pacman.MoveLeft();
}
}

if (e.KeyCode == Keys.Up)
{
position = 3;
if (a == _Level1.GetLength(1))
{
pacman.MoveDown();
}
else
{
pacman.MoveUp();
}
}

if (e.KeyCode == Keys.Down)
{
position = 4;
if (a == _Level1.GetLength(1))
{
pacman.MoveUp();
}
else
{
pacman.MoveDown();
}
}
}

public void positionPacman()
{
if (position == 1)
{
pacman.pacman_right = Image.FromFile("Sprites/pacman_rechts.png");
}
if (position == 2)
{
pacman.pacman_left = Image.FromFile("Sprites/pacman_links.png");
}
if (position == 3)
{
pacman.pacman_up = Image.FromFile("Sprites/pacman_boven.png");
}
if (position == 4)
{
pacman.pacman_down = Image.FromFile("Sprites/pacman_onder.png");
}
}
#endregion
}
}




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users