Пример #1
0
        /// <summary>
        /// Returns the game result.
        /// </summary>
        /// <returns>The game result</returns>
        public ReversiGameResult GetGameResult()
        {
            ReversiGameResult gr = new ReversiGameResult();

            for (int i = 0; i < m_numRows; i++)
            {
                for (int j = 0; j < m_numCols; j++)
                {
                    if (m_board[i, j] == MinimaxSpot.Light)
                    {
                        gr.NumLightPieces++;
                    }
                    if (m_board[i, j] == MinimaxSpot.Dark)
                    {
                        gr.NumDarkPieces++;
                    }
                }
            }

            if (TerminalTest(m_board))
            {
                if (gr.NumLightPieces > gr.NumDarkPieces)
                {
                    gr.GameState = ReversiGameState.LightWon;
                }
                else if (gr.NumLightPieces < gr.NumDarkPieces)
                {
                    gr.GameState = ReversiGameState.DarkWon;
                }
                else
                {
                    gr.GameState = ReversiGameState.Draw;
                }
            }
            else
            {
                gr.GameState = ReversiGameState.Ongoing;
            }

            return(gr);
        }
Пример #2
0
        private bool UpdateBoard()
        {
            if (m_isGameOver)
            {
                return(false);
            }

            MinimaxSpot[,] game = m_game.Board;
            MinimaxSpot[,] gui  = m_GUIboard;

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if (gui[i, j] == MinimaxSpot.Empty && game[i, j] != MinimaxSpot.Empty)
                    {
                        AddPiece(i, j, game[i, j] == MinimaxSpot.Light ? true : false);
                    }
                    else if ((gui[i, j] == MinimaxSpot.Light && game[i, j] == MinimaxSpot.Dark) ||
                             (gui[i, j] == MinimaxSpot.Dark && game[i, j] == MinimaxSpot.Light))
                    {
                        FlipPiece(i, j);
                    }
                }
            }

            // Remove old ghost pieces.
            foreach (var c in m_ghostPieces)
            {
                mainViewport.Children.Remove(c.Key);
            }
            m_ghostPieces.Clear();

            // Generate new ghost pieces.
            IEnumerable <MinimaxMove> moves = m_game.GetValidMoves();

            foreach (var m in moves)
            {
                ShowGhost(m.Row, m.Col, m_game.IsLightMove);
            }

            ReversiGameResult gs = m_game.GetGameResult();

            if (gs.GameState == ReversiGameState.LightWon)
            {
                m_isGameOver = true;
                MessageBox.Show(String.Format("Light Won! {0}-{1}", gs.NumLightPieces, gs.NumDarkPieces), "GAME OVER");
                return(false);
            }
            if (gs.GameState == ReversiGameState.DarkWon)
            {
                m_isGameOver = true;
                MessageBox.Show(String.Format("Dark Won! {0}-{1}", gs.NumLightPieces, gs.NumDarkPieces), "GAME OVER");
                return(false);
            }
            if (gs.GameState == ReversiGameState.Draw)
            {
                m_isGameOver = true;
                MessageBox.Show(String.Format("Draw! {0}-{1}", gs.NumLightPieces, gs.NumDarkPieces), "GAME OVER");
                return(false);
            }
            return(true);
        }