LifeGame
LifeGame
用例说明&用例图

| 用例名: | 设置细胞颜色 |
|---|---|
| 说明 | 用户可以根据自己的喜好来设置细胞的颜色 |
| 主事件流 | 在菜单出点击需要的颜色 游戏检测到菜单的返回的颜色 更改细胞的颜色,最后显示出来(刷新) |
| 异常事件 |
| 用例名: | 设置方格大小 |
|---|---|
| 说明: | 用户可以根据自己的喜好来设置方格的大小 |
| 主事件流 | 1.在菜单出点击需要的大小 2.游戏检测到菜单的返回大小 3.更改方格的大小,将窗口的大小改变,刷新 |
| 异常事件流 |
| 用例名: | 设置速度 |
|---|---|
| 说明: | 用户可以根据自己的喜好来设置算法演变的速度 |
| 主事件流 | 在菜单出点击需要的速度 游戏检测到菜单的返回的速度值 更改算法演变的速度(刷新) |
| 异常事件 |
| 用例名: | 控制游戏进停 |
|---|---|
| 说明: | 用户运行或者暂停 |
| 主事件流 | 用户按空格或者点击菜单开关 游戏改变运行状态 暂停或者开始游戏(刷新) |
| 异常事件 |

lifegame 算法类
设置一个数组,来存放生命;用Initialization()初始化;
刚开始方格内没有生命,所有都设为false
public void Initialization() {//初始化//将rectangle中的值初始化为false
for(int x = 0;x<HEIGH;x++) {
for(int y = 0;y<WIDTH;y++) {
rectangle[x][y] = false;
neighbors[x][y] = 0;
}
}
}
判断周围的细胞个数
public void getNeighbors() {//看这个世界周围的环境个数
int x,y;
for(x= 0;x < HEIGH;x++)
for(y = 0;y < WIDTH;y++) {
neighbors[x][y] = 0;
neighbors[x][y] += Torf(x-1,y-1);
neighbors[x][y] += Torf(x-1, y);
neighbors[x][y] += Torf(x-1, y+1);
neighbors[x][y] += Torf(x, y-1);
neighbors[x][y] += Torf(x, y+1);
neighbors[x][y] += Torf(x+1, y-1);
neighbors[x][y] += Torf(x+1, y);
neighbors[x][y] += Torf(x+1, y+1);
}
}
判断下一个地方是否为墙壁或空,空返回0,非空返回1
public int Torf(int x,int y) {//返回这个值是不是为墙壁或者是空,比较是否为No
boolean Next = (x<0||y<0||x>=HEIGH||y>=WIDTH||rectangle[x][y]== false);
return Next?0:1;
}
通过上一个世界计算下一个世界的细胞(核心算法)
public void nextworld() {
int x=0,y=0;
for(x = 0;x<HEIGH;x++)
for(y = 0;y<WIDTH;y++) {
if(neighbors[x][y] == 3) {
rectangle[x][y] = true;
}
else if(neighbors[x][y]<2||neighbors[x][y]>3) {
rectangle[x][y] = false;
}
// neighbors[x][y]=0;
}
}
lifegame 窗口绘制类
添加一个监听器达到 运行的开始和暂停效果
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 32) {
running = !running;
}
}
});
绘制表格
public void paintComponents(Graphics s) {
try {
//super.paintComponents(s);
s.setColor(Color.red);
s.drawRect(sx, sy, px*w, py*w);//sx sy 起始位置,rw rw目标大小
System.out.println("px:py"+px+py);
for(int i =1;i<px;i++) {
s.drawLine(sx+(i*w), sy , sx+(i*w), sy + (py*w));
}
for(int j = 1;j<py;j++) {
s.drawLine(sx, sy+(j*w), sx+(px*w), sy+(j*w));
}
}catch(Exception e ) {
e.printStackTrace();
}
}
鼠标点击的时候改变细胞的颜色
private void compare(int cx, int cy) {//鼠标点击的颜色
// TODO 自动生成的方法存根
lg.rectangle[cx][cy] = !lg.rectangle[cx][cy];
if(lg.rectangle[cx][cy] == true)
setGrid(cx,cy,selectcolor);
else{
setGrid(cx,cy,backcolor);
}
}
为菜单添加监听器 例:细胞蓝色监听器
JMenuItem blue = new JMenuItem("blue");
blue.addActionListener(new blueActionListener(this));
运行截图



