void EndGame(Token.TokenColor player) { string victory = "Victoire des blanc"; if (player == Token.TokenColor.Black) { victory = "Victoire des noirs"; } ReplayButton.Visibility = Visibility.Visible; EndGameText.Visibility = Visibility.Visible; EndGameText.Text = victory; }
/// <summary> /// Le joueur a t'il gagne ? /// </summary> /// <param name="player"> Le joueur a verifier</param> /// <returns>Vrai si il a gagne, faux sinon </returns> bool CheckWin(Token.TokenColor player) { switch (player) { case Token.TokenColor.White: return(m_board.BlackCount == 0); case Token.TokenColor.Black: return(m_board.WhiteCount == 0); default: break; } return(false); }
/// <summary> /// Change de tour /// </summary> /// <param name="current">Joueur qui a joue le dernier tour</param> /// <returns>Le joueur qui doit jouer</returns> Token.TokenColor SwitchPlayer(Token.TokenColor current) { switch (current) { case Token.TokenColor.White: Dispatcher.Invoke(() => Player.Text = "Joueur actuel : Noir"); return(Token.TokenColor.Black); case Token.TokenColor.Black: Dispatcher.Invoke(() => Player.Text = "Joueur actuel : Blanc"); return(Token.TokenColor.White); default: break; } return(current); }
/// <summary> /// Boucle de Jeu /// </summary> void GameLoop() { Dispatcher.Invoke(() => StartGame()); Token.TokenColor currentPlayer = Token.TokenColor.White; bool lastPlayerWon = false; CheckersSolver opponent = new CheckersSolver(this, m_board, 7); Dispatcher.Invoke(() => Player.Text = "Joueur actuel : Blanc"); while (!lastPlayerWon && !m_stopGame) { switch (currentPlayer) { case Token.TokenColor.White: // On attend les instructions du joueur m_playerTurn = true; // Cette fonction est assez couteuse, il faudrait l'appeler un minimum de fois m_playerPossibleMove = m_board.PrioritaryTokens(currentPlayer); if (m_playerPossibleMove.Count == 0) { lastPlayerWon = true; break; } m_sequenceEngaged = new List <TokenMoveSequence>(); while (m_playerTurn && !m_stopGame) { Thread.Sleep(0); } break; case Token.TokenColor.Black: // On attend les instructions de l'agent intelligent lastPlayerWon = !opponent.ExecuteAMove(); // On attend les instructions du joueur //m_playerTurn = true; //// Cette fonction est assez couteuse, il faudrait l'appeler un minimum de fois //m_playerPossibleMove = m_board.PrioritaryTokens(currentPlayer); //if (m_playerPossibleMove.Count == 0) //{ // m_playerTurn = false; // break; //} //m_sequenceEngaged = new List<TokenMoveSequence>(); //while (m_playerTurn) //{ // Thread.Sleep(0); //} break; default: break; } if (lastPlayerWon) { // C'est le joueur precedent qui a gagne currentPlayer = SwitchPlayer(currentPlayer); break; } // On verifie si apres c'est mouvement le joueur a gagné lastPlayerWon = CheckWin(currentPlayer); if (!lastPlayerWon) { // C'est le tour du joueur suivant currentPlayer = SwitchPlayer(currentPlayer); } } Dispatcher.Invoke(() => EndGame(currentPlayer)); }