private String makeRandomMove(Map m) { int mx = m.myX(); int my = m.myY(); ArrayList<String> al = new ArrayList<String>(); if (!m.isWall(mx, my - 1)) { al.add("North"); } if (!m.isWall(mx, my + 1)) { al.add("South"); } if (!m.isWall(mx - 1, my)) { al.add("West"); } if (!m.isWall(mx + 1, my)) { al.add("East"); } if (al.size() > 0) { Collections.shuffle(al); return al.get(0); } return "South"; }
/** ミニマックス法に基づいて移動します */ public String makeMove(Map map) { System.out.println("======Making a Move======="); // 自分の位置を取得 int mx = map.myX(); int my = map.myY(); int ox = map.opponentX(); int oy = map.opponentY(); boolean[][] mapCopy = new boolean[map.getWidth()][map.getHeight()]; copy(map.getWalls(), mapCopy); int c = alphaBeta( mapCopy, map.getWidth(), map.getHeight(), mx, my, ox, oy, false, DEPTH, DEPTH, Integer.MIN_VALUE, Integer.MAX_VALUE); // copy(map.getWalls(), mapCopy); // int c2 = minMax(mapCopy, map.getWidth(), map.getHeight(), mx, my, ox, // oy, false, DEPTH, DEPTH); // System.out.println((char) c); // System.out.println((char) c2); // // if (c != c2) { // System.out.println("Check!"); // } if (c == 0) { return makeRandomMove(map); } // 戻り値がint型なのでcharにキャスト String move = ("" + (char) c).toUpperCase(); System.out.println("Move:" + move); return move; }