// Ctor to bring together Team4.dll class AIPlayer and TicTacToe class Player public Player(Epam_Team4.AIPlayer AIPlayer, TimeSpan timeLimit) { Team4AI = AIPlayer; MyPlayerType = PlayerType.computer; MyFigure = AIPlayer.MyFigure; this.timeLimit = timeLimit; name = AIPlayer.Name; SetTimer(); }
/// <summary> /// Initialize players and Determine which figure for which player, who goes first and subscribe for PlayerMadeMove event /// </summary> private void InitializePlayers() { // Determine which figure for which player: "X" go first, "O" go second. rnd = new Random(); if (rnd.Next(0, 2) == 0) { player1Figure = State.X; player2Figure = State.O; } else { player1Figure = State.O; player2Figure = State.X; } // Initialize 1st player. if (player1Type == PlayerType.human)// from game settings { player1 = new Player(new HumanPlayer(player1Figure), timeLimit); } else { Team4AI = new Epam_Team4.AIPlayer((byte)player1Figure, (byte)stripeLengthToWin, boardSize); player1 = new Player(Team4AI, timeLimit); } player1.MyNumber = PlayerNumber.player1; // Initialize 2nd player. if (player2Type == PlayerType.human)// from game settings { player2 = new Player(new HumanPlayer(player2Figure), timeLimit); } else { Team4AI = new Epam_Team4.AIPlayer((byte)player2Figure, (byte)stripeLengthToWin, boardSize); player2 = new Player(Team4AI, timeLimit); } player2.MyNumber = PlayerNumber.player2; // Subscribe to players time's up event. player1.updateBFLimits += OnPlayerUpdateBFLimits; player2.updateBFLimits += OnPlayerUpdateBFLimits; // Subscribe to players time's up event. player1.timesUpEvent += OnTimesUp; player2.timesUpEvent += OnTimesUp; // Subscribe to player update event player1.updateTimeLimitEvent += OnUpdateTimeLimit; player2.updateTimeLimitEvent += OnUpdateTimeLimit; // Update labels with time limit for each player. deUpdateTimeLimit(player1); deUpdateTimeLimit(player2); // Subscribe to players MadeMove events if (player1.MyPlayerType == PlayerType.computer) { player1.playerMadeMoveEvent += OnPlayerMadeMove; } if (player2.MyPlayerType == PlayerType.computer) { player2.playerMadeMoveEvent += OnPlayerMadeMove; } // Set activePlayer activePlayer = player1.MyFigure == State.X ? player1 : player2; // FIRST TURN // If first turn is up to computer, call his move. if (activePlayer.MyPlayerType == PlayerType.computer) { activePlayer.MakeMove((Board)board.Clone());// pass new board to the AIPlayer } else { activePlayer.timer.Start();// if human - start his timer } }