PlayerAction AI_beta() { MapInfo mi = env.getMapInfo(); Point p = env.getPlayerInfo().getLocation(); CharaInfo pi = env.getPlayerInfo(); // if (mi.getNeedingSpellCount(env.getPlayerInfo(), p) == 0) { SpellPos minSpellPos = null; if (pumpkinX) { List<PumpkinInfo> plist = env.getEnemyInfo().getPumpkinInfos(); for (PumpkinInfo pinfo : plist) { Point pp = pinfo.getCenterLocation(); int point; if (pinfo.getType() == PumpkinType.KingPumpkin) point = 50; else point = 20; SpellPos nsp = new SpellPos(pp, -point); minSpellPos = min(minSpellPos, nsp); } // List<Point> plist2 = PumpkinType.MiniPumpkin.getMineLocations(); // debug(plist2.toArray()); // for (Point pp : plist2) { // SpellPos nsp = new SpellPos(pp, -20); // // if (minSpellPos == null) // // minSpellPos = nsp; // // if (minSpellPos.compareTo(nsp) > 0) // // minSpellPos = nsp; // // if (minSpellPos.compareTo(nsp) == 0 && Math.random() < 0.5) // // minSpellPos = nsp; // minSpellPos = min(minSpellPos, nsp); // } } for (int i = 0; i < mi.getWidth(); i++) { for (int j = 0; j < mi.getHeight(); j++) { Point pp = new Point(i, j); if (mi.getNeedingSpellCount(pi, pp) > 0) { SpellPos nsp = new SpellPos(pp, ((i + j + 1) % 2) * 400); minSpellPos = min(minSpellPos, nsp); } if (pampkinMakable(pp)) { SpellPos nsp = new SpellPos(pp, -20); minSpellPos = min(minSpellPos, nsp); } } } if (minSpellPos == null) return PlayerAction.NONE; if (minSpellPos.ds.length == 0) return PlayerAction.SPELL; return minSpellPos.ds[0].toPlayerAction(); // } else { // return PlayerAction.SPELL; // } }
ArrayList<Point> getPPos() { MapInfo mi = env.getMapInfo(); ArrayList<Point> r = new ArrayList<Point>(); for (int i = 1; i < mi.getWidth() - 1; i++) { for (int j = 1; j < mi.getHeight() - 1; j++) { if (isWritable(new Point(i, j)) && isWritable(new Point(i, j - 1)) && isWritable(new Point(i, j + 1)) && isWritable(new Point(i - 1, j)) && isWritable(new Point(i + 1, j))) { r.add(new Point(i, j)); } } } return r; }
boolean isWritable(Point p) { MapInfo mi = env.getMapInfo(); return mi.isMovable(p) && !mi.isLocked(p); }
boolean myMahojin(Point p) { return env.getMapInfo().getNeedingSpellCount(env.getPlayerInfo(), p) == 0 && env.getPlayerInfo().equals(env.getMapInfo().getTileOwner(p)); }
// boolean noyMyMahojin boolean notMyMahojin(Point p) { return env.getMapInfo().getCompleteLevel(p) == 0 || !myMahojin(p); }