Ejemplo n.º 1
0
        /// <summary>
        /// Shows the intro menu to the user and prompts them to set player types (and names if applicable)
        /// </summary>
        /// <returns>Array of IPlayers with a length of 2, player 1 in [0] and player 2 in [1]</returns>
        public static IPlayer[] SetupMenu()
        {
            IPlayer[] players = new IPlayer[2];
            Console.WriteLine("Let's play Gomoku!\n**********");

            int p1Type = PromptInt("Player 1 is\n1. Human\n2. Random Player\nSelect[1-2]", 1, 2);

            switch (p1Type)
            {
            case 1:
                string p1Name = PromptString("Player 1, what is your name?");
                players[0] = new HumanPlayer(p1Name);
                break;

            case 2:
                players[0] = new RandomPlayer();
                break;
            }

            int p2Type = PromptInt("Player 2 is\n1. Human\n2. Random Player\nSelect[1-2]", 1, 2);

            switch (p2Type)
            {
            case 1:
                string p2Name = PromptString("Player 2, what is your name?");
                players[1] = new HumanPlayer(p2Name);
                break;

            case 2:
                players[1] = new RandomPlayer();
                break;
            }
            return(players);
        }
Ejemplo n.º 2
0
 private void AddRandomPlayer()
 {
     players[selectedIndex]     = new RandomPlayer(randomNumberGenerator);
     playerNames[selectedIndex] = "Random Intelligence";
     MoveSelectionDown();
     DisplayMenu();
 }
 public Game(LearnPlayer learner, RandomPlayer randomerPlayer, Algorithm algorithm)
 {
     //inicializar
     this.algorithm      = algorithm;
     this.learner        = learner;
     this.randomerPlayer = randomerPlayer;
 }
Ejemplo n.º 4
0
        public void TestMakerSplayerNotinDragonQueue()
        {
            //expected
            string SPlayer  = "<splayer-nodragon>";
            string colorxml = "<color>blue</color>";

            SPlayer += colorxml;
            // (0, 1, 2, 3, 4, 5, 6, 7), id 1
            // (0, 4, 1, 5, 2, 6, 3, 7), id 9
            string tiles      = "<tile><connect><n>0</n><n>1</n></connect><connect><n>2</n><n>3</n></connect><connect><n>4</n><n>5</n></connect><connect><n>6</n><n>7</n></connect></tile><tile><connect><n>0</n><n>4</n></connect><connect><n>1</n><n>5</n></connect><connect><n>2</n><n>6</n></connect><connect><n>3</n><n>7</n></connect></tile>";
            string setoftiles = "<set>" + tiles + "</set>";

            SPlayer += setoftiles;
            SPlayer += "</splayer-nodragon>";
            XDocument expected_doc = XDocument.Parse(SPlayer);

            RandomPlayer jim      = new RandomPlayer("jim");
            Player       randBlue = new Player(jim, "blue");

            randBlue.AddTiletoHand(new Tile(1, new List <int> {
                0, 1, 2, 3, 4, 5, 6, 7
            }));
            randBlue.AddTiletoHand(new Tile(9, new List <int> {
                0, 4, 1, 5, 2, 6, 3, 7
            }));

            Assert.IsTrue(XNode.DeepEquals(expected_doc.FirstNode, maker.SPlayerXML(randBlue)));
        }
Ejemplo n.º 5
0
    public void LongestDestinationOfTree()
    {
        var player = new RandomPlayer();
        var map    = new RouteMap(new[] {
            new Route(City.Pittsburgh, City.Raleigh, new EdgeProperties(Color.Red, 1)
            {
                Owner = player
            }),
            new Route(City.Raleigh, City.Charleston, new EdgeProperties(Color.Red, 1)
            {
                Owner = player
            }),
            new Route(City.Charleston, City.Miami, new EdgeProperties(Color.Red, 3)
            {
                Owner = player
            }),
            new Route(City.Charleston, City.Atlanta, new EdgeProperties(Color.Red, 2)
            {
                Owner = player
            }),
        }, Array.Empty <City[]>());
        var result = map.LongestDestination(player);

        Assert.Equal(5, result.Length);
    }
