コード例 #1
0
ファイル: Program.cs プロジェクト: ngcheehou/FlagsRemoval
        internal static void GameStart(int STARTING_FLAGS, int WINNING_CONDITION, int[] arrayFlagsToRemoved, bool isHumanStartFirst)
        {
            string input;


            List <int> FlagsToRemove = arrayFlagsToRemoved.OfType <int>().ToList();

            FlagRemovalBrain brain = new FlagRemovalBrain(WINNING_CONDITION, STARTING_FLAGS, FlagsToRemove);


            int  remainingFlags = STARTING_FLAGS;
            int  turn           = 0;
            bool humanWon       = false;
            bool draw           = false;

            List <ResultTable> ListOfResultTable = new List <ResultTable>();//keep track the result of each turn

            do
            {
                int pulledFlag = 0;

                if (isHumanStartFirst)
                {
                    Console.WriteLine("Flag(s) remaining: {0}, winning condition: {1} flag(s) remain ", remainingFlags, WINNING_CONDITION);
                    WriteLine("Your turn , enter the number of flag(s) that you willing to pull ({0} only).", string.Join(" or ", FlagsToRemove.Select(i => i)), remainingFlags);
                    input = ReadLine();

                    if (!int.TryParse(input, out pulledFlag) || !FlagsToRemove.Contains(pulledFlag) || pulledFlag > remainingFlags)
                    {
                        WriteLine("Please enter number {0 } only", string.Join(" or ", FlagsToRemove.Select(i => i)));
                        continue;
                    }


                    /**Human's turn  */
                    (remainingFlags, turn) = ProcessDecision(remainingFlags, turn, pulledFlag, brain, ListOfResultTable, true);
                    if (remainingFlags == WINNING_CONDITION)
                    {
                        humanWon = true; break;
                    }

                    isHumanStartFirst = false;
                }


                brain.FlagsThatCanBeRemove.RemoveAll(t => remainingFlags - t < WINNING_CONDITION); //remove availabe flags

                if (brain.FlagsThatCanBeRemove.Count == 0)                                         //draw
                {
                    draw = true; break;
                }

                /**Computer's turn  */
                (remainingFlags, turn) = ProcessDecision(remainingFlags, turn, pulledFlag, brain, ListOfResultTable, false);
                if (remainingFlags == WINNING_CONDITION)
                {
                    break;
                }

                FlagsToRemove.RemoveAll(t => remainingFlags - t < WINNING_CONDITION); //remove availabe flags

                if (FlagsToRemove.Count == 0)                                         //draw
                {
                    draw = true; break;
                }

                isHumanStartFirst = true;
            } while (remainingFlags > WINNING_CONDITION);

            if (draw)
            {
                WriteLine("There is no way to reach the winning condition, game ended. Draw. \n\n\n");
            }
            else if (humanWon)
            {
                WriteLine("Game Ended! Good Job, you beat the computer! You are a good strategist!!! \n\n\n");
            }
            else
            {
                WriteLine("Game Ended! You were beaten by computer! You sucks! \n\n\n");
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: ngcheehou/FlagsRemoval
        static (int, int) ProcessDecision(int remainingFlags, int turn, int HumanPulledFlag, FlagRemovalBrain brain, List <ResultTable> resultTables, bool isHumanTurn)
        {
            if (!isHumanTurn)
            {
                Thread.Sleep(1000);//pretending that the computer is taking time to think
                WriteLine("Computer AI's turn, computer is thinking...");
                WriteLine();
            }

            ResultTable resultTable = new ResultTable
            {
                Turn   = ++turn,
                Move   = isHumanTurn ? "You " : "Computer",
                Pulled = isHumanTurn ? HumanPulledFlag : brain.ComputerDecision(remainingFlags, out _)
            };

            resultTable.Remaining = remainingFlags - resultTable.Pulled;

            resultTables.Add(resultTable);
            DisplayResultTable(resultTables);
            return(resultTable.Remaining, resultTable.Turn);
        }