/** * The heuristic evaluation function that determines the chances of winning... * * @param brd board to be evaluated * @return score that indicates our chances of winning */ protected static int evalBoard(BreakthroughState brd) { int score = 0; for (int r = 0; r < BreakthroughState.N; r++) { for (int c = 0; c < BreakthroughState.N; c++) { if (brd.board[r][c] == BreakthroughState.homeSym) { score += (r + 1); } else if (brd.board[r][c] == BreakthroughState.awaySym) { score -= (BreakthroughState.N - r); } } } if (Math.abs(score) > MAX_EVAL_SCORE) { System.err.println("Problem with eval"); System.exit(0); } return score; }
public static void main(String args[]) { System.out.println("----- Client Start -----"); Console in = System.console(); // get a name String username = in.readLine("Enter your name: "); // get server hostname String hostname = in.readLine("Server hostname: "); // c or j String mode = in.readLine("[C]reate or [J]oin?: "); // get room name String roomname = in.readLine("Name of game-room: "); // set up the demopanel and its enclosing frame DemoPanel ui = new DemoPanel(); JFrame frame = new JFrame("ateam-tanks"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 500); frame.setLayout(new BorderLayout()); frame.add(ui, BorderLayout.CENTER); frame.addKeyListener(ui); frame.setVisible(true); // init and start game client GameClient c1 = new GameClient(username, 8887); // create RealWindow RealWindow win = new RealWindow(c1, ui); // start server communications try { sleep(1000); System.out.println("Connecting to server.."); c1.push(new event.client.JoinServerEvent(hostname)); sleep(1000); if (mode.equals("C") || mode.equals("c")) { c1.push(new event.client.FwdUserEvent(new event.user.CreateRoomEvent(roomname, mkList()))); in.readLine("Press Enter to start the game"); c1.push(new event.client.FwdUserEvent(new event.user.StartGameEvent())); } else if (mode.equals("J") || mode.equals("j")) { c1.push(new event.client.FwdUserEvent(new event.user.JoinRoomEvent(roomname))); } } catch (InterruptedException e) { } }
public GameMove getMove(GameState state, String lastMove) { DomineeringState board = (DomineeringState) state; homeSym = board.homeSym; awaySym = board.awaySym; emptySym = board.emptySym; isHome = state.who == GameState.Who.HOME; // HOME: true, AWAY: false if (isHome) { MAX_DEPTH = 6; if (board.numMoves >= 6) MAX_DEPTH = 8; if (board.numMoves >= 12) MAX_DEPTH = 10; if (board.numMoves >= 14) MAX_DEPTH = 12; } else { MAX_DEPTH = 7; if (board.numMoves >= 6) MAX_DEPTH = 9; if (board.numMoves >= 12) MAX_DEPTH = 11; if (board.numMoves >= 14) MAX_DEPTH = 13; } Move[] stack = new Move[MAX_DEPTH + 1]; init(stack); if (isHome == true) { if (board.numMoves == 0) { Move[] temp = new Move[4]; temp[0] = new Move(1, 2, 1, 3); temp[1] = new Move(1, 4, 1, 5); temp[2] = new Move(6, 2, 6, 3); temp[3] = new Move(6, 4, 6, 5); Random rnd = new Random(); return temp[rnd.nextInt(4)]; } else if (board.numMoves == 2) { Map map = new HashMap(); Scanner sc; try { sc = new Scanner(new File("home3.txt")); while (sc.hasNextLine()) { String s = sc.nextLine(); String[] sp = s.split("\\s+"); long key = Long.parseLong(sp[0]); Move value = new Move( Integer.parseInt(sp[1]), Integer.parseInt(sp[2]), Integer.parseInt(sp[3]), Integer.parseInt(sp[4])); map.put(key, value); } long hash = new Board(board.board, isHome, "alphabetatt").getHashKey(); Move rtn = (Move) map.get(hash); if (rtn != null) return rtn; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } else { if (board.numMoves == 1) { Map map = new HashMap(); Scanner sc; try { sc = new Scanner(new File("away2.txt")); while (sc.hasNextLine()) { String s = sc.nextLine(); String[] sp = s.split("\\s+"); long key = Long.parseLong(sp[0]); Move value = new Move( Integer.parseInt(sp[1]), Integer.parseInt(sp[2]), Integer.parseInt(sp[3]), Integer.parseInt(sp[4])); map.put(key, value); } long hash = new Board(board.board, isHome, "alphabetatt").getHashKey(); Move rtn = (Move) map.get(hash); if (rtn != null) return rtn; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } long start = System.currentTimeMillis(); alphabetaTT(board.board, 0, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, isHome, stack); long end = System.currentTimeMillis(); total += (end - start); System.out.printf( "%s %3d Time: %-4d Total:%d\n", stack[0], (int) stack[0].score, (end - start), total); tt.print(); System.out.println("Move: " + board.numMoves); return stack[0]; }