public void EnterState_LoweringWalls(WallSet wallSetToMove)
 {
     if (wallSetToMove == WallSet.startingWallSet)
         currentWallSetToMove = wallsToMoveStart;
     else
         currentWallSetToMove = wallsToMoveEnd;
     _currentMovingWalls = wallSetToMove;
     foreach (GameObject wall in currentWallSetToMove)
         wall.GetComponent<FSMMoveWall> ().EnterState_Lowering ();
     currentState = States.LoweringWalls;
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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);
         }
     }
 }
Esempio n. 4
0
        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));
        }