**fig10_73.txt** /* 1*/ // Same as before, but perform alpha-beta pruning. /* 2*/ // The main routine should make the call with: /* 3*/ // Alpha = Comp_Loss, Beta = Comp_Win. /* 4*/ void /* 5*/ Find_Comp_Move( Board_Type & Board, int & Best_Move, int & Value, /* 6*/ int Alpha, int Beta ) /* 7*/ { /* 8*/ int Dc, i, Reply; // Dc means don't care. /* 9*/ if( Full_Board( Board ) ) /*10*/ Value = Draw; /*11*/ else /*12*/ if( Immediate_Win( Board, Best_Move, Comp ) ) /*13*/ Value = Comp_Win; /*14*/ else /*15*/ { /*16*/ Value = Alpha; /*17*/ for( i = 1; i <= 9 && Value < Beta; i++ ) /*18*/ { // Try each square. /*19*/ if( Is_Empty( Board, i ) ) /*20*/ { /*21*/ Place( Board, i, Comp ); /*22*/ Find_Human_Move( Board, Dc, Reply, Value, Beta ); /*23*/ Unplace( Board, i ); // Restore Board. /*24*/ if( Reply > Value ) // Update best move. /*25*/ { /*26*/ Value = Reply; /*27*/ Best_Move = i; /*28*/ } /*29*/ } /*30*/ } /*31*/ } /*32*/ }