Gambar 4.5 Tampilan Game Play
4.5 Implementasi Algoritma
Berikut adalah implementasi algoritma Minimax dengan optimasi Alpha Beta Pruning pada aplikasi JFinRo ini.
public final class AIPlayer implements Player, Constanta { private static final int MAXWIN = 10000;
private static final int MINWIN = -10000; private int movefinal int kedalamanSaatIni, final int maxdepth,
final Check board,final Square squareOut, final byte giliran, int alpha, int beta {
if kedalamanSaatIni == maxdepth { squareOut.init;
++nodeDievaluasi; return evalboard;
} int max = MINWIN - 1;
int min = MAXWIN + 1; final Square potentialSquare = SquareFactory.create;
int moveVal; Square s = SquareFactory.create;
Universitas Sumatera Utara
while getNextPossibleMoves, board { final Check b = board.copy;
b.setPieces, giliran; if giliran == COMPUTER_PIECE {
switch b.terminalTest { case USER_WIN:
moveVal = MINWIN; break;
case COMPUTER_WIN: moveVal = MAXWIN;
break; default:
moveVal = movekedalamanSaatIni + 1, maxdepth, b, potentialSquare,
USER_PIECE, alpha, beta; break;
} if moveVal max {
squareOut.copyPositions; max = moveVal;
} if alphaBetaPruningEnabled {
alpha = alpha moveVal ? alpha : moveVal; if alpha = beta {
return beta; }
} } else {
switch b.terminalTest { case USER_WIN:
moveVal = MINWIN; break;
case COMPUTER_WIN: moveVal = MAXWIN;
break; default:
moveVal = movekedalamanSaatIni + 1, maxdepth, b, potentialSquare,
COMPUTER_PIECE, alpha, beta; break;
} if moveVal min {
squareOut.copyPositions; min = moveVal;
} if alphaBetaPruningEnabled {
beta = beta moveVal ? beta : moveVal; if beta = alpha {
return alpha; }
} }
}
Universitas Sumatera Utara
if alphaBetaPruningEnabled { return giliran == COMPUTER_PIECE ? alpha : beta;
} return giliran == COMPUTER_PIECE ? max : min;
}
Berikut adalah implementasi fungsi evaluasi pada permainan Five in Row ini.
private static int evalfinal Check b { final Stats c = new Statsb, COMPUTER_PIECE;
final Stats u = new Statsb, USER_PIECE; int retVal = 0;
if u.uncapped4 0 { return MINWIN;
} if c.uncapped4 0 {
return MAXWIN; }
retVal += c.capped2 5; retVal -= u.capped2 5;
retVal += c.uncapped2 10; retVal -= u.uncapped2 10;
retVal += c.capped3 20; retVal -= u.capped3 30;
retVal += c.uncapped3 100; retVal -= u.uncapped3 120;
retVal += c.capped4 500; retVal -= u.capped4 500;
return Math.maxMINWIN, Math.minMAXWIN, retVal; }
Universitas Sumatera Utara
4.6 Pengujian Agen