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的更多相关文章

  1. 生命游戏/Game of Life的Java实现(转)

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

  2. Cornerstone.js使用相关

    官网地址:https://github.com/chafey/cornerstone 简介: Cornerstone is an open source project with a goal to ...

  3. 生命游戏/Game of Life的Java实现

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

  4. Idea配置文件的读取

    开发过程中遇到配置文件读取问题,因此记录以后运用的到. 配置文件位置: 配置文件内容: default_size = 100 grid_size = 20 delayTime = 200 配置文件读取 ...

  5. The Game Of Life – 数据结构与算法的敲门砖

    The Game Of Life(生命游戏,又称为细胞自动机)几乎是所有数据结构与算法导论教程前言的一个很经典的程序了.这是一个零玩家游戏,发生在一个平面网格里.每个格子的细胞都有死亡和存活两种状态, ...

随机推荐

  1. 剑指offer:和为S的连续正数序列

    题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...

  2. tar加密码

    tar -zcvf - *** | openssl des3 -salt -k pass | dd of=.his dd if=.his | openssl des3 -d -k pass| tar ...

  3. PostgreSQL中的表连接操作

  4. leetcode 10. Regular Expression Matching 、44. Wildcard Matching

    10. Regular Expression Matching https://www.cnblogs.com/grandyang/p/4461713.html class Solution { pu ...

  5. Could not get JDBC Connection; nested exception is java.sql.SQLException: ${jdbc.driver}

    在一个SSM分布式项目中一个服务报错: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnec ...

  6. packaged_task

    /** @file packaged_task.cpp * @note * @brief * @author * @date 2019-8-15 * @note * @history * @warni ...

  7. 日志收集系统ELK搭建

    一.ELK简介 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下.因此我们需要集中化的管理 ...

  8. Ubuntu 18.04 安装远程桌面

    原文链接:https://baijiahao.baidu.com/s?id=1619271691270163095&wfr=spider&for=pc 安装 tightvncserve ...

  9. Prometheus入门到放弃(5)之AlertManager部署

    alertmanager与exporters.cadvisor一样,都是独立于prometheus项目,这里我们也使用docker方式部署alertmanager. 1.下载镜像 镜像地址:https ...

  10. STS,修改Ctrl+Shift+R匹配类的配置

    在使用STS(Spring Tools)时,每次通过Ctrl+Shift+R查询类时,会出来一堆不想看到的类.如下所示: 上面的.class文件和父项目中的.java文件,在匹配类时,是不想看到的. ...