private bool IsCorrectLevel() { var result = new HashSet <Point>(); for (var i = 0; i < Width; i++) { for (var j = 0; j < Height; j++) { var finishPoint = new Point(i, j); if (WallSet.Contains(finishPoint)) { continue; } var visited = new HashSet <Point>(); var queue = new Queue <Point>(); queue.Enqueue(SpawnPoint); while (queue.Count != 0) { var point = queue.Dequeue(); if (point.X < 0 || point.X > Width - 1 || point.Y < 0 || point.Y > Height - 1) { continue; } if (WallSet.Contains(point) || visited.Contains(point)) { continue; } visited.Add(point); if (point.Equals(finishPoint)) { result.Add(point); break; } for (var dx = -1; dx <= 1; dx++) { for (var dy = -1; dy <= 1; dy++) { if (Math.Abs(dx) == Math.Abs(dy)) { continue; } var nextPoint = new Point(point.X + dx, point.Y + dy); queue.Enqueue(nextPoint); } } } } } return(Width * Height - WallSet.Count == result.Count); }
private void UpdateFreeCoordinates() { FreeCoordinates = new List <Point>(); for (var i = 0; i < Width; i++) { for (var j = 0; j < Height; j++) { var currentPoint = new Point(i, j); if (Snake.Body.Contains(currentPoint) || WallSet.Contains(currentPoint)) { continue; } FreeCoordinates.Add(currentPoint); } } }
public bool IsGameOver() { var head = Snake.Body[0]; var offset = GetOffset(); var nextCoordinate = new Point(head.X + offset.X, head.Y + offset.Y); for (var i = 1; i < Snake.Body.Count - 1; i++) { if (Snake.Body[i].Equals(nextCoordinate)) { return(true); // лол хз, он если просто возвращать не работает. } } return(nextCoordinate.X > Width - 1 || nextCoordinate.Y > Height - 1 || nextCoordinate.X < 0 || nextCoordinate.Y < 0 || WallSet.Contains(nextCoordinate)); }