public FireResult(GridSquare targetHit, bool isSunkShip, Ship shipIfSunk, bool haveWon) { Target = targetHit; IsHit = true; IsSunkShip = isSunkShip; ShipSunk = shipIfSunk; HaveWon = haveWon; }
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)); }
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)); }
public FireResult(GridSquare targetMissed) { Target = targetMissed; }
public Ship(GridSquare start, GridSquare end) : this(start.Point, end.Point) { }