mirror of
https://github.com/fazo96/AIrium.git
synced 2025-01-10 09:34:20 +01:00
Fix some bugs
This commit is contained in:
parent
7ee5c502c4
commit
61454f7979
@ -42,7 +42,7 @@ public class Game extends ApplicationAdapter {
|
||||
public void render() {
|
||||
// Controls
|
||||
if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) {
|
||||
world.newGen(false);
|
||||
world.launchNewGen();
|
||||
}
|
||||
if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
|
||||
renderer.translate(-cameraSpeed, 0, 0);
|
||||
|
@ -12,15 +12,16 @@ import logic.neural.Brain;
|
||||
*
|
||||
* @author fazo
|
||||
*/
|
||||
public class Creature extends Element {
|
||||
public class Creature extends Element implements Runnable {
|
||||
|
||||
public static final int default_radius = 20, maxHp = 100;
|
||||
public static final float max_speed = 3, max_beak = default_radius / 4;
|
||||
|
||||
private Brain brain;
|
||||
private float dir, hp, prevHp, speed, sightRange, fov, fitness, rotSpeed, beak;
|
||||
private boolean eating = false, killing = false;
|
||||
private boolean eating = false, killing = false, workerDone = false;
|
||||
private Sight[] sights;
|
||||
private Thread workerThread;
|
||||
|
||||
public Creature(float x, float y) {
|
||||
super(x, y, default_radius);
|
||||
@ -32,10 +33,25 @@ public class Creature extends Element {
|
||||
sightRange = 100;
|
||||
fov = (float) Math.PI / 2.5f;
|
||||
fitness = 0;
|
||||
brain = new Brain(10, 5, 2, 10);
|
||||
brain = new Brain(9, 5, 2, 10);
|
||||
sights = new Sight[2];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (;;) {
|
||||
if (workerDone) {
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException ex) {
|
||||
}
|
||||
} else {
|
||||
update();
|
||||
workerDone = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
// apply hunger
|
||||
@ -94,7 +110,7 @@ public class Creature extends Element {
|
||||
// 8: sight(c): hunger
|
||||
// 7: sight(c): beak
|
||||
// OTHER:
|
||||
// 9: food sensor
|
||||
// 8: food sensor
|
||||
int viewSensors = 4;
|
||||
for (int i = 0; i < sights.length; i++) {
|
||||
int mul = i * viewSensors;
|
||||
@ -118,7 +134,8 @@ public class Creature extends Element {
|
||||
}
|
||||
}
|
||||
}
|
||||
values[9] = eating ? 1 : 0;
|
||||
values[8] = eating || killing ? 1 : 0;
|
||||
System.out.println(values[8]);
|
||||
// compute behavior
|
||||
float[] actions = null;
|
||||
try {
|
||||
@ -194,7 +211,6 @@ public class Creature extends Element {
|
||||
// Try to see plant
|
||||
Element seen = null;
|
||||
float dist = 0, angle = 0, ndir = dir - (float) Math.PI;
|
||||
killing = false;
|
||||
eating = false;
|
||||
for (Element e : Game.get().getWorld().getPlants()) {
|
||||
float tempDist = distanceFrom(e);
|
||||
@ -237,7 +253,6 @@ public class Creature extends Element {
|
||||
angle = 0;
|
||||
ndir = dir - (float) Math.PI;
|
||||
killing = false;
|
||||
eating = false;
|
||||
for (Element e : Game.get().getWorld().getCreatures()) {
|
||||
if (e == this) {
|
||||
continue;
|
||||
@ -295,6 +310,26 @@ public class Creature extends Element {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the Worker thread has finished its current iteration
|
||||
*
|
||||
* @return true if worker thread has finished its current iteration
|
||||
*/
|
||||
public boolean isWorkerDone() {
|
||||
return workerDone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Command the Worker thread to start another iteration.
|
||||
*/
|
||||
public void startWorker() {
|
||||
workerDone = false;
|
||||
if (workerThread == null) {
|
||||
workerThread = new Thread(this);
|
||||
workerThread.start();
|
||||
}
|
||||
}
|
||||
|
||||
public Brain getBrain() {
|
||||
return brain;
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ public class World implements Runnable {
|
||||
|
||||
private final int width, height, nPlants, creatPerGen;
|
||||
private int generation = 1;
|
||||
private boolean multithreading = false, cmdLaunchNewGen = false;
|
||||
private int fpsLimit = 60, fps = 0;
|
||||
private Creature selected;
|
||||
private final ArrayList<Element> elements;
|
||||
@ -108,6 +109,10 @@ public class World implements Runnable {
|
||||
if (creatures.removeAll(graveyard)) {
|
||||
fire(Listener.CREATURE_LIST_CHANGED);
|
||||
}
|
||||
if (cmdLaunchNewGen) {
|
||||
newGen(false);
|
||||
cmdLaunchNewGen = false;
|
||||
}
|
||||
if (creatures.isEmpty()) {
|
||||
// All dead, next gen
|
||||
newGen(false);
|
||||
@ -120,7 +125,7 @@ public class World implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
public void newGen(boolean restart) {
|
||||
private void newGen(boolean restart) {
|
||||
elements.removeAll(creatures);
|
||||
graveyard.addAll(creatures);
|
||||
creatures.clear();
|
||||
@ -233,7 +238,7 @@ public class World implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
public void fire(int eventCode) {
|
||||
private void fire(int eventCode) {
|
||||
for (Listener f : listeners) {
|
||||
f.on(eventCode);
|
||||
}
|
||||
@ -311,4 +316,15 @@ public class World implements Runnable {
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
public boolean isMultithreading() {
|
||||
return multithreading;
|
||||
}
|
||||
|
||||
public void setMultithreading(boolean multithreading) {
|
||||
this.multithreading = multithreading;
|
||||
}
|
||||
|
||||
public void launchNewGen() {
|
||||
cmdLaunchNewGen = true;
|
||||
}
|
||||
}
|
||||
|
@ -11,10 +11,7 @@ import com.mygdx.game.Game;
|
||||
import com.mygdx.game.Listener;
|
||||
import com.mygdx.game.Log;
|
||||
import com.mygdx.game.Log.LogListener;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.JOptionPane;
|
||||
import logic.World;
|
||||
|
||||
/**
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user