我目前正在使用C #Windows形式进行蛇/ Tron游戏,我有一些代码可以检查一条蛇是否有一条蛇撞到了另一条蛇或撞到墙上。
private void checkEndGame()
{
Boolean endGame = false;
foreach(Point trail in bothtrail)
{
Rectangle rect = new Rectangle(trail, new Size(15, 15));
if (p2.Bounds.IntersectsWith(rect) && p2trail.Count > 1)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player 1 perdio");
}
else if (p1.Bounds.IntersectsWith(rect) && p1trail.Count > 1)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player 2 perdio"); //Wont Stop Showing Message Box
}
}
if (p1.Left < 0 || p1.Top < 0 || p1.Left > this.Width || p1.Top > this.Height)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player1 perdio");
}
else if (p2.Left < 0 || p2.Top < 0 || p2.Left > this.Width || p2.Top > this.Height)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player2 perdio");
}
if (endGame)
{
newGame();
}
}
第一次运行并使用newGame();
重置后,if
和else if
的消息框将继续显示不间断。我试过放一些休息但是得到了相同的结果。
我应该使用continue;
吗?
答案 0 :(得分:0)
在endGame
循环中的foreach
语句中if
循环和中断条件之后,您似乎错过了foreach
的条件。请尝试以下方法:
private void checkEndGame()
{
var endGame = false;
foreach (Point trail in bothtrail)
{
var rect = new Rectangle(trail, new Size(15, 15));
if (p2.Bounds.IntersectsWith(rect) && p2trail.Count > 1)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player 1 perdio");
break;
}
else if (p1.Bounds.IntersectsWith(rect) && p1trail.Count > 1)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player 2 perdio"); //Wont Stop Showing Message Box
break;
}
}
if (!endGame)
{
if (p1.Left < 0 || p1.Top < 0 || p1.Left > this.Width || p1.Top > this.Height)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player1 perdio");
}
else if (p2.Left < 0 || p2.Top < 0 || p2.Left > this.Width || p2.Top > this.Height)
{
tmr1.Stop();
endGame = true;
MessageBox.Show("Player2 perdio");
}
}
if (endGame)
{
newGame();
}
}
除此之外,这里还有很多代码可重用性。您可能想要创建一个类似于下面的常用方法:
private bool _gameEnded = false;
private void EndGame(string player)
{
tmr1.Stop();
_gameEnded = true;
MessageBox.Show($"{player} perdio");
}
然后在适用的地方checkEndGame
调用此方法。