/// <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); }
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); }