public bool Crash(Board Board, Point newHeadPosition) { if (Positions.Exists(point => point.X == newHeadPosition.X && point.Y == newHeadPosition.Y)) { var tailPosition = Positions.Last(); if (tailPosition.X == newHeadPosition.X && tailPosition.Y == newHeadPosition.Y) { if (!Board.DidEat(newHeadPosition)) { return false; } } return true; } return false; }
public void Tick(Board Board) { var newHeadPosition = new Point(); switch (CurrentDirection) { case Direction.Up: newHeadPosition = new Point(Positions[0].X, mod((int)Positions[0].Y - 1, Rows)); break; case Direction.Right: newHeadPosition = new Point(mod((int)Positions[0].X + 1, Columns), Positions[0].Y); break; case Direction.Down: newHeadPosition = new Point(Positions[0].X, mod((int)Positions[0].Y + 1, Rows)); break; case Direction.Left: newHeadPosition = new Point(mod((int)Positions[0].X - 1, Columns), Positions[0].Y); break; } IsAlive = !Crash(Board, newHeadPosition); Positions.Insert(0, newHeadPosition); if (Board.DidEat(newHeadPosition)) { Length++; } else { Positions.RemoveAt(Positions.Count - 1); } }