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); } }
/// <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); } }
/// <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); }
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; } } }
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); }
/// <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)); }); }
/// <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. }