コード例 #1
0
        public virtual bool PerformNextJump(Dictionary <char, bool> pegs)
        {
            var jumps = GameInterface.GetPossibleJumps(pegs);

            Console.Write("Choose the peg to jump with: ");

            var left = Console.CursorLeft;
            var top  = Console.CursorTop;

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            GameInterface.PrintJumps(jumps);

            Console.SetCursorPosition(left, top);

            Func <char, bool> CanJumpFrom = (char selectedPeg) => CanJump(jumps, selectedPeg);

            var from = ReadPeg(CanJumpFrom);

            Console.WriteLine(from);

            if (from == null)
            {
                GameInterface.PrintPegs(pegs);

                return(false);
            }

            Console.Write("Choose the peg to jump over: ");

            Func <char, bool> CanJumpTo = (char selectedPeg) => CanJump(jumps, from.Value, selectedPeg);

            var over = ReadPeg(CanJumpTo);

            Console.WriteLine(over);

            if (over != null)
            {
                foreach (var jump in jumps)
                {
                    if (jump.From == from && jump.Over == over)
                    {
                        GameInterface.PerformJump(pegs, jump);

                        return(true);
                    }
                }
            }

            GameInterface.PrintPegs(pegs);

            // Over selection was aborted, ask for the From selection again
            return(PerformNextJump(pegs));
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: jeffhandley/peggame
        static void Main(string[] args)
        {
            if (Array.IndexOf(args, "-stats") >= 0)
            {
                ShowStats();
                return;
            }

            IGameModel model;

            if (Array.IndexOf(args, "-paths") >= 0)
            {
                model = new AllPathsModel(args);
            }
            else if (Array.IndexOf(args, "-first") >= 0)
            {
                model = new FirstWinFromAllPathsModel();
            }
            else if (Array.IndexOf(args, "-expert") >= 0)
            {
                model = new InteractiveModel();
            }
            else
            {
                model = new InteractiveWithHintsModel(args);
            }

            Dictionary <char, bool> pegs;

            do
            {
                pegs = GameInterface.InitializePegs();
                GameInterface.PrintPegs(pegs);

                if (!model.RemoveStartingPeg(pegs))
                {
                    model.PrintStats();
                    return;
                }

                GameInterface.PrintPegs(pegs);

                do
                {
                    model.PrintStats();

                    if (Console.KeyAvailable == true)
                    {
                        Console.WriteLine("Game paused. Press a key to continue.");

                        while (Console.KeyAvailable)
                        {
                            Console.ReadKey(true);
                        }

                        var unpause = Console.ReadKey(true).Key;

                        if (unpause == ConsoleKey.Escape)
                        {
                            return;
                        }
                    }

                    if (!model.PerformNextJump(pegs))
                    {
                        break;
                    }

                    GameInterface.PrintPegs(pegs);
                }while (GameInterface.GetPossibleJumps(pegs).Length > 0);
            }while (model.PlayAgain(pegs));
        }