Beispiel #1
0
 public FireResult(GridSquare targetHit, bool isSunkShip, Ship shipIfSunk, bool haveWon)
 {
     Target     = targetHit;
     IsHit      = true;
     IsSunkShip = isSunkShip;
     ShipSunk   = shipIfSunk;
     HaveWon    = haveWon;
 }
Beispiel #2
0
        public FireResult Fire(GridSquare target)
        {
            if (Turn != Players.PlayerOne)
            {
                throw new InvalidOperationException("It is not your turn.");
            }

            if (m_PlayerOneShots[target.Point.X, target.Point.Y] != ShotState.NoShot)
            {
                throw new ArgumentException($"You have already fired on {target}.");
            }

            Turn = Players.PlayerTwo;

            return(GetResult(target, m_PlayerTwoSetup, m_PlayerOneShots));
        }
Beispiel #3
0
        private static FireResult GetResult(GridSquare target, SetupBoard targetBoard, ShotState[,] shotRecorder)
        {
            var isHit = targetBoard.ShipsByOccupationPoints.ContainsKey(target.Point);

            shotRecorder[target.Point.X, target.Point.Y] = isHit ? ShotState.Hit : ShotState.Miss;

            if (!isHit)
            {
                return(new FireResult(target));
            }

            var hitShip = targetBoard.ShipsByOccupationPoints[target.Point];
            var isSunk  = hitShip.Hit(target.Point);

            var haveWon = isSunk ? targetBoard.AllSunk : false;

            return(new FireResult(target, isSunk, isSunk ? hitShip : null, haveWon));
        }
Beispiel #4
0
 public FireResult(GridSquare targetMissed)
 {
     Target = targetMissed;
 }
Beispiel #5
0
 public Ship(GridSquare start, GridSquare end) : this(start.Point, end.Point)
 {
 }