fixes
This commit is contained in:
@@ -490,6 +490,27 @@ public class Worm extends GameObject {
|
|||||||
|
|
||||||
if (cost > getActionPoints())
|
if (cost > getActionPoints())
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
|
|
||||||
|
World world = getWorld();
|
||||||
|
if (world != null && world.isAdjacent(newLocation, getRadius())) {
|
||||||
|
for (Worm w : world.getGameObjectsByClass(Worm.class)) {
|
||||||
|
if (w.equals(this)) continue;
|
||||||
|
|
||||||
|
Worm smallest = this;
|
||||||
|
Worm largest = w;
|
||||||
|
if (smallest.getRadius() > largest.getRadius()) {
|
||||||
|
smallest = w;
|
||||||
|
largest = this;
|
||||||
|
}
|
||||||
|
double smRadius = smallest.getRadius();
|
||||||
|
double lgRadius = largest.getRadius();
|
||||||
|
int nb = ThreadLocalRandom.current().nextInt(1, 10);
|
||||||
|
long smallHp = round(nb / (lgRadius / (smRadius + lgRadius)));
|
||||||
|
smallest.decreaseHitPoints(smallHp);
|
||||||
|
largest.decreaseHitPoints((long) nb - smallHp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setLocation(newLocation);
|
setLocation(newLocation);
|
||||||
subtractActionPoints(cost);
|
subtractActionPoints(cost);
|
||||||
}
|
}
|
||||||
@@ -528,9 +549,9 @@ public class Worm extends GameObject {
|
|||||||
nextLoc = Coordinate.create(nextLoc.getX() + step * cos(direction),
|
nextLoc = Coordinate.create(nextLoc.getX() + step * cos(direction),
|
||||||
nextLoc.getY() + step * sin(direction));
|
nextLoc.getY() + step * sin(direction));
|
||||||
if (!world.isPassable(nextLoc.toArray(), radius)) {
|
if (!world.isPassable(nextLoc.toArray(), radius)) {
|
||||||
double max = radius;
|
double max = step;
|
||||||
while (!world.isAdjacent(nextLoc.toArray(), radius)) {
|
while (!world.isAdjacent(nextLoc.toArray(), radius)) {
|
||||||
max -= 0.01;
|
max -= step / 100.0;
|
||||||
nextLoc = Coordinate.create(nextLoc.getX() - step / 100.0 * cos(direction),
|
nextLoc = Coordinate.create(nextLoc.getX() - step / 100.0 * cos(direction),
|
||||||
nextLoc.getY() - step / 100.0 * sin(direction));
|
nextLoc.getY() - step / 100.0 * sin(direction));
|
||||||
if (max < 0) {
|
if (max < 0) {
|
||||||
@@ -540,7 +561,6 @@ public class Worm extends GameObject {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nextLoc;
|
return nextLoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -571,6 +591,11 @@ public class Worm extends GameObject {
|
|||||||
maxLocDirection = minDirection;
|
maxLocDirection = minDirection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Coordinate tempLoc = getFurthestLocationInDirection(maxDirection, this.getRadius());
|
||||||
|
if (getWorld().isAdjacent(tempLoc, getRadius()) && getDistance(location, tempLoc) / Math.abs(direction - minDirection) > getDistance(location, maxLoc) / Math.abs(direction - maxLocDirection)) {
|
||||||
|
maxLoc = tempLoc;
|
||||||
|
maxLocDirection = maxDirection;
|
||||||
|
}
|
||||||
|
|
||||||
if (maxLoc.getX() == location.getX() && maxLoc.getY() == location.getY()) return direction;
|
if (maxLoc.getX() == location.getX() && maxLoc.getY() == location.getY()) return direction;
|
||||||
return maxLocDirection;
|
return maxLocDirection;
|
||||||
@@ -924,31 +949,10 @@ public class Worm extends GameObject {
|
|||||||
attacker = w;
|
attacker = w;
|
||||||
}
|
}
|
||||||
long N = (long) ceil(10.0 * (attacker.getRadius() / attackedWorm.getRadius()));
|
long N = (long) ceil(10.0 * (attacker.getRadius() / attackedWorm.getRadius()));
|
||||||
long loseAttackedWorm = ThreadLocalRandom.current().nextLong(1, 10 * N);
|
long loseAttackedWorm = ThreadLocalRandom.current().nextLong(1, N);
|
||||||
System.out.println(loseAttackedWorm);
|
|
||||||
System.out.println(attackedWorm.getName());
|
|
||||||
attackedWorm.decreaseHitPoints(loseAttackedWorm);
|
attackedWorm.decreaseHitPoints(loseAttackedWorm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (!worm1.isTerminated() && newLocation != oldLocation) {
|
|
||||||
// for (Worm wormB : worm2) {
|
|
||||||
// Worm attackedWorm;
|
|
||||||
// Worm attacker;
|
|
||||||
// Random rand = new Random();
|
|
||||||
// int coin = rand.nextInt(2);
|
|
||||||
// if (coin == 1) {
|
|
||||||
// attackedWorm = worm1;
|
|
||||||
// attacker = wormB;
|
|
||||||
// } else {
|
|
||||||
// attackedWorm = wormB;
|
|
||||||
// attacker = worm1;
|
|
||||||
// }
|
|
||||||
// double N = 10 * ceil((attacker.getRadius()) / (attackedWorm.getRadius()));
|
|
||||||
// long loseAttackedWorm = (long) rand.nextInt((((int) N) - 1) + 1) + 1;
|
|
||||||
// attackedWorm.decreaseHitPoints(loseAttackedWorm);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1011,7 +1015,7 @@ public class Worm extends GameObject {
|
|||||||
*/
|
*/
|
||||||
public void incrementHitPoints(long value) {
|
public void incrementHitPoints(long value) {
|
||||||
|
|
||||||
double current = getHitPoints();
|
long current = getHitPoints();
|
||||||
if (current + value < 0) setHitPoints(0);
|
if (current + value < 0) setHitPoints(0);
|
||||||
else setHitPoints(getHitPoints() + value);
|
else setHitPoints(getHitPoints() + value);
|
||||||
}
|
}
|
||||||
@@ -1060,7 +1064,17 @@ public class Worm extends GameObject {
|
|||||||
long cost = 3 * (long) Math.floor(oldLocation.getY() - getLocation().getY());
|
long cost = 3 * (long) Math.floor(oldLocation.getY() - getLocation().getY());
|
||||||
decreaseHitPoints(cost);
|
decreaseHitPoints(cost);
|
||||||
|
|
||||||
checkEat();
|
if (getWorld() != null) {
|
||||||
|
for (Worm w : getWorld().getGameObjectsByClass(Worm.class)) {
|
||||||
|
if (w.equals(this)) continue;
|
||||||
|
|
||||||
|
if (w.getDistance(this) < 0) {
|
||||||
|
long hp = w.getHitPoints() / 2;
|
||||||
|
this.incrementHitPoints(hp);
|
||||||
|
w.decreaseHitPoints((long) ceil(w.getHitPoints() / 2.0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user