LifeGame的更多相关文章
- 生命游戏/Game of Life的Java实现(转)
首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...
- Cornerstone.js使用相关
官网地址:https://github.com/chafey/cornerstone 简介: Cornerstone is an open source project with a goal to ...
- 生命游戏/Game of Life的Java实现
首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...
- Idea配置文件的读取
开发过程中遇到配置文件读取问题,因此记录以后运用的到. 配置文件位置: 配置文件内容: default_size = 100 grid_size = 20 delayTime = 200 配置文件读取 ...
- The Game Of Life – 数据结构与算法的敲门砖
The Game Of Life(生命游戏,又称为细胞自动机)几乎是所有数据结构与算法导论教程前言的一个很经典的程序了.这是一个零玩家游戏,发生在一个平面网格里.每个格子的细胞都有死亡和存活两种状态, ...
随机推荐
- ArcGIS 要素类整体平移工具-arcgis/arcpy/模型构建器案例实习教程
ArcGIS 要素类整体平移工具-arcgis/arcpy/模型构建器案例实习教程 联系方式:谢老师,135-4855_4328,xiexiaokui#qq.com 目的:对整个要素类,按指定偏移距离 ...
- spark streaming 流式计算---跨batch连接池共享(JVM共享连接池)
在流式计算过程中,难免会连接第三方存储平台(redis,mysql...).在操作过程中,大部分情况是在foreachPartition/mapPartition算子中做连接操作.每一个分区只需要连接 ...
- linux列出当前目录下的所有的目录?
### 列出当前目录下的所有目录: [root@localhost ~]# ls -ld * #列出所有的文件 drwxr-xr-x. root root Nov : elasticsearch d ...
- Tomcat 配置虚拟目录以及虚拟主机
目录 虚拟目录 虚拟主机 虚拟目录 虚拟目录的功能 一般情况下,我们的打包后的项目都是放到tomcat/webapps目录下的,然后通过localhost:8080/project_name这个链接进 ...
- SSM框架新特性关于用Java配置类完全代替XML
项目目录结构 从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法, 这些方法将会被AnnotationConf ...
- matlab学习笔记10_4MATLAB中的字符串表示
一起来学matlab-字符串操作 10_4 MATLAB中的字符串表示 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感 ...
- 转 Shell判断字符串包含关系的几种方法
https://blog.csdn.net/rznice/article/details/71086839 Shell中判断字符串包含关系的方法: 1.通过grep来判断:12str1="a ...
- docker卷挂载与容器内外互相拷贝数据
一.宿主机与容器的挂载 docker可以支持把一个宿主机上的目录挂载到镜像里.命令如下: docker run -it -v /mydownload:/download nginx:v1 /bin/b ...
- JVM 线上故障排查基本操作--CPU飙高
JVM 线上故障排查基本操作 CPU 飚高 线上 CPU 飚高问题大家应该都遇到过,那么如何定位问题呢? 思路:首先找到 CPU 飚高的那个 Java 进程,因为你的服务器会有多个 JVM 进程.然后 ...
- [转自baidu]修正古人五行,《七行说》之提出
一.论原五行相生.相克关系不妥之处: 祖国医学原“五行说”即金.木.水.火.土.在五行学说中说相生规律为:金生水:水生木:木生火:火生土:土生金.相克规律为:火克金:金克木:木克土:土克水:水克火.这 ...