From 42c389f4e47c169652ae8f08ab64c95367b0bb4f Mon Sep 17 00:00:00 2001 From: yong Date: Fri, 22 Jul 2022 02:37:51 -0600 Subject: [PATCH] Add history\010_tree_grow --- README.md | 8 + .../com/gitee/drinkjava2/frog/Animal.java | 152 +++--- .../gitee/drinkjava2/frog/Application.java | 1 - .../java/com/gitee/drinkjava2/frog/Env.java | 81 ++-- .../drinkjava2/frog/brain/BrainPicture.java | 20 +- .../gitee/drinkjava2/frog/brain/Cells.java | 63 +-- .../frog/judge/MoveCellLocationJudge.java | 42 ++ .../drinkjava2/frog/judge/TreeShapeJudge.java | 53 ++ .../gitee/drinkjava2/frog/objects/Food.java | 56 ++- history/001_first_version/pom.xml | 9 +- .../github/drinkjava2/frog/util/EggTool.java | 30 +- history/010_tree_grow/LICENSE | 201 ++++++++ history/010_tree_grow/README.md | 7 + history/010_tree_grow/maven_clean.bat | 1 + history/010_tree_grow/maven_eclipse_clean.bat | 1 + .../010_tree_grow/maven_eclipse_eclipse.bat | 2 + history/010_tree_grow/pom.xml | 102 ++++ history/010_tree_grow/run.bat | 3 + history/010_tree_grow/run.sh | 2 + .../com/gitee/drinkjava2/frog/Animal.java | 300 ++++++++++++ .../gitee/drinkjava2/frog/Application.java | 168 +++++++ .../java/com/gitee/drinkjava2/frog/Env.java | 312 ++++++++++++ .../java/com/gitee/drinkjava2/frog/Frog.java | 29 ++ .../drinkjava2/frog/brain/BrainPicture.java | 456 ++++++++++++++++++ .../gitee/drinkjava2/frog/brain/Cells.java | 63 +++ .../gitee/drinkjava2/frog/brain/Cuboid.java | 55 +++ .../drinkjava2/frog/brain/MouseAction.java | 107 ++++ .../com/gitee/drinkjava2/frog/egg/Egg.java | 65 +++ .../drinkjava2/frog/egg/FrogEggTool.java | 112 +++++ .../frog/judge/MoveCellLocationJudge.java | 42 ++ .../frog/judge/RainBowFishJudge.java | 84 ++++ .../drinkjava2/frog/judge/TreeShapeJudge.java | 53 ++ .../drinkjava2/frog/objects/EnvObject.java | 26 + .../gitee/drinkjava2/frog/objects/Food.java | 81 ++++ .../drinkjava2/frog/objects/Material.java | 50 ++ .../drinkjava2/frog/util/ColorUtils.java | 62 +++ .../com/gitee/drinkjava2/frog/util/Cube.java | 32 ++ .../drinkjava2/frog/util/LocalFileUtils.java | 141 ++++++ .../gitee/drinkjava2/frog/util/Logger.java | 193 ++++++++ .../drinkjava2/frog/util/RandomUtils.java | 101 ++++ .../frog/util/StringPixelUtils.java | 105 ++++ .../gitee/drinkjava2/frog/util/Tree8Util.java | 89 ++++ result17_tree_grow.gif | Bin 0 -> 8155 bytes result3.gif | Bin 199271 -> 86242 bytes 初学者入门介绍.md | 3 +- 捐款记录.md | 12 +- 46 files changed, 3382 insertions(+), 193 deletions(-) create mode 100644 core/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java create mode 100644 core/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java create mode 100644 history/010_tree_grow/LICENSE create mode 100644 history/010_tree_grow/README.md create mode 100644 history/010_tree_grow/maven_clean.bat create mode 100644 history/010_tree_grow/maven_eclipse_clean.bat create mode 100644 history/010_tree_grow/maven_eclipse_eclipse.bat create mode 100644 history/010_tree_grow/pom.xml create mode 100644 history/010_tree_grow/run.bat create mode 100644 history/010_tree_grow/run.sh create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Animal.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Application.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Env.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Frog.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cuboid.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/MouseAction.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/Egg.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/FrogEggTool.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/RainBowFishJudge.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/EnvObject.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Material.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/ColorUtils.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Cube.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/LocalFileUtils.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Logger.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/StringPixelUtils.java create mode 100644 history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Tree8Util.java create mode 100644 result17_tree_grow.gif diff --git a/README.md b/README.md index 41bf68b..d83ad8d 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,14 @@ Frog: 这是人工生命的主体,目前起名叫青蛙(Frog),其实叫什 位于history\009c目录下,采用了阴阳(黑白)节点算法,阴节点基因会删除节点下所有节点,是自顶向下的减材加工,阳节点基因会保留节点下所有节点,是自底向上的增材加工。利用遗传算法的大样本筛选,把自顶向下和自底向上两个进化方向结合起来,这样基本能解决误删分支后缺色不能补回这个问题。而且对于奖罚不再象以前一样要设成差距很大的值,animal.java中awardAAAA()原来要设成8000, 现在设成20也不会产生缺色现象。这个版本是研究技术细节问题,看不懂的同学们可以跳过。 考虑到这个算法的特点,我给它起名“阴阳无极八卦阵算法“,阴阳是指它有阴阳两种节点,无极是指它的分裂阶数没有限制,八卦阵是指它采用了多个8叉树结构,每一维细胞参数都对应一个8叉树。 +2022-07-22 树的生长演示 +位于history\010目录,演示一个树的生长。因为以前小鱼是手工指定一个三维像素点阵模板,有点作弊的嫌疑,所以这次演示是基于规则而不是模板来生成一棵树,这棵树的形状仅由以下规则决定: +1.树根位于底部中心 +2.树的每个细胞水平方向四周不能有其它细胞 +3.树的每个细胞正下方不能有细胞,但必须在斜下方至少有一个细胞 +基于这三条规则,利用阴阳无极八卦阵分裂算法,树能够自动进化出来,但要耐心等一会儿。这个演示的意义是表示形状可以由规则来决定,不同的规则能进化出不同的形状,生物会通过改变自己的形状来适应环境规则。 +这个项目下一个任务就要基于形状由规则决定这个原理,制定模式识别奖惩规则,然后利用分裂算法,让细胞自动在空间上排布出不同细胞参数,从而进化出具有初步模式识别功能的神经网络,比方说,识别出0,1,2 ,3数字。大自然生物的模式识别不是通过人为设计算法,而就是这样无脑随机分裂细胞进化出来的。 +![result17](result17_tree_grow.gif) ## 运行方式 | Run 运行core或history各个子目录下的run.bat批处理文件即可启动运行,history下有多个子目录,按版本号顺序排列,存放着这个项目演化过程中的主要历史版本供演示。 diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java b/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java index 982d640..77446ff 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/Animal.java @@ -10,7 +10,7 @@ */ package com.gitee.drinkjava2.frog; -import static com.gitee.drinkjava2.frog.brain.Cells.*; +import static com.gitee.drinkjava2.frog.brain.Cells.GENE_NUMBERS; import java.awt.Graphics; import java.awt.Image; @@ -22,7 +22,8 @@ import java.util.List; import javax.imageio.ImageIO; import com.gitee.drinkjava2.frog.egg.Egg; -import com.gitee.drinkjava2.frog.judge.RainBowFishJudge; +import com.gitee.drinkjava2.frog.judge.TreeShapeJudge; +import com.gitee.drinkjava2.frog.objects.Food; import com.gitee.drinkjava2.frog.objects.Material; import com.gitee.drinkjava2.frog.util.RandomUtils; import com.gitee.drinkjava2.frog.util.Tree8Util; @@ -55,9 +56,9 @@ public abstract class Animal {// 这个程序大量用到public变量而不是ge public long[][][] cells = new long[Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE]; public float[][][] energys = new float[Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE]; - public List photons = new ArrayList<>(); //每个光子是由一个byte数组表示,依次是x,y,z坐标、dx,dy,dz坐标余数(即小数后256分之几),mz,my,mz运动方向矢量,能量值,速度 + public List photons = new ArrayList<>(); //每个光子是由一个float数组表示,依次是x,y,z坐标, mz,my,mz运动方向矢量,能量值,速度 - public List photons2 = new ArrayList<>();// photons2是个临时空间,用来中转存放一下每遍光子运算后的结果,用双鬼拍门来替代单个链表的增删,每个list只增不减以优化速度 + public List photons2 = new ArrayList<>();// photons2是个临时空间,用来中转存放一下每遍光子运算后的结果,用双鬼拍门来替代单个链表的增删,每个list只增不减以优化速度 public int x; // animal在Env中的x坐标 public int y; // animal在Env中的y坐标 @@ -99,7 +100,9 @@ public abstract class Animal {// 这个程序大量用到public变量而不是ge for (ArrayList gene : genes) //基因多也要适当小扣点分,防止基因无限增长 energy -= gene.size(); createCellsFromGene(); //根据基因分裂生成脑细胞 - RainBowFishJudge.judge(this); //外界对是否长得象彩虹鱼打分 + //RainBowFishJudge.judge(this); //外界对是否长得象彩虹鱼打分 + //MoveCellLocationJudge.judge(this); + TreeShapeJudge.judge(this); } private static final int MIN_ENERGY_LIMIT = Integer.MIN_VALUE + 5000; @@ -115,13 +118,13 @@ public abstract class Animal {// 这个程序大量用到public变量而不是ge } //如果改奖罚值,就可能出现缺色,这个要在基因变异算法(从上到下,从下到上)和环境本身奖罚合理性上下功夫 - public void awardAAAA() { changeEnergy(20);} - public void awardAAA() { changeEnergy(10);} + public void awardAAAA() { changeEnergy(2000);} + public void awardAAA() { changeEnergy(200);} public void awardAA() { changeEnergy(5);} public void awardA() { changeEnergy(2);} - public void penaltyAAAA() { changeEnergy(-20);} - public void penaltyAAA() { changeEnergy(-10);} + public void penaltyAAAA() { changeEnergy(-2000);} + public void penaltyAAA() { changeEnergy(-200);} public void penaltyAA() { changeEnergy(-5);} public void penaltyA() { changeEnergy(-2);} public void kill() { this.alive = false; changeEnergy(-500000); Env.clearMaterial(x, y, animalMaterial); } //kill是最大的惩罚 @@ -130,7 +133,7 @@ public abstract class Animal {// 这个程序大量用到public变量而不是ge public void show(Graphics g) {// 显示当前动物 if (!alive) return; - //g.drawImage(animalImage, x - 8, y - 8, 16, 16, null);// 减去坐标,保证嘴巴显示在当前x,y处 + g.drawImage(animalImage, x - 8, y - 8, 16, 16, null);// 减去坐标,保证嘴巴显示在当前x,y处 } /** Check if x,y,z out of animal's brain range */ @@ -214,9 +217,33 @@ public abstract class Animal {// 这个程序大量用到public变量而不是ge return false; } - //TODO:1.视觉光子产生,如果位于眼睛处有细胞,产生光子 + //1.将外界食物信号投放到视网膜上产生光子 + seeFood(); - //TODO:2.光子循环,每个光子行走一步, 直到光子消失,如果光子落在移动细胞上将消失,并会移动 + //2.光子主循环,每个光子行走一步, 直到光子消失,如果光子落在移动细胞上将消失,并会移动。这里有个编程技巧是用另一个list来累加新的光子,不对原list作删增,以加快速度 +// photons2.clear(); +// for (float[] p : photons) { +// float[] p2 = movePhoton(p); +// if (p2 != null) { +// int xx = (int) p2[X]; +// int yy = (int) p2[Y]; +// int zz = (int) p2[Z]; +// if ((cells[xx][yy][zz] & 1) > 0) +// y++; +// if ((cells[xx][yy][zz] & 2) > 0) +// y--; +// if ((cells[xx][yy][zz] & 4) > 0) +// x--; +// if ((cells[xx][yy][zz] & 8) > 0) +// x++; +// photons2.add(p2); +// } +// } + +// if (Food.foundAndAteFood(x, y)) { +// this.ateFood++; +// this.awardAA(); +// } //TODO:3.根据青蛙移动的矢量汇总出移动方向和步数,实际移动青蛙 @@ -224,65 +251,50 @@ public abstract class Animal {// 这个程序大量用到public变量而不是ge //TODO:5.如果青蛙与有毒食物位置重合,在所有痛觉细胞处产生光子,即惩罚信号的发生,痛觉细胞的位置和数量不是指定的,而是进化出来的 - //=============================================================================================== - //现在的分水岭是以光子为循环主体,还是以细胞作为循环主体??? 前者的话,细胞是光子的中转站,后者的话,细胞之间互相用光子挖洞,可以不把光子模拟出来 - //=============================================================================================== - - //依次激活每个细胞,模拟并行激活,这个是依次x,y,z方向激活,可能会产会顺序驱逐信号的bug,以后要考虑改成随机或跳行次序激活 - // for (int x = 0; x < Env.BRAIN_CUBE_SIZE; x++) - // for (int y = 0; y < Env.BRAIN_CUBE_SIZE; y++) - // for (int z = 0; z < Env.BRAIN_CUBE_SIZE; z++) { - // long c = cells[x][y][z]; - // float energy = energys[x][y][z]; - // float wasteEnergy = 0; //细胞会增加或消耗的总量 - // long pos = 1; - // - // if (energy < 0) //如细胞能量小于0,表示过分消耗了,需时间来慢慢回填 - // energy += 0.1; - // - // if (z == Z_TOP && (c & pos) > 0) {//感光细胞,将光信号能量存贮到细胞里, 感光细胞只能出现在最上层 - // if (Env.foundAnyThingOrOutEdge(this.x + x - XY_CENTER, this.y + y - XY_CENTER)) { - // energys[x][y][z] = 100; - // } else { - // energys[x][y][z] = 0; - // } - // } - // - // pos <<= 1; - // if (z == 0 && (c & pos) > 0) {//向上运动细胞,只能出现在底层,任意位置都可 - // wasteEnergy++; - // this.y++; - // } - // - // pos <<= 1; - // if (z == 0 && (c & pos) > 0) {//向下运动细胞,只能出现在底层,任意位置都可 - // wasteEnergy++; - // this.y--; - // } - // - // pos <<= 1; - // if (z == 0 && (c & pos) > 0) {//向左运动细胞,只能出现在底层,任意位置都可 - // wasteEnergy++; - // this.x--; - // } - // - // pos <<= 1; - // if (z == 0 && (c & pos) > 0) {//向右运动细胞,只能出现在底层,任意位置都可 - // wasteEnergy++; - // this.x++; - // } - // - // for (int i = 0; i < 3; i++) - // for (int j = 0; j < 3; j++) { - // pos <<= 1; - // if (energy > 0 && (c & pos) > 0) {//一类固定角度的传输型参数,即能量以指定角度传送到它的相邻细胞 - // //TODO - // } - // } - // - // energys[x][y][z] -= wasteEnergy; - // } + List temp = photons; + photons = photons2; //互换,让photons指向新的结果 + photons2 = temp; //让photons2指向原来的photons,以免创建新对象 return alive; } + public static final int X = 0; + public static final int Y = 1; + public static final int Z = 2; + public static final int MX = 3; + public static final int MY = 4; + public static final int MZ = 5; + public static final int ENERGY = 6; + public static final int SPEED = 7; + + private void createPhoton(float x, float y, float z, float mx, float my, float mz, float energy, float speed) {//在脑空间产生光子 + photons.add(new float[]{x, y, z, mx, my, mz, energy, speed}); + } + + private float[] movePhoton(float[] p) {//光子沿移动方向走一格,能量减少为95% + p[ENERGY] *= .99f; + if (p[ENERGY] < 0.01) + return null; + if (p[SPEED] < 0.01) + return p; + p[X] += p[MX]; + p[Y] += p[MY]; + p[Z] += p[MZ]; + if (Env.insideBrain(p[X], p[Y], p[Z])) + return p; + return null; + } + + private void seeFood() { + if (Food.smell[x][y] > 0) { //这是程序优化,如果闻到香味,说明食物在附近,才允许开启眼睛在香味范围内看图像 + for (int xx = -Food.SMELL_RANGE; xx <= Food.SMELL_RANGE; xx++) + for (int yy = -Food.SMELL_RANGE; yy <= Food.SMELL_RANGE; yy++) { + if (Env.insideBrain(xx + BRAIN_CENTER, yy + BRAIN_CENTER) && Env.foundAnyThingOrOutEdge(x + xx, y + yy)) { //如看到任何东西或看到出界 + for (float xxx = -0.1f; xxx <= 0.1f; xxx += 0.05) + for (float yyy = -0.1f; yyy <= 0.1f; yyy += 0.05) // 形成一个扇面向下发送光子 + createPhoton(xx + BRAIN_CENTER, yy + BRAIN_CENTER, BRAIN_TOP, xxx, yyy, -1f, 1f, 1f); + } + } + } + } + } diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/Application.java b/core/src/main/java/com/gitee/drinkjava2/frog/Application.java index e5f7b09..07b63d6 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/Application.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/Application.java @@ -1,6 +1,5 @@ package com.gitee.drinkjava2.frog; -import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/Env.java b/core/src/main/java/com/gitee/drinkjava2/frog/Env.java index b26f9b3..ba90298 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/Env.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/Env.java @@ -31,7 +31,7 @@ public class Env extends JPanel { /** Speed of test */ public static int SHOW_SPEED = 1000; // 测试速度,-1000~1000,可调, 数值越小,速度越慢 - public static final int FROG_EGG_QTY = 100; // 每轮下n个青蛙蛋,可调,只有最优秀的前n个青蛙们才允许下蛋 + public static final int FROG_EGG_QTY = 25; // 每轮下n个青蛙蛋,可调,只有最优秀的前n个青蛙们才允许下蛋 public static final int FROG_PER_EGG = 4; // 每个青蛙蛋可以孵出几个青蛙 @@ -42,16 +42,14 @@ public class Env extends JPanel { public static boolean SAVE_EGGS_FILE = false; //从2021-11-23起,添加这个选项,允许不输出蛋文件到磁盘上 - public static final boolean BORN_AT_RANDOM_PLACE = true;// 孵出动物落在地图上随机位置,而不是在蛋所在地 + public static final boolean BORN_AT_RANDOM_PLACE = true;// 孵出青蛙落在地图上随机位置,而不是在蛋所在地 - /** Frog's brain size */ // 脑细胞位于脑范围内,是个三维结构,在animal中用一个List来存贮表示的同时,也用一个Cell3D动态数组来表示 + /** Frog's brain size */ // 脑细胞位于脑范围内,是个三维结构,在animal中用三维数组来表示 + public static final int BRAIN_CUBE_SIZE = 16; //脑立方边长大小,必须是2的幂数如4,8,16...,原因参见8叉树算法 - public static final int BRAIN_CUBE_SIZE = 8; //脑立方边长大小,必须是2的幂数如4,8,16... - public static final int BRAIN_XSIZE = BRAIN_CUBE_SIZE; // 脑在X方向长度,取值最大为1000 - public static final int BRAIN_YSIZE = BRAIN_CUBE_SIZE; // 脑在Y方向长度,取值最大为1000 - public static final int BRAIN_ZSIZE = BRAIN_CUBE_SIZE; // 脑在Z方向长度,取值最大为1000 - - public static final int CELLS_MAX_QTY = 4000; //脑细胞总数不能超过这个值 + public static final int BRAIN_XSIZE = BRAIN_CUBE_SIZE; // 脑在X方向长度 + public static final int BRAIN_YSIZE = BRAIN_CUBE_SIZE; // 脑在Y方向长度 + public static final int BRAIN_ZSIZE = BRAIN_CUBE_SIZE; // 脑在Z方向长度 /** SHOW first animal's brain structure */ public static boolean SHOW_FIRST_ANIMAL_BRAIN = true; // 是否显示脑图在Env区的右侧 @@ -70,21 +68,18 @@ public class Env extends JPanel { /** Steps of one test round */ public static final int STEPS_PER_ROUND = 20;// 每轮测试步数,可调 - public static int step;// 当前测试步数 - public static final int FOOD_QTY = 1500; // 食物数量, 可调 + public static final int FOOD_QTY = 3500; // 食物数量, 可调 // 以下是程序内部变量,不要手工修改它们 + public static int step; // 当前测试步数 + public static final int TOTAL_FROG_QTY = FROG_EGG_QTY * FROG_PER_EGG; // 蛇的总数 public static final int FROG_PER_SCREEN = TOTAL_FROG_QTY / SCREEN; // 每屏显示几个青蛙,这个数值由其它常量计算得来 public static int current_screen = 0; - public static int food_ated = 0; // 用来统计总共多少个食物被青蛙吃掉 - - public static int frog_ated = 0; // 用来统计总共多少个青蛙被蛇吃掉 - public static boolean pause = false; // 暂停按钮按下将暂停测试 public static int[][] bricks = new int[ENV_WIDTH][ENV_HEIGHT];// 组成环境的材料,见Material.java @@ -93,19 +88,19 @@ public class Env extends JPanel { public static List frog_eggs = new ArrayList<>(); // 这里存放新建或从磁盘载入上轮下的蛋,每个蛋可能生成几个青蛙, - public static EnvObject[] things = new EnvObject[]{new Food() };// 所有外界物体,如食物、字母测试工具都放在这个things里面 - - public static boolean show_split_detail=false; //是否显示脑分裂的细节过程,即从一个细胞开始分裂分裂,而不是只显示分裂的最终结果 - - public static boolean[] display_gene=new boolean[Cells.GENE_NUMBERS]; //脑最多有64个基因,这里用来控制哪些基因需要显示在脑图上 - + public static EnvObject[] things = new EnvObject[]{ };// 所有外界物体,如食物、字母测试工具都放在这个things里面 + + public static boolean show_split_detail = false; //是否显示脑分裂的细节过程,即从一个细胞开始分裂分裂,而不是只显示分裂的最终结果 + + public static boolean[] display_gene = new boolean[Cells.GENE_NUMBERS]; //脑最多有64个基因,这里用来控制哪些基因需要显示在脑图上 + static { Logger.info("唵缚悉波罗摩尼莎诃!"); // 杀生前先打印往生咒,见码云issue#IW4H8 Logger.info("脑图快捷键: T:顶视 F:前视 L:左视 R:右视 X:斜视 方向键:剖视 空格:暂停 鼠标:缩放旋转平移"); if (DELETE_FROG_EGGS) FrogEggTool.deleteEggs(); - for (int i = 0; i < display_gene.length; i++) - display_gene[i]=true; + for (int i = 0; i < display_gene.length; i++) + display_gene[i] = true; } public Env() { @@ -114,6 +109,18 @@ public class Env extends JPanel { this.setBounds(1, 1, ENV_WIDTH, ENV_HEIGHT); } + public static boolean insideBrain(int x, int y) {// 如果指定点在边界内 + return !(x < 0 || y < 0 || x >= BRAIN_XSIZE || y >= BRAIN_YSIZE); + } + + public static boolean insideBrain(int x, int y, int z) {// 如果指定点在边界内 + return !(x < 0 || y < 0 || z <= 0 || x >= BRAIN_XSIZE || y >= BRAIN_YSIZE || z >= BRAIN_ZSIZE); + } + + public static boolean insideBrain(float x, float y, float z) {// 如果指定点在边界内 + return !(x < 0 || y < 0 || z <= 0 || x >= BRAIN_XSIZE || y >= BRAIN_YSIZE || z >= BRAIN_ZSIZE); + } + public static boolean insideEnv(int x, int y) {// 如果指定点在边界内 return !(x < 0 || y < 0 || x >= ENV_WIDTH || y >= ENV_HEIGHT); } @@ -130,15 +137,6 @@ public class Env extends JPanel { return x < 0 || y < 0 || x >= ENV_WIDTH || y >= ENV_HEIGHT || Env.bricks[x][y] != 0; } - public static boolean foundAndAteFood(int x, int y) {// 如果x,y有食物,将其清0,返回true - if (insideEnv(x, y) && (Env.bricks[x][y] & Material.FOOD) > 0) { - Env.food_ated++; - clearMaterial(x, y, Material.FOOD);// 清空任意食物 - return true; - } - return false; - } - public static boolean foundFrogOrOutEdge(int x, int y) {// 如果指定点看到青蛙或超出边界,返回true if (x < 0 || y < 0 || x >= ENV_WIDTH || y >= ENV_HEIGHT) return true;// 如果出界返回true @@ -209,14 +207,10 @@ public class Env extends JPanel { for (Frog f : frogs) if (f.ateFood > maxFound) maxFound = f.ateFood; - return new StringBuilder("吃食率:").append(format100.format(Env.food_ated * 1.00 / FOOD_QTY)).append(", 平均: ").append(Env.food_ated * 1.0f / FROG_PER_SCREEN).append(",最多:").append(maxFound) + return new StringBuilder("吃食率:").append(format100.format(Food.food_ated * 1.00 / FOOD_QTY)).append(", 平均: ").append(Food.food_ated * 1.0f / FROG_PER_SCREEN).append(",最多:").append(maxFound) .toString(); } - private String frogAtedCount() {// 统计食蛙总数 - return new StringBuilder("吃蛙率:").append(format100.format(Env.frog_ated * 1.00 / TOTAL_FROG_QTY)).toString(); - } - public static void checkIfPause() { if (pause) do { @@ -247,8 +241,6 @@ public class Env extends JPanel { do { rebuildFrogs(); // 根据蛙蛋重新孵化出蛙,注意基因变异有可能在孵化过程中发生 for (current_screen = 0; current_screen < SCREEN; current_screen++) {// 分屏测试,每屏FROG_PER_SCREEN个蛙 - Env.food_ated = 0; // 先清0吃食物数 - Env.frog_ated = 0;// 先清0吃蛙数 time0 = System.currentTimeMillis(); for (EnvObject thing : things) // 创建食物、陷阱等物体 thing.build(); @@ -272,8 +264,7 @@ public class Env extends JPanel { if (SHOW_SPEED > 0 && step % SHOW_SPEED != 0) // 用是否跳帧画图的方式来控制速度 continue; - if (SHOW_SPEED < 0) // 如果speed小于0,人为加入延迟 - sleep(-SHOW_SPEED); + sleep(100); // 开始画虚拟环境和青蛙和蛇 g.setColor(Color.white); @@ -310,12 +301,8 @@ public class Env extends JPanel { sb.append(foodAtedCount()); Application.mainFrame.setTitle(sb.toString()); - // for (EnvObject thing : things)// 去除食物、陷阱等物体 - // thing.destory(); - for (int i = 0; i < ENV_WIDTH; i++) {// 清除食物 - for (int j = 0; j < ENV_HEIGHT; j++) - bricks[i][j] = 0; - } + for (EnvObject thing : things)// 去除食物、陷阱等物体 + thing.destory(); } round++; FrogEggTool.layEggs(); //能量高的青蛙才有权下蛋 diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java b/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java index a361e84..22a3c64 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java @@ -297,17 +297,15 @@ public class BrainPicture extends JPanel { private static Cuboid brain = new Cuboid(0, 0, 0, Env.BRAIN_XSIZE, Env.BRAIN_YSIZE, Env.BRAIN_ZSIZE); - - public void drawBrainPicture() {// 在这个方法里进行动物的三维脑结构的绘制,蛇是青蛙的子类,所以也可以当参数传进来 if (!Env.SHOW_FIRST_ANIMAL_BRAIN) return; - if(Env.show_split_detail) + if (Env.show_split_detail) drawSplitDetail(); - else + else drawBrainStructure(); } - + public void drawSplitDetail() {// 在这个方法里绘制脑细胞分裂的显示步聚,即从一个细胞开始分裂成最终脑结构的每一步 Animal a = Env.getShowAnimal(); // 第一个青蛙或蛇 @@ -321,7 +319,7 @@ public class BrainPicture extends JPanel { ArrayList gene = a.genes.get(geneIndex); Tree8Util.knockNodesByGene(gene); for (int j = 0; j < Tree8Util.NODE_QTY; j++) { - if (Tree8Util.keep[j]>=0) { + if (Tree8Util.keep[j] >= 0) { int[] node = Tree8Util.TREE8[j]; int size = node[0]; if (size == i && Env.display_gene[geneIndex]) {//如果允许显示的话, 显示当前层级的节点 @@ -342,7 +340,7 @@ public class BrainPicture extends JPanel { } } } - + public void drawBrainStructure() {// 在这个方法里进行动物的三维脑结构的绘制,蛇是青蛙的子类,所以也可以当参数传进来 Animal a = Env.getShowAnimal(); // 显示第一个青蛙或蛇 if (a == null || !a.alive) @@ -366,6 +364,10 @@ public class BrainPicture extends JPanel { } } + setPicColor(Color.ORANGE); //开始画出光子 + for (float[] p : a.photons) + drawPoint(p[0]+0.5f, (int)p[1]+0.5f, (int)p[2]+0.5f, 0.2f); + setPicColor(Color.BLACK); //BrainShapeJudge.show(this);//这行显示目标形状这个模子 @@ -384,6 +386,10 @@ public class BrainPicture extends JPanel { if (note != null) // 全局注释 g.drawString(note, 30, 55); this.getGraphics().drawImage(buffImg, 0, 0, this);// 利用缓存避免画面闪烁,这里输出缓存图片 + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } } public static void setNote(String note) { diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java b/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java index 72785c0..6f96629 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java @@ -18,41 +18,46 @@ package com.gitee.drinkjava2.frog.brain; */ @SuppressWarnings("all") public class Cells { - public static long[] masks = new long[64]; + public static long[] GENES = new long[64]; + public static int GENE_NUMBERS = 0; //目前有多少条基因,每个脑细胞用是一个long来存储,所以最多允许64条基因,每个基因控制一个细胞的参数 - private static long mask = 1L; + private static long gene = 1L; - public static final long EYE = nextMask(); //光线感觉细胞,即视网膜 - public static final long FELL_HAPPY = nextMask(); //快乐感觉细胞,通常吃食后激活 - public static final long FELL_PAIN = nextMask(); //痛苦感觉细胞,受伤害后激活 - - public static final long MOVE_UP = nextMask(); //细胞如激活,青蛙向上运动 - public static final long MOVE_DOWN = nextMask();//细胞如激活,青蛙向下运动 - public static final long MOVE_LEFT = nextMask(); //细胞如激活,青蛙向左运动 - public static final long MOVE_RIGHT = nextMask(); //细胞如激活,青蛙向右运动 - - public static final long PHOTON_DELETE = nextMask(); // 删除光子 - public static final long PHOTON_ABSORB = nextMask(); // 删除并吸收光子能量 - public static final long PHOTON_FIX = nextMask(); //固定光子,使光子不能移动 - public static final long PHOTON_ENHENCE = nextMask(); // 提高光子能量 - public static final long PHOTON_WEAKEN = nextMask(); //减弱光子能量 - public static final long PHOTON_SEND = nextMask(); //如细胞有能量,发送光子 - public static final long PHOTON_SEND_NEG = nextMask(); //如细胞有能量,发送负能量光子 - - public static final long PHOTON_LIMIT_UP = nextMask(); //光子只能向上扇面发送 - public static final long PHOTON_LIMIT_DOWN = nextMask(); //光子只能向下扇面发送 - public static final long PHOTON_LIMIT_LEFT = nextMask(); //光子只能向左扇面发送 - public static final long PHOTON_LIMIT_RIGHT = nextMask(); //光子只能向右扇面发送 - public static final long PHOTON_LIMIT_FRONT = nextMask(); //光子只能向前扇面发送 - public static final long PHOTON_LIMIT_BACK = nextMask(); //光子只能向后扇面发送 + public static final long TREE_CELL = nextMask(); //细胞如激活,青蛙向上运动 + + //public static final long EYE = nextMask(); //光线感觉细胞,即视网膜 +// public static final long FELL_HAPPY = nextMask(); //快乐感觉细胞,通常吃食后激活 +// public static final long FELL_PAIN = nextMask(); //痛苦感觉细胞,受伤害后激活 +// +// public static final long MOVE_UP = nextMask(); //细胞如激活,青蛙向上运动 +// public static final long MOVE_DOWN = nextMask();//细胞如激活,青蛙向下运动 +// public static final long MOVE_LEFT = nextMask(); //细胞如激活,青蛙向左运动 +// public static final long MOVE_RIGHT = nextMask(); //细胞如激活,青蛙向右运动 +// public static final long MOVE_ANY = MOVE_UP | MOVE_DOWN | MOVE_LEFT | MOVE_RIGHT; //任意移动,是上面四个bit位的合并 + +// +// public static final long PHOTON_DELETE = nextMask(); // 删除光子 +// public static final long PHOTON_ABSORB = nextMask(); // 删除并吸收光子能量 +// public static final long PHOTON_FIX = nextMask(); //固定光子,使光子不能移动 +// public static final long PHOTON_ENHENCE = nextMask(); // 提高光子能量 +// public static final long PHOTON_WEAKEN = nextMask(); //减弱光子能量 +// public static final long PHOTON_SEND = nextMask(); //如细胞有能量,发送光子 +// public static final long PHOTON_SEND_NEG = nextMask(); //如细胞有能量,发送负能量光子 +// +// public static final long PHOTON_LIMIT_UP = nextMask(); //光子只能向上扇面发送 +// public static final long PHOTON_LIMIT_DOWN = nextMask(); //光子只能向下扇面发送 +// public static final long PHOTON_LIMIT_LEFT = nextMask(); //光子只能向左扇面发送 +// public static final long PHOTON_LIMIT_RIGHT = nextMask(); //光子只能向右扇面发送 +// public static final long PHOTON_LIMIT_FRONT = nextMask(); //光子只能向前扇面发送 +// public static final long PHOTON_LIMIT_BACK = nextMask(); //光子只能向后扇面发送 private static long nextMask() {// 每次将Code左移1位 - long result = mask; + long result = gene; if (result < 0) throw new IllegalArgumentException("Mask out of maximum long integer range"); - masks[GENE_NUMBERS++] = mask; - mask = mask << 1; + GENES[GENE_NUMBERS++] = gene; + gene = gene << 1; //这个gene占用long的一位,将来判断一个细胞是否包含此基因只要与它做“与”运算 return result; } - + } diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java b/core/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java new file mode 100644 index 0000000..5a005f0 --- /dev/null +++ b/core/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java @@ -0,0 +1,42 @@ +package com.gitee.drinkjava2.frog.judge; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Env; + +/** + * MoveCellLocationJudge determine move cells can only be on bottom layer of brain + * + * 运动细胞只允许出现在脑的最底层,否则扣分 + */ +public class MoveCellLocationJudge {//NOSONAR + + public static void judge(Animal animal) {////检查animal的脑细胞分布和参数是否符合要求并加减分 + for (int x = 0; x < Env.BRAIN_CUBE_SIZE; x++) + for (int y = 0; y < Env.BRAIN_CUBE_SIZE; y++) + for (int z = 0; z < Env.BRAIN_CUBE_SIZE; z++) { + long cell = animal.cells[x][y][z]; + if (z >= 1) { + if ((cell & 1) > 0) //注意四个条件要分别判断和扣分,不能合并放在同一个if条件里,否则互相干扰,进化不出结果 + animal.penaltyAAAA(); + if ((cell & 2) > 0) + animal.penaltyAAAA(); + if ((cell & 4) > 0) + animal.penaltyAAAA(); + if ((cell & 8) > 0) + animal.penaltyAAAA(); + } + if (z == 0) { + if ((cell & 1) > 0) //注意四个条件要分别判断和扣分,不能合并放在同一个if条件里,否则互相干扰,进化不出结果 + animal.awardAAAA(); + if ((cell & 2) > 0) + animal.awardAAAA(); + if ((cell & 4) > 0) + animal.awardAAAA(); + if ((cell & 8) > 0) + animal.awardAAAA(); + } + } + + } + +} diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java b/core/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java new file mode 100644 index 0000000..5c7a95d --- /dev/null +++ b/core/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java @@ -0,0 +1,53 @@ +package com.gitee.drinkjava2.frog.judge; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Env; +import com.gitee.drinkjava2.frog.brain.Cells; + +/** + * TreeShapeJudge to create a tree + */ +public class TreeShapeJudge {//NOSONAR + + private static boolean hasCell(long[][][] cells, int x, int y, int z) { //检查指定位置是否有TREE_CELL + if (Animal.outBrainRange(x, y, z)) + return false; + return (cells[x][y][z] & Cells.TREE_CELL) > 0; + } + + //@formatter:off + private static boolean hasCellAround(long[][][] cells, int x, int y, int z) {//检查四周是否有TREE_CELL + if (hasCell(cells, x + 1, y, z))return true; + if (hasCell(cells, x - 1, y, z))return true; + if (hasCell(cells, x + 1, y+1, z))return true; + if (hasCell(cells, x - 1, y+1, z))return true; + if (hasCell(cells, x + 1, y-1, z))return true; + if (hasCell(cells, x - 1, y-1, z))return true; + if (hasCell(cells, x, y+1, z))return true; + if (hasCell(cells, x, y-1, z))return true; + return false; + } + //@formatter:on + + public static void judge(Animal animal) { + long[][][] cells = animal.cells; + for (int x = 0; x < Env.BRAIN_CUBE_SIZE; x++) + for (int y = 0; y < Env.BRAIN_CUBE_SIZE; y++) + for (int z = 0; z <= Env.BRAIN_CUBE_SIZE - 2; z++) { + long cell = cells[x][y][z]; + if ((cell & Cells.TREE_CELL) > 0) { + if ((z == 0 && x == Env.BRAIN_XSIZE / 2 && y == Env.BRAIN_YSIZE / 2) //如果在底部中心 + || //或 + (!hasCell(cells, x, y, z - 1) // 正下方没有cell + && !hasCellAround(cells, x, y, z) //且周围没有cell + && hasCellAround(cells, x, y, z - 1) //且下方周围有cell + )) + animal.awardAA(); + else + animal.penaltyAA(); + } + } + + } + +} diff --git a/core/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java b/core/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java index be12a6a..6bbbcb2 100644 --- a/core/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java +++ b/core/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java @@ -19,29 +19,63 @@ import com.gitee.drinkjava2.frog.util.RandomUtils; /** * Food randomly scatter on Env - * 生成食物(静态食物或苍蝇,苍蝇如果Env中FOOD_CAN_MOVE=true,会向四个方向移动) + * 食物 * * @author Yong Zhu * @since 1.0 */ -public class Food implements EnvObject { +public enum Food implements EnvObject { + FOOD; //FOOD是一个枚举型单例,整个环境只允许有一个FOOD实例 + + public static final int SMELL_RANGE = 3; + + public static int food_ated=0; + + public static int[][] smell = new int[ENV_WIDTH][ENV_HEIGHT];//食物的香味, 这个香味是为了优化速度,和算法无关。有香味,说明食物在附近,程序才会启动眼睛,在视网膜产生光子,没有香味就不启动眼睛以加快速度 @Override public void build() { - for (int i = 0; i < FOOD_QTY; i++) // 生成食物 - Env.setMaterial(RandomUtils.nextInt(ENV_WIDTH), RandomUtils.nextInt(ENV_HEIGHT), Material.FOOD); - } - - @Override - public void destory() { - for (int i = 0; i < ENV_WIDTH; i++) {// 清除食物 - for (int j = 0; j < ENV_HEIGHT; j++) - Env.clearMaterial(i, j, Material.FOOD); + food_ated=0; + for (int i = 0; i < FOOD_QTY; i++) { // 随机位置生成食物 + int x = RandomUtils.nextInt(ENV_WIDTH); + int y = RandomUtils.nextInt(ENV_HEIGHT); + if (!Env.hasMaterial(x, y, Material.FOOD)) { + Env.setMaterial(x, y, Material.FOOD); //在环境里标记上FOOD + changeSmell(x, y, 1); //产生此食物的香气 + } } } + @Override + public void destory() { + food_ated=0; + for (int x = 0; x < ENV_WIDTH; x++) // 清除食物 + for (int y = 0; y < ENV_HEIGHT; y++) { + Env.clearMaterial(x, y, Material.FOOD); + smell[x][y] = 0; //清除所有香气 + } + } + @Override public void active() { + //食物除了被吃,它自己没有什么活动 + } + + private static void changeSmell(int x, int y, int value) { //在食物的附近增加或减少它的香味 + for (int xx = x - SMELL_RANGE; xx <= x + SMELL_RANGE; xx++) + for (int yy = y - SMELL_RANGE; yy <= y + SMELL_RANGE; yy++) + if (Env.insideEnv(xx, yy)) + smell[xx][yy] += value; + } + + public static boolean foundAndAteFood(int x, int y) {// 如果x,y有食物,将其清0,返回true + if (Env.hasMaterial(x, y, Material.FOOD)) { + food_ated++; + Env.clearMaterial(x, y, Material.FOOD);//在环境里清除FOOD + changeSmell(x, y, -1); //仅清除此食物产生的香气 + return true; + } + return false; } } diff --git a/history/001_first_version/pom.xml b/history/001_first_version/pom.xml index ccec02b..2df0b34 100644 --- a/history/001_first_version/pom.xml +++ b/history/001_first_version/pom.xml @@ -57,14 +57,7 @@ - - - - com.alibaba - fastjson - 1.2.54 - - + + 1.8 + 6 + 3.3 + 2.6 + 3.0.0 + 2.7 + 2.19 + 2.6 + 2.4 + 2.10.3 + 1.6 + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${version.compiler-plugin} + + ${version.java} + ${version.java} + UTF-8 + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.2 + + + + true + false + lib/ + com.gitee.drinkjava2.frog.Application + + + + + + + + + + + \ No newline at end of file diff --git a/history/010_tree_grow/run.bat b/history/010_tree_grow/run.bat new file mode 100644 index 0000000..0156beb --- /dev/null +++ b/history/010_tree_grow/run.bat @@ -0,0 +1,3 @@ +call mvn clean compile +cd target\classes +java -classpath ".;*" com.gitee.drinkjava2.frog.Application \ No newline at end of file diff --git a/history/010_tree_grow/run.sh b/history/010_tree_grow/run.sh new file mode 100644 index 0000000..836c941 --- /dev/null +++ b/history/010_tree_grow/run.sh @@ -0,0 +1,2 @@ +mvn clean package +java -jar target/frog-*.jar diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Animal.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Animal.java new file mode 100644 index 0000000..77446ff --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Animal.java @@ -0,0 +1,300 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog; + +import static com.gitee.drinkjava2.frog.brain.Cells.GENE_NUMBERS; + +import java.awt.Graphics; +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.List; + +import javax.imageio.ImageIO; + +import com.gitee.drinkjava2.frog.egg.Egg; +import com.gitee.drinkjava2.frog.judge.TreeShapeJudge; +import com.gitee.drinkjava2.frog.objects.Food; +import com.gitee.drinkjava2.frog.objects.Material; +import com.gitee.drinkjava2.frog.util.RandomUtils; +import com.gitee.drinkjava2.frog.util.Tree8Util; + +/** + * Animal is all artificial lives' father class + * Animal only keep one copy of genes from egg, not store gene in cell + * Animal是所有动物(青蛙、蛇等)的父类, animal是由蛋孵出来的,蛋里保存着脑细胞结构生成的基因, Animal只保存一份基因而不是每个细胞都保存一份基因,这是人工生命与实际生物的最大不同 + * 基因是一个list结构, 每一条list代表一条由深度树方式存储的基因树,分表控制细胞的一个参数,当cell用长整数表示时最多可以表达支持64个参数 + * + * + * @author Yong Zhu + * @since 1.0 + */ +public abstract class Animal {// 这个程序大量用到public变量而不是getter/setter,主要是为了编程方便和简洁,但缺点是编程者需要小心维护各个变量 + public static BufferedImage FROG_IMAGE; + public static BufferedImage snakeImage; + + public ArrayList> genes = new ArrayList<>(); // 基因是多个数列,有点象多条染色体 + + static { + try { + FROG_IMAGE = ImageIO.read(new FileInputStream(Application.CLASSPATH + "frog.png")); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** brain cells */ + public long[][][] cells = new long[Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE]; + public float[][][] energys = new float[Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE][Env.BRAIN_CUBE_SIZE]; + + public List photons = new ArrayList<>(); //每个光子是由一个float数组表示,依次是x,y,z坐标, mz,my,mz运动方向矢量,能量值,速度 + + public List photons2 = new ArrayList<>();// photons2是个临时空间,用来中转存放一下每遍光子运算后的结果,用双鬼拍门来替代单个链表的增删,每个list只增不减以优化速度 + + public int x; // animal在Env中的x坐标 + public int y; // animal在Env中的y坐标 + public long energy = 1000000000; // 青蛙的能量为0则死掉 + public boolean alive = true; // 设为false表示青蛙死掉了,将不参与计算和显示,以节省时间 + public int ateFood = 0; // 青蛙曾吃过的食物总数,下蛋时如果两个青蛙能量相等,可以比数量 + public int no; // 青蛙在Env.animals中的序号,从1开始, 会在运行期写到当前brick的最低位,可利用Env.animals.get(no-1)快速定位青蛙 + + public int animalMaterial; + public Image animalImage; + + public Animal(Egg egg) {// x, y 是虑拟环境的坐标 + for (int i = 0; i < GENE_NUMBERS; i++) { + genes.add(new ArrayList<>()); + } + int i = 0; + for (ArrayList gene : egg.genes)//动物的基因是蛋的基因的拷贝 + genes.get(i++).addAll(gene); + i = 0; + if (Env.BORN_AT_RANDOM_PLACE) { //是否随机出生在地图上? + x = RandomUtils.nextInt(Env.ENV_WIDTH); + y = RandomUtils.nextInt(Env.ENV_HEIGHT); + } else {//否则出生成指定区域 + this.x = egg.x + RandomUtils.nextInt(80) - 40; + this.y = egg.y + RandomUtils.nextInt(80) - 40; + if (this.x < 0) + this.x = 0; + if (this.y < 0) + this.y = 0; + if (this.x >= (Env.ENV_WIDTH - 1)) + this.x = Env.ENV_WIDTH - 1; + if (this.y >= (Env.ENV_HEIGHT - 1)) + this.y = Env.ENV_HEIGHT - 1; + } + } + + public void initAnimal() { // 初始化animal,生成脑细胞是在这一步,这个方法是在当前屏animal生成之后调用,比方说有一千个青蛙分为500屏测试,每屏只生成2个青蛙的脑细胞,可以节约内存 + geneMutation(); //有小概率基因突变 + for (ArrayList gene : genes) //基因多也要适当小扣点分,防止基因无限增长 + energy -= gene.size(); + createCellsFromGene(); //根据基因分裂生成脑细胞 + //RainBowFishJudge.judge(this); //外界对是否长得象彩虹鱼打分 + //MoveCellLocationJudge.judge(this); + TreeShapeJudge.judge(this); + } + + private static final int MIN_ENERGY_LIMIT = Integer.MIN_VALUE + 5000; + private static final int MAX_ENERGY_LIMIT = Integer.MAX_VALUE - 5000; + + //@formatter:off 下面几行是重要的奖罚方法,会经常调整或注释掉,集中放在一起,不要格式化为多行 + public void changeEnergy(int energy_) {//正数为奖励,负数为惩罚, energy大小是环境对animal唯一的奖罚,也是animal唯一的下蛋竞争标准 + energy += energy_; + if (energy > MAX_ENERGY_LIMIT) + energy = MAX_ENERGY_LIMIT; + if (energy < MIN_ENERGY_LIMIT) + energy = MIN_ENERGY_LIMIT; + } + + //如果改奖罚值,就可能出现缺色,这个要在基因变异算法(从上到下,从下到上)和环境本身奖罚合理性上下功夫 + public void awardAAAA() { changeEnergy(2000);} + public void awardAAA() { changeEnergy(200);} + public void awardAA() { changeEnergy(5);} + public void awardA() { changeEnergy(2);} + + public void penaltyAAAA() { changeEnergy(-2000);} + public void penaltyAAA() { changeEnergy(-200);} + public void penaltyAA() { changeEnergy(-5);} + public void penaltyA() { changeEnergy(-2);} + public void kill() { this.alive = false; changeEnergy(-500000); Env.clearMaterial(x, y, animalMaterial); } //kill是最大的惩罚 + //@formatter:on + + public void show(Graphics g) {// 显示当前动物 + if (!alive) + return; + g.drawImage(animalImage, x - 8, y - 8, 16, 16, null);// 减去坐标,保证嘴巴显示在当前x,y处 + } + + /** Check if x,y,z out of animal's brain range */ + public static boolean outBrainRange(int x, int y, int z) {// 检查指定坐标是否超出animal脑空间界限 + return x < 0 || x >= Env.BRAIN_XSIZE || y < 0 || y >= Env.BRAIN_YSIZE || z < 0 || z >= Env.BRAIN_ZSIZE; + } + + public void geneMutation() { //基因变异,注意这一个算法同时变异所有条基因,目前最多允许64条基因 + for (int g = 0; g < GENE_NUMBERS; g++) {//随机新增阴节点基因 + if (RandomUtils.percent(10)) { + ArrayList gene = genes.get(g); + Tree8Util.knockNodesByGene(gene);//根据基因,把要敲除的8叉树节点作个标记,下面的算法保证阴节点基因只添加阳节点上 + int randomIndex = RandomUtils.nextInt(Tree8Util.keepNodeQTY); + int count = -1; + for (int i = 0; i < Tree8Util.NODE_QTY; i++) { + if (Tree8Util.keep[i] >= 0) { + count++; + if (count >= randomIndex && !gene.contains(-i)) { + gene.add(-i); + break; + } + } + } + } + } + + for (int g = 0; g < GENE_NUMBERS; g++) {//随机新增阳节点基因 + if (RandomUtils.percent(5)) { + ArrayList gene = genes.get(g); + Tree8Util.knockNodesByGene(gene);//根据基因,把要敲除的8叉树节点作个标记,下面的算法保证阳节点基因只添加在阴节点上 + int yinNodeQTY = Tree8Util.NODE_QTY - Tree8Util.keepNodeQTY; //阴节点总数 + int randomIndex = RandomUtils.nextInt(yinNodeQTY); + int count = -1; + for (int i = 0; i < yinNodeQTY; i++) { + if (Tree8Util.keep[i] < 0) { + count++; + if (count >= randomIndex && !gene.contains(i)) { + gene.add(i); + break; + } + } + } + } + } + + for (int g = 0; g < GENE_NUMBERS; g++) {//随机变异删除一个基因,这样可以去除无用的拉圾基因,防止基因无限增大 + if (RandomUtils.percent(10)) { + ArrayList gene = genes.get(g); + if (!gene.isEmpty()) + gene.remove(RandomUtils.nextInt(gene.size())); + } + } + } + + private void createCellsFromGene() {//根据基因生成细胞参数 + long geneMask = 1; + for (int g = 0; g < GENE_NUMBERS; g++) {//动物有多条基因,一条基因控制一维细胞参数,最多有64维,也就是最多有64条基因 + ArrayList gene = genes.get(g); + Tree8Util.knockNodesByGene(gene);//根据基因,把要敲除的8叉树节点作个标记 + for (int i = 0; i < Tree8Util.NODE_QTY; i++) {//再根据敲剩下的8叉树keep标记生成细胞参数 + if (Tree8Util.keep[i] >= 0) { + int[] node = Tree8Util.TREE8[i]; + if (node[0] == 1) {//如果node边长为1,即不可以再分裂了,就在三维空间对间数组的位置把当前基因geneMask置1 + cells[node[1]][node[2]][node[3]] = cells[node[1]][node[2]][node[3]] | geneMask; //在相应的细胞处把细胞参数位置1 + } + } + } + geneMask <<= 1; + } + } + + private static final int BRAIN_CENTER = Env.BRAIN_CUBE_SIZE / 2; + private static final int BRAIN_TOP = Env.BRAIN_CUBE_SIZE - 1; + + public boolean active() {// 这个active方法在每一步循环都会被调用,是脑思考的最小帧,最复杂的这个方法写在最下面 + // 如果能量小于0、出界、与非食物的点重合则判死 + if (!alive) + return false; + if (energy <= 0 || Env.outsideEnv(x, y) || Env.bricks[x][y] >= Material.KILL_ANIMAL) { + kill(); + return false; + } + + //1.将外界食物信号投放到视网膜上产生光子 + seeFood(); + + //2.光子主循环,每个光子行走一步, 直到光子消失,如果光子落在移动细胞上将消失,并会移动。这里有个编程技巧是用另一个list来累加新的光子,不对原list作删增,以加快速度 +// photons2.clear(); +// for (float[] p : photons) { +// float[] p2 = movePhoton(p); +// if (p2 != null) { +// int xx = (int) p2[X]; +// int yy = (int) p2[Y]; +// int zz = (int) p2[Z]; +// if ((cells[xx][yy][zz] & 1) > 0) +// y++; +// if ((cells[xx][yy][zz] & 2) > 0) +// y--; +// if ((cells[xx][yy][zz] & 4) > 0) +// x--; +// if ((cells[xx][yy][zz] & 8) > 0) +// x++; +// photons2.add(p2); +// } +// } + +// if (Food.foundAndAteFood(x, y)) { +// this.ateFood++; +// this.awardAA(); +// } + + //TODO:3.根据青蛙移动的矢量汇总出移动方向和步数,实际移动青蛙 + + //TODO:4.如果青蛙与食物位置重合,在所有奖励细胞处产生光子,即奖励信号的发生,奖励细胞的位置和数量不是指定的,而是进化出来的 + + //TODO:5.如果青蛙与有毒食物位置重合,在所有痛觉细胞处产生光子,即惩罚信号的发生,痛觉细胞的位置和数量不是指定的,而是进化出来的 + + List temp = photons; + photons = photons2; //互换,让photons指向新的结果 + photons2 = temp; //让photons2指向原来的photons,以免创建新对象 + return alive; + } + + public static final int X = 0; + public static final int Y = 1; + public static final int Z = 2; + public static final int MX = 3; + public static final int MY = 4; + public static final int MZ = 5; + public static final int ENERGY = 6; + public static final int SPEED = 7; + + private void createPhoton(float x, float y, float z, float mx, float my, float mz, float energy, float speed) {//在脑空间产生光子 + photons.add(new float[]{x, y, z, mx, my, mz, energy, speed}); + } + + private float[] movePhoton(float[] p) {//光子沿移动方向走一格,能量减少为95% + p[ENERGY] *= .99f; + if (p[ENERGY] < 0.01) + return null; + if (p[SPEED] < 0.01) + return p; + p[X] += p[MX]; + p[Y] += p[MY]; + p[Z] += p[MZ]; + if (Env.insideBrain(p[X], p[Y], p[Z])) + return p; + return null; + } + + private void seeFood() { + if (Food.smell[x][y] > 0) { //这是程序优化,如果闻到香味,说明食物在附近,才允许开启眼睛在香味范围内看图像 + for (int xx = -Food.SMELL_RANGE; xx <= Food.SMELL_RANGE; xx++) + for (int yy = -Food.SMELL_RANGE; yy <= Food.SMELL_RANGE; yy++) { + if (Env.insideBrain(xx + BRAIN_CENTER, yy + BRAIN_CENTER) && Env.foundAnyThingOrOutEdge(x + xx, y + yy)) { //如看到任何东西或看到出界 + for (float xxx = -0.1f; xxx <= 0.1f; xxx += 0.05) + for (float yyy = -0.1f; yyy <= 0.1f; yyy += 0.05) // 形成一个扇面向下发送光子 + createPhoton(xx + BRAIN_CENTER, yy + BRAIN_CENTER, BRAIN_TOP, xxx, yyy, -1f, 1f, 1f); + } + } + } + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Application.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Application.java new file mode 100644 index 0000000..07b63d6 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Application.java @@ -0,0 +1,168 @@ +package com.gitee.drinkjava2.frog; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JRadioButton; +import javax.swing.JSlider; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import com.gitee.drinkjava2.frog.brain.BrainPicture; +import com.gitee.drinkjava2.frog.brain.Cells; + +/** + * Application's main method start the program + * + * @author Yong Zhu + * @since 1.0 + */ +@SuppressWarnings("all") +public class Application { + + public static final String CLASSPATH; + + static { + String classpath = new File("").getAbsolutePath(); + int i = classpath.lastIndexOf("\\frog\\"); + if (i > 0) + CLASSPATH = classpath.substring(0, i) + "\\frog\\";// windows + else + CLASSPATH = classpath + "/"; // UNIX + } + + public static JFrame mainFrame = new JFrame(); + public static Env env = new Env(); + public static BrainPicture brainPic = new BrainPicture(Env.ENV_WIDTH + 5, 0, Env.BRAIN_XSIZE, Env.FROG_BRAIN_DISP_WIDTH); + public static ActionListener pauseAction; + public static boolean selectFrog = true; + + private static void checkIfShowBrainPicture(JButton button) { + int y = Env.ENV_HEIGHT + 150; + if (Env.SHOW_FIRST_ANIMAL_BRAIN) { + button.setText("Hide brain"); + if (Env.FROG_BRAIN_DISP_WIDTH + 41 > y) + y = Env.FROG_BRAIN_DISP_WIDTH + 41; + mainFrame.setSize(Env.ENV_WIDTH + Env.FROG_BRAIN_DISP_WIDTH + 25, y); + brainPic.requestFocus(); + } else { + button.setText("Show brain"); + mainFrame.setSize(Env.ENV_WIDTH + 20, y); + } + } + + public static void main(String[] args) { + mainFrame.setLayout(null); + mainFrame.setSize(Env.ENV_WIDTH + 200, Env.ENV_HEIGHT + 150); // 窗口大小 + mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭时退出程序 + mainFrame.add(env); // 添加虚拟环境Panel + mainFrame.add(brainPic); // 添加脑图Panel + + JButton button = new JButton("Show brain");// 按钮,显示或隐藏脑图 + int buttonWidth = 100; + int buttonHeight = 22; + int buttonXpos = Env.ENV_WIDTH / 2 - buttonWidth / 2; + button.setBounds(buttonXpos, Env.ENV_HEIGHT + 8, buttonWidth, buttonHeight); + ActionListener al = new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) {//显示或隐藏脑图 + Env.SHOW_FIRST_ANIMAL_BRAIN = !Env.SHOW_FIRST_ANIMAL_BRAIN; + checkIfShowBrainPicture(button); + } + }; + checkIfShowBrainPicture(button); + button.addActionListener(al); + mainFrame.add(button); + + JButton stopButton = new JButton("Pause");// 暂停或继续按钮 + stopButton.setBounds(buttonXpos, Env.ENV_HEIGHT + 35, buttonWidth, buttonHeight); + pauseAction = new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + Env.pause = !Env.pause; + if (Env.pause) { + stopButton.setText("Resume"); + } else { + stopButton.setText("Pause"); + brainPic.requestFocus(); + } + } + }; + stopButton.addActionListener(pauseAction); + mainFrame.add(stopButton); + + // 速度条 + final JSlider speedSlider = new JSlider(1, 10, (int) Math.round(Math.pow(Env.SHOW_SPEED, 1.0/3))); + speedSlider.setBounds(buttonXpos - 50, stopButton.getY() + 25, buttonWidth + 100, buttonHeight); + ChangeListener slideAction = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + Env.SHOW_SPEED = speedSlider.getValue() * speedSlider.getValue() * speedSlider.getValue(); + brainPic.requestFocus(); + } + }; + speedSlider.addChangeListener(slideAction); + mainFrame.add(speedSlider); + final JLabel label = new JLabel("Speed:"); + label.setBounds(buttonXpos - 90, stopButton.getY() + 23, 100, buttonHeight); + mainFrame.add(label); + + + + //是否把egg文件存盘 + JCheckBox saveFileCheckBox = new JCheckBox("Save egg file"); + saveFileCheckBox.setBounds(buttonXpos, Env.ENV_HEIGHT + 80, 120, 22); + ActionListener saveAction = new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (saveFileCheckBox.isSelected()) + Env.SAVE_EGGS_FILE = true; + else + Env.SAVE_EGGS_FILE = false; + } + }; + saveFileCheckBox.addActionListener(saveAction); + mainFrame.add(saveFileCheckBox); + + //基因维数显示控制 + for (int i = 0; i < Cells.GENE_NUMBERS; i++) { + JRadioButton geneRadio=new JRadioButton(); + geneRadio.setBounds(buttonXpos+300+i*16, Env.ENV_HEIGHT + 8, 20, 22); + geneRadio.setSelected(true); + geneRadio.setName(""+i); + ActionListener geneRadioAction = new ActionListener() { + public void actionPerformed(ActionEvent e) { + int i= Integer.parseInt(geneRadio.getName()); + if (geneRadio.isSelected()) + Env.display_gene[i]=true; + else + Env.display_gene[i]=false; + } + }; + geneRadio.addActionListener(geneRadioAction); + mainFrame.add(geneRadio); + } + + //是否显示分裂过程 + JCheckBox showSplitDetailCheckBox = new JCheckBox("Show split detail"); + showSplitDetailCheckBox.setBounds(buttonXpos+300, Env.ENV_HEIGHT + 40, 120, 22); + ActionListener detailAction = new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (showSplitDetailCheckBox.isSelected()) + Env.show_split_detail = true; + else + Env.show_split_detail = false; + } + }; + showSplitDetailCheckBox.addActionListener(detailAction); + mainFrame.add(showSplitDetailCheckBox); + + mainFrame.setVisible(true); + env.run(); + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Env.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Env.java new file mode 100644 index 0000000..ba90298 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Env.java @@ -0,0 +1,312 @@ +package com.gitee.drinkjava2.frog; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Image; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JPanel; + +import com.gitee.drinkjava2.frog.brain.Cells; +import com.gitee.drinkjava2.frog.egg.Egg; +import com.gitee.drinkjava2.frog.egg.FrogEggTool; +import com.gitee.drinkjava2.frog.objects.EnvObject; +import com.gitee.drinkjava2.frog.objects.Food; +import com.gitee.drinkjava2.frog.objects.Material; +import com.gitee.drinkjava2.frog.util.Logger; +import com.gitee.drinkjava2.frog.util.RandomUtils; + +/** + * Env is the living space of frog. draw it on JPanel + * + * @author Yong Zhu + * @since 1.0 + */ +@SuppressWarnings("all") +public class Env extends JPanel { + private static final long serialVersionUID = 1L; + + /** Speed of test */ + public static int SHOW_SPEED = 1000; // 测试速度,-1000~1000,可调, 数值越小,速度越慢 + + public static final int FROG_EGG_QTY = 25; // 每轮下n个青蛙蛋,可调,只有最优秀的前n个青蛙们才允许下蛋 + + public static final int FROG_PER_EGG = 4; // 每个青蛙蛋可以孵出几个青蛙 + + public static final int SCREEN = 1; // 分几屏测完 + + /** Delete eggs at beginning of each run */ + public static final boolean DELETE_FROG_EGGS = true;// 每次运行是否先删除以前保存的青蛙蛋文件,如果为false将加载旧蛋文件继续运行 + + public static boolean SAVE_EGGS_FILE = false; //从2021-11-23起,添加这个选项,允许不输出蛋文件到磁盘上 + + public static final boolean BORN_AT_RANDOM_PLACE = true;// 孵出青蛙落在地图上随机位置,而不是在蛋所在地 + + /** Frog's brain size */ // 脑细胞位于脑范围内,是个三维结构,在animal中用三维数组来表示 + public static final int BRAIN_CUBE_SIZE = 16; //脑立方边长大小,必须是2的幂数如4,8,16...,原因参见8叉树算法 + + public static final int BRAIN_XSIZE = BRAIN_CUBE_SIZE; // 脑在X方向长度 + public static final int BRAIN_YSIZE = BRAIN_CUBE_SIZE; // 脑在Y方向长度 + public static final int BRAIN_ZSIZE = BRAIN_CUBE_SIZE; // 脑在Z方向长度 + + /** SHOW first animal's brain structure */ + public static boolean SHOW_FIRST_ANIMAL_BRAIN = true; // 是否显示脑图在Env区的右侧 + + /** Draw first frog's brain after some steps */ + public static int DRAW_BRAIN_AFTER_STEPS = 0; // 以此值为间隔动态画出脑图,设为0则关闭这个动态脑图功能,只显示一个静态、不闪烁的脑图 + + /** Environment x width, unit: pixels */ + public static final int ENV_WIDTH = 400; // 虚拟环境的宽度, 可调 + + /** Environment y height, unit: pixels */ + public static final int ENV_HEIGHT = ENV_WIDTH; // 虚拟环境高度, 可调,通常取正方形 + + /** Frog's brain display width on screen, not important */ + public static final int FROG_BRAIN_DISP_WIDTH = 400; // Frog的脑图在屏幕上的显示大小,可调 + + /** Steps of one test round */ + public static final int STEPS_PER_ROUND = 20;// 每轮测试步数,可调 + + public static final int FOOD_QTY = 3500; // 食物数量, 可调 + + // 以下是程序内部变量,不要手工修改它们 + public static int step; // 当前测试步数 + + public static final int TOTAL_FROG_QTY = FROG_EGG_QTY * FROG_PER_EGG; // 蛇的总数 + + public static final int FROG_PER_SCREEN = TOTAL_FROG_QTY / SCREEN; // 每屏显示几个青蛙,这个数值由其它常量计算得来 + + public static int current_screen = 0; + + public static boolean pause = false; // 暂停按钮按下将暂停测试 + + public static int[][] bricks = new int[ENV_WIDTH][ENV_HEIGHT];// 组成环境的材料,见Material.java + + public static List frogs = new ArrayList<>(); // 这里存放所有待测的青蛙,可能分几次测完,由FROG_PER_SCREEN大小来决定 + + public static List frog_eggs = new ArrayList<>(); // 这里存放新建或从磁盘载入上轮下的蛋,每个蛋可能生成几个青蛙, + + public static EnvObject[] things = new EnvObject[]{ };// 所有外界物体,如食物、字母测试工具都放在这个things里面 + + public static boolean show_split_detail = false; //是否显示脑分裂的细节过程,即从一个细胞开始分裂分裂,而不是只显示分裂的最终结果 + + public static boolean[] display_gene = new boolean[Cells.GENE_NUMBERS]; //脑最多有64个基因,这里用来控制哪些基因需要显示在脑图上 + + static { + Logger.info("唵缚悉波罗摩尼莎诃!"); // 杀生前先打印往生咒,见码云issue#IW4H8 + Logger.info("脑图快捷键: T:顶视 F:前视 L:左视 R:右视 X:斜视 方向键:剖视 空格:暂停 鼠标:缩放旋转平移"); + if (DELETE_FROG_EGGS) + FrogEggTool.deleteEggs(); + for (int i = 0; i < display_gene.length; i++) + display_gene[i] = true; + } + + public Env() { + super(); + this.setLayout(null);// 空布局 + this.setBounds(1, 1, ENV_WIDTH, ENV_HEIGHT); + } + + public static boolean insideBrain(int x, int y) {// 如果指定点在边界内 + return !(x < 0 || y < 0 || x >= BRAIN_XSIZE || y >= BRAIN_YSIZE); + } + + public static boolean insideBrain(int x, int y, int z) {// 如果指定点在边界内 + return !(x < 0 || y < 0 || z <= 0 || x >= BRAIN_XSIZE || y >= BRAIN_YSIZE || z >= BRAIN_ZSIZE); + } + + public static boolean insideBrain(float x, float y, float z) {// 如果指定点在边界内 + return !(x < 0 || y < 0 || z <= 0 || x >= BRAIN_XSIZE || y >= BRAIN_YSIZE || z >= BRAIN_ZSIZE); + } + + public static boolean insideEnv(int x, int y) {// 如果指定点在边界内 + return !(x < 0 || y < 0 || x >= ENV_WIDTH || y >= ENV_HEIGHT); + } + + public static boolean outsideEnv(int x, int y) {// 如果指定点超出边界 + return x < 0 || y < 0 || x >= ENV_WIDTH || y >= ENV_HEIGHT; + } + + public static boolean closeToEdge(Animal a) {// 靠近边界? 离死不远了 + return a.x < 20 || a.y < 20 || a.x > (Env.ENV_WIDTH - 20) || a.y > (Env.ENV_HEIGHT - 20); + } + + public static boolean foundAnyThingOrOutEdge(int x, int y) {// 如果指定点看到任意东西或超出边界,返回true + return x < 0 || y < 0 || x >= ENV_WIDTH || y >= ENV_HEIGHT || Env.bricks[x][y] != 0; + } + + public static boolean foundFrogOrOutEdge(int x, int y) {// 如果指定点看到青蛙或超出边界,返回true + if (x < 0 || y < 0 || x >= ENV_WIDTH || y >= ENV_HEIGHT) + return true;// 如果出界返回true + if ((Env.bricks[x][y] & Material.FROG_TAG) > 0) + return true; + else + return false; + } + + public static void setMaterial(int x, int y, int material) { + if (Env.insideEnv(x, y)) + Env.bricks[x][y] = Env.bricks[x][y] | material; + } + + public static boolean hasMaterial(int x, int y, int material) { + if (!Env.insideEnv(x, y)) + return false; + return (Env.bricks[x][y] & material) > 0; + } + + public static void clearMaterial(int x, int y, int material) { + if (Env.insideEnv(x, y)) + Env.bricks[x][y] = Env.bricks[x][y] & ~material; + } + + private void rebuildFrogs() {// 根据蛙蛋重新孵化出蛙 + frogs.clear(); + for (int i = 0; i < frog_eggs.size(); i++) {// 创建青蛙,每个蛋生成n个蛙,并随机取一个别的蛋作为精子 + int loop = FROG_PER_EGG; + if (frog_eggs.size() > 20) { // 如果数量多,进行一些优化,让排名靠前的Egg多孵出青蛙 + if (i < FROG_PER_EGG)// 0,1,2,3 + loop = FROG_PER_EGG + 1; + if (i >= (frog_eggs.size() - FROG_PER_EGG)) + loop = FROG_PER_EGG - 1; + } + for (int j = 0; j < loop; j++) { + Egg zygote = new Egg(frog_eggs.get(i), frog_eggs.get(RandomUtils.nextInt(frog_eggs.size()))); + Frog f = new Frog(zygote); + frogs.add(f); + f.no = frogs.size(); + } + } + } + + private void drawWorld(Graphics g) { + int brick; + for (int x = 0; x < ENV_WIDTH; x++) + for (int y = 0; y < ENV_HEIGHT; y++) { + brick = bricks[x][y]; + if (brick != 0) { + g.setColor(Material.color(brick)); + if ((brick & Material.FOOD) > 0) { + g.fillRoundRect(x, y, 4, 4, 2, 2); //食物只有一个点太小,画大一点 + } else + g.drawLine(x, y, x, y); // only 1 point + } + } + g.setColor(Color.BLACK); + } + + static final NumberFormat format100 = NumberFormat.getPercentInstance(); + static { + format100.setMaximumFractionDigits(2); + } + + private String foodAtedCount() {// 统计吃食总数等 + int maxFound = 0; + for (Frog f : frogs) + if (f.ateFood > maxFound) + maxFound = f.ateFood; + return new StringBuilder("吃食率:").append(format100.format(Food.food_ated * 1.00 / FOOD_QTY)).append(", 平均: ").append(Food.food_ated * 1.0f / FROG_PER_SCREEN).append(",最多:").append(maxFound) + .toString(); + } + + public static void checkIfPause() { + if (pause) + do { + Application.brainPic.drawBrainPicture(); + Application.brainPic.requestFocus(); + sleep(100); + } while (pause); + } + + public static void sleep(long millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static Animal getShowAnimal() { + return frogs.get(current_screen * FROG_PER_SCREEN); + } + + public void run() { + FrogEggTool.loadFrogEggs(); // 从磁盘加载蛙egg,或新建一批egg + Image buffImg = createImage(this.getWidth(), this.getHeight()); + Graphics g = buffImg.getGraphics(); + long time0;// 计时用 + int round = 1; + do { + rebuildFrogs(); // 根据蛙蛋重新孵化出蛙,注意基因变异有可能在孵化过程中发生 + for (current_screen = 0; current_screen < SCREEN; current_screen++) {// 分屏测试,每屏FROG_PER_SCREEN个蛙 + time0 = System.currentTimeMillis(); + for (EnvObject thing : things) // 创建食物、陷阱等物体 + thing.build(); + boolean allDead = false; + for (int j = 0; j < FROG_PER_SCREEN; j++) { + Frog f = frogs.get(current_screen * FROG_PER_SCREEN + j); + f.initAnimal(); // 初始化器官延迟到这一步,是因为脑细胞太占内存,而且当前屏测完后会清空 + } + for (step = 0; step < STEPS_PER_ROUND; step++) { + for (EnvObject thing : things)// 调用食物、陷阱等物体的动作 + thing.active(); + if (allDead) + break; // 青蛙全死光了就直接跳到下一轮,以节省时间 + allDead = true; + for (int j = 0; j < FROG_PER_SCREEN; j++) { + Frog f = frogs.get(current_screen * FROG_PER_SCREEN + j); + if (f.active())// 调用青蛙的Active方法,并返回是否还活着 + allDead = false; + } + + if (SHOW_SPEED > 0 && step % SHOW_SPEED != 0) // 用是否跳帧画图的方式来控制速度 + continue; + + sleep(100); + + // 开始画虚拟环境和青蛙和蛇 + g.setColor(Color.white); + g.fillRect(0, 0, this.getWidth(), this.getHeight()); // 先清空虚拟环境 + g.setColor(Color.BLACK); + drawWorld(g);// 画整个虚拟环境 + for (int j = 0; j < FROG_PER_SCREEN; j++) { // 显示青蛙 + Frog f = frogs.get(current_screen * FROG_PER_SCREEN + j); + f.show(g); + } + + if (SHOW_FIRST_ANIMAL_BRAIN) {// 在showAnimal上画一个红圈 + Animal showAnimal = getShowAnimal(); + if (showAnimal != null) { + g.setColor(Color.red); + g.drawArc(showAnimal.x - 15, showAnimal.y - 15, 30, 30, 0, 360); + g.setColor(Color.BLACK); + } + } + if (DRAW_BRAIN_AFTER_STEPS > 0 && step % DRAW_BRAIN_AFTER_STEPS == 0) + Application.brainPic.drawBrainPicture(); + Graphics g2 = this.getGraphics(); + g2.drawImage(buffImg, 0, 0, this); + } + if (SHOW_FIRST_ANIMAL_BRAIN) + Application.brainPic.drawBrainPicture(); + checkIfPause(); + for (int j = 0; j < FROG_PER_SCREEN; j++) { + Frog f = frogs.get(current_screen * FROG_PER_SCREEN + j); + } + StringBuilder sb = new StringBuilder("Round: "); + sb.append(round).append(", screen:").append(current_screen).append(", speed:").append(Env.SHOW_SPEED).append(", ").append(", 用时: ").append(System.currentTimeMillis() - time0) + .append("ms, "); + sb.append(foodAtedCount()); + + Application.mainFrame.setTitle(sb.toString()); + for (EnvObject thing : things)// 去除食物、陷阱等物体 + thing.destory(); + } + round++; + FrogEggTool.layEggs(); //能量高的青蛙才有权下蛋 + } while (true); + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Frog.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Frog.java new file mode 100644 index 0000000..f2dbeb8 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/Frog.java @@ -0,0 +1,29 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog; + +import com.gitee.drinkjava2.frog.egg.Egg; +import com.gitee.drinkjava2.frog.objects.Material; + +/** + * Frog is child class of Animal, Frog's name is Sam + * Frog是Animal的一个子类 + * + * @since 1.0 + */ +public class Frog extends Animal { + + public Frog(Egg egg) { + super(egg); + animalMaterial = Material.FROG_TAG; + animalImage = Animal.FROG_IMAGE; + } +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java new file mode 100644 index 0000000..22a3c64 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/BrainPicture.java @@ -0,0 +1,456 @@ +package com.gitee.drinkjava2.frog.brain; + +import static java.awt.Color.BLACK; +import static java.awt.Color.RED; +import static java.awt.Color.WHITE; +import static java.lang.Math.cos; +import static java.lang.Math.round; +import static java.lang.Math.sin; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.image.BufferedImage; +import java.util.ArrayList; + +import javax.swing.JPanel; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Application; +import com.gitee.drinkjava2.frog.Env; +import com.gitee.drinkjava2.frog.util.ColorUtils; +import com.gitee.drinkjava2.frog.util.Tree8Util; + +/** + * BrainPicture show first frog's brain structure, for debug purpose only + * + * 这个类用来画出脑图,这不是一个关键类,对脑的运行逻辑无影响,但有了脑图后可以直观地看出脑的3维结构,进行有针对性的改进 + * 可以用鼠标进行平移、缩放、旋转,以及t、f、l、r,x五个键来选择顶视、前视、左视、右视、斜视这5个方向的视图,以及空格暂停、方向键调整切面 + * 鼠标的动作定义在MouseAction类中。 + * + * @author Yong Zhu + * @since 1.0 + */ +@SuppressWarnings("all") +public class BrainPicture extends JPanel { + private static final long serialVersionUID = 1L; + + private static final float D90 = (float) (Math.PI / 2); + + Color picColor = RED; + int brainDispWidth; // screen display piexls width + float scale; // brain scale + int xOffset = 0; // brain display x offset compare to screen + int yOffset = 0; // brain display y offset compare to screen + float xAngle = D90 * .8f; // brain rotate on x axis + float yAngle = D90 / 4; // brain rotate on y axis + float zAngle = 0;// brain rotate on z axis + int xMask = -1;// x Mask + int yMask = -1;// y Mask + BufferedImage buffImg; + Graphics g; + String note; + public KeyAdapter keyAdapter; + + public BrainPicture(int x, int y, float brainWidth, int brainDispWidth) { + super(); + this.setLayout(null);// 空布局 + this.brainDispWidth = brainDispWidth; + scale = 0.5f * brainDispWidth / brainWidth; + this.setBounds(x, y, brainDispWidth + 1, brainDispWidth + 1); + buffImg = new BufferedImage(Env.FROG_BRAIN_DISP_WIDTH, Env.FROG_BRAIN_DISP_WIDTH, BufferedImage.TYPE_INT_RGB); + g = buffImg.getGraphics(); + MouseAction act = new MouseAction(this); + this.addMouseListener(act); // 添加鼠标动作监听 + this.addMouseWheelListener(act);// 添加鼠标滚轮动作监听 + this.addMouseMotionListener(act);// 添加鼠标移动动作监听 + + keyAdapter = new KeyAdapter() {// 处理t,f,l,r,x键盘命令 + @Override + public void keyPressed(KeyEvent e) { + switch (e.getKeyCode()){ + case KeyEvent.VK_UP:// Y切面向上 + yMask++; + if (yMask > Env.BRAIN_YSIZE) + yMask = Env.BRAIN_YSIZE; + break; + case KeyEvent.VK_DOWN:// Y切面向下 + yMask--; + if (yMask < 0) + yMask = 0; + break; + case KeyEvent.VK_LEFT:// x切面向左 + xMask--; + if (xMask < 0) + xMask = 0; + break; + case KeyEvent.VK_RIGHT:// x切面向右 + xMask++; + if (xMask > Env.BRAIN_XSIZE) + xMask = Env.BRAIN_XSIZE; + break; + case ' ':// 暂停及继续 + Application.pauseAction.actionPerformed(null); + break; + case 'T':// 顶视 + xAngle = 0; + yAngle = 0; + zAngle = 0; + break; + case 'F':// 前视 + xAngle = D90; + yAngle = 0; + zAngle = 0; + break; + case 'L':// 左视 + xAngle = D90; + yAngle = D90; + zAngle = 0; + break; + case 'R':// 右视 + xAngle = D90; + yAngle = -D90; + zAngle = 0; + break; + case 'X':// 斜视 + xAngle = D90 * .8f; + yAngle = D90 / 4; + zAngle = 0; + break; + default: + } + } + }; + addKeyListener(keyAdapter); + this.setFocusable(true); + } + + public void drawCuboid(Cuboid c) {// 在脑图上画一个长立方体框架,视角是TopView + drawCuboid(c.x, c.y, c.z, c.xe, c.ye, c.ze); + } + + public void drawCuboid(float x, float y, float z, float xe, float ye, float ze) {// 在脑图上画一个长立方体框架,视角是TopView + drawLine(x, y, z, x + xe, y, z);// 画立方体的下面边 + drawLine(x + xe, y, z, x + xe, y + ye, z); + drawLine(x + xe, y + ye, z, x, y + ye, z); + drawLine(x, y + ye, z, x, y, z); + + drawLine(x, y, z, x, y, z + ze);// 画立方体的中间边 + drawLine(x + xe, y, z, x + xe, y, z + ze); + drawLine(x + xe, y + ye, z, x + xe, y + ye, z + ze); + drawLine(x, y + ye, z, x, y + ye, z + ze); + + drawLine(x, y, z + ze, x + xe, y, z + ze);// 画立方体的上面边 + drawLine(x + xe, y, z + ze, x + xe, y + ye, z + ze); + drawLine(x + xe, y + ye, z + ze, x, y + ye, z + ze); + drawLine(x, y + ye, z + ze, x, y, z + ze); + } + + /*- + 画线,固定以top视角的角度,所以只需要从x1,y1画一条到x2,y2的直线 + 绕 x 轴旋转 θ + x, y.cosθ-zsinθ, y.sinθ+z.cosθ + + 绕 y 轴旋转 θ + z.sinθ+x.cosθ, y, z.cosθ-x.sinθ + + 绕 z 轴旋转 θ + x.cosθ-y.sinθ, x.sinθ+y.consθ, z + -*/ + public void drawLine(float px1, float py1, float pz1, float px2, float py2, float pz2) { + double x1 = px1 - Env.BRAIN_XSIZE / 2; + double y1 = -py1 + Env.BRAIN_YSIZE / 2;// 屏幕的y坐标是反的,显示时要正过来 + double z1 = pz1 - Env.BRAIN_ZSIZE / 2; + double x2 = px2 - Env.BRAIN_XSIZE / 2; + double y2 = -py2 + Env.BRAIN_YSIZE / 2;// 屏幕的y坐标是反的,显示时要正过来 + double z2 = pz2 - Env.BRAIN_ZSIZE / 2; + x1 = x1 * scale; + y1 = y1 * scale; + z1 = z1 * scale; + x2 = x2 * scale; + y2 = y2 * scale; + z2 = z2 * scale; + double x, y, z; + y = y1 * cos(xAngle) - z1 * sin(xAngle);// 绕x轴转 + z = y1 * sin(xAngle) + z1 * cos(xAngle); + y1 = y; + z1 = z; + + x = z1 * sin(yAngle) + x1 * cos(yAngle);// 绕y轴转 + // z = z1 * cos(yAngle) - x1 * sin(yAngle); + x1 = x; + // z1 = z; + + x = x1 * cos(zAngle) - y1 * sin(zAngle);// 绕z轴转 + y = x1 * sin(zAngle) + y1 * cos(zAngle); + x1 = x; + y1 = y; + + y = y2 * cos(xAngle) - z2 * sin(xAngle);// 绕x轴转 + z = y2 * sin(xAngle) + z2 * cos(xAngle); + y2 = y; + z2 = z; + + x = z2 * sin(yAngle) + x2 * cos(yAngle);// 绕y轴转 + // z = z2 * cos(yAngle) - x2 * sin(yAngle); + x2 = x; + // z2 = z; + + x = x2 * cos(zAngle) - y2 * sin(zAngle);// 绕z轴转 + y = x2 * sin(zAngle) + y2 * cos(zAngle); + x2 = x; + y2 = y; + + g.setColor(picColor); + g.drawLine((int) round(x1) + Env.FROG_BRAIN_DISP_WIDTH / 2 + xOffset, (int) round(y1) + Env.FROG_BRAIN_DISP_WIDTH / 2 + yOffset, (int) round(x2) + Env.FROG_BRAIN_DISP_WIDTH / 2 + xOffset, + (int) round(y2) + Env.FROG_BRAIN_DISP_WIDTH / 2 + yOffset); + } + + /** 画点,固定以top视角的角度,所以只需要在x1,y1位置画一个点 */ + public void drawPoint(float px1, float py1, float pz1, float r) { + double x1 = px1 - Env.BRAIN_XSIZE / 2; + double y1 = -py1 + Env.BRAIN_YSIZE / 2;// 屏幕的y坐标是反的,显示时要正过来 + double z1 = pz1 - Env.BRAIN_ZSIZE / 2; + x1 = x1 * scale; + y1 = y1 * scale; + z1 = z1 * scale; + double x, y, z; + y = y1 * cos(xAngle) - z1 * sin(xAngle);// 绕x轴转 + z = y1 * sin(xAngle) + z1 * cos(xAngle); + y1 = y; + z1 = z; + + x = z1 * sin(yAngle) + x1 * cos(yAngle);// 绕y轴转 + // z = z1 * cos(yAngle) - x1 * sin(yAngle); + x1 = x; + // z1 = z; + + x = x1 * cos(zAngle) - y1 * sin(zAngle);// 绕z轴转 + y = x1 * sin(zAngle) + y1 * cos(zAngle); + x1 = x; + y1 = y; + + g.setColor(picColor); + g.fillOval(round((float) x1 + Env.FROG_BRAIN_DISP_WIDTH / 2 + xOffset - r * scale * .5f), round((float) y1 + Env.FROG_BRAIN_DISP_WIDTH / 2 + yOffset - r * scale * .5f), round(r * scale), + round(r * scale)); + } + + /** 画一个圆 */ + public void drawCircle(float px1, float py1, float pz1, float r) {//这个方法实际和上面的一样的,只是改成了drawOval + double x1 = px1 - Env.BRAIN_XSIZE / 2; + double y1 = -py1 + Env.BRAIN_YSIZE / 2;// 屏幕的y坐标是反的,显示时要正过来 + double z1 = pz1 - Env.BRAIN_ZSIZE / 2; + x1 = x1 * scale; + y1 = y1 * scale; + z1 = z1 * scale; + double x, y, z; + y = y1 * cos(xAngle) - z1 * sin(xAngle);// 绕x轴转 + z = y1 * sin(xAngle) + z1 * cos(xAngle); + y1 = y; + z1 = z; + + x = z1 * sin(yAngle) + x1 * cos(yAngle);// 绕y轴转 + // z = z1 * cos(yAngle) - x1 * sin(yAngle); + x1 = x; + // z1 = z; + + x = x1 * cos(zAngle) - y1 * sin(zAngle);// 绕z轴转 + y = x1 * sin(zAngle) + y1 * cos(zAngle); + x1 = x; + y1 = y; + + g.setColor(picColor); + g.drawOval(round((float) x1 + Env.FROG_BRAIN_DISP_WIDTH / 2 + xOffset - r * scale * .5f), round((float) y1 + Env.FROG_BRAIN_DISP_WIDTH / 2 + yOffset - r * scale * .5f), round(r * scale), + round(r * scale)); + } + + public void drawText(float px1, float py1, float pz1, String text, float textSize) { + double x1 = px1 - Env.BRAIN_XSIZE / 2; + double y1 = -py1 + Env.BRAIN_YSIZE / 2;// 屏幕的y坐标是反的,显示时要正过来 + double z1 = pz1 - Env.BRAIN_ZSIZE / 2; + x1 = x1 * scale; + y1 = y1 * scale; + z1 = z1 * scale; + double x, y, z; + y = y1 * cos(xAngle) - z1 * sin(xAngle);// 绕x轴转 + z = y1 * sin(xAngle) + z1 * cos(xAngle); + y1 = y; + z1 = z; + + x = z1 * sin(yAngle) + x1 * cos(yAngle);// 绕y轴转 + // z = z1 * cos(yAngle) - x1 * sin(yAngle); + x1 = x; + // z1 = z; + + x = x1 * cos(zAngle) - y1 * sin(zAngle);// 绕z轴转 + y = x1 * sin(zAngle) + y1 * cos(zAngle); + x1 = x; + y1 = y; + + g.setColor(picColor); + g.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, (int) round(textSize * scale))); + g.drawString(text, (int) round(x1) + Env.FROG_BRAIN_DISP_WIDTH / 2 + xOffset, (int) round(y1) + Env.FROG_BRAIN_DISP_WIDTH / 2 + yOffset); + + } + + private static Cuboid brain = new Cuboid(0, 0, 0, Env.BRAIN_XSIZE, Env.BRAIN_YSIZE, Env.BRAIN_ZSIZE); + + public void drawBrainPicture() {// 在这个方法里进行动物的三维脑结构的绘制,蛇是青蛙的子类,所以也可以当参数传进来 + if (!Env.SHOW_FIRST_ANIMAL_BRAIN) + return; + if (Env.show_split_detail) + drawSplitDetail(); + else + drawBrainStructure(); + } + + public void drawSplitDetail() {// 在这个方法里绘制脑细胞分裂的显示步聚,即从一个细胞开始分裂成最终脑结构的每一步 + Animal a = Env.getShowAnimal(); // 第一个青蛙或蛇 + + for (int i = Env.BRAIN_CUBE_SIZE; i >= 1; i /= 2) { + g.setColor(WHITE);// 先清空旧图, g是buffImg,绘在内存中 + g.fillRect(0, 0, brainDispWidth, brainDispWidth); + g.setColor(BLACK); // 画边框 + g.drawRect(0, 0, brainDispWidth, brainDispWidth); + + for (int geneIndex = 0; geneIndex < Cells.GENE_NUMBERS; geneIndex++) { + ArrayList gene = a.genes.get(geneIndex); + Tree8Util.knockNodesByGene(gene); + for (int j = 0; j < Tree8Util.NODE_QTY; j++) { + if (Tree8Util.keep[j] >= 0) { + int[] node = Tree8Util.TREE8[j]; + int size = node[0]; + if (size == i && Env.display_gene[geneIndex]) {//如果允许显示的话, 显示当前层级的节点 + setPicColor(ColorUtils.colorByCode(geneIndex)); + drawPoint(node[1] + size / 2, node[2] + size / 2, node[3] + size / 2, size * (0.5f - geneIndex * 0.05f)); + } + } + } + } + g.setColor(BLACK); + drawCuboid(brain);// 把脑的框架画出来 + this.getGraphics().drawImage(buffImg, 0, 0, this);// 利用缓存避免画面闪烁,这里输出缓存图片 + if (!Env.show_split_detail) + return; + try { + Thread.sleep(500); + } catch (InterruptedException e) { + } + } + } + + public void drawBrainStructure() {// 在这个方法里进行动物的三维脑结构的绘制,蛇是青蛙的子类,所以也可以当参数传进来 + Animal a = Env.getShowAnimal(); // 显示第一个青蛙或蛇 + if (a == null || !a.alive) + return; + g.setColor(WHITE);// 先清空旧图, g是buffImg,绘在内存中 + g.fillRect(0, 0, brainDispWidth, brainDispWidth); + g.setColor(BLACK); // 画边框 + g.drawRect(0, 0, brainDispWidth, brainDispWidth); + + for (int z = 0; z < Env.BRAIN_CUBE_SIZE; z++) { + for (int y = Env.BRAIN_CUBE_SIZE - 1; y >= 0; y--) { + for (int x = Env.BRAIN_CUBE_SIZE - 1; x >= 0; x--) { + if (x >= xMask && y >= yMask && a.cells[x][y][z] != 0) + for (int geneIndex = 0; geneIndex < Cells.GENE_NUMBERS; geneIndex++) { + if ((a.cells[x][y][z] & (1 << geneIndex)) != 0 && Env.display_gene[geneIndex]) { + setPicColor(ColorUtils.colorByCode(geneIndex)); //开始画出对应的细胞基因参数,用不同颜色直径圆表示 + drawPoint(x + 0.5f, y + 0.5f, z + 0.5f, geneIndex == 0 ? 0.8f : 0.5f - geneIndex * 0.05f); + } + } + } + } + } + + setPicColor(Color.ORANGE); //开始画出光子 + for (float[] p : a.photons) + drawPoint(p[0]+0.5f, (int)p[1]+0.5f, (int)p[2]+0.5f, 0.2f); + + setPicColor(Color.BLACK); + //BrainShapeJudge.show(this);//这行显示目标形状这个模子 + + drawCuboid(brain);// 把脑的框架画出来 + + setPicColor(BLACK); //把x,y,z坐标画出来 + drawText(Env.BRAIN_CUBE_SIZE, 0, 0, "x", 2); + drawText(0, Env.BRAIN_CUBE_SIZE, 0, "y", 2); + drawText(0, 0, Env.BRAIN_CUBE_SIZE, "z", 2); + setPicColor(RED); + drawLine(0, 0, 0, Env.BRAIN_CUBE_SIZE, 0, 0); + drawLine(0, 0, 0, 0, Env.BRAIN_CUBE_SIZE, 0); + drawLine(0, 0, 0, 0, 0, Env.BRAIN_CUBE_SIZE); + + g.setColor(Color.black); + if (note != null) // 全局注释 + g.drawString(note, 30, 55); + this.getGraphics().drawImage(buffImg, 0, 0, this);// 利用缓存避免画面闪烁,这里输出缓存图片 + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + + public static void setNote(String note) { + Application.brainPic.note = note; + } + + // getters & setters + public float getScale() { + return scale; + } + + public void setScale(float scale) { + this.scale = scale; + } + + public float getxAngle() { + return xAngle; + } + + public void setxAngle(float xAngle) { + this.xAngle = xAngle; + } + + public float getyAngle() { + return yAngle; + } + + public void setyAngle(float yAngle) { + this.yAngle = yAngle; + } + + public float getzAngle() { + return zAngle; + } + + public void setzAngle(float zAngle) { + this.zAngle = zAngle; + } + + public void setPicColor(Color color) { + this.picColor = color; + } + + public Color getPicColor() { + return picColor; + } + + public int getxOffset() { + return xOffset; + } + + public void setxOffset(int xOffset) { + this.xOffset = xOffset; + } + + public int getyOffset() { + return yOffset; + } + + public void setyOffset(int yOffset) { + this.yOffset = yOffset; + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java new file mode 100644 index 0000000..6f96629 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cells.java @@ -0,0 +1,63 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.brain; + +/** + * Cells代表不同的脑细胞参数,对应每个参数,细胞有不同的处理光子的行为 + * + * @author Yong Zhu + * @since 10.0 + */ +@SuppressWarnings("all") +public class Cells { + public static long[] GENES = new long[64]; + + public static int GENE_NUMBERS = 0; //目前有多少条基因,每个脑细胞用是一个long来存储,所以最多允许64条基因,每个基因控制一个细胞的参数 + private static long gene = 1L; + + public static final long TREE_CELL = nextMask(); //细胞如激活,青蛙向上运动 + + //public static final long EYE = nextMask(); //光线感觉细胞,即视网膜 +// public static final long FELL_HAPPY = nextMask(); //快乐感觉细胞,通常吃食后激活 +// public static final long FELL_PAIN = nextMask(); //痛苦感觉细胞,受伤害后激活 +// +// public static final long MOVE_UP = nextMask(); //细胞如激活,青蛙向上运动 +// public static final long MOVE_DOWN = nextMask();//细胞如激活,青蛙向下运动 +// public static final long MOVE_LEFT = nextMask(); //细胞如激活,青蛙向左运动 +// public static final long MOVE_RIGHT = nextMask(); //细胞如激活,青蛙向右运动 +// public static final long MOVE_ANY = MOVE_UP | MOVE_DOWN | MOVE_LEFT | MOVE_RIGHT; //任意移动,是上面四个bit位的合并 + +// +// public static final long PHOTON_DELETE = nextMask(); // 删除光子 +// public static final long PHOTON_ABSORB = nextMask(); // 删除并吸收光子能量 +// public static final long PHOTON_FIX = nextMask(); //固定光子,使光子不能移动 +// public static final long PHOTON_ENHENCE = nextMask(); // 提高光子能量 +// public static final long PHOTON_WEAKEN = nextMask(); //减弱光子能量 +// public static final long PHOTON_SEND = nextMask(); //如细胞有能量,发送光子 +// public static final long PHOTON_SEND_NEG = nextMask(); //如细胞有能量,发送负能量光子 +// +// public static final long PHOTON_LIMIT_UP = nextMask(); //光子只能向上扇面发送 +// public static final long PHOTON_LIMIT_DOWN = nextMask(); //光子只能向下扇面发送 +// public static final long PHOTON_LIMIT_LEFT = nextMask(); //光子只能向左扇面发送 +// public static final long PHOTON_LIMIT_RIGHT = nextMask(); //光子只能向右扇面发送 +// public static final long PHOTON_LIMIT_FRONT = nextMask(); //光子只能向前扇面发送 +// public static final long PHOTON_LIMIT_BACK = nextMask(); //光子只能向后扇面发送 + + private static long nextMask() {// 每次将Code左移1位 + long result = gene; + if (result < 0) + throw new IllegalArgumentException("Mask out of maximum long integer range"); + GENES[GENE_NUMBERS++] = gene; + gene = gene << 1; //这个gene占用long的一位,将来判断一个细胞是否包含此基因只要与它做“与”运算 + return result; + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cuboid.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cuboid.java new file mode 100644 index 0000000..1e15c42 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/Cuboid.java @@ -0,0 +1,55 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.brain; + +/** + * Cuboid represents a rectangular prism 3d zone in brain + * + * Cuboid是一个长方体,通常用来表示脑内器官的形状 + * + * @author Yong Zhu + * @since 2.0.2 + */ +@SuppressWarnings("all") +public class Cuboid { + private static final long serialVersionUID = 1L; + + public float x;// x,y,z是长方体的左下角坐标 + public float y; + public float z; + public float xe;// xe,ye,ze分别是长方体三边长 + public float ye; + public float ze; + + public Cuboid() { + // 空构造器不能省 + } + + public Cuboid(float x, float y, float z, float xe, float ye, float ze) {// 用x,y,z,r来构造 + this.x = x; + this.y = y; + this.z = z; + this.xe = xe; + this.ye = ye; + this.ze = ze; + } + + public Cuboid(Cuboid c) {// 用另一个Cuboid来构造 + this.x = c.x; + this.y = c.y; + this.z = c.z; + this.xe = c.xe; + this.ye = c.ye; + this.ze = c.ze; + } + + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/MouseAction.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/MouseAction.java new file mode 100644 index 0000000..337e5de --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/brain/MouseAction.java @@ -0,0 +1,107 @@ +package com.gitee.drinkjava2.frog.brain; + +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; + +/** + * MouseAction + * + * 这个类用来处理脑图BrainPicture上的鼠标动作,有平移、旋转、缩放三种 + * + * @author Yong Zhu + * @since 2.0.2 + */ +public class MouseAction implements MouseListener, MouseWheelListener, MouseMotionListener { + private BrainPicture brainPic; + private int buttonPressed = 0; + private int x; + private int y; + + public MouseAction(BrainPicture brainPic) { + this.brainPic = brainPic; + } + + @Override + public void mousePressed(MouseEvent e) {// 记录当前鼠标点 + if (e.getButton() == 1)// 旋转 + buttonPressed = 1; + else if (e.getButton() == 2)// 缩放 + buttonPressed = 2; + else + buttonPressed = 0; + x = e.getPoint().x; + y = e.getPoint().y; + brainPic.requestFocus(); + } + + @Override + public void mouseReleased(MouseEvent e) { + buttonPressed = 0; + } + + @Override + public void mouseWheelMoved(MouseWheelEvent e) {// 缩放 + if (e.getWheelRotation() < 0) { + brainPic.scale *= 1.1; + brainPic.xOffset *= 1.1; + brainPic.yOffset *= 1.1; + } else { + brainPic.scale /= 1.1; + brainPic.xOffset /= 1.1; + brainPic.yOffset /= 1.1; + } + } + + @Override + public void mouseDragged(MouseEvent e) {// 旋转 + if (buttonPressed == 1) { + if (e.getX() > x && e.getY() > y) + brainPic.zAngle -= .00f; + else if (e.getX() < x && e.getY() < y) + brainPic.zAngle += .00f; + else { + if (e.getX() > x) + brainPic.yAngle += .02f; + if (e.getX() < x) + brainPic.yAngle -= .02f; + if (e.getY() > y) + brainPic.xAngle -= .02f; + if (e.getY() < y) + brainPic.xAngle += .02f; + } + x = e.getX(); + y = e.getY(); + } + if (buttonPressed == 2) {// 平移 + if (e.getX() > x) + brainPic.xOffset += 6; + if (e.getX() < x) + brainPic.xOffset -= 6; + if (e.getY() > y) + brainPic.yOffset += 6; + if (e.getY() < y) + brainPic.yOffset -= 6; + x = e.getX(); + y = e.getY(); + } + } + + @Override + public void mouseClicked(MouseEvent e) {// do nothing + } + + @Override + public void mouseEntered(MouseEvent e) {// do nothing + } + + @Override + public void mouseExited(MouseEvent e) {// do nothing + } + + @Override + public void mouseMoved(MouseEvent e) { // do nothing + } +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/Egg.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/Egg.java new file mode 100644 index 0000000..b536614 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/Egg.java @@ -0,0 +1,65 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.egg; + +import java.io.Serializable; +import java.util.ArrayList; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Env; +import com.gitee.drinkjava2.frog.util.RandomUtils; + +/** + * Egg is the static structure description of brain cells + * + * 蛋存在的目的是为了以最小的字节数串行化存储脑细胞,它是海量脑细胞的生成算法描述,而不是脑细胞本身 + * 蛋和基因的关系:基因是一种语言,相当于染色体,不存在坐标位置。蛋则是基因的载体,有x,y坐标,表示在虚拟环境中蛋存在的位置。 + * + * 另外青蛙本身也是基因的载体,所以青蛙里有一个gene属性 + * + * @author Yong Zhu + * @since 1.0 + */ +public class Egg implements Serializable { + private static final long serialVersionUID = 1L; + public int x; // 蛋的x位置 + public int y; // 蛋的y位置 + + // gene record the 8-tree structure of brain cells + // 基因是随机生成的8叉树数据结构,和实际生物每个细胞都要保存一份基因不同,程序中每个脑细胞并不需要保存基因的副本,这样可以极大地减少内存占用 + public ArrayList> genes = new ArrayList<>(); + + public Egg() {// 无中生有,创建一个蛋,先有蛋,后有蛙 + x = RandomUtils.nextInt(Env.ENV_WIDTH); + y = RandomUtils.nextInt(Env.ENV_HEIGHT); + } + + /** Create egg from animal */ + public Egg(Animal a) { // 下蛋,每个器官会创建自已的副本或变异,可以是0或多个 + x = a.x; + y = a.y; + for (ArrayList gene : a.genes) {//下蛋就是把动物的基因拷贝到新蛋里,并有可能变异 + ArrayList g = new ArrayList<>(); + g.addAll(gene); + genes.add(g); + } + } + + /** + * Create a egg by join 2 eggs, x+y=zygote 模拟X、Y 染色体合并,两个蛋生成一个新的蛋 + */ + public Egg(Egg a, Egg b) {//两个蛋的基因混合, 生成一个新蛋 + x = a.x; + y = a.y; + genes.addAll(a.genes); //TODO: 两个蛋的基因混合 + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/FrogEggTool.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/FrogEggTool.java new file mode 100644 index 0000000..0fa2c0e --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/egg/FrogEggTool.java @@ -0,0 +1,112 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.egg; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Application; +import com.gitee.drinkjava2.frog.Env; +import com.gitee.drinkjava2.frog.Frog; +import com.gitee.drinkjava2.frog.util.LocalFileUtils; +import com.gitee.drinkjava2.frog.util.Logger; + +/** + * FrogEggTool save/load frog eggs to file + * + * @author Yong Zhu + * @since 1.0 + */ +@SuppressWarnings("all") +public class FrogEggTool { + + /** + * Frogs which have higher energy lay eggs + * + * 利用Java串行机制存盘。 能量多(也就是吃的更多)的Frog下蛋并存盘, 以进行下一轮测试,能量少的Frog被淘汰,没有下蛋的资格。 + * 用能量的多少来简化生存竟争模拟,每次下蛋数量固定为EGG_QTY个 + */ + public static void layEggs() { + sortFrogsOrderByEnergyDesc(); + Frog first = Env.frogs.get(0); + Frog last = Env.frogs.get(Env.frogs.size() - 1); + try { + Env.frog_eggs.clear(); + for (int i = 0; i < Env.FROG_EGG_QTY; i++) + Env.frog_eggs.add(new Egg(Env.frogs.get(i))); + Logger.info("Fist frog energy={}, Last frog energy={}", first.energy, last.energy); + if (Env.SAVE_EGGS_FILE) { + FileOutputStream fo = new FileOutputStream(Application.CLASSPATH + "frog_eggs.ser"); + ObjectOutputStream so = new ObjectOutputStream(fo); + so.writeObject(Env.frog_eggs); + so.close(); + Logger.info(". Saved {} eggs to file '{}frog_eggs.ser'", Env.frog_eggs.size(), Application.CLASSPATH); + } + } catch (IOException e) { + Logger.error(e); + } + } + + private static void sortFrogsOrderByEnergyDesc() {// 按能量多少给青蛙排序 + Collections.sort(Env.frogs, new Comparator() { + public int compare(Animal a, Animal b) { + if (a.energy > b.energy) + return -1; + else if (a.energy == b.energy) + return 0; + else + return 1; + } + }); + } + + public static void deleteEggs() { + Logger.info("Delete exist egg file: '{}frog_eggs.ser'", Application.CLASSPATH); + LocalFileUtils.deleteFile(Application.CLASSPATH + "frog_eggs.ser"); + } + + /** + * 从磁盘读入一批frog Egg + */ + @SuppressWarnings("unchecked") + public static void loadFrogEggs() { + boolean errorfound = false; + try { + FileInputStream eggsFile = new FileInputStream(Application.CLASSPATH + "frog_eggs.ser"); + ObjectInputStream eggsInputStream = new ObjectInputStream(eggsFile); + Env.frog_eggs = (List) eggsInputStream.readObject(); + Logger.info("Loaded " + Env.frog_eggs.size() + " eggs from file '" + Application.CLASSPATH + + "frog_eggs.ser" + "'.\n"); + eggsInputStream.close(); + } catch (Exception e) { + errorfound = true; + } + if (errorfound) { + Env.frog_eggs.clear(); + for (int j = 0; j < Env.FROG_EGG_QTY; j++) { + Egg egg = new Egg(); + Env.frog_eggs.add(egg); + } + Logger.info("Fail to load frog egg file '" + Application.CLASSPATH + "frog_eggs.ser" + "', created " + + Env.frog_eggs.size() + " eggs to do test."); + } + + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java new file mode 100644 index 0000000..5a005f0 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/MoveCellLocationJudge.java @@ -0,0 +1,42 @@ +package com.gitee.drinkjava2.frog.judge; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Env; + +/** + * MoveCellLocationJudge determine move cells can only be on bottom layer of brain + * + * 运动细胞只允许出现在脑的最底层,否则扣分 + */ +public class MoveCellLocationJudge {//NOSONAR + + public static void judge(Animal animal) {////检查animal的脑细胞分布和参数是否符合要求并加减分 + for (int x = 0; x < Env.BRAIN_CUBE_SIZE; x++) + for (int y = 0; y < Env.BRAIN_CUBE_SIZE; y++) + for (int z = 0; z < Env.BRAIN_CUBE_SIZE; z++) { + long cell = animal.cells[x][y][z]; + if (z >= 1) { + if ((cell & 1) > 0) //注意四个条件要分别判断和扣分,不能合并放在同一个if条件里,否则互相干扰,进化不出结果 + animal.penaltyAAAA(); + if ((cell & 2) > 0) + animal.penaltyAAAA(); + if ((cell & 4) > 0) + animal.penaltyAAAA(); + if ((cell & 8) > 0) + animal.penaltyAAAA(); + } + if (z == 0) { + if ((cell & 1) > 0) //注意四个条件要分别判断和扣分,不能合并放在同一个if条件里,否则互相干扰,进化不出结果 + animal.awardAAAA(); + if ((cell & 2) > 0) + animal.awardAAAA(); + if ((cell & 4) > 0) + animal.awardAAAA(); + if ((cell & 8) > 0) + animal.awardAAAA(); + } + } + + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/RainBowFishJudge.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/RainBowFishJudge.java new file mode 100644 index 0000000..39cd07f --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/RainBowFishJudge.java @@ -0,0 +1,84 @@ +package com.gitee.drinkjava2.frog.judge; + +import java.awt.Font; +import java.util.ArrayList; +import java.util.List; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Env; +import com.gitee.drinkjava2.frog.brain.BrainPicture; +import com.gitee.drinkjava2.frog.brain.Cells; +import com.gitee.drinkjava2.frog.util.StringPixelUtils; + +/** + * RainBowFishJudge to judge if is a rainbow fish, judge method be called in animal's initAnimal method + * + * 这个类的judge方法在动物的初始化后被调用,根据脑细胞群的三维结构和参数来对动物进行奖罚,即加减它的能量值,这是一个临时类,只是用来检验细胞三维成形功能,以后可能改名或删除 + * 这个类的show方法在绘脑图时调用,在脑图里显示脑细胞群的三维形状和参数,用不同颜色直径的空心圆来表示不同参数,judge方法就像是一个模子,细胞长在这个模子里的有奖,否则扣分 + */ +public class RainBowFishJudge {//NOSONAR + private static int[] C = new int[]{0, 0, Env.BRAIN_CUBE_SIZE / 2}; //C是中心点 + private static boolean[][][] shape = new boolean[Env.BRAIN_XSIZE][Env.BRAIN_YSIZE][Env.BRAIN_ZSIZE]; + private static List pointList = new ArrayList<>(); //pointList存放上面shape的所有有效点,用来加快显示循环而不用遍历三维数组 + static { + putPixiel("🐟"); + } + + public static void putPixiel(String str) { + byte[][] c = StringPixelUtils.getStringPixels(Font.SANS_SERIF, Font.PLAIN, Env.BRAIN_CUBE_SIZE, str); //要把frog二维像素变成立体的三维点放到points里和pointsList里供使用 + int w = c.length; + int h = c[0].length; + for (int z = 0; z < 5; z++) { + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { + if (c[x][y] > 0) { + int[] p = new int[]{C[0] + x, C[1] + y + 2, C[2] + z}; + if (!Animal.outBrainRange(p[0], p[1], p[2])) { + shape[p[0]][p[1]][p[2]] = true; + pointList.add(p); + } + } + } + } + } + } + + private static void judgeShape(Animal animal) {//检查animal的脑细胞是否位于brainShape的范围内 + for (int x = 0; x < Env.BRAIN_CUBE_SIZE; x++) { + for (int y = 0; y < Env.BRAIN_CUBE_SIZE; y++) { + for (int z = 0; z < Env.BRAIN_CUBE_SIZE; z++) { + if ((animal.cells[x][y][z] & 1) != 0) + if (shape[x][y][z]) { + animal.awardAAAA(); + } else { + animal.penaltyAAA(); + } + } + } + } + } + + public static void judgeColor(Animal animal) {//检查颜色与小鱼图像重合,且呈斑马纹色彩分布,是就加分,否则扣分 + float colorWidth = 1.0f * Env.BRAIN_CUBE_SIZE / Cells.GENE_NUMBERS; //每条彩带宽度 + for (int x = 0; x < Env.BRAIN_CUBE_SIZE; x++) + for (int y = 0; y < Env.BRAIN_CUBE_SIZE; y++) + for (int z = 0; z < Env.BRAIN_CUBE_SIZE; z++) + for (int i = 1; i <= Cells.GENE_NUMBERS; i++) + if ((animal.cells[x][y][z] & (1 << i)) != 0) //如果色彩存 + if ((animal.cells[x][y][z] & 1) != 0 && x >= (i - 1) * colorWidth && x <= (i * colorWidth)) + animal.awardAA(); + else + animal.penaltyA(); + } + + public static void judge(Animal animal) {////检查animal的脑细胞分布和参数是否符合要求并加减分 + judgeShape(animal); + judgeColor(animal); + } + + public static void show(BrainPicture pic) {// 在脑图上显示当前形状 + for (int[] p : pointList) + pic.drawCircle(p[0] + 0.5f, p[1] + 0.5f, p[2] + 0.5f, 1); + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java new file mode 100644 index 0000000..5c7a95d --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/judge/TreeShapeJudge.java @@ -0,0 +1,53 @@ +package com.gitee.drinkjava2.frog.judge; + +import com.gitee.drinkjava2.frog.Animal; +import com.gitee.drinkjava2.frog.Env; +import com.gitee.drinkjava2.frog.brain.Cells; + +/** + * TreeShapeJudge to create a tree + */ +public class TreeShapeJudge {//NOSONAR + + private static boolean hasCell(long[][][] cells, int x, int y, int z) { //检查指定位置是否有TREE_CELL + if (Animal.outBrainRange(x, y, z)) + return false; + return (cells[x][y][z] & Cells.TREE_CELL) > 0; + } + + //@formatter:off + private static boolean hasCellAround(long[][][] cells, int x, int y, int z) {//检查四周是否有TREE_CELL + if (hasCell(cells, x + 1, y, z))return true; + if (hasCell(cells, x - 1, y, z))return true; + if (hasCell(cells, x + 1, y+1, z))return true; + if (hasCell(cells, x - 1, y+1, z))return true; + if (hasCell(cells, x + 1, y-1, z))return true; + if (hasCell(cells, x - 1, y-1, z))return true; + if (hasCell(cells, x, y+1, z))return true; + if (hasCell(cells, x, y-1, z))return true; + return false; + } + //@formatter:on + + public static void judge(Animal animal) { + long[][][] cells = animal.cells; + for (int x = 0; x < Env.BRAIN_CUBE_SIZE; x++) + for (int y = 0; y < Env.BRAIN_CUBE_SIZE; y++) + for (int z = 0; z <= Env.BRAIN_CUBE_SIZE - 2; z++) { + long cell = cells[x][y][z]; + if ((cell & Cells.TREE_CELL) > 0) { + if ((z == 0 && x == Env.BRAIN_XSIZE / 2 && y == Env.BRAIN_YSIZE / 2) //如果在底部中心 + || //或 + (!hasCell(cells, x, y, z - 1) // 正下方没有cell + && !hasCellAround(cells, x, y, z) //且周围没有cell + && hasCellAround(cells, x, y, z - 1) //且下方周围有cell + )) + animal.awardAA(); + else + animal.penaltyAA(); + } + } + + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/EnvObject.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/EnvObject.java new file mode 100644 index 0000000..9f9229d --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/EnvObject.java @@ -0,0 +1,26 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.objects; + +/** + * EnvObject means some virtual object in Env + * + * @author Yong Zhu + * @since 1.0 + */ +public interface EnvObject { + + public void build(); // 在Env中创建本身物体,指改变Env.bricks数组元素为本身物体的组成材料。只在每屏测试前调用一次 + + public void destory();// 从Env中清除本身物体,只在每屏测试完成后调用一次 + + public void active(); // 每个步长都会调用一次这个方法 +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java new file mode 100644 index 0000000..6bbbcb2 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Food.java @@ -0,0 +1,81 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.objects; + +import static com.gitee.drinkjava2.frog.Env.ENV_HEIGHT; +import static com.gitee.drinkjava2.frog.Env.ENV_WIDTH; +import static com.gitee.drinkjava2.frog.Env.FOOD_QTY; + +import com.gitee.drinkjava2.frog.Env; +import com.gitee.drinkjava2.frog.util.RandomUtils; + +/** + * Food randomly scatter on Env + * 食物 + * + * @author Yong Zhu + * @since 1.0 + */ +public enum Food implements EnvObject { + FOOD; //FOOD是一个枚举型单例,整个环境只允许有一个FOOD实例 + + public static final int SMELL_RANGE = 3; + + public static int food_ated=0; + + public static int[][] smell = new int[ENV_WIDTH][ENV_HEIGHT];//食物的香味, 这个香味是为了优化速度,和算法无关。有香味,说明食物在附近,程序才会启动眼睛,在视网膜产生光子,没有香味就不启动眼睛以加快速度 + + @Override + public void build() { + food_ated=0; + for (int i = 0; i < FOOD_QTY; i++) { // 随机位置生成食物 + int x = RandomUtils.nextInt(ENV_WIDTH); + int y = RandomUtils.nextInt(ENV_HEIGHT); + if (!Env.hasMaterial(x, y, Material.FOOD)) { + Env.setMaterial(x, y, Material.FOOD); //在环境里标记上FOOD + changeSmell(x, y, 1); //产生此食物的香气 + } + } + } + + @Override + public void destory() { + food_ated=0; + for (int x = 0; x < ENV_WIDTH; x++) // 清除食物 + for (int y = 0; y < ENV_HEIGHT; y++) { + Env.clearMaterial(x, y, Material.FOOD); + smell[x][y] = 0; //清除所有香气 + } + } + + @Override + public void active() { + //食物除了被吃,它自己没有什么活动 + } + + private static void changeSmell(int x, int y, int value) { //在食物的附近增加或减少它的香味 + for (int xx = x - SMELL_RANGE; xx <= x + SMELL_RANGE; xx++) + for (int yy = y - SMELL_RANGE; yy <= y + SMELL_RANGE; yy++) + if (Env.insideEnv(xx, yy)) + smell[xx][yy] += value; + } + + public static boolean foundAndAteFood(int x, int y) {// 如果x,y有食物,将其清0,返回true + if (Env.hasMaterial(x, y, Material.FOOD)) { + food_ated++; + Env.clearMaterial(x, y, Material.FOOD);//在环境里清除FOOD + changeSmell(x, y, -1); //仅清除此食物产生的香气 + return true; + } + return false; + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Material.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Material.java new file mode 100644 index 0000000..2e1931d --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/objects/Material.java @@ -0,0 +1,50 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.objects; + +import java.awt.Color; + +/** + * Material store material types + * + * 虚拟环境中每个点由一个int代表,多个材料可以同时出现在同一个点,每种材料用int中的一个bit位来表示, + * 小于等于16384的位数用来标记青蛙序号,可利用Env.frogs.get(no-1)获取青蛙对象,其它各种材料用整数中其它位来表示 + * + * @author Yong Zhu + * @since 1.0 + */ +public class Material {// NOSONAR + + public static final int FROG_TAG = 0b11111111111111; // 16383 小于等于16384的位数用来标记青蛙序号,可利用Env.frogs.get(no-1)快速定位青蛙 + + private static int material = FROG_TAG + 1; // 大于16384用来作为各种材料的标记 + + public static final int FOOD = nextMaterial(); + public static final int SNAKE = nextMaterial(); // 蛇的图形 + public static final int KILL_ANIMAL = nextMaterial(); // if>=KILLFROG will kill animal + public static final int BRICK = nextMaterial();// brick will kill frog + public static final int TRAP = nextMaterial(); // trap will kill frog + + private static int nextMaterial() {// 每次将material左移1位 + material = material << 1; + if (material < 0) + throw new IllegalArgumentException("Material out of maximum range"); + return material; + } + + public static Color color(int material) { + if ((material & TRAP) > 0) + return Color.LIGHT_GRAY; + else + return Color.BLACK; + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/ColorUtils.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/ColorUtils.java new file mode 100644 index 0000000..d9776e7 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/ColorUtils.java @@ -0,0 +1,62 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +import java.awt.Color; + +/** + * Color Utilities used in this project + * + * @author Yong Zhu + * @since 1.0 + */ +public class ColorUtils { + + private static final Color[] rainbow = new Color[]{Color.GRAY, Color.GREEN, Color.RED, Color.BLUE, Color.YELLOW, Color.ORANGE, Color.MAGENTA, Color.CYAN}; + + private static int nextColor = 0; + + private ColorUtils() {// default private constr + } + + public static int nextColorCode() { + return nextColor++; + } + + public static Color nextRainbowColor() {// 返回下一个彩虹色 + if (nextColor == rainbow.length) + nextColor = 0; + return rainbow[nextColor++]; + } + + public static Color colorByCode(int i) {// 数值取模后返回一个固定彩虹色 + return rainbow[i % rainbow.length]; + } + + public static Color rainbowColor(float i) { // 根据数值大小范围,在8种彩虹色中取值 + if (i <= 20) + return Color.GRAY; + if (i <= 30) + return Color.BLACK; + if (i <= 50) + return Color.RED; + return Color.MAGENTA; + } + + public static Color grayColor(float f) { // 根据数值大小范围0~1000,返回一个灰度色,越大越黑 + if (f > 1000) + f = 1000; + int i1 = 255 - (int) Math.round(f * .255); + int i2 = 200 - (int) Math.round(f * .200); + int i3 = 150 - (int) Math.round(f * .150); + return new Color(i1, i2, i3); + } +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Cube.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Cube.java new file mode 100644 index 0000000..eeaa522 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Cube.java @@ -0,0 +1,32 @@ +/* + * Copyright 2018 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +/** + * Cube has x,y,z value + * + * @author Yong Zhu + * @since 2021-11-07 + */ +public class Cube { + public int x;//x,y,z是cube的左下前点坐标 + public int y; + public int z; + public int size;//size是cube的边长 + + public Cube(int x, int y, int z, int size) { + this.x = x; + this.y = y; + this.z = z; + this.size = size; + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/LocalFileUtils.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/LocalFileUtils.java new file mode 100644 index 0000000..7422435 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/LocalFileUtils.java @@ -0,0 +1,141 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * Local File Utilities used in this project + * + * @author Yong Zhu + * @since 1.0 + */ +public class LocalFileUtils { + + private LocalFileUtils() { + // default constructor + } + + public static boolean deleteFile(String fileFullPath) { + File file = new File(fileFullPath); + return file.delete(); // NOSONAR + } + + public static void writeFile(String fileFullPath, byte[] byteArry) { + File file = new File(fileFullPath); + if (!file.getParentFile().exists()) + file.getParentFile().mkdirs(); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(file); + fos.write(byteArry); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (fos != null) { + try { + try { + fos.flush(); + } catch (Exception e) { + } + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public static void writeFile(String fileFullPath, String text, String encoding) { + File file = new File(fileFullPath); + if (!file.getParentFile().exists()) + file.getParentFile().mkdirs(); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(file); + byte[] bytes; + bytes = text.getBytes(encoding); + fos.write(bytes); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (fos != null) { + try { + try { + fos.flush(); + } catch (Exception e) { + } + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public static String readFile(String fileFullPath, String encoding) { + InputStream inputStream; + try { + inputStream = new FileInputStream(new File(fileFullPath)); + } catch (FileNotFoundException e1) { + return null; + } + try { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int length; + while ((length = inputStream.read(buffer)) != -1) + result.write(buffer, 0, length); + String string = result.toString(encoding); + return string; + } catch (IOException e) { + e.printStackTrace(); + return null; + } finally { + try { + inputStream.close(); + } catch (IOException e) { + } + } + } + + public static void appendFile(String fileName, String content) { + FileOutputStream fos = null; + try { + fos = new FileOutputStream(fileName, true); + fos.write(content.getBytes()); + fos.write("\r\n".getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fos != null) { + try { + try { + fos.flush(); + } catch (Exception e) { + } + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Logger.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Logger.java new file mode 100644 index 0000000..8c72e24 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Logger.java @@ -0,0 +1,193 @@ +/* + * Copyright 2021 the original author or authors. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; + +/** + * Usually a logger tool is used like below: + * Logger log = LoggerFactory.getLogger(Xxxx.class); + * log.info("some msg"); + * + * But to simplify, in this project directly use static method: + * Logger.info("some msg"); + * + * @Description: 简版控制台日志打印,从码云上合并来,见 https://gitee.com/drinkjava2/frog/pulls/4 + * @author 栾成翔 + * @Date: 2021/12/07 + */ +@SuppressWarnings("all") +public class Logger { + private static final String LEV_EL = "debug"; + private static final int LEVEL_INT; + private static final BlockingQueue LOG_LIST = new ArrayBlockingQueue<>(256); + private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS"); + private static final OutputStream OUTPUT_STREAM = System.out; + private static final String LINE_SEPARATOR = System.getProperty("line.separator"); + private static final String DELIM_STR = "{}"; + private static final String TAB = "\tat"; + private static final Map LEVEL_MAP = new HashMap<>(); + + static { + LEVEL_MAP.put("DEBUG", 1); + LEVEL_MAP.put("INFO", 2); + LEVEL_MAP.put("WARN", 2); + LEVEL_MAP.put("ERROR", 2); + LEVEL_INT = LEVEL_MAP.get(LEV_EL.toUpperCase()); + new Thread(() -> { + while (true) { + try { + outPutConsole(LOG_LIST.take()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + }).start(); + } + + public static void debug(String msg) { + printLog(LEVEL_MAP.get("DEBUG"), msg); + } + + public static void debug(String msg, Object params) { + printLog(LEVEL_MAP.get("DEBUG"), msg, params); + } + + public static void debug(String msg, Object... params) { + printLog(LEVEL_MAP.get("DEBUG"), msg, params); + } + + public static void info(String msg) { + printLog(LEVEL_MAP.get("INFO"), msg); + } + + public static void info(String msg, Object params) { + printLog(LEVEL_MAP.get("INFO"), msg, params); + } + + public static void info(String msg, Object... params) { + printLog(LEVEL_MAP.get("INFO"), msg, params); + } + + public static void warn(String msg) { + printLog(LEVEL_MAP.get("WARN"), msg); + } + + public static void warn(String msg, Object params) { + printLog(LEVEL_MAP.get("WARN"), msg, params); + } + + public static void warn(String msg, Object... params) { + printLog(LEVEL_MAP.get("WARN"), msg, params); + } + + public static void error(String msg) { + printLog(LEVEL_MAP.get("ERROR"), msg); + } + + public static void error(String msg, Object params) { + printLog(LEVEL_MAP.get("ERROR"), msg, params); + } + + public static void error(String msg, Object... params) { + printLog(LEVEL_MAP.get("ERROR"), msg, params); + } + + public static void error(Object param) { + printLog(LEVEL_MAP.get("ERROR"), "", param); + } + + private static void printLog(int levelInt, String msg, Object... params) { + try { + if (levelInt >= LEVEL_INT) { + LOG_LIST.put(generateMsg(getLevelStr(levelInt), msg, params)); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + private static String generateMsg(String levelStr, String msg, Object... params) { + StackTraceElement stack = Thread.currentThread().getStackTrace()[4]; + String s = "{} [{}][{}#{} {}] - " + msg + LINE_SEPARATOR; + Object[] args = new Object[5 + params.length]; + args[0] = FORMAT.format(System.currentTimeMillis()); + args[1] = levelStr; + args[2] = stack.getClassName(); + args[3] = stack.getMethodName(); + args[4] = stack.getLineNumber(); + + Throwable throwable = null; + if (params.length > 0) { + final Object lastEntry = params[params.length - 1]; + if (lastEntry instanceof Throwable) { + throwable = (Throwable) lastEntry; + System.arraycopy(params, 0, args, 5, params.length - 1); + } else { + System.arraycopy(params, 0, args, 5, params.length); + } + } + return formatMsg(s, throwable, args); + } + + private static String formatMsg(String msg, Throwable throwable, Object... params) { + StringBuilder sb = new StringBuilder(); + int s; + int i = 0; + for (Object o : params) { + s = msg.indexOf(DELIM_STR, i); + if (s > -1) { + sb.append(msg, i, s).append(o); + i = s + 2; + } + } + sb.append(msg, i, msg.length()); + if (null != throwable) { + sb.append(throwable).append(LINE_SEPARATOR); + StackTraceElement[] stack = throwable.getStackTrace(); + for (StackTraceElement element : stack) { + sb.append(TAB).append(element).append(LINE_SEPARATOR); + } + } + return sb.toString(); + } + + private static void outPutConsole(String msg) { + try { + OUTPUT_STREAM.write(msg.getBytes(StandardCharsets.UTF_8)); + OUTPUT_STREAM.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static String getLevelStr(int levelInt) { + switch (levelInt) { + case 1: + return "DEBUG"; + case 2: + return "INFO"; + case 3: + return "WARN"; + case 4: + return "ERROR"; + default: + throw new IllegalStateException("Level " + levelInt + " is unknown."); + } + } +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java new file mode 100644 index 0000000..dff7533 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java @@ -0,0 +1,101 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +import java.util.Random; + +/** + * Random Utilities used in this project + * + * @author Yong Zhu + * @since 1.0 + */ +public class RandomUtils { + + private RandomUtils() { + } + + private static final Random rand = new Random(); + + public static int nextInt(int i) {//返回随机整数,最小为0,最大为n-1 + if(i==0) + return 0; + return rand.nextInt(i); + } + + public static int nextNegOrPosInt(int n) {//返回随机整数,最小为-(n-1),最大为n-1 + int x = nextInt(n); + if (percent(50)) + return x; + return -x; + } + + public static float nextFloat() { + return rand.nextFloat(); + } + + public static boolean percent(float percent) {// 有百分这percent的机率为true + return rand.nextFloat() * 100 < percent; + } + + public static int vary(int v, int percet) { + if (percent(percet)) + return vary(v); + return v; + } + + public static int vary(int v) {// 随机有大概率小变异,小概率大变异,极小概率极大变异 + if (percent(40)) + v += v * .04 * (nextFloat() - 0.5); // v=v+-.04 + if (percent(10)) + v += v * .103 * (nextFloat() - 0.5); // v=v+-0.1 + else if (percent(5)) + v += v * 1 * (nextFloat() - 0.5); // v=v+-0.4 + else if (percent(2)) + v += v * 4 * (nextFloat() - 0.5); // v=v+-2 + else if (percent(1f)) + v += v * 8 * (nextFloat() - 0.5); // v=v+-6 + return v; + } + + public static float vary(float v) {// 随机有大概率小变异,小概率大变异,极小概率极大变异 + if (percent(40)) + v += v * .04 * (nextFloat() - 0.5); // v=v+-.04 + if (percent(10)) + v += v * .103 * (nextFloat() - 0.5); // v=v+-0.1 + else if (percent(5)) + v += v * 1 * (nextFloat() - 0.5); // v=v+-0.4 + else if (percent(2)) + v += v * 4 * (nextFloat() - 0.5); // v=v+-2 + else if (percent(1f)) + v += v * 8 * (nextFloat() - 0.5); // v=v+-6 + return v; + } + + public static int varyInLimit(int v, int from, int to) {// 让返回值在from和to之间随机变异 + int i = vary(v); + if (i < from) + i = from; + if (i > to) + i = to; + return i; + } + + public static float varyInLimit(float v, float from, float to) {// 让返回值在from和to之间随机变异 + float i = vary(v); + if (i < from) + i = from; + if (i > to) + i = to; + return i; + } + +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/StringPixelUtils.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/StringPixelUtils.java new file mode 100644 index 0000000..db8d1ea --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/StringPixelUtils.java @@ -0,0 +1,105 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Map; + +/** + * StringPixelUtils used to get pixel array from a given string + * + * 根据给定的字体和字符串,返回它的像素点阵,lettersMap[0][0]是左下角素 + * + * @author Yong Zhu + * @since 2.0.2 + */ +public class StringPixelUtils { + private static final Map lettersMap = new HashMap<>();//cache + + public static byte[][] getSanserif10Pixels(String s) { + return getStringPixels(Font.SANS_SERIF, Font.PLAIN, 10, s); + } + + public static byte[][] getSanserif12Pixels(String s) { + return getStringPixels(Font.SANS_SERIF, Font.PLAIN, 12, s); + } + + public static byte[][] getSanserifItalic10Pixels(String s) { + return getStringPixels(Font.SANS_SERIF, Font.ITALIC, 10, s); + } + + /* 在内存 BufferedImage里输出文本并获取它的像素点 */ + public static byte[][] getStringPixels(String fontName, int fontStyle, int fontSize, String s) { + String key = new StringBuilder(fontName).append("_").append(fontStyle).append("_").append(fontSize).append("_") + .append(s).toString(); + if (lettersMap.containsKey(key)) + return lettersMap.get(key); + Font font = new Font(fontName, fontStyle, fontSize); + + BufferedImage bi = new BufferedImage(fontSize * 10, fontSize * 50, BufferedImage.TYPE_INT_RGB); + Graphics g = bi.getGraphics(); + Graphics2D g2d = (Graphics2D) g; + g2d.setFont(font); + FontMetrics fm = g2d.getFontMetrics(); + int strHeight = fm.getAscent() + fm.getDescent() - 1; + int strWidth = fm.stringWidth(s); + g2d.drawString(s, 0, fm.getAscent() - fm.getLeading() -1); + + int ystart;//改进:在命令行和eclipse下会有不同的空行,所以要用ystart和yend来限定只获取有效象素行数 + loop1: for (ystart = 0; ystart < strHeight; ystart++) + for (int x = 0; x < strWidth; x++) { + if (bi.getRGB(x, ystart) == -1) + break loop1; + } + + int yend; + loop2: for (yend = strHeight; yend >= 0; yend--) + for (int x = 0; x < strWidth; x++) { + if (bi.getRGB(x, yend) == -1) + break loop2; + } + + byte[][] b = new byte[strWidth][yend-ystart+1]; + for (int y = ystart; y <= yend; y++) + for (int x = 0; x < strWidth; x++) + if (bi.getRGB(x, y ) == -1) + b[x][yend-y] = 1; + else + b[x][yend-y] = 0; + lettersMap.put(key, b); + return b; + } + + /*- 这个是测试输出,平时不需要用 + public static void main(String[] args) { + System.out.println("==============="); + byte[][] c = getStringPixels(Font.SANS_SERIF, Font.PLAIN, 12, "FROG"); + int w = c.length; + int h = c[0].length; + + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { + if (c[x][h - y - 1] > 0) + System.out.print("*"); + else + System.out.print(" "); + } + System.out.println(); + } + System.out.println("==============="); + } + */ +} diff --git a/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Tree8Util.java b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Tree8Util.java new file mode 100644 index 0000000..5e84f73 --- /dev/null +++ b/history/010_tree_grow/src/main/java/com/gitee/drinkjava2/frog/util/Tree8Util.java @@ -0,0 +1,89 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +import java.util.List; + +import com.gitee.drinkjava2.frog.Env; + +/** + * Tree8Util used to store a pre-order Traversal tree array to speed + * + * 这里缓存着一个前序排列的八叉树用来在细胞生成时加快速度和简化运算,关于树结构可用深度树数组来表达的知识可以参见这里:https://my.oschina.net/drinkjava2/blog/1818631 + * + * @author Yong Zhu + * @since 1.0 + */ +public class Tree8Util { + + //EIGHT_TREE store a pre-order Traversal tree array + public static final int NODE_QTY = calculateNodeSize(Env.BRAIN_CUBE_SIZE); + + public static int[][] TREE8 = new int[NODE_QTY][4]; //八叉数用数组表示,第一维是深度树的行号,第二维是一个整数数组,内容是深度树表示的八叉树细胞的size, x, y, z值 + + public static byte[] keep = new byte[NODE_QTY]; //这里临时记录树的敲除记录,大于等于0的值表示要keep, 负数节点表示要敲除 + + private static byte[] KEEP = new byte[NODE_QTY]; //这里保存初值为0的数组常量,可以用System.arraycopy(KEEP, 0, keep, 0, NODE_QTY)快速清空enable数组 + + public static int keepNodeQTY = NODE_QTY; //这里临时记录需keep的节点总数,好用来继续敲除,初始值是全部节点 + + private static int index = 0; + static { + tree8Split(0, 0, 0, Env.BRAIN_CUBE_SIZE); + } + + static int calculateNodeSize(int n) {//计算8叉树全展开的总节点数 + if (n == 1) + return 1; + return n * n * n + calculateNodeSize(n / 2); + } + + //if cube can split, then split it to 8 small cubes + private static void tree8Split(int x, int y, int z, int size) {//如立方体可分裂,就继续递归分裂成8个 + TREE8[index++] = new int[]{size, x, y, z}; //这里size类似于深度树中的level,只不过是size从大到小,level是从小到大,原理一样 + if (size == 1) + return; + int half = size / 2;//每个细胞可以分裂成8个size为原来1/2的小细胞 + tree8Split(x, y, z, half); + tree8Split(x + half, y, z, half); + tree8Split(x, y + half, z, half); + tree8Split(x + half, y + half, z, half); + tree8Split(x, y, z + half, half); + tree8Split(x + half, y, z + half, half); + tree8Split(x, y + half, z + half, half); + tree8Split(x + half, y + half, z + half, half); + } + + public static void knockNodesByGene(List gene) {//根据基因,把要敲除的8叉树节点作敲除或保留标记 + System.arraycopy(KEEP, 0, keep, 0, NODE_QTY);//清空keep数组 + keepNodeQTY = NODE_QTY; + for (int g : gene) {//g基因,用带符号的8叉数的行号表示,负数表示阴节点要敲除,0或正数表示是阳节点要保留 + int gLine = Math.abs(g); //基因对应节点的行号 + int size = Tree8Util.TREE8[gLine][0]; //size是基因对应节点的细胞立方体边长 + for (int line = gLine; line < Tree8Util.NODE_QTY; line++) {//从这个g节点开始,往下找节点 + if (line > gLine && Tree8Util.TREE8[line][0] >= size) //如果除了第一个节点外,边长大于等于size,说明节点不是g的子节点,退出 + break; + else {//否则就是g的子节点 + if (g < 0) { //g是阴节点 + Tree8Util.keep[line]--; + if (Tree8Util.keep[line] == -1) //如果正好是-1,表示这个节点从保留状态转为删除状态 + keepNodeQTY--; + } else if (g > 0) { //g是阳节点 + Tree8Util.keep[line]++; + if (Tree8Util.keep[line] == 0) //如果正好是0,表示这个节点从删除状态又转回了保留状态 + keepNodeQTY++; + } + } + } + } + } + +} diff --git a/result17_tree_grow.gif b/result17_tree_grow.gif new file mode 100644 index 0000000000000000000000000000000000000000..6370556d1d6f1f4f69e07573192dbf317fd6b52c GIT binary patch literal 8155 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 literal 199271 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