Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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();
        }
Пример #6
0
 private bool CheckMove(NumsNum engineMove, NumsPosition position)
 {
     return(engineMove.Num.IsCorrect());
 }
Пример #7
0
        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();
        }