Exemple #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;
}
Exemple #2
0
void fullBoard_notices_an_empty_board(CuTest *tc) {
  int board[3][3];
  ct_initialize(3, 3, board);

  board[0][1] = 0;
  board[0][2] = 0;
  board[1][0] = 0;
  board[1][1] = 0;
  board[1][2] = 0;
  board[2][0] = 0;
  board[2][1] = 0;
  board[2][2] = 0;

  int answer = fullBoard(3, 3, board);
  CuAssertIntEquals_Msg(tc, "Full board", -1, answer);
}