public Snake() { _tail = new SnakeNode { Row = 0, Col = 0 }; SnakeNode currentNode = _tail; // -2 because of head and tail for (int i = 0; i < Constants.INITIAL_SNAKE_BODY_LENGTH - 2; i++) { var newNode = new SnakeNode { Row = currentNode.Row, Col = currentNode.Col + 1, Prev = currentNode }; currentNode.Next = newNode; currentNode = newNode; } _head = new SnakeNode { Row = currentNode.Row, Col = currentNode.Col + 1, Prev = currentNode, Symbol = GetSnakeHeadAccordingToDirection() }; currentNode.Next = _head; }
private void GrowNewHead() { SnakeNode newHead = new SnakeNode { Row = GetNewHeadRow(_head.Row), Col = GetNewHeadCol(_head.Col), Prev = _head, Symbol = GetSnakeHeadAccordingToDirection() }; _head.Symbol = Constants.SNAKE_BODY; _head.Next = newHead; _head = newHead; }
public void Move(Direction newDirection) { if (!IsNewDirectionValid(newDirection)) { newDirection = _currentDirection; } _currentDirection = newDirection; SnakeNode newTail = _tail.Next; newTail.Prev = null; _tail = newTail; GrowNewHead(); }