Ejemplo n.º 6
0
        public void Init(int left, int right, int rlevel)
        {
            PeopleConfig peopleConfig = ConfigData.GetPeopleConfig(right);

            if (left == 0)
            {
                switch (peopleConfig.Method)
                {
                case "common": LeftPlayer = new HumanPlayer(true); break;

                case "rand": LeftPlayer = new RandomPlayer(right, true, true); break;

                default: LeftPlayer = new AIPlayer(right, peopleConfig.Method, true, rlevel, true); break;
                }
            }
            else //观看比赛
            {
                LeftPlayer = new AIPlayer(left, ConfigData.GetPeopleConfig(left).Emethod, true, rlevel, false);
            }

            switch (peopleConfig.Emethod)
            {
            case "common": RightPlayer = new HumanPlayer(false); RightPlayer.PeopleId = right; break;

            case "rand": RightPlayer = new RandomPlayer(right, false, false); break;

            case "mirror": RightPlayer = new MirrorPlayer(right, LeftPlayer.Cards, false); break;

            default: RightPlayer = new AIPlayer(right, peopleConfig.Emethod, false, rlevel, false); break;
            }
        }
Ejemplo n.º 7
0
        public void Initialize()
        {
            server               = new Server();
            randomPlayer         = new RandomPlayer("jim");
            leastSymmetricPlayer = new LeastSymmetricPlayer("reggie");
            mostSymmetricPlayer  = new MostSymmetricPlayer("michael");

            //randBlue = new PlayerProxy(randomPlayer, "blue", 9999);
            //mostsymRed = new PlayerProxy(mostSymmetricPlayer, "red", 9999);
            //leastsymRed = new PlayerProxy(leastSymmetricPlayer, "red", 9999);


            tiles = new List <Tile> {
                new Tile(1, new List <int> {
                    0, 1, 2, 3, 4, 5, 6, 7
                }),
                new Tile(2, new List <int> {
                    0, 1, 2, 4, 3, 6, 5, 7
                }),
                new Tile(3, new List <int> {
                    0, 6, 1, 5, 2, 4, 3, 7
                }),
                new Tile(4, new List <int> {
                    0, 5, 1, 4, 2, 7, 3, 6
                }),
                new Tile(5, new List <int> {
                    0, 2, 1, 4, 3, 7, 5, 6
                }),
            };
        }
Ejemplo n.º 8
0
        public void Start(int defaultPlayers)
        {
            var humanPlayer = new ConsolePlayer("Rupert");

            _game                      = new GameFactory().Create(humanPlayer);
            _game.NewPhase            += game_NewPhase;
            _game.PlayerInputRequired += game_PlayerInputRequired;
            _game.Open(humanPlayer);

            var playerCount = defaultPlayers;

            for (; ;)
            {
                Console.WriteLine("How many computer players ({0})?", playerCount);
                var entered = Console.ReadLine();
                if (string.IsNullOrEmpty(entered))
                {
                    break;
                }
                if (Int32.TryParse(entered, out playerCount))
                {
                    break;
                }
            }
            for (var i = 0; i < playerCount; i++)
            {
                var newPlayer = new RandomPlayer(i + 1);
                _game.Join(newPlayer);
            }
            _game.Start(humanPlayer);
        }
