我对编程非常陌生,而且我已经开始了C#
.我现在正试图制作我的第一场比赛,我决定使用蛇.到目前为止,我一直在努力研究这个问题,但我看到的所有答案都与那些使用不同方法移动蛇的人有关.
我的程序使用两个双打(left
和top
)来存储蛇在哪里Canvas
.我的程序还使用两个双打作为游戏中的"食物",称为randomFoodSpawnLeft
和randomFoodSpawnTop
.
我的问题是这个.如何通过左侧和顶部值检测两个矩形对象之间的碰撞?我很困惑.
snakeWindow
是窗口,snakeHead
是代表蛇的矩形,是蛇left
的左值,是蛇top
的最高值.
void timer_Tick(object sender, EventArgs e) { double left = Canvas.GetLeft(snakeHead); double top = Canvas.GetTop(snakeHead); if (keyUp) { top -= 3; } else if (keyDown) { top += 3; } else if (keyLeft) { left -= 3; } else if (keyRight) { left += 3; } // These statements see if you have hit the border of the window, default is 1024x765 if (left < 0) { left = 0; gameOver = true; } if (top < 0) { top = 0; gameOver = true; } if (left > snakeWindow.Width) { left = 0; gameOver = true; } if (top > snakeWindow.Height) { top = 0; gameOver = true; } // Statements that detect hit collision between the snakeHead and food // if (foodEaten == true) { spawnFood(); textBlockCurrentScore.Text += 1; } // If gameOver were to be true, then the game would have to end. In order to accomplish this I display to the user that the game is over // and the snakeHead is disabled, and should restart. if (gameOver == true) { keyRight = false; keyLeft = false; keyUp = false; keyDown = false; top = 0; left = 0; textBlockGameOver.Text = "GAME OVER!"; snakeCanvas.Background = Brushes.Blue; } Canvas.SetLeft(snakeHead, left); Canvas.SetTop(snakeHead, top); }
René Vogt.. 5
你可以用System.Windows.Rect.IntersectsWith
.试试这样:
Rect rect1 = new Rect(left1, top1, widht1, height1); Rect rect2 = new Rect(left2, top2, widht2, height2); bool intersects = rect1.IntersectsWith(rect2);
当然,你必须检查蛇头的所有部位.
你可以用System.Windows.Rect.IntersectsWith
.试试这样:
Rect rect1 = new Rect(left1, top1, widht1, height1); Rect rect2 = new Rect(left2, top2, widht2, height2); bool intersects = rect1.IntersectsWith(rect2);
当然,你必须检查蛇头的所有部位.