Ejemplo n.º 1
0
        public ShipEngine(IBattleships battleship, IFiringStrategy firingStrategy, IFleetDeployer fleetDeployer)
        {
            this.battleship = battleship;

            this.pingKiller     = firingStrategy;
            this.firingStrategy = pingKiller;

            this.fleetDeployer = fleetDeployer;
        }
Ejemplo n.º 2
0
        public void Run()
        {
            bool hunting = false;

            List <ShipModel.Ship> ships = fleetDeployer.getOrders();

            foreach (ShipModel.Ship ship in ships)
            {
                battleship.PlaceShip(JsonConvert.SerializeObject(ship));
            }

            //Environment.Exit(0);
            //Environment.Exit(0);

            var target = firingStrategy.GetOptimumTarget(battleship.StatusAPI().StateTeamB.TrackingGrid, null);

            bool hit = battleship.Shoot(target.PositionX, target.PositionY);

            var status = battleship.StatusAPI();

            Console.WriteLine(status.ToString());

            // Switch to hunter killer
            if (hit)
            {
                firingStrategy = new HunterKillerFiringStrategy(status.StateTeamB.TrackingGrid.Squares[target.PositionX, target.PositionY]);
                hunting        = true;
            }

            //Main engine loop.
            Task t = Task.Run(async() =>
            {
                while (true)
                {
                    target = firingStrategy.GetOptimumTarget(battleship.StatusAPI().StateTeamB.TrackingGrid, hunting == true ? status.StateTeamB.TrackingGrid.Squares[target.PositionX, target.PositionY] : null);

                    if (target.PositionX == -1 && !hunting)
                    {
                        Console.WriteLine("Firing solutions exhausted");
                        break;
                    }
                    else if (target.PositionX == -1)
                    {
                        firingStrategy = pingKiller;
                        hunting        = false;
                        continue;
                    }

                    // Take a Shot - Read API documentation at XXXXX
                    bool hit = battleship.Shoot(target.PositionX, target.PositionY);

                    if (hit && !hunting)
                    {
                        firingStrategy = new HunterKillerFiringStrategy(status.StateTeamB.TrackingGrid.Squares[target.PositionX, target.PositionY]);
                        hunting        = true;
                    }
                    else
                    {
                        if (hunting && target.PositionX == -1)
                        {
                            firingStrategy = pingKiller;
                            hunting        = false;
                        }
                    }

                    status = battleship.StatusAPI();

                    Console.WriteLine(status.ToString());

                    //if (status.StateTeamA.Score == 17)
                    //{
                    //    Console.WriteLine("All enemy vessels destroyed, a glorious celebration awaits");
                    //    break;
                    //}

                    Console.WriteLine("{0} - Ship standing by for orders...", DateTime.Now.ToString());
                    await Task.Delay(500);
                }
            });

            t.Wait();

            Console.WriteLine("Game finished");
        }
Ejemplo n.º 3
0
 public NodeEnumerator(Node node, IFiringStrategy firingStrategy)
 {
     StartNode      = node;
     FiringStrategy = firingStrategy;
 }