Ejemplo n.º 9
0
        static void RandomPlayerTest()
        {
            //Set up random players
            var player1 = new RandomPlayer();
            var player2 = new RandomPlayer();
            var player3 = new RandomPlayer();
            var player4 = new RandomPlayer();

            var points = new int[4];

            //Set up game
            var game = new HeartsGame();

            //Add the players
            game.Players.AddRange(new[] { player1, player2, player3, player4 });


            for (int i = 0; i < 1000000; ++i)
            {
                game.PlayRound();
                for (int j = 0; j < 4; ++j)
                {
                    points[j] = game.Players[j].Points;
                }
                game.Reset();
            }

            Console.WriteLine($"Player1: {points[0]}");
            Console.WriteLine($"Player2: {points[1]}");
            Console.WriteLine($"Player3: {points[2]}");
            Console.WriteLine($"Player4: {points[3]}");
            Console.ReadLine();
        }
Ejemplo n.º 10
0
        public GameForm()
        {
            InitializeComponent();
            _randomPlayer    = new RandomPlayer();
            _optimalPlayer   = new OptimalPlayer(SquareTypes.O);
            _neatPlayer      = new NeatPlayer(null, SquareTypes.O);
            _aiSquareType    = SquareTypes.O;
            _humanSquareType = SquareTypes.X;
            _game            = new TicTacToeGame();

            // Set the AI to the random player by default.
            _ai = _randomPlayer;

            // Experiment classes encapsulate much of the nuts and bolts of setting up a NEAT search.
            _experiment          = new TicTacToeExperiment();
            _hyperNeatExperiment = new TicTacToeHyperNeatExperiment();

            // Load config XML for the NEAT experiment.
            XmlDocument xmlConfig = new XmlDocument();

            xmlConfig.Load("tictactoe.config.xml");
            _experiment.Initialize("TicTacToe", xmlConfig.DocumentElement);

            // Load config XML for the HyperNEAT experiment.
            xmlConfig = new XmlDocument();
            xmlConfig.Load("hyperneat.config.xml");
            _hyperNeatExperiment.Initialize("TicTacToe", xmlConfig.DocumentElement);
        }
Ejemplo n.º 11
0
        public void TestLegalPlayCheckLastPossibleMoveNotUndone()
        {
            RandomPlayer p1 = new RandomPlayer("john");

            server.AddPlayer(p1, "blue");

            Tile testTile1 = new Tile(1, new List <int>(8)
            {
                0, 1, 2, 3, 4, 5, 6, 7,
            });
            Tile testTile2 = new Tile(2, new List <int>(8)
            {
                0, 1, 2, 3, 4, 5, 6, 7,
            });
            Tile testTile3 = new Tile(3, new List <int>(8)
            {
                0, 5, 1, 4, 2, 7, 3, 6,
            });

            Player p_1 = server.alive[0];

            server.board.AddPlayerToken("blue", new Position(4, 6, 0));
            p_1.Hand = new List <Tile> {
                testTile1, testTile2, testTile3
            };
            server.gameState = Server.State.loop;
            Boolean legalPlay = server.LegalPlay(p_1, server.board, testTile1);

            Assert.IsFalse(legalPlay);
            Assert.AreEqual(3, p_1.Hand.Count);
            for (int i = 1; i < 4; i++)
            {
                Assert.AreEqual(i, p_1.Hand[i - 1].id);
            }
        }
Ejemplo n.º 12
0
        public void TestIllegalPlayTileNotInHand()
        {
            RandomPlayer mp1 = new RandomPlayer("jim");

            server.AddPlayer(mp1, "blue");

            Tile testTile1 = new Tile(1, new List <int>(8)
            {
                0, 1, 2, 3, 4, 5, 6, 7,
            });
            Tile testTile2 = new Tile(2, new List <int>(8)
            {
                0, 1, 2, 3, 4, 7, 6, 5,
            });
            Tile testTile3 = new Tile(3, new List <int>(8)
            {
                0, 5, 1, 4, 2, 7, 3, 6,
            });

            Tile otherTile = new Tile(4, new List <int>(8)
            {
                1, 2, 3, 4, 5, 6, 7, 0
            });

            Player p1        = server.alive[0];
            var    origClass = p1.iplayer.GetType();

            server.gameState = Server.State.loop;
            bool legalPlay = server.LegalPlay(p1, server.board, otherTile);

            Assert.IsFalse(legalPlay);
        }
