我正在做一个学校项目,我选择用C#进行蛇形游戏。 我几乎已经完成了这个游戏,但是我还想补充一点,那就是当蛇击中一个边缘时没有碰撞。因此,而不是蛇死亡,我希望它出现在屏幕的另一端(就像它在原始游戏中)。这是我的代码,当蛇撞到边缘时。
//Get maximum X and Y Pos
int maxXPos = pbCanvas.Size.Width / Settings.Width;
int maxYPos = pbCanvas.Size.Height / Settings.Height;
//Detect collission with game borders.
if (Snake[i].X < 0 || Snake[i].Y < 0
|| Snake[i].X >= maxXPos || Snake[i].Y >= maxYPos)
{
Die();
}
我知道Die();
不应该在那里,但我无法弄清楚我应该在那里写什么。我顺便在Visual Studio 2010中写作。
答案 0 :(得分:3)
您可以使用模数%
运算符:
Snake[i].X = (Snake[i].X + maxXPos) % maxXPos;
Snake[i].Y = (Snake[i].Y + maxYPos) % maxYPos;
比如说maxXPos == 10
,当X
变为-2
时,这将使其成为8
。
当X
变为11
时,这将使其成为1
。
答案 1 :(得分:1)
我想你必须处理四种情况中的每一种,并将蛇的坐标设置为&#34;对面&#34;位置:
if(Snake[i].X < 0) Snake[i].X = maxXPos;
else if(Snake[i].X >= maxXPos) Snake[i].X = 0;
else if(Snake[i].Y < 0) Snake[i].Y = maxYPos;
else if(Snake[i].Y >= maxYPos) Snake[i].Y = 0;
else
- 语句而不是简单的if
,可以避免在任何普遍情况下出现任何问题时进行不必要的比较。
答案 2 :(得分:1)
我相信这应该被使用,因为你总是只处理一次碰撞:
//Get maximum X and Y Pos
int maxXPos = pbCanvas.Size.Width / Settings.Width;
int maxYPos = pbCanvas.Size.Height / Settings.Height;
//Detect collission with game borders.
if (Snake[i].X < 0 ){
Snake[i].X = maxXPos;
}
else if(Snake[i].Y < 0){
Snake[i].Y = maxYPos;
}
else if(Snake[i].X >= maxXPos){
Snake[i].X = 0;
}
else if(Snake[i].Y >= maxYPos){
Snake[i].Y = 0;
}
答案 3 :(得分:0)
我假设你还有最低位置存储在某个地方?
int maxXPos = pbCanvas.Size.Width / Settings.Width;
int maxYPos = pbCanvas.Size.Height / Settings.Height;
// Detect collission with game borders.
if (Snake[i].X < 0) { Snake[i].X = maxXPos; }
if (Snake[i].X > maxXPos 0) { Snake[i].X = 0; }
if (Snake[i].Y < 0) { Snake[i].Y = maxXPos; }
if (Snake[i].Y > maxYPos 0) { Snake[i].Y = 0; }