void UpdateMars() { for (int i = 0; i < Rovers.Count; ++i) { Rover rover = Rovers[i]; if (IsOutOfBoundry(rover.PosX, rover.PosY)) { rover.Broken(); } else { Rover.Command nowCommand = rover.PeekCommand(); switch (nowCommand) { case Rover.Command.M: if ((rover.Dir == Rover.Direction.N && !HasObstacle(rover.PosX, rover.PosY + 1)) || (rover.Dir == Rover.Direction.E && !HasObstacle(rover.PosX + 1, rover.PosY)) || (rover.Dir == Rover.Direction.W && !HasObstacle(rover.PosX - 1, rover.PosY)) || (rover.Dir == Rover.Direction.S && !HasObstacle(rover.PosX, rover.PosY - 1))) { Map[rover.PosX, rover.PosY] = FLOOR; rover.DoMove(); if (!IsOutOfBoundry(rover.PosX, rover.PosY)) { Map[rover.PosX, rover.PosY] = ROVER; } } break; case Rover.Command.L: rover.DoTurnL(); break; case Rover.Command.R: rover.DoTurnR(); break; case Rover.Command.B: if ((rover.Dir == Rover.Direction.N && !HasObstacle(rover.PosX, rover.PosY - 1)) || (rover.Dir == Rover.Direction.E && !HasObstacle(rover.PosX - 1, rover.PosY)) || (rover.Dir == Rover.Direction.W && !HasObstacle(rover.PosX + 1, rover.PosY)) || (rover.Dir == Rover.Direction.S && !HasObstacle(rover.PosX, rover.PosY + 1))) { Map[rover.PosX, rover.PosY] = FLOOR; rover.DoBack(); if (!IsOutOfBoundry(rover.PosX, rover.PosY)) { Map[rover.PosX, rover.PosY] = ROVER; } } break; case Rover.Command.NULL: Debug.Log("No more command"); break; } } rover.LogState(); } }