Ejemplo n.º 1
0
/**
 * Same as before, but perform alpha-beta pruning.
 * The main routine should make the call with
 * alpha = COMP_LOSS and beta = COMP_WIN.
 */
int TicTacToe::findCompMove( int & bestMove, int alpha, int beta )
{
int i, responseValue;
int dc;   // dc means don't care; its value is unused
int value;

if( fullBoard( ) )
    value = DRAW;
else
if( immediateCompWin( bestMove ) )
    return COMP_WIN;    // bestMove will be set by immediateCompWin
else
{
    value = alpha; bestMove = 1;
    for( i = 1; i <= 9 && value < beta; i++ )  // Try each square
    {
        if( isEmpty( i ) )
        {
            place( i, COMP );
            responseValue = findHumanMove( dc, value, beta );
            unplace( i );  // Restore board

            if( responseValue > value )
            {
                   // Update best move
                value = responseValue;
                bestMove = i;
            }
        }
    }
}
return value;
}
void TicTacToe::findCompMove(int& bestMove,int &value, int alpha, int beta) {
	if (board.isFull())
		value = Draw;
	else if (board.immediateComWin(bestMove))
		value = CompWin;
	else {
		value = alpha;
		for (int i = 0; i < GridNuber&&value < beta; i++) {
			if (board.isEmpty(i)) {
				board.placeComp(i);
				int tmp = -1, response = -1;  // Tmp is useless
				findHumanMove(tmp, response, value, beta);
				board.unPlace(i);
				if (response > value) {
					value = response;
					bestMove = i;
				}
			}
		}
	}
}