/* ECP: FILEname=fig11_25.c */ /* 1*/ /* Same As ChooseMove, But Use Alpha Beta Pruning. */ /* 2*/ int /* 3*/ Choose( BoardType B, Side S, int *BestRow, int *BestColumn, /* 4*/ int Alpha, int Beta ) /* 5*/ { /*14*/ /* Up To Here, Everything Is Identical... */ /*15*/ /* Set Some Variables Depending On Who S Is */ /*16*/ if( S == Me ) /*17*/ { /*18*/ Opp = You; Value = Alpha; Mypiece = Computer; /*19*/ } /*20*/ else /*21*/ { /*22*/ Opp = Me; Value = Beta; Mypiece = Human; /*23*/ } /*24*/ /* Search for A Move */ /*25*/ for( Row = 0; Row < Bsize; Row++ ) /*26*/ for( Column = 0; Column < Bsize; Column++ ) /*27*/ if( IsEmpty( B, Row, Column ) ) /*28*/ { /*29*/ Place( B, Row, Column, Mypiece ); /*30*/ if( S == Me ) /*31*/ { /*32*/ Reply = Choose( B, Opp, &Z, &Z, Value, Beta ); /*33*/ Unplace( B, Row, Column ); /*34*/ if( Reply > Value ) /*35*/ { /*36*/ *BestRow = Row; *BestColumn = Column; /*37*/ if( ( Value = Reply ) >= Beta ) /*38*/ return Value; /* Refutation Found */ /*39*/ } /*40*/ } /*41*/ else /*42*/ { /*43*/ Reply = Choose( B, Opp, &Z, &Z, Alpha, Value ); /*44*/ Unplace( B, Row, Column ); /*45*/ if( Reply < Value ) /*46*/ { /*47*/ *BestRow = Row; *BestColumn = Column; /*48*/ if( ( Value = Reply ) <= Alpha ) /*49*/ return Value; /* Refutation Found */ /*50*/ } /*51*/ } /*52*/ } /*53*/ return Value; /*54*/ }