|
|
|
@ -22,7 +22,17 @@ import java.util.List;
|
|
|
|
|
import com.github.drinkjava2.frog.Application;
|
|
|
|
|
import com.github.drinkjava2.frog.Env;
|
|
|
|
|
import com.github.drinkjava2.frog.Frog;
|
|
|
|
|
import com.github.drinkjava2.frog.util.FrogFileUtils;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.Active;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.Mouth;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.MoveDown;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.MoveLeft;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.MoveRight;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.MoveUp;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.Eyes.SeeDown;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.Eyes.SeeLeft;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.Eyes.SeeRight;
|
|
|
|
|
import com.github.drinkjava2.frog.brain.organ.Eyes.SeeUp;
|
|
|
|
|
import com.github.drinkjava2.frog.util.LocalFileUtils;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* EggTool save eggs to disk
|
|
|
|
@ -30,7 +40,7 @@ import com.github.drinkjava2.frog.util.FrogFileUtils;
|
|
|
|
|
* @author Yong Zhu
|
|
|
|
|
* @since 1.0
|
|
|
|
|
*/
|
|
|
|
|
public class EggTool {
|
|
|
|
|
public class FrogEggTool {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Frogs which have higher energy lay eggs
|
|
|
|
@ -39,25 +49,22 @@ public class EggTool {
|
|
|
|
|
* 用能量的多少来简化生存竟争模拟,每次下蛋数量固定为EGG_QTY个
|
|
|
|
|
*/
|
|
|
|
|
public static void layEggs() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sortFrogsOrderByEnergyDesc();
|
|
|
|
|
// for (Frog frog : Env.frogs) {
|
|
|
|
|
// Lines LINES=(Lines) frog.organs.get(10);
|
|
|
|
|
// System.out.println(frog.energy+":"+LINES.lines[0]);
|
|
|
|
|
// }
|
|
|
|
|
Frog first = Env.frogs.get(0);
|
|
|
|
|
Frog last = Env.frogs.get(Env.frogs.size() - 1);
|
|
|
|
|
try {
|
|
|
|
|
Env.eggs.clear();
|
|
|
|
|
for (int i = 0; i < Env.EGG_QTY; i++)
|
|
|
|
|
Env.eggs.add(new Egg(Env.frogs.get(i)));
|
|
|
|
|
FileOutputStream fo = new FileOutputStream(Application.CLASSPATH + "eggs.ser");
|
|
|
|
|
Env.frog_eggs.clear();
|
|
|
|
|
for (int i = 0; i < Env.FROG_EGG_QTY; i++)
|
|
|
|
|
Env.frog_eggs.add(new Egg(Env.frogs.get(i)));
|
|
|
|
|
FileOutputStream fo = new FileOutputStream(Application.CLASSPATH + "frog_eggs.ser");
|
|
|
|
|
ObjectOutputStream so = new ObjectOutputStream(fo);
|
|
|
|
|
so.writeObject(Env.eggs);
|
|
|
|
|
so.writeObject(Env.frog_eggs);
|
|
|
|
|
so.close();
|
|
|
|
|
System.out.print("Fist frog has " + first.organs.size() + " organs, energy=" + first.energy);
|
|
|
|
|
System.out.println(", Last frog has " + last.organs.size() + " organs, energy=" + last.energy);
|
|
|
|
|
System.out.println("Saved " + Env.eggs.size() + " eggs to file '" + Application.CLASSPATH + "eggs.ser'");
|
|
|
|
|
System.out.println(
|
|
|
|
|
"Saved " + Env.frog_eggs.size() + " eggs to file '" + Application.CLASSPATH + "frog_eggs.ser'");
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
System.out.println(e);
|
|
|
|
|
}
|
|
|
|
@ -77,32 +84,45 @@ public class EggTool {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void deleteEggs() {
|
|
|
|
|
System.out.println("Delete exist egg file: '" + Application.CLASSPATH + "eggs.ser'");
|
|
|
|
|
FrogFileUtils.deleteFile(Application.CLASSPATH + "eggs.ser");
|
|
|
|
|
System.out.println("Delete exist egg file: '" + Application.CLASSPATH + "frog_eggs.ser'");
|
|
|
|
|
LocalFileUtils.deleteFile(Application.CLASSPATH + "frog_eggs.ser");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 从磁盘读入一批Egg
|
|
|
|
|
* 从磁盘读入一批frog Egg
|
|
|
|
|
*/
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
public static void loadEggs() {
|
|
|
|
|
public static void loadFrogEggs() {
|
|
|
|
|
boolean errorfound = false;
|
|
|
|
|
try {
|
|
|
|
|
FileInputStream eggsFile = new FileInputStream(Application.CLASSPATH + "eggs.ser");
|
|
|
|
|
FileInputStream eggsFile = new FileInputStream(Application.CLASSPATH + "frog_eggs.ser");
|
|
|
|
|
ObjectInputStream eggsInputStream = new ObjectInputStream(eggsFile);
|
|
|
|
|
Env.eggs = (List<Egg>) eggsInputStream.readObject();
|
|
|
|
|
System.out.println(
|
|
|
|
|
"Loaded " + Env.eggs.size() + " eggs from file '" + Application.CLASSPATH + "eggs.ser" + "'.\n");
|
|
|
|
|
Env.frog_eggs = (List<Egg>) eggsInputStream.readObject();
|
|
|
|
|
System.out.println("Loaded " + Env.frog_eggs.size() + " eggs from file '" + Application.CLASSPATH
|
|
|
|
|
+ "frog_eggs.ser" + "'.\n");
|
|
|
|
|
eggsInputStream.close();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
errorfound = true;
|
|
|
|
|
}
|
|
|
|
|
if (errorfound) {
|
|
|
|
|
Env.eggs.clear();
|
|
|
|
|
for (int j = 0; j < Env.EGG_QTY; j++)
|
|
|
|
|
Env.eggs.add(new Egg());
|
|
|
|
|
System.out.println("Fail to load egg file at path '" + Application.CLASSPATH + "', created "
|
|
|
|
|
+ Env.eggs.size() + " eggs to do test.\n");
|
|
|
|
|
Env.frog_eggs.clear();
|
|
|
|
|
for (int j = 0; j < Env.FROG_EGG_QTY; j++) {
|
|
|
|
|
Egg egg = new Egg();
|
|
|
|
|
float r = 40;
|
|
|
|
|
egg.organs.add(new Mouth().setXYZRN(0, 0, 0, 0, "Eat")); // Mouth不是感觉或输出器官,没有位置和大小
|
|
|
|
|
egg.organs.add(new Active().setXYZRN(500, 600, 500, r, "Active")); // 永远激活
|
|
|
|
|
egg.organs.add(new MoveUp().setXYZRN(800, 100, 500, r, "Up"));
|
|
|
|
|
egg.organs.add(new MoveDown().setXYZRN(800, 400, 500, r, "Down"));
|
|
|
|
|
egg.organs.add(new MoveLeft().setXYZRN(700, 250, 500, r, "Left"));
|
|
|
|
|
egg.organs.add(new MoveRight().setXYZRN(900, 250, 500, r, "Right"));
|
|
|
|
|
egg.organs.add(new SeeUp().setXYZRN(200, 300 + 90, 500, r, "SeeUp"));
|
|
|
|
|
egg.organs.add(new SeeDown().setXYZRN(200, 300 - 90, 500, r, "SeeDown"));
|
|
|
|
|
egg.organs.add(new SeeLeft().setXYZRN(200 - 90, 300, 500, r, "SeeLeft"));
|
|
|
|
|
egg.organs.add(new SeeRight().setXYZRN(200 + 90, 300, 500, r, "SeeRight"));
|
|
|
|
|
Env.frog_eggs.add(egg);
|
|
|
|
|
}
|
|
|
|
|
System.out.println("Fail to load frog egg file '" + Application.CLASSPATH + "frog_eggs.ser" + "', created "
|
|
|
|
|
+ Env.frog_eggs.size() + " eggs to do test.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|