@Test public void testAlphaBetaNonDebug() { // create the TicTacToe game. Only instantiate the proper class // that you want to play. StraightLogic logic = new StraightLogic(); // 2-move lookahead, using the BoardEvaluation function as described in Nilsson. Player xPlayer = PlayerFactory.createPlayerWithPly(PlayerFactory.AlphaBeta, Player.XMARK, 2); xPlayer.logic(logic); xPlayer.score(new BoardEvaluation()); // 2-move lookahead, for O. Player oPlayer = PlayerFactory.createPlayerWithPly(PlayerFactory.AlphaBeta, Player.OMARK, 2); oPlayer.logic(logic); oPlayer.score(new BoardEvaluation()); TicTacToeBoard board = new TicTacToeBoard(); TicTacToeState state = new TicTacToeState(board, logic); // pre-initialize board to 2.5 moves new PlaceMark(1, 1, (Player) xPlayer).execute(state); new PlaceMark(0, 0, (Player) oPlayer).execute(state); new PlaceMark(0, 2, (Player) xPlayer).execute(state); // two ply lookahead. algs.model.gametree.AlphaBetaEvaluation ae = new algs.model.gametree.AlphaBetaEvaluation(2); IGameMove move = ae.bestMove(state, oPlayer, xPlayer); System.out.println("best move:" + move); // we really know that this move is a placemark assertEquals(2, ((PlaceMark) move).getColumn()); assertEquals(0, ((PlaceMark) move).getRow()); }
@Test public void testAlphaBetaNoMove() { // create the TicTacToe game. Only instantiate the proper class // that you want to play. StraightLogic logic = new StraightLogic(); // 2-move lookahead, using the BoardEvaluation function as described in Nilsson. Player xPlayer = PlayerFactory.createPlayerWithPly(PlayerFactory.AlphaBeta, Player.XMARK, 2); xPlayer.logic(logic); xPlayer.score(new BoardEvaluation()); // 2-move lookahead, for O. Player oPlayer = PlayerFactory.createPlayerWithPly(PlayerFactory.AlphaBeta, Player.OMARK, 2); oPlayer.logic(logic); oPlayer.score(new BoardEvaluation()); TicTacToeBoard board = new TicTacToeBoard(); TicTacToeState state = new TicTacToeState(board, logic); // pre-initialize board to all full new PlaceMark(0, 0, (Player) xPlayer).execute(state); new PlaceMark(0, 1, (Player) oPlayer).execute(state); new PlaceMark(0, 2, (Player) xPlayer).execute(state); new PlaceMark(1, 0, (Player) oPlayer).execute(state); new PlaceMark(1, 1, (Player) xPlayer).execute(state); new PlaceMark(1, 2, (Player) xPlayer).execute(state); new PlaceMark(2, 0, (Player) oPlayer).execute(state); new PlaceMark(2, 1, (Player) xPlayer).execute(state); new PlaceMark(2, 2, (Player) oPlayer).execute(state); // two ply lookahead. algs.model.gametree.AlphaBetaEvaluation ae = new algs.model.gametree.AlphaBetaEvaluation(2); IGameMove move = ae.bestMove(state, oPlayer, xPlayer); assertTrue(move == null); }
protected void setup() { String gameType = applet.getSelectedGameType(); Logic logic = applet.getGameLogic(gameType); if (logic == null) { applet.output("You must select a game type."); return; } controller = new GameController(logic); // Find out the X Player String xType = applet.getXPlayChoice(); // Find out the O Player String oType = applet.getOPlayChoice(); computerGoesFirst = false; computerPlaysSelf = true; boolean setOpponentO = false; boolean setOpponentX = false; Player p; if (oType.equals(TicTacToeApplet.Human)) { // Even though this is a human player, it will be involved in // p = new MousePlayer(Player.OMARK); p.score(new BoardEvaluation()); computerPlaysSelf = false; humanPlayer = (MousePlayer) p; } else { p = PlayerFactory.createPlayer(oType, Player.OMARK); if (p == null) { int ply = 5; // default try { ply = Integer.valueOf(applet.getOPly().getText()); } catch (Exception _e) { } p = PlayerFactory.createPlayerWithPly(oType, Player.OMARK, ply); setOpponentO = true; } } controller.setOPlayer(p); if (xType.equals(TicTacToeApplet.Human)) { p = new MousePlayer(Player.XMARK); p.score(new BoardEvaluation()); computerPlaysSelf = false; humanPlayer = (MousePlayer) p; } else { computerGoesFirst = true; p = PlayerFactory.createPlayer(xType, Player.XMARK); if (p == null) { int ply = 5; // default try { ply = Integer.valueOf(applet.getXPly().getText()); } catch (Exception _e) { } p = PlayerFactory.createPlayerWithPly(xType, Player.XMARK, ply); setOpponentX = true; } } controller.setXPlayer(p); // set logic. ((Player) controller.getXPlayer()).logic(logic); ((Player) controller.getOPlayer()).logic(logic); // set opponents. if (setOpponentX) { ((IntelligentAgent) controller.getXPlayer()).opponent(controller.getOPlayer()); } if (setOpponentO) { ((IntelligentAgent) controller.getOPlayer()).opponent(controller.getXPlayer()); } }