Ejemplo n.º 13
0
        public void Initialize()
        {
            server  = new Server();
            rplayer = new RandomPlayer("jim");
            lplayer = new LeastSymmetricPlayer("reggie");
            mplayer = new MostSymmetricPlayer("michael");

            randBlue = new Player(rplayer, "blue");
            tiles    = new List <Tile> {
                new Tile(1, new List <int> {
                    0, 1, 2, 3, 4, 5, 6, 7
                }),
                new Tile(2, new List <int> {
                    0, 1, 2, 4, 3, 6, 5, 7
                }),
                new Tile(3, new List <int> {
                    0, 6, 1, 5, 2, 4, 3, 7
                }),
                new Tile(4, new List <int> {
                    0, 5, 1, 4, 2, 7, 3, 6
                }),
                new Tile(5, new List <int> {
                    0, 2, 1, 4, 3, 7, 5, 6
                }),
            };
        }
Ejemplo n.º 14
0
        public static DefaultPlayer CreatePlayer()
        {
            var random = new Random();

            PlayerId++;
            DefaultPlayer newPlayer = null;

            switch (random.Next(1, 5))
            {
            case 1:
                newPlayer = new CheaterPlayer(PlayerNameGenerator.GetNextPlayerName(), PlayerId);
                break;

            case 2:
                newPlayer = new MemoryPlayer(PlayerNameGenerator.GetNextPlayerName(), PlayerId);
                break;

            case 3:
                newPlayer = new RandomPlayer(PlayerNameGenerator.GetNextPlayerName(), PlayerId);
                break;

            case 4:
                newPlayer = new ThoroughCheaterPlayer(PlayerNameGenerator.GetNextPlayerName(), PlayerId);
                break;

            case 5:
                newPlayer = new ThoroughPlayer(PlayerNameGenerator.GetNextPlayerName(), PlayerId);
                break;
            }

            _playersList.Add(newPlayer);
            return(newPlayer);
        }
Ejemplo n.º 15
0
        public void TestGetRoshamboRandom()
        {
            RandomPlayer random         = new RandomPlayer();
            RoshamboV    RoshamboRandom = random.GetRoshambo();

            Assert.IsInstanceOfType(RoshamboRandom, typeof(RoshamboV));
        }
Ejemplo n.º 16
0
        void AddTwoPlayers()
        {
            LeastSymmetricPlayer p1 = new LeastSymmetricPlayer("john");
            RandomPlayer         p2 = new RandomPlayer("john");

            server.AddPlayer(p1, "blue");
            server.AddPlayer(p2, "green");
        }
 public void MakeNames()
 {
     for (int i = 0; i < 100; i++)
     {
         RandomPlayer player = new RandomPlayer();
         Console.WriteLine(player.Name);
     }
 }
Ejemplo n.º 18
0
 public void TestConstructorRandomPlayer()
 {
     for (int i = 0; i < Constants.colors.Count; i++)
     {
         RandomPlayer player = new RandomPlayer("john");
         Player       p      = new Player(player, Constants.colors[i]);
     }
 }
Ejemplo n.º 19
0
        public void TestInvalidColor()
        {
            AddThreePlayers();

            RandomPlayer mPlayer = new RandomPlayer("john");

            server.AddPlayer(mPlayer, "not blue");
        }
Ejemplo n.º 20
0
        public void TestDuplicateColor()
        {
            AddThreePlayers();

            RandomPlayer mPlayer = new RandomPlayer("harry");

            server.AddPlayer(mPlayer, "blue");
        }
