Iam always adding new wolf code...
This commit is contained in:
parent
69bdb53030
commit
e5dcb12a26
|
|
@ -0,0 +1,96 @@
|
||||||
|
package backend;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class Wolf extends Agent {
|
||||||
|
int hungerLevel;
|
||||||
|
int turnsSinceLastIncrease;
|
||||||
|
Random rand = new Random();
|
||||||
|
|
||||||
|
public Wolf(int x, int y) {
|
||||||
|
super(x, y, Color.GRAY); // Wolves are gray
|
||||||
|
this.hungerLevel = 10; // Initial hunger level
|
||||||
|
this.turnsSinceLastIncrease = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void interact(Agent other) {
|
||||||
|
if (other instanceof Sheep) {
|
||||||
|
eat((Sheep) other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void eat(Sheep sheep) {
|
||||||
|
// Increase hunger level when eating a sheep
|
||||||
|
this.hungerLevel = Math.max(0, hungerLevel - 5);
|
||||||
|
// Logic to remove the sheep from the simulation might be implemented here
|
||||||
|
sheep.setAlive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void move(int newX, int newY) {
|
||||||
|
super.move(newX, newY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean liveTurn(ArrayList<Agent> neighbors, Simulator world) {
|
||||||
|
boolean hasEaten = false;
|
||||||
|
for (Agent neighbor : neighbors) {
|
||||||
|
if (neighbor instanceof Sheep) {
|
||||||
|
eat((Sheep) neighbor);
|
||||||
|
neighbors.remove(neighbor);
|
||||||
|
hasEaten = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasEaten) {
|
||||||
|
turnsSinceLastIncrease++;
|
||||||
|
// Her üç turda bir açlık seviyesi 1 artar
|
||||||
|
if (turnsSinceLastIncrease >= 4) {
|
||||||
|
hungerLevel++;
|
||||||
|
turnsSinceLastIncrease = 0; // Sayacı sıfırla
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
turnsSinceLastIncrease = 0; // Kurt yemek yediğinde sayacı sıfırla
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rastgele hareket etme
|
||||||
|
moveRandom(world);
|
||||||
|
|
||||||
|
// Açlık seviyesi 15'i geçerse ölür
|
||||||
|
return hungerLevel <= 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void moveRandom(Simulator world) {
|
||||||
|
int direction = rand.nextInt(4);
|
||||||
|
int newX = x;
|
||||||
|
int newY = y;
|
||||||
|
|
||||||
|
switch (direction) {
|
||||||
|
case 0: newX += 1; break;
|
||||||
|
case 1: newY += 1; break;
|
||||||
|
case 2: newX -= 1; break;
|
||||||
|
case 3: newY -= 1; break;
|
||||||
|
}
|
||||||
|
// Check for looping border
|
||||||
|
if (world.isLoopingBorder()) {
|
||||||
|
newX = (newX + world.getWidth()) % world.getWidth();
|
||||||
|
newY = (newY + world.getHeight()) % world.getHeight();
|
||||||
|
} else {
|
||||||
|
// Closed borders control
|
||||||
|
if (newX < 0 || newX >= world.getWidth() || newY < 0 || newY >= world.getHeight()) {
|
||||||
|
return; // Cancel movement if trying to move out of bounds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hücrenin geçilebilir olup olmadığını kontrol et
|
||||||
|
if (world.getCell(newX, newY) == 0) { // Sadece boş hücreler üzerinden hareket et
|
||||||
|
x = newX;
|
||||||
|
y = newY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue