Я работаю над пониманием обнаружения столкновений и решил создать программу, имитирующую Пакмана. Проще говоря, когда Пакман сталкивается с Призраком, он умирает.
Я указываю, сколько Pacmen мне нужно, и в моем MainForm_Paint (вызываемом, когда мой элемент управления требует рисования) я создаю массив указанного количества созданного мною класса с именем Pacman. Затем я продолжаю конструировать каждого Pacman в массиве с указанными параметрами.
Когда все сказано и сделано, я продолжаю просто пытаться нарисовать все Pacmen, находясь в цикле. Только один нарисован внутри ClientRectangle независимо от того, сколько я указываю рисовать. Когда я раскрываю свой ClientRectangle, я вижу маленькие линии или что-то вроде осколка Pacman. Я проверил, чтобы убедиться, что стартовые позиции находятся в системе ClientRectangles x, y, и они есть. Я просто озадачен тем, почему они не рисуют внутри ClientRectangle, хотя. :( Любая помощь будет высоко ценится.
Вот то, что я кодировал для MainForm_Paint
private void MainForm_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Rectangle rect = this.ClientRectangle;
Pacman[] pacmen = new Pacman[parameters[0]];
int whichPacman = 0;
for (int i = 0; i < parameters[0]; i++)
{
pacmen[i] = new Pacman(rect, parameters[1]);
}
while (play)
{
pacmen[whichPacman].PacmanDraw(g, rect);
// Must reset whichPac if whichPac + 1 == parameters[0]
// Break out while testing
if ((whichPacman + 1) == parameters[0])
{
break;
}
else
{
whichPacman++;
}
}
}
Вот что я кодировал для своего класса Pacman:
public Pacman(Rectangle rect, int radius)
{
Random rand = new Random();
this.xpos = rand.Next(rect.Left, rect.Left + rect.Width);
this.ypos = rand.Next(rect.Top, rect.Top + rect.Height);
this.radius = radius;
}
public void PacmanDraw(Graphics g, Rectangle rect)
{
GraphicsPath path = new GraphicsPath();
path.AddArc(this.xpos, this.ypos, (float) this.radius * 2, (float) this.radius * 2, 0, 360);
path.CloseFigure();
g.FillPath(new SolidBrush(Color.AliceBlue), path);
path.Dispose();
}
Спасибо за вашу помощь и извините, если это нецелевое использование SOF.