Ejemplo n.º 21
0
        private void InitPlayers()
        {
            Gamers    = new Player[2];
            Gamers[0] = new RandomPlayer(ECultures.DALRIONS, this);
            Gamers[1] = new MonteCarloTreeSearch(ECultures.RAHKARS, new OMCSelection(), new BestOfAllSimulation(), this);

            CurPlayer = Gamers[0];
            Gamers[1].SetCursor(new Coord(BoardConsts.MAX_LIN - 2, BoardConsts.MAX_COL - 2));
        }
Ejemplo n.º 22
0
        public void TestMakerListofSplayer()
        {
            string SPlayer  = "<splayer-nodragon>";
            string colorxml = "<color>blue</color>";

            SPlayer += colorxml;
            // (0, 1, 2, 3, 4, 5, 6, 7), id 1
            // (0, 4, 1, 5, 2, 6, 3, 7), id 9
            string tiles      = "<tile><connect><n>0</n><n>1</n></connect><connect><n>2</n><n>3</n></connect><connect><n>4</n><n>5</n></connect><connect><n>6</n><n>7</n></connect></tile><tile><connect><n>0</n><n>4</n></connect><connect><n>1</n><n>5</n></connect><connect><n>2</n><n>6</n></connect><connect><n>3</n><n>7</n></connect></tile>";
            string setoftiles = "<set>" + tiles + "</set>";

            SPlayer += setoftiles;
            SPlayer += "</splayer-nodragon>";

            string DragonSPlayer = "<splayer-dragon>";
            string dragcolorxml  = "<color>red</color>";

            DragonSPlayer += dragcolorxml;
            // (0, 1, 2, 3, 4, 5, 6, 7), id 1
            // (0, 4, 1, 5, 2, 6, 3, 7), id 9
            string dragtiles      = "<tile><connect><n>0</n><n>1</n></connect><connect><n>2</n><n>3</n></connect><connect><n>4</n><n>5</n></connect><connect><n>6</n><n>7</n></connect></tile><tile><connect><n>0</n><n>4</n></connect><connect><n>1</n><n>5</n></connect><connect><n>2</n><n>6</n></connect><connect><n>3</n><n>7</n></connect></tile>";
            string dragsetoftiles = "<set>" + dragtiles + "</set>";

            DragonSPlayer += dragsetoftiles;
            DragonSPlayer += "</splayer-dragon>";

            string    ListofSPlayer = "<list>" + SPlayer + DragonSPlayer + "</list>";
            XDocument expected_doc  = XDocument.Parse(ListofSPlayer);

            // make list of splayers
            RandomPlayer jim      = new RandomPlayer("jim");
            Player       randBlue = new Player(jim, "blue");

            randBlue.AddTiletoHand(new Tile(1, new List <int> {
                0, 1, 2, 3, 4, 5, 6, 7
            }));
            randBlue.AddTiletoHand(new Tile(9, new List <int> {
                0, 4, 1, 5, 2, 6, 3, 7
            }));
            RandomPlayer bob     = new RandomPlayer("bob");
            Player       randred = new Player(jim, "red");

            randred.AddTiletoHand(new Tile(1, new List <int> {
                0, 1, 2, 3, 4, 5, 6, 7
            }));
            randred.AddTiletoHand(new Tile(9, new List <int> {
                0, 4, 1, 5, 2, 6, 3, 7
            }));

            List <(Player, Boolean)> listofSPlayer = new List <(Player, Boolean)> {
                (randBlue, false), (randred, true)
            };


            Assert.IsTrue(XNode.DeepEquals(expected_doc.FirstNode, maker.ListofSPlayersXML(listofSPlayer)));
        }
Ejemplo n.º 23
0
        public void TestReplacePlayer()
        {
            RandomPlayer         mPlayer1    = new RandomPlayer("john");
            LeastSymmetricPlayer replacement = new LeastSymmetricPlayer("adam");

            Player player = new Player(mPlayer1, "blue");

            player.ReplaceMPlayer(replacement);
            Assert.AreEqual("adam", player.iplayer.GetName());
        }
