MoveSnake() private method

private MoveSnake ( ) : void
return void
示例#1
0
        public void SnakeGrows()
        {
            var snake = new Snake(CurrentParams);

            var cell1 = new GrassCell(CurrentParams);
            var cell2 = new GrassCell(CurrentParams);
            var cell3 = new GrassCell(CurrentParams);
            var cell4 = new GrassCell(CurrentParams);

            var cell5 = new GrassCell(CurrentParams);
            var cell6 = new GrassCell(CurrentParams);
            var cell7 = new GrassCell(CurrentParams);

            snake.Locations.Enqueue(cell1);
            snake.Locations.Enqueue(cell2);
            snake.Locations.Enqueue(cell3);
            snake.Locations.Enqueue(cell4);

            snake.MoveSnake(cell5);
            snake.MoveSnake(cell6);
            snake.MoveSnake(cell7);

            Assert.AreEqual(5, snake.Locations.Count);

            Assert.AreEqual(cell3, snake.Locations.Dequeue());
            Assert.AreEqual(cell4, snake.Locations.Dequeue());
            Assert.AreEqual(cell5, snake.Locations.Dequeue());
            Assert.AreEqual(cell6, snake.Locations.Dequeue());
            Assert.AreEqual(cell7, snake.Locations.Dequeue());
        }
示例#2
0
        public void SnakeGetsToMinimalLength()
        {
            var snake = new Snake(CurrentParams);

            var cell1 = new GrassCell(CurrentParams);
            var cell2 = new GrassCell(CurrentParams);
            var cell3 = new GrassCell(CurrentParams);

            var cell5 = new GrassCell(CurrentParams);

            cell5.EnteredBySnake();

            var cell6 = new GrassCell(CurrentParams);

            cell6.EnteredBySnake();

            var cell7 = new GrassCell(CurrentParams);

            cell7.EnteredBySnake();

            snake.Locations.Enqueue(cell1);
            snake.Locations.Enqueue(cell2);
            snake.Locations.Enqueue(cell3);

            snake.MoveSnake(cell5);
            snake.MoveSnake(cell6);
            snake.MoveSnake(cell7);

            Assert.AreEqual(CurrentParams.SnakeLengthToStop, snake.Locations.Count);

            Assert.That(snake.IsStarving);

            Assert.AreEqual(cell6, snake.Locations.Dequeue());
            Assert.AreEqual(cell7, snake.Locations.Dequeue());
        }
示例#3
0
    static void Main()
    {
        Random random = new Random();
        Snake  noName = new Snake();

        //noName.DrawBorder();
        noName.Setup();
        noName.DrawSnake();
        while (!noName.isOver)
        {
            if (noName.isEating)
            {
                noName.DrawFruit(random);
            }
            if (KeyAvailable)
            {
                var key = ReadKey(true).Key;
                noName.MoveSnake(noName.DirectionMove(key));
            }
            var Timer = Stopwatch.StartNew();
            while (Timer.ElapsedMilliseconds <= 500)
            {
                noName.MoveSnake(noName.LastMove);
            }
        }
        noName.GameOver();
    }
示例#4
0
        public void StarvingSnakeEating()
        {
            var snake = new Snake(CurrentParams);

            var cell1 = new GrassCell(CurrentParams);
            var cell2 = new GrassCell(CurrentParams);

            var cell3 = new GrassCell(CurrentParams);

            cell3.EnteredBySnake();

            snake.Locations.Enqueue(cell1);
            snake.Locations.Enqueue(cell2);

            Assert.That(!snake.IsStarving);

            snake.MoveSnake(cell3);

            Assert.That(snake.IsStarving);

            cell3.UpdateGrowth(CurrentParams.NeededAliveNeighborsTurnsToGrow);

            snake.StarvingSnakeTurn();

            Assert.That(!snake.IsStarving);
        }
