一、分析与思考

软件工程实验课第一节课让用java做了一个比较简单的程序-生命游戏

1. 游戏规则

生命游戏在初始化之后,按照以下规则不断演化繁殖:每个细胞的‘生’或‘死’由它8个邻居细胞的状态决定。

(1)“人口过少”:任何活细胞如果活邻居少于2个,则死亡。
(2)“正常”:任何活细胞如果活邻居为2个或3个,则继续活着。
(3)“人口过多”:任何活细胞如果活邻居大于3个,则死亡。
(4)“繁殖”:任何死细胞如果活邻居正好是3个,则活过来。

2. 分析

上述四步描述其实在算法中体现用三步描述即可
(1)如果活邻居等于3个,无论自己原来生死,都为活。
(2)如果活邻居等于2个且自己原来为生,则继续为生
(3) 其他,均为死。

二、代码实现

1. 简单分层

因为这个小程序要体现软件工程的分层结构,因此,先根据思路,我把结构分为data层,service层,和应用层

data层存放细胞数组类,service层存放算法逻辑,lifeGame应用层主要是界面的实现和启动

2.核心代码

1. 细胞生死即细胞矩阵的变化
    public static CellArray generate(CellArray cells) {CellArray nextCells=new CellArray(cells.getRow(),cells.getCol());for(int i=0;i<nextCells.getRow();i++) for(int j=0;j<nextCells.getCol();j++) {int count=countNumber(cells,i,j);//获取周围邻居数目if(count==3) {nextCells.setCell(i, j, CellState.LIVE.getValue());//如果为三,活}else if(count==2&&cells.getCell(i, j)==CellState.LIVE.getValue()) {nextCells.setCell(i, j, CellState.LIVE.getValue());//如果为二且为生,则生}else {nextCells.setCell(i, j, CellState.DEAD.getValue());//其他为死}}return  nextCells;}
2. 定时器

定时器是用来每过一段时间就更新细胞矩阵

Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {cells = GameService.generate(cells);++generation;label2.setText("繁衍代数:" + generation);for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (cells.getCell(i, j) == CellState.LIVE.getValue()) {btns[i][j].setBackground(Color.black);} else {btns[i][j].setBackground(Color.white);}}}}}, 0, 500);

三、实现效果


四、源码

https://download.csdn.net/download/hanzhenbushihu/10662798

java实现生命游戏相关推荐

  1. 用Java实现生命游戏

    用Java实现生命游戏 一.题目: 编写一个生命游戏: 规则如下: 1. 一个人可以有8个邻居: 2. 一个人若只有一个邻居,在下一代会孤独的死去: 3. 若有2或3个邻居,在下一代依然活着: 4. ...

  2. Java案例:Java版生命游戏

    目录 一.生命游戏 1.生命游戏概述 2.生命演化规则:B3/S23 二.生命游戏Java实现

  3. Java实现生命游戏Plus

    目录 生命游戏 1 生命游戏的规则 2 生命游戏的意义 对生命游戏进行抽象(属性部分) 1 建立基础的生命游戏类 2 特殊要求 对生命游戏进行抽象(方法部分) 1 回合变动更新方法 2 设置棋盘初值( ...

  4. [Leedcode][JAVA][第289题][生命游戏]

    [问题描述] 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机.给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞都具 ...

  5. java swing 代码_java swing编写gui生命游戏代码,新手上路

    项目描述 生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着 ...

  6. 生命游戏(Java)

    在研究元胞自动机理论过程中,Conway发明生命游戏(Game of Life.GoL),在1970s风靡一时. 这是0人游戏,即按照初始的设置,游戏自动演化.在类似围棋的棋盘中,每一个格子可以是空格 ...

  7. 蓝桥杯------2017 Java B组 国赛:第二题 生命游戏

    题目描述: 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.   这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的状态 ...

  8. Java B组蓝桥杯第八届国赛:生命游戏

    标题:生命游戏 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.   这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的 ...

  9. 生命游戏Java实现

    关于生命游戏 之前在学校看到ThoughtWorks举办的线下结对编程的比赛一等奖是大疆无人机,冲着无人机就拉着实验室小伙伴马总一起报了个名.然后题目就是实现一个界面版的生命游戏,所以才了解了生命游戏 ...

  10. 分布与并行计算—生命游戏(Java)

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

最新文章

  1. 如何使python等待按键
  2. 贪心、递归、递推以及动态规划算法的分析与对比
  3. 关于 SAP 电商云首页加载时触发的 OCC API 请求
  4. 64岁Python之父加入微软 | 谁说大龄程序员无出路
  5. 使用phpunit新建项目
  6. 前后端敏感数据加密方案及实现_02
  7. c语言中的运算符及其含义_按位运算符及其在C语言中与Example一起使用
  8. 解析OpenShift的存储规划
  9. 致敬F1七冠王!Redmi K50电竞版邀请函曝光 打造掌上梦幻跑车
  10. 安装Eclipse完整版 配上百度云链接
  11. 激光条纹中心提取——zhang细化+灰度重心法
  12. Android常用框架
  13. 计算机控制电机启动接线图,电机控制线路图大全(上下)
  14. 【C++】-- STL容器适配器之priority_queue
  15. 码云提交不显示贡献度问题
  16. 7个实用的Python自动化代码,技术改变生活,不再重复
  17. Linux下Firefox和chrome浏览器flash插件的安装
  18. 基于广度优先遍历算法求采用邻接表存储的无向连通图G中从顶点u到v的最短路径
  19. 新系统开发流程与迭代
  20. 概率论与数理统计 第一章 概率论的基本概念 要点复习笔记

热门文章

  1. android 设置-关于手机-连续点击版本 打开开发者模式的功能实现
  2. 像中文的罗马音字体复制_罗马音字体大全可复制中文
  3. 关于计算机的病毒案例分析,实例解析蠕虫病毒的原理 -电脑资料
  4. 内存和flash区别
  5. 图解机器学习:人人都能懂的算法原理
  6. 剪切板是计算机系统,剪贴板
  7. c/c++利用ghostscript API打印机pdf文件
  8. Objective-C 入门教程
  9. 建议收藏!4款良心的时间轴软件
  10. C++程序员常用工具集