Example #1
0
 private int getNextYForEnemy(Enemy en, DataPoint dp) {
   double dist = computeDistance(en.getCoordX(), en.getCoordY(), dp.getCoordX(), dp.getCoordY());
   if (dist <= ENEMY_DIST_BY_TURN) {
     return dp.getCoordY();
   } else {
     return (int)
         (en.getCoordY() + ((dp.getCoordY() - en.getCoordY()) * ENEMY_DIST_BY_TURN / dist));
   }
 }
Example #2
0
 private void findClosestEnemyFromMeAndDP() {
   // Liste des enemies avec leur DP le plus proche
   Map<Enemy, DataPoint> enemyDataPoint = new HashMap<Enemy, DataPoint>();
   for (Enemy en : enemyList) {
     enemyDataPoint.put(en, findClosestDPForEnemy(en));
   }
   // On a vise un enemy avant, doit-on continuer sur celui-la
   if (targettedEnemy != null && enemyList.contains(targettedEnemy)) {
     System.err.println("keep the same enemy");
     hasToShoot = true;
   } else {
     Collections.sort(enemyList, new EnemyCloserThanDPComparator());
     Enemy en = enemyList.get(0);
     DataPoint dp = enemyDataPoint.get(en);
     int turnNumberBeforeEnemyReachData = getLeftTurnNumberBeforeEnemyReachData(en, dp);
     int turnNumberBeforeEnemyDie = getTurnToKillEnemyInThisPosition(en, dp);
     boolean test =
         testCoordsWithEnemyPrevision(
             getXCoordsCloser(en.getCoordX(), en.getCoordY()),
             getYCoordsCloser(en.getCoordX(), en.getCoordY()));
     System.err.println("Can i get closer " + test);
     System.err.println("Turn to reach data " + turnNumberBeforeEnemyReachData);
     System.err.println("Turn to kill in this pos " + turnNumberBeforeEnemyDie);
     // Si on  peut  le tuer avant qu'il atteigne sa cible et qu'on ne peut pas se rapprocher
     if (turnNumberBeforeEnemyDie == turnNumberBeforeEnemyReachData
         || (enoughDamageToKillInOneShootNextTurn(en, dp) || test == false)) {
       hasToShoot = true;
       targettedEnemy = en.getEnemyId();
     } else {
       if (test == true) {
         coordXToMove = getXCoordsCloser(en.getCoordX(), en.getCoordY());
         coordYToMove = getYCoordsCloser(en.getCoordX(), en.getCoordY());
         hasToShoot = false;
         additionnalText = "I 'm getting closer !";
         System.err.println("Move to get closer from him");
       } else {
         avoidEnemy(en);
         hasToShoot = false;
       }
     }
   }
 }
Example #3
0
 private int getTurnToKillEnemyInThisPosition(Enemy en, DataPoint dp) {
   int i = 0;
   int enemyLife = en.getEnemyLife();
   int currentX = en.getCoordX();
   int currentY = en.getCoordY();
   while (enemyLife > 0) {
     currentX = getNextXForEnemy(currentX, currentY, dp);
     currentY = getNextYForEnemy(currentX, currentY, dp);
     int dist = computeDistance(getCoordX(), getCoordX(), currentX, currentY);
     enemyLife -= computeImpactEfficiency(dist);
     i++;
   }
   return i;
 }
Example #4
0
 private boolean willBeAbleToKillInOneShoot(int turnLeft, Enemy en, DataPoint dp) {
   int playerX = getCoordX();
   int playerY = getCoordY();
   int currentX = en.getCoordX();
   int currentY = en.getCoordY();
   while (turnLeft > 0) {
     currentX = getNextXForEnemy(currentX, currentY, dp);
     currentY = getNextYForEnemy(currentX, currentY, dp);
     playerX = getXCoordsCloser(currentX, currentY);
     playerY = getYCoordsCloser(currentX, currentY);
     turnLeft--;
   }
   int dist = computeDistance(playerX, playerY, currentX, currentY);
   if (enoughDamageToKillInOneShootInGivenDistance(dist, en.getEnemyLife())) {
     return true;
   } else {
     return false;
   }
 }
Example #5
0
 private void initPlayerFromInput(Scanner in) {
   reinit();
   this.coordX = in.nextInt();
   this.coordY = in.nextInt();
   int dataCount = in.nextInt();
   for (int i = 0; i < dataCount; i++) {
     dataPointList.add(new DataPoint(in.nextInt(), in.nextInt(), in.nextInt()));
   }
   int enemyCount = in.nextInt();
   for (int i = 0; i < enemyCount; i++) {
     Enemy enemy = new Enemy(in.nextInt(), in.nextInt(), in.nextInt(), in.nextInt());
     enemy.setDistanceFromPlayer(
         computeDistance(coordX, coordY, enemy.getCoordX(), enemy.getCoordY()));
     DataPoint dp = findClosestDPForEnemy(enemy);
     enemy.setClosestDataPoint(dp);
     enemyList.add(enemy);
   }
   Collections.sort(enemyList, new EnemyComparator());
 }