Example #1
0
        public void Move(Directions direction)
        {
            int xPosIncrement = 0, yPosIncrement = 0;

            switch (direction)
            {
            case Directions.Up:
                --yPosIncrement;
                break;

            case Directions.Right:
                ++xPosIncrement;
                break;

            case Directions.Down:
                ++yPosIncrement;
                break;

            case Directions.Left:
                --xPosIncrement;
                break;
            }
            ISnakeBodyPart currentBodyPart = BodyParts.First();
            int            previousSnakeBodyPartXPosition = currentBodyPart.XPos;
            int            previousSnakeBodyPartYPosition = currentBodyPart.YPos;

            currentBodyPart.SetPosition(currentBodyPart.XPos + xPosIncrement, currentBodyPart.YPos + yPosIncrement);
            for (int i = 1; i < BodyParts.Count; ++i)
            {
                currentBodyPart = BodyParts[i];
                currentBodyPart.SetPosition(previousSnakeBodyPartXPosition, previousSnakeBodyPartYPosition);
                previousSnakeBodyPartXPosition = currentBodyPart.XPos;
                previousSnakeBodyPartYPosition = currentBodyPart.YPos;
            }
        }
 internal SnakeBodyPart(int xPos, int yPos, bool isSnakeHead, ISnakeBodyPart nextBodyPart)
 {
     XPos         = xPos;
     YPos         = yPos;
     IsSnakeHead  = isSnakeHead;
     NextBodyPart = nextBodyPart;
 }
Example #3
0
        public static ISnake GenerateSnake(int startingXpos, int startingYPos, int length)
        {
            ExceptionHelper.ThrowArgumentOutOfRangeIfZeroOrLower(nameof(length), length);
            ISnakeBodyPart[] snakeBodyParts = new ISnakeBodyPart[length];
            ISnakeBodyPart   nextBodyPart   = null;

            for (int i = length - 1; i >= 0; --i)
            {
                ISnakeBodyPart currentSnakeBodyPart = new SnakeBodyPart(startingXpos, startingYPos, i == 0, nextBodyPart);
                snakeBodyParts[i] = currentSnakeBodyPart;
                nextBodyPart      = currentSnakeBodyPart;
            }
            return(new Snake(snakeBodyParts));
        }
        public void NextTurnTest_DirectionDown()
        {
            const int        Width               = 10;
            const int        Height              = 10;
            const int        startingXPos        = 5;
            const int        startingYPos        = 5;
            const int        startingSnakeLength = 1;
            SnakeGameHandler gameHandler         = new SnakeGameHandler();

            gameHandler.SetupGame(Width, Height, startingXPos, startingYPos, startingSnakeLength);
            const int expectedXPosition = startingXPos;
            const int expectedYPosition = startingYPos + 1;

            gameHandler.NextTurn(Enums.Directions.Down);
            ISnakeBodyPart snakeHead = gameHandler.Snake.BodyParts.First(bodyPart => bodyPart.IsSnakeHead);

            Assert.AreEqual(expectedXPosition, snakeHead.XPos);
            Assert.AreEqual(expectedYPosition, snakeHead.YPos);
        }
        public bool IsGameOver()
        {
            ISnakeBodyPart headBodyPart = Snake.BodyParts.First(bodypart => bodypart.IsSnakeHead);

            return(Snake.BodyParts
                   .Any(bodyPart // Any Bodypart out of Borders
                        => bodyPart.XPos >= GameWidth ||
                        bodyPart.XPos < 0 ||
                        bodyPart.YPos >= GameHeight ||
                        bodyPart.YPos < 0)
                   ||
                   (
                       Snake.BodyParts // Snakehead hitting other bodypart
                       .Any(bodyPart
                            => bodyPart.XPos == headBodyPart.XPos &&
                            bodyPart.YPos == headBodyPart.YPos) &&
                       Snake.BodyParts // Not all bodyparts are in the same position
                       .Count(bodyPart
                              => bodyPart.XPos == headBodyPart.XPos &&
                              bodyPart.YPos == headBodyPart.YPos)
                       != Snake.BodyParts.Count
                   ));
        }