/// <summary> /// Gets the player's initial armed forces distribution. /// </summary> /// <param name="computerForces"> /// The computer's initial armed forces. /// </param> public static ArmedForces GetInitialForces(ArmedForces computerForces) { var playerForces = default(ArmedForces); // BUG: This loop allows the player to assign negative values to // some branches, leading to strange results. do { View.ShowDistributeForces(); View.PromptArmySize(computerForces.Army); var army = InputInteger(); View.PromptNavySize(computerForces.Navy); var navy = InputInteger(); View.PromptAirForceSize(computerForces.AirForce); var airForce = InputInteger(); playerForces = new ArmedForces { Army = army, Navy = navy, AirForce = airForce }; }while (playerForces.TotalTroops > computerForces.TotalTroops); return(playerForces); }
static void Main() { View.ShowBanner(); View.ShowInstructions(); var computerForces = new ArmedForces { Army = 30000, Navy = 20000, AirForce = 22000 }; var playerForces = Controller.GetInitialForces(computerForces); var state = (WarState) new InitialCampaign(computerForces, playerForces); var isFirstTurn = true; while (!state.FinalOutcome.HasValue) { var branch = Controller.GetAttackBranch(state, isFirstTurn); var attackSize = Controller.GetAttackSize(state.PlayerForces[branch]); var(nextState, message) = state.LaunchAttack(branch, attackSize); View.ShowMessage(message); state = nextState; isFirstTurn = false; } View.ShowResult(state); }
public static void PromptNextAttackBranch(ArmedForces computerForces, ArmedForces playerForces) { // BUG: More of a nit-pick really, but the order of columns in the // table is reversed from what we showed when distributing troops. // The tables should be consistent. Console.WriteLine(); Console.WriteLine("\tYOU\tME"); Console.WriteLine($"ARMY\t{playerForces.Army}\t{computerForces.Army}"); Console.WriteLine($"NAVY\t{playerForces.Navy}\t{computerForces.Navy}"); Console.WriteLine($"A. F.\t{playerForces.AirForce}\t{computerForces.AirForce}"); Console.WriteLine("WHAT IS YOUR NEXT MOVE?"); Console.WriteLine("ARMY=1 NAVY=2 AIR FORCE=3"); Console.Write("? "); }
/// <summary> /// Initializes a new instance of the Ceasefire class. /// </summary> /// <param name="computerForces"> /// The computer's forces. /// </param> /// <param name="playerForces"> /// The player's forces. /// </param> /// <param name="absoluteVictory"> /// Indicates whether the player acheived absolute victory (defeating /// the computer without destroying its military). /// </param> public Ceasefire(ArmedForces computerForces, ArmedForces playerForces, bool absoluteVictory = false) : base(computerForces, playerForces) { IsAbsoluteVictory = absoluteVictory; }
/// <summary> /// Initializes a new instance of the FinalCampaign class. /// </summary> /// <param name="computerForces"> /// The computer's forces. /// </param> /// <param name="playerForces"> /// The player's forces. /// </param> public FinalCampaign(ArmedForces computerForces, ArmedForces playerForces) : base(computerForces, playerForces) { }
/// <summary> /// Initializes a new instance of the state class. /// </summary> /// <param name="computerForces"> /// The computer's forces. /// </param> /// <param name="playerForces"> /// The player's forces. /// </param> public WarState(ArmedForces computerForces, ArmedForces playerForces) => (ComputerForces, PlayerForces) = (computerForces, playerForces);