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;
  }