private void MakeMove(NumsNum move) { switch (_position.PlayerToMakeMove) { case 1: _position.FirstPlayerMoves.Add(new NumsMove { Guess = move, Count = move.GetCountFrom(_position.SecondPlayerNumber) }); if ((_position.SecondPlayerMoves.LastOrDefault() == null) || (_position.SecondPlayerMoves.Last().Count.Second != 5)) { _position.PlayerToMakeMove = 2; } break; case 2: _position.SecondPlayerMoves.Add(new NumsMove { Guess = move, Count = move.GetCountFrom(_position.FirstPlayerNumber) }); if ((_position.FirstPlayerMoves.LastOrDefault() == null) || (_position.FirstPlayerMoves.Last().Count.Second != 5)) { _position.PlayerToMakeMove = 1; } break; } }
public List <NumsNum> AnalysePosition(List <NumsMove> moves) { var result = new List <NumsNum>(); for (int i = 1234; i < 98766; i++) { if (i.IsCorrect()) { var possible = true; var iNum = new NumsNum(i); for (int j = 0; j < moves.Count; j++) { var count = iNum.GetCountFrom(new NumsNum(moves[j].Guess.Num)); if ((count.First != moves[j].Count.First) || (count.Second != moves[j].Count.Second)) { possible = false; break; } } if (possible) { result.Add(new NumsNum(i)); } } } return(result); }
private NumsNum GetPlayerNumber(int playerIndex) { var result = new NumsNum(0); int res = 0; do { try { Console.Write("Введите задуманное число (Игрок " + playerIndex + "): "); var numString = Console.ReadLine(); if (numString != null) { res = int.Parse(numString); } } catch (Exception) { // ignored } } while (!res.IsCorrect()); result.Num = res; return(result); }
private NumsNum HumanMove() { var result = new NumsNum(0); int input; do { //PrintPosition(_position.PlayerToMakeMove, true); PrintWholePosition(true, false); Console.Write("Введите попытку: "); input = int.Parse(Console.ReadLine()); } while (!input.IsCorrect()); result.Num = input; return(result); }
private void EnginesTest() { var engines = GetNumsGameEngines(); var engine1Info = ChooseEngine(engines, "Выберите игровой движок для игрока 1: ", true); var engine2Info = ChooseEngine(engines, "Выберите игровой движок для игрока 2: ", false); Console.Write("Введите количество туров: "); var roundQuantity = int.Parse(Console.ReadLine()); var engine1 = LoadEngine(engine1Info); var engine2 = LoadEngine(engine2Info); int engine1Wins = 0, // Побед первого движка engine2Wins = 0, // Побед второго движка engine1Faults = 0, // Ошибок первого движка engine2Faults = 0, // Ошибок второго движка draws = 0; // Ничьих var engineMove = new NumsNum(0); byte correctMoves; for (int i = 1; i < (roundQuantity * 2) + 1; i++) { _position = new NumsPosition(engine1.CreateOwnNum(), engine2.CreateOwnNum()); do { correctMoves = 0; switch (_position.PlayerToMakeMove) { case 1: // 1 engineMove = i % 2 == 1 ? engine1.GetMove(_position.FirstPlayerMoves) : engine2.GetMove(_position.FirstPlayerMoves); break; case 2: // 2 engineMove = i % 2 == 1 ? engine2.GetMove(_position.SecondPlayerMoves) : engine1.GetMove(_position.SecondPlayerMoves); break; } if (CheckMove(engineMove, _position)) { MakeMove(engineMove); } else { correctMoves = (byte)((_position.PlayerToMakeMove == 1) ? ((i % 2 == 1) ? 1 : 2) : ((i % 2 == 1) ? 2 : 1)); } } while ((GameResult == 3) && (correctMoves == 0)); if (correctMoves != 0) { if (correctMoves == 1) // Ошибся 1-й движок { engine1Faults++; } else // Второй { engine2Faults++; } } else { switch (GameResult) { case 0: draws++; break; case 1: if (i % 2 == 1) { engine1Wins++; } else { engine2Wins++; } break; case 2: if (i % 2 == 1) { engine2Wins++; } else { engine1Wins++; } break; } } Console.Clear(); Console.WriteLine("Всего игр = {0}.", i); Console.WriteLine("Ничьих = {0}", draws); Console.WriteLine("Побед {0} = {1}", engine1Info.Name, engine1Wins); Console.WriteLine("Побед {0} = {1}", engine2Info.Name, engine2Wins); Console.WriteLine("Ошибок {0} = {1}", engine1Info.Name, engine1Faults); Console.WriteLine("Ошибок {0} = {1}", engine2Info.Name, engine2Faults); } Console.WriteLine("Для продолжения нажмите любую клавишу..."); Console.ReadKey(); }
private bool CheckMove(NumsNum engineMove, NumsPosition position) { return(engineMove.Num.IsCorrect()); }
private void SystemsGame() { var engines = GetNumsGameEngines(); var engine1Info = ChooseEngine(engines, "Выберите игровой движок для игрока 1: ", true); var engine2Info = ChooseEngine(engines, "Выберите игровой движок для игрока 2: ", false); var engine1 = LoadEngine(engine1Info); var engine2 = LoadEngine(engine2Info); _position.FirstPlayerNumber = engine1.CreateOwnNum(); _position.SecondPlayerNumber = engine2.CreateOwnNum(); var engineMove = new NumsNum(0); bool correctMove = true; do { switch (_position.PlayerToMakeMove) { case 1: // 1 engineMove = engine1.GetMove(_position.FirstPlayerMoves); break; case 2: // 2 engineMove = engine2.GetMove(_position.SecondPlayerMoves); break; } if (CheckMove(engineMove, _position)) { MakeMove(engineMove); } else { PrintWholePosition(true, true); Console.WriteLine("Ошибка движка. Попытка сделать ход = " + engineMove.NumString); correctMove = false; } PrintWholePosition(true, true); if (((GameResult == 3) && (correctMove))) { Console.WriteLine("Для продолжения нажмите любую клавишу..."); Console.ReadKey(); } } while ((GameResult == 3) && (correctMove)); if (correctMove) { PrintWholePosition(true, true); if (GameResult == 0) { Console.WriteLine("Ничья."); } else { Console.WriteLine("Победа! Выиграл игрок " + GameResult); } } Console.ReadKey(); }