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)); }
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)); }