private static void ClearCurrentSnakePartsFromConsole(Model.Snake snake) { PrintOnConsole(_oldTail.Row, _oldTail.Col, Constants.EMPTY_SPACE); PrintOnConsole(_oldHead.Row, _oldHead.Col, Constants.SNAKE_BODY); var snakeHead = snake.BodyParts.First(); PrintOnConsole(snakeHead.Row, snakeHead.Col, snakeHead.Symbol); }
private static void DrawSnake(Model.Snake snake) { _oldTail = snake.BodyParts.Last(); _oldHead = snake.BodyParts.First(); foreach (var snakeBodyPart in snake.BodyParts) { PrintOnConsole(snakeBodyPart.Row, snakeBodyPart.Col, snakeBodyPart.Symbol, ConsoleColor.Yellow); } }
private static void CheckSnakeCollision(Model.Snake snake) { SnakeNode head = snake.Head; // check field boundaries bool isOutOfLeftTopBorders = head.Row < 0 || head.Col < 0; bool isOutOfRightBottomBorders = head.Row > RowBoundary || head.Col >= ColBoundary; if (isOutOfLeftTopBorders || isOutOfRightBottomBorders) { GameOver(); } // check food collision if (_food != null && head.Row == _food.Row && head.Col == _food.Col) { _food = null; snake.Grow(); } // check self collision var currentNode = head.Prev; while (currentNode != null) { if (head.Row == currentNode.Row && head.Col == currentNode.Col) { GameOver(); } currentNode = currentNode.Prev; } // check obstacles collision foreach (var obstacle in _obstacles) { if (head.Row == obstacle.Row && head.Col == obstacle.Col) { GameOver(); } } }
private static void RunGameLoop() { Console.CursorVisible = false; var snake = new Model.Snake(); Direction snakeDirection = Direction.Right; DrawObstacles(); while (isGameRunning) { ClearCurrentSnakePartsFromConsole(snake); DrawSnake(snake); DrawFood(); snakeDirection = GetDirection(snakeDirection); snake.Move(snakeDirection); CheckSnakeCollision(snake); Thread.Sleep(snake.SnakeSpeedMilliSeconds); } }