예제 #1
0
        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();
        }
예제 #2
0
        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();
                }
            }
        }