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; } }
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); }