package aima.gui.demo.search; import aima.core.environment.tictactoe.TicTacToeGame; import aima.core.environment.tictactoe.TicTacToeState; import aima.core.search.adversarial.AdversarialSearch; import aima.core.search.adversarial.AlphaBetaSearch; import aima.core.search.adversarial.MinimaxSearch; import aima.core.util.datastructure.XYLocation; /** * Applies Minimax search and alpha-beta pruning to find optimal moves for the * Tic-tac-toe game. * * @author Ruediger Lunde */ public class TicTacToeDemo { public static void main(String[] args) { System.out.println("TIC-TAC-TOE DEMO"); System.out.println(""); startMinimaxDemo(); startAlphaBetaDemo(); } private static void startMinimaxDemo() { System.out.println("MINI MAX DEMO\n"); TicTacToeGame game = new TicTacToeGame(); TicTacToeState currState = game.getInitialState(); AdversarialSearch<TicTacToeState, XYLocation> search = MinimaxSearch .createFor(game); while (!(game.isTerminal(currState))) { System.out.println(game.getPlayer(currState) + " playing ... "); XYLocation action = search.makeDecision(currState); currState = game.getResult(currState, action); System.out.println(currState); } System.out.println("MINI MAX DEMO done"); } private static void startAlphaBetaDemo() { System.out.println("ALPHA BETA DEMO\n"); TicTacToeGame game = new TicTacToeGame(); TicTacToeState currState = game.getInitialState(); AdversarialSearch<TicTacToeState, XYLocation> search = AlphaBetaSearch .createFor(game); while (!(game.isTerminal(currState))) { System.out.println(game.getPlayer(currState) + " playing ... "); XYLocation action = search.makeDecision(currState); currState = game.getResult(currState, action); System.out.println(currState); } System.out.println("ALPHA BETA DEMO done"); } }