fix eat
This commit is contained in:
@@ -272,7 +272,7 @@ public class Facade implements IFacade {
|
||||
*/
|
||||
@Override
|
||||
public void eat(Worm worm) {
|
||||
worm.eat();
|
||||
worm.checkEat();
|
||||
}
|
||||
|
||||
// /**
|
||||
|
@@ -273,6 +273,16 @@ public class World {
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<Food> getFoodList() {
|
||||
List<Food> list = new ArrayList<>();
|
||||
for (GameObject x : getGameObjects()) {
|
||||
if (x.getClass().equals(Food.class)) {
|
||||
list.add((Food) x);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<GameObject> getGameObjectList(Class cl) {
|
||||
List<GameObject> list = new ArrayList<>();
|
||||
for (GameObject x : getGameObjects()) {
|
||||
|
@@ -6,6 +6,7 @@ import worms.util.IllegalNameException;
|
||||
|
||||
import static java.lang.Math.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@@ -495,6 +496,8 @@ public class Worm extends GameObject {
|
||||
|
||||
setLocation(newLocation);
|
||||
subtractActionPoints(cost);
|
||||
|
||||
checkEat();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -669,6 +672,8 @@ public class Worm extends GameObject {
|
||||
}
|
||||
setLocation(newLocation);
|
||||
setActionPoints(0);
|
||||
|
||||
checkEat();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -932,6 +937,8 @@ public class Worm extends GameObject {
|
||||
|
||||
long cost = 3 * (long) Math.floor(oldLocation.getY() - getLocation().getY());
|
||||
decreaseHitPoints(cost);
|
||||
|
||||
checkEat();
|
||||
}
|
||||
|
||||
public boolean canFall() {
|
||||
@@ -967,9 +974,70 @@ public class Worm extends GameObject {
|
||||
// endregion
|
||||
|
||||
|
||||
public void eat() {
|
||||
throw new IllegalStateException();
|
||||
public void eat(Food food) {
|
||||
|
||||
food.terminate();
|
||||
|
||||
double radius = getRadius();
|
||||
double changeRadius = radius * 0.1;
|
||||
radius *= 1.1;
|
||||
setRadius(radius);
|
||||
|
||||
World world = getWorld();
|
||||
Coordinate location = getLocation();
|
||||
if (!world.isPassable(location, radius)) {
|
||||
Coordinate newLoc = Coordinate.create(location.getX() + changeRadius, location.getY());
|
||||
if (world.isPassable(newLoc, radius)) {
|
||||
setLocation(newLoc);
|
||||
return;
|
||||
}
|
||||
newLoc = Coordinate.create(location.getX() - changeRadius, location.getY());
|
||||
if (world.isPassable(newLoc, radius)) {
|
||||
setLocation(newLoc);
|
||||
return;
|
||||
}
|
||||
newLoc = Coordinate.create(location.getX(), location.getY() - changeRadius);
|
||||
if (world.isPassable(newLoc, radius)) {
|
||||
setLocation(newLoc);
|
||||
return;
|
||||
}
|
||||
newLoc = Coordinate.create(location.getX(), location.getY() + changeRadius);
|
||||
if (world.isPassable(newLoc, radius)) {
|
||||
setLocation(newLoc);
|
||||
return;
|
||||
}
|
||||
newLoc = Coordinate.create(location.getX() - changeRadius, location.getY() - changeRadius);
|
||||
if (world.isPassable(newLoc, radius)) {
|
||||
setLocation(newLoc);
|
||||
return;
|
||||
}
|
||||
newLoc = Coordinate.create(location.getX() + changeRadius, location.getY() + changeRadius);
|
||||
if (world.isPassable(newLoc, radius)) {
|
||||
setLocation(newLoc);
|
||||
return;
|
||||
}
|
||||
newLoc = Coordinate.create(location.getX() + changeRadius, location.getY() - changeRadius);
|
||||
if (world.isPassable(newLoc, radius)) {
|
||||
setLocation(newLoc);
|
||||
return;
|
||||
}
|
||||
newLoc = Coordinate.create(location.getX() - changeRadius, location.getY() + changeRadius);
|
||||
if (!world.isPassable(newLoc, radius)) {
|
||||
terminate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
setLocation(location);
|
||||
}
|
||||
|
||||
public void checkEat() {
|
||||
|
||||
World world = getWorld();
|
||||
List<Food> foodList = world.getFoodList();
|
||||
for (Food food: foodList) {
|
||||
if (getDistance(food.getLocation(), this.getLocation()) < this.getRadius() + food.getRadius()) {
|
||||
eat(food);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user