没有碰撞边缘的C#Snake游戏

时间:2017-02-16 13:49:55

标签: c#

我正在做一个学校项目,我选择用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中写作。

4 个答案:

答案 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; }