Пример #1
0
        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;
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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));
        }