예제 #1
0
        static void Main(string[] args)
        {
            int   gridSize = 10;
            Fleet fleet    = new Fleet();

            Ship[] shipsToPlace =
            {
                new AircraftCarrier(),
                new BattleShip(),
                new Cruiser(),
                new Submarine(),
                new PatrolBoat(),
                new PatrolBoat()
            };

            foreach (Ship s in shipsToPlace)
            {
                bool shipAddedFlag = false;
                do
                {
                    try
                    {
                        shipAddedFlag = false;
                        s.RandomPlace(gridSize);
                        Console.WriteLine("Trying: {0}", s);
                        fleet.Add(s); // Might throw exception here
                        shipAddedFlag = true;
                    }
                    catch (Exception ex)
                    {
                        // do nothing
                    }
                } while (!shipAddedFlag);
                Console.WriteLine("Added to Fleet: {0}", s);
            }

            Console.WriteLine("My Fleet:");
            fleet.Print();

            Grid grid = new Grid(gridSize);

            grid.SetFleet(fleet);

            grid.Draw();

            bool isBattleShipSunk = false;

            for (int i = 0; i < gridSize; ++i)
            {
                for (int j = 0; j < gridSize; ++j)
                {
                    Console.Write("Trying {0}{1} ", Grid.ColumnLabels[j], i + 1);
                    Position p     = new Position(i, j);
                    bool     isHit = fleet.Attack(p);
                    Console.WriteLine(isHit ? "Hit" : "Miss");
                    if (isHit)
                    {
                        grid.SetCell(p, ConsoleColor.Red, 'X');
                    }
                    else
                    {
                        grid.SetCell(p, ConsoleColor.Black, 'X');
                    }
                    if (fleet.SunkMyBattleship())
                    {
                        Console.WriteLine("You sunk my BattleShip!");
                        isBattleShipSunk = true;
                        break;
                    }
                }
                if (isBattleShipSunk)
                {
                    break;
                }
            }

            grid.Draw();

            Console.WriteLine("My Fleet:");
            fleet.Print();

            System.Console.ReadLine();
        }