Ejemplo n.º 24
0
        void AddThreePlayers()
        {
            RandomPlayer p1 = new RandomPlayer("blue");
            RandomPlayer p2 = new RandomPlayer("green");
            RandomPlayer p3 = new RandomPlayer("hotpink");

            server.AddPlayer(p1, "blue");
            server.AddPlayer(p2, "green");
            server.AddPlayer(p3, "hotpink");
        }
Ejemplo n.º 25
0
        public void Elaborazione_SideA_ReturnRandomNumBetween0And5()
        {
            IAIPlayer player = new RandomPlayer();

            player.LatoPlayer = Lato.A;
            int i = player.Elaborazione(null);

            Assert.GreaterOrEqual(i, 0);
            Assert.GreaterOrEqual(5, i);
        }
Ejemplo n.º 26
0
        public void ShouldPlayRandomCardFromHand()
        {
            var player = new RandomPlayer();
            player.Hand.Add(CardType.Blue);
            var board = new GameBoard(2);

            var play = player.FormulatePlay(board);

            Assert.AreEqual(CardType.Blue, play.Card);
            Assert.AreEqual(0, play.Position);
        }
Ejemplo n.º 27
0
        public void Elaborazione_SideB_ReturnRandomNumBetween7And12()
        {
            IAIPlayer player = new RandomPlayer();

            player.LatoPlayer = Lato.B;

            int i = player.Elaborazione(null);

            Assert.GreaterOrEqual(i, 7);
            Assert.GreaterOrEqual(12, i);
        }
