示例#1
0
        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;
        }
示例#2
0
        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;
        }
示例#3
0
        public void Move(Direction newDirection)
        {
            if (!IsNewDirectionValid(newDirection))
            {
                newDirection = _currentDirection;
            }

            _currentDirection = newDirection;

            SnakeNode newTail = _tail.Next;

            newTail.Prev = null;
            _tail        = newTail;

            GrowNewHead();
        }