Пример #1
0
        private void FireAndStore(Point coordonate, IFireAuthorization fireAuthorization)
        {
            var fireResult = fireAuthorization.Fire(coordonate);

            previousShots.Add(coordonate);

            if (fireResult.State == FireState.Hit)
            {
                var target = shipsToHunt.FirstOrDefault(c => c.ClassOfShip == fireResult.Ship);

                if (target == null)
                {
                    target = new ShipToHunt()
                    {
                        ClassOfShip = fireResult.Ship.Value
                    };

                    shipsToHunt.Add(target);
                }

                target.Coordonates.Add(coordonate);
            }

            if (fireResult.State == FireState.Sunk)
            {
                var shipToHunt = shipsToHunt.FirstOrDefault(c => c.ClassOfShip == fireResult.Ship);
                shipsToHunt.Remove(shipToHunt);
            }
        }
Пример #2
0
 /// <summary>
 /// Tire sur le plateau adverse.
 /// </summary>
 /// <param name="fireAuthorization"></param>
 public void Fire(IFireAuthorization fireAuthorization)
 {
     if (shipsToHunt.Count > 0)
     {
         Hunt(fireAuthorization);
     }
     else
     {
         Discover(fireAuthorization);
     }
 }
Пример #3
0
        /// <summary>
        /// Tir au hasard sur le plateau adverse.
        /// </summary>
        /// <param name="fireAuthorization"></param>
        public void Fire(IFireAuthorization fireAuthorization)
        {
            Point coordonate = new Point();

            do
            {
                coordonate.X = random.Next(0, 10);
                coordonate.Y = random.Next(0, 10);
            } while (previousShotsCoordonates.Contains(coordonate));

            fireAuthorization.Fire(coordonate);

            previousShotsCoordonates.Add(coordonate);
        }
Пример #4
0
        private void Hunt(IFireAuthorization fireAuthorization)
        {
            var shipToHunt = shipsToHunt.First();

            foreach (var coordonate in shipToHunt.Coordonates)
            {
                Point?nextCoordonate = FindNextFire(coordonate);
                if (nextCoordonate != null)
                {
                    FireAndStore(nextCoordonate.Value, fireAuthorization);
                    break;
                }
            }
        }
Пример #5
0
        private void Discover(IFireAuthorization fireAuthorization)
        {
            Point coordonate = new Point();

            do
            {
                coordonate.Y = random.Next(0, 10);
                coordonate.X = random.Next(0, 5) * 2;

                if (coordonate.Y % 2 == 0)
                {
                    coordonate.X += 1;
                }
            } while (previousShots.Contains(coordonate));

            FireAndStore(coordonate, fireAuthorization);
        }
Пример #6
0
        /// <summary>
        /// Tire sur le plateau adverse.
        /// </summary>
        /// <param name="fireAuthorization"></param>
        public void Fire(IFireAuthorization fireAuthorization)
        {
            Task.Run(() =>
            {
                Console.Write("Coordonnées de tir [x:y]: ");
                var coordonates = Console.ReadLine().Split(':');

                if (coordonates.Length != 2)
                {
                    throw new InvalidDataException("Coordonnées invalides");
                }

                int x = int.Parse(coordonates[0]);
                int y = int.Parse(coordonates[1]);

                fireAuthorization.Fire(new Point(x, y));
            });
        }
Пример #7
0
 /// <summary>
 /// Tir au hasard sur le plateau adverse.
 /// </summary>
 /// <param name="fireAuthorization">Autorisation de tir. Permet de tirer sur le plateau ennemi.</param>
 public void Fire(IFireAuthorization fireAuthorization)
 {
     // Ne tire pas.
 }