Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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("? ");
        }
Пример #4
0
 /// <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)
 {
 }
Пример #6
0
 /// <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);