Beispiel #1
0
        public void Move()
        {
            if (_velocity.FullStop)
            {
                return;
            }
            var newHead = Tail;

            Tail = Tail.Head;
            Tail.SetConnection(null, -1);

            newHead.SetConnection(Head, -1);
            newHead.SetConnection(null, 1);

            Head.SetConnection(newHead, 1);
            Head = newHead;

            newHead.CloneXY(newHead.Tail);
            newHead.Move(_velocity, _boundWidth, _boundHeight);

            if (_isTailOverNewPart)
            {
                Tail.SetConnection(_nextPartToAdd, -1);
                _nextPartToAdd.SetConnection(Tail, 1);
                Tail               = _nextPartToAdd;
                _nextPartToAdd     = null;
                _isTailOverNewPart = false;
            }

            if (_nextPartToAdd == null && _partsToAdd.Count > 0)
            {
                _nextPartToAdd = _partsToAdd.Dequeue();
            }

            if (_nextPartToAdd != null && (_nextPartToAdd.X == Tail.X &&
                                           _nextPartToAdd.Y == Tail.Y))
            {
                _isTailOverNewPart = true;
            }
        }
Beispiel #2
0
        private void Create()
        {
            var head = new SnakePart(_initialX, _initialY);

            Tail = head;
            for (var i = 0; i < _initialLength - 1; i++)
            {
                var next = new SnakePart(head.X + 1, head.Y);
                next.SetConnection(head, -1);
                head.SetConnection(next, 1);
                head = next;
            }
            Head      = head;
            _velocity = new Velocity(0, 0);
        }