示例#5
0
        public void SnakeDying()
        {
            var snake = new Snake(CurrentParams);

            var cell1 = new GrassCell(CurrentParams);
            var cell2 = new GrassCell(CurrentParams);

            var cell3 = new GrassCell(CurrentParams);

            cell3.EnteredBySnake();

            snake.Locations.Enqueue(cell1);
            snake.Locations.Enqueue(cell2);

            Assert.That(!snake.IsStarving);

            snake.MoveSnake(cell3);

            Assert.That(snake.IsStarving);

            var starvingSnakeTurn = snake.StarvingSnakeTurn();

            Assert.That(!starvingSnakeTurn);

            starvingSnakeTurn = snake.StarvingSnakeTurn();

            Assert.That(starvingSnakeTurn);

            Assert.AreEqual(cell2, snake.Locations.Dequeue());
            Assert.AreEqual(cell3, snake.Locations.Dequeue());
        }
示例#6
0
 private void MainGameLoop(object sender, EventArgs e)
 {
     Snake.MoveSnake();
     CheckCollision();
     CreateApple();
     Draw();
 }
示例#7
0
 public void MetronomeUpdate()
 {
     if (!snake)
     {
         return;
     }
     if (!snake.MoveSnake())
     {
         Destroy(snake.gameObject);
     }
     foreach (Transform child in snake.transform)
     {
         if (child.localPosition.x >= grid.width || child.localPosition.x < 0 || child.localPosition.y >= grid.height || child.localPosition.y < 0)
         {
             Destroy(snake.gameObject);
         }
         if (child.position == grid.transform.GetChild(1).position)
         {
             Destroy(grid.transform.GetChild(1).gameObject);
             grid.SpawnObjective(snake.transform);
             snake.Grow();
             UpdateBpm(10);
         }
     }
 }
    private void Move()
    {
        SnakeBlock newHead = snake.GetNewHead(moveX, moveY);

        if (!CheckCollision(newHead))
        {
            if (eating)
            {
                eatingCounter--;
            }
            snake.MoveSnake(moveX, moveY);
            if (snake.head.x == food.x && snake.head.y == food.y)
            {
                Debug.Log("eating");
                newTail = food;
                Debug.Log(newTail.x);
                Debug.Log(newTail.y);
                eating = true;

                eatingCounter = snakeLength;
                foodAvailable = false;
            }
        }

        if (changingDirection)
        {
            changingDirection = false;
        }
    }
        public override void StartGame()
        {
            Reward.GenerateRandom(Map, SnakeLeftPositions, SnakeTopPositions);

            while (IsGameOver == false)
            {
                Thread.Sleep(SnakeSpeedInMilliseconds);

                //Monitor is used to prevent situation when first element was moved and before second will inherit his direction of move,
                //first once more changes direction of move. So the change is possible only between calls of MoveSnake method
                Monitor.Enter(_snake);
                _snake.MoveSnake();
                IsGameOver = GameRules.IsGameOver(_snake, Map);
                Monitor.Pulse(_snake);
                Monitor.Exit(_snake);

                _doesSnakeMoved = true;

                if (GameRules.IsRewardCollected(_snake, Reward))
                {
                    Score++;
                    Reward.Collect(Score);
                    _snake.GrowSnake();
                    Reward.GenerateRandom(Map, SnakeLeftPositions, SnakeTopPositions);
                }
            }

            Display.GameOver();
        }
示例#10
0
    private void ProcessKeyboard()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            snake.MoveSnake(SnakeDirection.LEFT);
        }

        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            snake.MoveSnake(SnakeDirection.RIGHT);
        }

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            snake.MoveSnake(SnakeDirection.UP);
        }

        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            snake.MoveSnake(SnakeDirection.DOWN);
        }
    }
示例#11
0
        public void MoveSnakeDoesNotThrowsArgumentOutOfRangeExceptionWhenSnakeLengthIsOneTest()
        {
            // arrange
            var snakeBody = new List <SnakeElement>
            {
                new SnakeElement(1, 1, DirectionOfMove.Right)
            };
            var displayStub = new Display();
            var snake       = new Snake(snakeBody, displayStub);

            // act
            // assert
            Assert.DoesNotThrow(() => snake.MoveSnake());
        }