private void Movement() { while (snakeElements.Count >= snakeLength) { GameBoard.Children.Remove(snakeElements[0].UiElement); snakeElements.RemoveAt(0); } foreach (SnakeElement snakeElement in snakeElements) { (snakeElement.UiElement as System.Windows.Shapes.Rectangle).Fill = snakeBody; snakeElement.IsHead = false; } SnakeElement head = snakeElements[snakeElements.Count - 1]; double nextXPosition = head.Position.X; double nextYPosition = head.Position.Y; switch (currentSnakeDirection) { case CurrentSnakeDirection.Up: nextYPosition -= snakeSquareSize; break; case CurrentSnakeDirection.Down: nextYPosition += snakeSquareSize; break; case CurrentSnakeDirection.Right: nextXPosition += snakeSquareSize; break; case CurrentSnakeDirection.Left: nextXPosition -= snakeSquareSize; break; } snakeElements.Add(new SnakeElement() { Position = new System.Windows.Point(nextXPosition, nextYPosition), IsHead = true }); SpawnSnake(); CheckCollision(); }
private void CheckCollision() { SnakeElement head = snakeElements[snakeElements.Count - 1]; if ((head.Position.X == System.Windows.Controls.Canvas.GetLeft(food)) && (head.Position.Y == System.Windows.Controls.Canvas.GetTop(food))) { Eat(); GetRandomImage(); return; } if ((head.Position.Y < 0) || (head.Position.Y >= GameBoard.ActualHeight) || (head.Position.X < 0) || (head.Position.X >= (GameBoard.Width - ScoreBoard.Width) - 14)) { EndGame(); } foreach (SnakeElement snakeBodyElement in snakeElements.Take(snakeElements.Count - 1)) { if ((head.Position.X == snakeBodyElement.Position.X) && (head.Position.Y == snakeBodyElement.Position.Y)) { EndGame(); } } }