Ejemplo n.º 28
0
        static void Main(string[] args)
        {
            IPlayer playerOne = new RandomPlayer(ConnectFourGame.PlayerOneGamePiece);
            IPlayer playerTwo = new RandomPlayer(ConnectFourGame.PlayerTwoGamePiece);

            ConnectFourGame game = new ConnectFourGame(playerOne, playerTwo);

            game.PlayGame(true);

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
Ejemplo n.º 29
0
        void AddFourPlayers()
        {
            RandomPlayer p1 = new RandomPlayer("blue");
            RandomPlayer p2 = new RandomPlayer("green");
            RandomPlayer p3 = new RandomPlayer("red");
            RandomPlayer p4 = new RandomPlayer("hotpink");

            server.AddPlayer(p1, "blue");
            server.AddPlayer(p2, "green");
            server.AddPlayer(p3, "red");
            server.AddPlayer(p4, "hotpink");
        }
Ejemplo n.º 30
0
        protected override void OnConnected(Client client)
        {
            var state = new GameState();
            var me = new RandomPlayer(Name, state);
            var driver= new GameDriver(me, state, client);

            while (driver.Dispatch(client.ReadLine())) ;

            Console.WriteLine();
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
        }
Ejemplo n.º 31
0
    public void PrevDiagsTest()
    {
        var player = new RandomPlayer();
        var map    = new RouteMap(RouteFactory.Routes, CityFactory.CityLayout);

        Assert.True(map.RoutesFrom(City.Helena, map.PrevDiags(City.Helena)).Single().IsAdjacent(City.SaltLakeCity));

        //new[] { City.Vancouver, City.Calgary, City.Winnipeg, City.SaultSteMarie, City.Montreal, City.Boston },
        //new[] { City.Seattle, City.Helena, City.Duluth, City.Chicago, City.Toronto, City.NewYorkCity },
        //new[] { City.Portland, City.Omaha, City.KansasCity, City.SaintLouis, City.Pittsburgh, City.WashingtonDc },
        //new[] { City.SaltLakeCity, City.Denver, City.OklahomaCity, City.LittleRock, City.Nashville, City.Raleigh },
        //new[] { City.SanFranscisco, City.LasVegas, City.SantaFe, City.Dallas, City.Atlanta, City.Charleston },
        //new[] { City.LosAngeles, City.Phoenix, City.ElPaso, City.Houston, City.NewOrelans, City.Miami }
    }
Ejemplo n.º 32
0
        private static void RunGame()
        {
            Process p = StartAiPlayer();

            string line = p.StandardOutput.ReadLine();
            DisplayMessageGreen(string.Format("running player: {0}", line));
            string config = string.Format("{0} {1} {2} 0 {3}", Game.ROWS, Game.COLUMNS, Game.PIECES_TO_WIN, Game.TIME_LIMIT);
            DisplayMessageGreen(string.Format("game config: {0}", config));
            p.StandardInput.WriteLine(config);

            Game game = new Game();
            GameEvaluator evaluator = new GameEvaluator();
            RandomPlayer player2 = new RandomPlayer();
            GameStates gameState = GameStates.InProgress;

            while (gameState == GameStates.InProgress)
            {
                // read the move from player
                line = p.StandardOutput.ReadLine();
                DisplayMessageGreen(string.Format("move from player: {0}", line));

                // tie the move to the game state and evaluate
                game.AcceptMove(Game.ME, int.Parse(line.Trim()));
                gameState = evaluator.EvaluateGame(game);
                if (gameState != GameStates.InProgress)
                {
                    HandleEndGame(gameState, p);
                    break;
                }

                // get random player's move
                int move2 = player2.GetMove(game);

                game.AcceptMove(Game.OPPONENT, move2);
                gameState = evaluator.EvaluateGame(game);
                if (gameState != GameStates.InProgress)
                {
                    HandleEndGame(gameState, p);
                    break;
                }

                DisplayMessageGreen(string.Format("sending move: {0}", move2));
                p.StandardInput.WriteLine(move2);
            }

            p.WaitForExit();
        }
Ejemplo n.º 33
0
        private void SetPlayersNamesAndTypes(int numberOfPlayers)
        {
            Console.WriteLine("Enter players \"Name\" and choose players types");
            Console.WriteLine("Player types are:");
            Console.WriteLine("1. Random player");
            Console.WriteLine("2. Memory player");
            Console.WriteLine("3. Thorough player");
            Console.WriteLine("4. Cheater player");
            Console.WriteLine("5. Thorough Cheater player");
            for (int i = 0; i < numberOfPlayers; i++)
            {
                bool isCorrectPlayerInput = false;
                while (!isCorrectPlayerInput)
                {
                    try
                    {
                        Console.Write("Enter Player {0} name: ", i + 1);
                        string name = Console.ReadLine();

                        Console.Write("Choose type for player {0} [1 to 5]: ", i + 1);
                        int playerTypeInput = int.Parse(Console.ReadLine());
                        if (playerTypeInput < 1 || 5 < playerTypeInput)
                        {
                            throw new FormatException("Player type must be between 1 and 5!");
                        }

                        switch (playerTypeInput)
                        {
                            case 1:
                                {
                                    RandomPlayer newPlayer = new RandomPlayer(name, new CustomRandom());
                                    this.players.Add(newPlayer);
                                    break;
                                }

                            case 2:
                                {
                                    MemoryPlayer newPlayer = new MemoryPlayer(name, new CustomRandom());
                                    this.players.Add(newPlayer);
                                    break;
                                }

                            case 3:
                                {
                                    ThoroughPlayer newPlayer = new ThoroughPlayer(name);
                                    this.players.Add(newPlayer);
                                    break;
                                }

                            case 4:
                                {
                                    CheaterPlayer newPlayer = new CheaterPlayer(name, new CustomRandom());
                                    this.players.Add(newPlayer);
                                    break;
                                }

                            case 5:
                                {
                                    ThoroughCheaterPlayer newPlayer = new ThoroughCheaterPlayer(name);
                                    this.players.Add(newPlayer);
                                    break;
                                }

                            default:
                                break;
                        }

                        isCorrectPlayerInput = true;
                    }
                    catch (FormatException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    catch (ArgumentNullException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
        }