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(生命游戏,又称为细胞自动机)几乎是所有数据结构与算法导论教程前言的一个很经典的程序了.这是一个零玩家游戏,发生在一个平面网格里.每个格子的细胞都有死亡和存活两种状态, ...
随机推荐
- Mysql问题1862
使用Navicat连接MySQL数据库出现1862错误(1862:Your password has expired.To log in you must change it change it us ...
- Python常用模块大全
Python常用模块大全 os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.c ...
- v-if和v-for一起使用的几个方法
方法一(推荐): 不带if <ul> <li v-for="(item, index) in list" :key="index" > ...
- activiti 自定义用户
https://blog.csdn.net/meng564764406/article/details/53789958 此文目的: 对网络上的关于对activiti 使用做一个总结,因为很难找到一个 ...
- leetcode 266.Palindrome Permutation 、267.Palindrome Permutation II
266.Palindrome Permutation https://www.cnblogs.com/grandyang/p/5223238.html 判断一个字符串的全排列能否形成一个回文串. 能组 ...
- git - 3.分支
分支介绍 每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线, 在Git里,这个分支叫主分支,即master分支. HEAD严格来说不是指向提交,而是指向mas ...
- Win10 LTSC 2019 安装和卸载 linux 子系统
一.开启 二.下载 https://docs.microsoft.com/zh-cn/windows/wsl/install-manual 手动下载适用于 Linux 的 Windows 子系统发 ...
- matlab中可用于进行轮廓提取的函数
本文主要总结一下在matlab中可用于进行轮廓提取的函数. 1 bwperim 根据参考资料[2]的提示,可以使用bwperim()函数进行轮廓提取,具体代码如下: %读取原图im = imread( ...
- 不规则形状的Ifc构件顶点坐标获取
不规则形状的Ifc构件顶点坐标获取 今天有人问我,ifc构件的顶点坐标怎么获取,自己前年的时候写过类似的程序,但有点记不清了,最近一直用C++解析ifc,慎重起见,还是重新再写一次,java版本的获取 ...
- Laya的版本管理
参考: Laya项目发布详解 发布时,勾选开启版本管理 点击上图“是否开启版本管理”右边的+号. 可以选择加入版本管理,或者排除版本管理的文件夹. 比如我要排除bin/test这个文件夹下的文件,不使 ...