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(生命游戏,又称为细胞自动机)几乎是所有数据结构与算法导论教程前言的一个很经典的程序了.这是一个零玩家游戏,发生在一个平面网格里.每个格子的细胞都有死亡和存活两种状态, ...
随机推荐
- (转载)golang 整数常量INT_MAX INT_MIN最大值最小值
转载地址:https://blog.csdn.net/bdss58/article/details/78388858 在C语言中,有标准库limits.h定义了一些最大最小值常量,例如int类型的最大 ...
- [Beta]第九次 Scrum Meeting
[Beta]第九次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/19 21:20 20min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 (一人回 ...
- Web.config 文件例子
php - 如何使用web.config重写IIS UrlRewriteModule中的网页的URL? <?xml version="1.0" encoding=" ...
- 数据库sql优化总结之4--SQL优化总结
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- 使用ItextSharop合并pdf文件,体积变大的解决
通用的合并方式导致输出的pdf 文件中嵌入了大量的重复字体.导致文件体积膨胀. 使用基于内存流的方式,读取文件字节,可以解决重复字体的嵌入问题: public static string MergeF ...
- 027_MacOs上如何将多页word打印到一个页面上
工作中需要把word的多页面内容打印到同一张A4纸,所以就想了办法,首先word导出到pdf. 然后使用MacOs默认的PDF阅读器进行多页打印. 操作如下: 文件-打印布局选择每张纸需要打印的页数左 ...
- 配置mongo.conf文件
配置mongo.conf文件,优化mongod.exe的启动 在d:/Develop/MongoDB目录下创建mongo.conf文件并写入: dbpath=d:\Develop\MongoDB\ ...
- 【LeetCode算法-28/35】Implement strStr()/Search Insert Position
LeetCode第28题 Return the index of the first occurrence of needle in haystack, or -1 if needle is not ...
- 将AD域漫游用户配置文件放在samba服务器中
书接上回https://www.cnblogs.com/jackadam/p/11448497.html 我们已经将linux服务器设置为域成员,启动samba服务后,已经实现了使用域账号验证,自动创 ...
- [LeetCode] 12. Integer to Roman 整数转为罗马数字
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...