parent
8158ad9336
commit
752006f6f9
File diff suppressed because one or more lines are too long
@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {yyyy} {name of copyright owner}
|
||||
|
||||
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.
|
@ -0,0 +1 @@
|
||||
mvn clean
|
@ -0,0 +1 @@
|
||||
mvn eclipse:clean
|
@ -0,0 +1,2 @@
|
||||
call mvn eclipse:eclipse
|
||||
call pause
|
@ -0,0 +1,87 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.gitee.drinkjava2</groupId>
|
||||
<artifactId>frog3d</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>2.0.2-snapshot</version>
|
||||
|
||||
<name>frog</name>
|
||||
<description>An artificial life test project</description>
|
||||
<url>https://gitee.com/drinkjava2/jsqlbox/frog</url>
|
||||
|
||||
<issueManagement>
|
||||
<system>gitee Issue</system>
|
||||
<url>https://gitee.com/drinkjava2/jsqlbox/frog/issues</url>
|
||||
</issueManagement>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>Yong Zhu</name>
|
||||
<email>yong9981@gmail.com</email>
|
||||
<url>https://gitee.com/drinkjava2/</url>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git@gitee.com:drinkjava2/frog.git</connection>
|
||||
<developerConnection>scm:git@gitee.com:drinkjava2/frog.git</developerConnection>
|
||||
<url>git@gitee.com:drinkjava2/frog.git</url>
|
||||
</scm>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||
<!-- Release on Java8 -->
|
||||
<version.java>1.8</version.java>
|
||||
<version.javadoc>6</version.javadoc>
|
||||
<version.compiler-plugin>3.3</version.compiler-plugin>
|
||||
<version.war-plugin>2.6</version.war-plugin>
|
||||
<version.clean-plugin>3.0.0</version.clean-plugin>
|
||||
<version.resources-plugin>2.7</version.resources-plugin>
|
||||
<version.surefire-plugin>2.19</version.surefire-plugin>
|
||||
<version.jar-plugin>2.6</version.jar-plugin>
|
||||
<version.source-plugin>2.4</version.source-plugin>
|
||||
<version.javadoc-plugin>2.10.3</version.javadoc-plugin>
|
||||
<version.gpg-plugin>1.6</version.gpg-plugin>
|
||||
</properties>
|
||||
|
||||
|
||||
|
||||
<dependencies>
|
||||
<!--dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency-->
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>${version.compiler-plugin}</version>
|
||||
<configuration>
|
||||
<source>${version.java}</source>
|
||||
<target>${version.java}</target>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
</profiles>
|
||||
|
||||
</project>
|
@ -0,0 +1,4 @@
|
||||
call mvn clean compile
|
||||
cd target\classes
|
||||
java -classpath ".;*" com.github.drinkjava2.frog.Application
|
||||
@pause
|
@ -0,0 +1,85 @@
|
||||
package com.github.drinkjava2.frog;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
|
||||
import com.github.drinkjava2.frog.brain.BrainPicture;
|
||||
|
||||
/**
|
||||
* Application's main method start the program
|
||||
*
|
||||
* @author Yong Zhu
|
||||
* @since 1.0
|
||||
*/
|
||||
public class Application {
|
||||
/** SHOW first frog's brain structure */
|
||||
public static boolean SHOW_FIRST_FROG_BRAIN = false;
|
||||
public static final String CLASSPATH;
|
||||
|
||||
static {
|
||||
String classpath = new File("").getAbsolutePath();
|
||||
int core = classpath.indexOf("core");
|
||||
CLASSPATH = classpath.substring(0, core);
|
||||
}
|
||||
public static JFrame mainFrame = new JFrame();
|
||||
public static Env env = new Env();
|
||||
public static BrainPicture brainPic = new BrainPicture(Env.ENV_WIDTH + 5, 0, Env.FROG_BRAIN_WIDTH,
|
||||
Env.FROG_BRAIN_DISP_WIDTH);
|
||||
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
mainFrame.setLayout(null);
|
||||
mainFrame.setSize(Env.ENV_WIDTH + 20, Env.ENV_HEIGHT + 100); // 窗口大小
|
||||
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭时退出程序
|
||||
mainFrame.add(env);
|
||||
|
||||
mainFrame.add(brainPic);
|
||||
|
||||
JButton button = new JButton("Show first frog's brain");
|
||||
int buttonWidth = 180;
|
||||
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) {
|
||||
SHOW_FIRST_FROG_BRAIN = !SHOW_FIRST_FROG_BRAIN;
|
||||
if (SHOW_FIRST_FROG_BRAIN) {
|
||||
button.setText("Hide first frog's brain");
|
||||
int y = Env.ENV_HEIGHT + 100;
|
||||
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);
|
||||
} else {
|
||||
button.setText("Show first frog's brain");
|
||||
mainFrame.setSize(Env.ENV_WIDTH + 20, Env.ENV_HEIGHT + 100);
|
||||
}
|
||||
}
|
||||
};
|
||||
button.addActionListener(al);
|
||||
mainFrame.add(button);
|
||||
|
||||
JButton stopButton = new JButton("Pause");
|
||||
stopButton.setBounds(buttonXpos, Env.ENV_HEIGHT + 35, buttonWidth, buttonHeight);
|
||||
ActionListener a2 = new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
Env.pause = !Env.pause;
|
||||
if (Env.pause) {
|
||||
stopButton.setText("Resume");
|
||||
} else {
|
||||
stopButton.setText("Pause");
|
||||
}
|
||||
}
|
||||
};
|
||||
stopButton.addActionListener(a2);
|
||||
mainFrame.add(stopButton);
|
||||
|
||||
mainFrame.setVisible(true);
|
||||
env.run();
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,128 @@
|
||||
package com.github.drinkjava2.frog.brain;
|
||||
|
||||
import static java.awt.Color.BLUE;
|
||||
import static java.awt.Color.CYAN;
|
||||
import static java.awt.Color.GREEN;
|
||||
import static java.awt.Color.MAGENTA;
|
||||
import static java.awt.Color.ORANGE;
|
||||
import static java.awt.Color.RED;
|
||||
import static java.awt.Color.YELLOW;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import com.github.drinkjava2.frog.Application;
|
||||
import com.github.drinkjava2.frog.Frog;
|
||||
|
||||
/**
|
||||
* BrainPicture show first frog's brain structure, for debug purpose only
|
||||
*
|
||||
* @author Yong Zhu
|
||||
* @since 1.0
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class BrainPicture extends JPanel {
|
||||
private float brainWidth; // real brain width
|
||||
private int brainDispWidth; // screen display width
|
||||
private Color color = Color.BLACK;
|
||||
|
||||
public void setColor(Color c) {
|
||||
color = c;
|
||||
}
|
||||
|
||||
public BrainPicture(int x, int y, float brainWidth, int brainDispWidth) {
|
||||
super();
|
||||
this.setLayout(null);// 空布局
|
||||
this.brainDispWidth = brainDispWidth;
|
||||
this.brainWidth = brainWidth;
|
||||
this.setBounds(x, y, brainDispWidth + 1, brainDispWidth + 1);
|
||||
}
|
||||
|
||||
public void drawZone( Zone z) {Graphics g = this.getGraphics();
|
||||
g.setColor(color);
|
||||
float rate = brainDispWidth / brainWidth;
|
||||
int x = Math.round(z.x * rate);
|
||||
int y = Math.round(z.y * rate);
|
||||
int radius = Math.round(z.r * rate);
|
||||
g.drawRect(x - radius, y - radius, radius * 2, radius * 2);
|
||||
}
|
||||
|
||||
public void drawCircle( Zone z) {Graphics g = this.getGraphics();
|
||||
g.setColor(color);
|
||||
float rate = brainDispWidth / brainWidth;
|
||||
int x = Math.round(z.x * rate);
|
||||
int y = Math.round(z.y * rate);
|
||||
g.drawArc(x - 5, y - 5, 10, 10, 0, 360);
|
||||
}
|
||||
|
||||
public void fillZone( Zone z) {Graphics g = this.getGraphics();
|
||||
g.setColor(color);
|
||||
float rate = brainDispWidth / brainWidth;
|
||||
int x = Math.round(z.x * rate);
|
||||
int y = Math.round(z.y * rate);
|
||||
int radius = Math.round(z.r * rate);
|
||||
g.fillRect(x - radius, y - radius, radius * 2, radius * 2);
|
||||
}
|
||||
|
||||
public void drawLine(Zone z1, Zone z2) {
|
||||
Graphics g = this.getGraphics();
|
||||
g.setColor(color);
|
||||
float rate = brainDispWidth / brainWidth;
|
||||
int x1 = Math.round(z1.x * rate);
|
||||
int y1 = Math.round(z1.y * rate);
|
||||
int x2 = Math.round(z2.x * rate);
|
||||
int y2 = Math.round(z2.y * rate);
|
||||
g.drawLine(x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
public void drawText( Zone z, String text) {Graphics g = this.getGraphics();
|
||||
g.setColor(color);
|
||||
float rate = brainDispWidth / brainWidth;
|
||||
int x = Math.round(z.x * rate);
|
||||
int y = Math.round(z.y * rate);
|
||||
g.drawString(text, x - text.length() * 3 - 2, y);
|
||||
}
|
||||
|
||||
private static final Color[] rainbow = new Color[] { RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA };
|
||||
private static int nextColor = 0;
|
||||
|
||||
public static Color nextRainbowColor() {
|
||||
if (nextColor == rainbow.length)
|
||||
nextColor = 0;
|
||||
return rainbow[nextColor++];
|
||||
}
|
||||
|
||||
public static Color color(float i) {
|
||||
if (i == 0)
|
||||
return Color.black;
|
||||
if (i == 1)
|
||||
return Color.RED;
|
||||
if (i <= 3)
|
||||
return Color.ORANGE;
|
||||
if (i <= 10)
|
||||
return Color.YELLOW;
|
||||
if (i <= 20)
|
||||
return Color.GREEN;
|
||||
if (i <= 50)
|
||||
return Color.CYAN;
|
||||
if (i <= 100)
|
||||
return Color.BLUE;
|
||||
return Color.MAGENTA;
|
||||
}
|
||||
|
||||
public void drawBrainPicture(Frog frog) {
|
||||
if (!Application.SHOW_FIRST_FROG_BRAIN)
|
||||
return;
|
||||
Graphics g = this.getGraphics();// border
|
||||
g.setColor(Color.WHITE);
|
||||
g.fillRect(0, 0, brainDispWidth, brainDispWidth);
|
||||
g.setColor(Color.black);
|
||||
g.drawRect(0, 0, brainDispWidth, brainDispWidth);
|
||||
|
||||
for (Organ organ : frog.organs)
|
||||
organ.drawOnBrainPicture(frog, this); // each organ draw itself
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.github.drinkjava2.frog.brain;
|
||||
|
||||
/**
|
||||
* Cell is the basic unit of frog's brain
|
||||
*
|
||||
* @author Yong Zhu
|
||||
* @since 1.0
|
||||
*/
|
||||
public class Cell {
|
||||
public static final float MAX_ENERGY_LIMIT = 100.0f;
|
||||
|
||||
// this cell belong to frog's which organ
|
||||
public Organ organ;
|
||||
|
||||
// inputs of cell
|
||||
public Input[] inputs; // 每个细胞有一组输入触突
|
||||
|
||||
// outputs of cell
|
||||
public Output[] outputs; // 每个细胞有一组输出触突
|
||||
|
||||
// energy of cell, energy got from food
|
||||
public float energy; // 每个细胞当前的能量值
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.github.drinkjava2.frog.brain;
|
||||
|
||||
/**
|
||||
* Input is the sensor of nerve cell
|
||||
*
|
||||
* @author Yong Zhu
|
||||
* @since 1.0
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class Input extends Zone {
|
||||
public Cell cell; // 这个输入触突属于哪个脑细胞
|
||||
|
||||
public Input(Zone z) {
|
||||
super(z);
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.github.drinkjava2.frog.brain;
|
||||
|
||||
/**
|
||||
* Output can active other nerve cell's input
|
||||
*
|
||||
* @author Yong Zhu
|
||||
* @since 1.0
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class Output extends Zone {
|
||||
public Cell cell; // 这个输出触突属于哪个脑细胞
|
||||
|
||||
public Output(Zone z) {
|
||||
super(z);
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* 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.github.drinkjava2.frog.brain;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.github.drinkjava2.frog.Env;
|
||||
|
||||
/**
|
||||
* Zone represents a rectangle zone in brain
|
||||
*
|
||||
* @author Yong Zhu
|
||||
* @since 1.0
|
||||
*/
|
||||
public class Zone implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public float x;
|
||||
public float y;
|
||||
public float r;// r为这个矩形区边长的一半
|
||||
|
||||
public Zone() {
|
||||
// 空构造器不能省
|
||||
}
|
||||
|
||||
public Zone(float x, float y, float r) {// 用x,y,r来构造
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.r = r;
|
||||
if (this.x < 0)
|
||||
this.x = 0;
|
||||
if (this.y < 0)
|
||||
this.y = 0;
|
||||
if (this.x > Env.FROG_BRAIN_WIDTH)
|
||||
this.x = Env.FROG_BRAIN_WIDTH;
|
||||
if (this.y > Env.FROG_BRAIN_WIDTH)
|
||||
this.y = Env.FROG_BRAIN_WIDTH;
|
||||
}
|
||||
|
||||
public Zone(Zone z) {// 用另一个Zone来构造
|
||||
this.x = z.x;
|
||||
this.y = z.y;
|
||||
this.r = z.r;
|
||||
}
|
||||
|
||||
public boolean nearby(Zone z) {
|
||||
float dist = r + z.r;
|
||||
return (Math.abs(x - z.x) < dist && Math.abs(y - z.y) < dist);
|
||||
}
|
||||
|
||||
public int roundX() {
|
||||
return Math.round(x);
|
||||
}
|
||||
|
||||
public int roundY() {
|
||||
return Math.round(y);
|
||||
}
|
||||
|
||||
public static void copyXY(Zone from, Zone to) {
|
||||
to.x = from.x;
|
||||
to.y = from.y;
|
||||
}
|
||||
|
||||
public static void copyXYR(Zone from, Zone to) {
|
||||
to.x = from.x;
|
||||
to.y = from.y;
|
||||
to.r = from.r;
|
||||
}
|
||||
|
||||
public void setXYR(float x, float y, float r) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.r = r;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* 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.github.drinkjava2.frog.brain.organ;
|
||||
|
||||
import com.github.drinkjava2.frog.Frog;
|
||||
import com.github.drinkjava2.frog.brain.Cell;
|
||||
import com.github.drinkjava2.frog.brain.Input;
|
||||
import com.github.drinkjava2.frog.brain.Organ;
|
||||
|
||||
/**
|
||||
* Active always keep active
|
||||
*
|
||||
* 这个器官永远激活
|
||||
*/
|
||||
public class Active extends Organ {//以前的实验发现添加一个始终激活的区比用Hungry来驱动更能提高找食效率
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public void initFrog(Frog f) {
|
||||
if (!initilized) {
|
||||
initilized = true;
|
||||
organOutputEnergy = 2;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void active(Frog f) {
|
||||
for (Cell cell : f.cells) {
|
||||
if (cell.energy > 0)
|
||||
cell.energy--;
|
||||
if (cell.energy < Cell.MAX_ENERGY_LIMIT)
|
||||
for (Input input : cell.inputs)
|
||||
if (input.nearby(this)) // if input zone near by happy zone
|
||||
cell.energy += organOutputEnergy;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue