JAVA 实现生命游戏
生命游戏的规则:
生命游戏中,对于任意细胞:
每个细胞有两种状态:存活或死亡。每个细胞与以自身为中心的周围八格细胞产生互动。
1.当前细胞为存活状态时,当周围的活细胞低于2个时, 该细胞因孤独而死亡;
2.当前细胞为存活状态时,当周围有2个或3个活细胞时, 该细胞保持原样;
3.当前细胞为存活状态时,当周围有3个以上活细胞时,该细胞因资源匮乏而死亡;
4.当前细胞为死亡状态时,当周围有3个活细胞时,该细胞变成存活状态(模拟繁殖)。**
①一般情形:
②滑翔者:每4个回合"它"会向右下角走一格。虽然细胞早就是不同的细胞了,但它能保持原本的形态:
③轻量级飞船:它的周期是4,每2个回合会向右边走一格:
④脉冲星:它的周期为3,看起来像一颗周期爆发的星星:
程序运行java源代码:
import java.util.Scanner;public class lifeGame {static final int ROWLEN = 10, COLLEN = 10, DEAD = 0, ALIVE = 1;static int[][] cell = new int[ROWLEN][COLLEN];//定义临时二维空间数组存储变化的状态:static int[][] celltemp = new int[ROWLEN][COLLEN];public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("生命游戏开始: ");//二维空间中放置细胞初始化数量initCell();//显示初始状态showCell();//是否进行下一次演化String flag;do {//开始生命游戏startCell();System.out.println("是否进行下一次演化: y/n");flag = input.next();showCell();} while (flag.equalsIgnoreCase("y"));}private static void initCell() {int row, col;Scanner input = new Scanner(System.in);for (row = 0; row < 10; row++) {for (col = 0; col < 10; col++) {cell[row][col] = DEAD;//全部初始化为死状态}}System.out.println("请输入一组活细胞的坐标位置,输入(-1,-1)代表结束");while (true) {System.out.println("请输入一组活细胞的坐标位置:");row = input.nextInt();col = input.nextInt();if (0 <= row && row < ROWLEN && 0 <= col && col < COLLEN) {cell[row][col] = ALIVE;} else if (row == -1 && col == -1) {break;} else {System.out.println("输入坐标超过范围");}}}private static void startCell() {int row, col, sum, count = 0;for (row = 0; row < ROWLEN; row++) {for (col = 0; col < COLLEN; col++) {//每个单元格的细胞周围活着的细胞switch (sumCell(row, col)) {case 2:celltemp[row][col] = cell[row][col];break;case 3:celltemp[row][col] = ALIVE;break;default:celltemp[row][col] = DEAD;}}}//temp放回cellfor (row = 0; row < ROWLEN; row++) {for (col = 0; col < COLLEN; col++) {cell[row][col] = celltemp[row][col];if (celltemp[row][col] == ALIVE) {count++;//演化后当前存活的细胞数量}}}showCell();System.out.println("当前状态下存活的细胞数量为:" + count);}//统计四周的细胞个数static int sumCell(int row, int col) {int count = 0;int c, r;//上一行,下一行,左边列,右边列for (r = row - 1; r < row + 1; r++) {//从上一行循环到下一行for (c = col - 1; c < col + 1; c++) {if (r < 0 || r >= ROWLEN || c < 0 || c >= COLLEN) {continue;}if (cell[r][c] == ALIVE) {count++;}}}if (cell[row][col] == ALIVE) {count--;}return count;}//统计四周的细胞个数private static void showCell() {int row, col;System.out.printf("\n细胞状态\n");System.out.printf("┌-");//第一行的左上角for (col = 0; col < COLLEN - 2; col++) {//第一行System.out.printf("-┬-");}System.out.printf("┐\n");//第一行的右上角for (row = 0; row < ROWLEN; row++) {System.out.printf("|");//行的最左边的线for (col = 0; col < COLLEN; col++) {//各单元格细胞的生成状态switch (cell[row][col]) {case ALIVE:System.out.printf("●|");break;case DEAD:System.out.printf("○|");break;}}System.out.println();//换行//输出行与行之间的水平分割线:if (row < ROWLEN - 1) {System.out.printf("├-");for (col = 0; col < COLLEN - 2; col++) {System.out.printf("-┼-");//输出一行水平分割线}System.out.printf("┤\n");}}//输出最后一行:System.out.printf("└-");for (col = 0; col < COLLEN -2 ; col++) {System.out.printf("-┴-");}System.out.printf("┘\n");}
}
JAVA 实现生命游戏相关推荐
- 用Java实现生命游戏
用Java实现生命游戏 一.题目: 编写一个生命游戏: 规则如下: 1. 一个人可以有8个邻居: 2. 一个人若只有一个邻居,在下一代会孤独的死去: 3. 若有2或3个邻居,在下一代依然活着: 4. ...
- Java案例:Java版生命游戏
目录 一.生命游戏 1.生命游戏概述 2.生命演化规则:B3/S23 二.生命游戏Java实现
- Java实现生命游戏Plus
目录 生命游戏 1 生命游戏的规则 2 生命游戏的意义 对生命游戏进行抽象(属性部分) 1 建立基础的生命游戏类 2 特殊要求 对生命游戏进行抽象(方法部分) 1 回合变动更新方法 2 设置棋盘初值( ...
- [Leedcode][JAVA][第289题][生命游戏]
[问题描述] 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机.给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞都具 ...
- java swing 代码_java swing编写gui生命游戏代码,新手上路
项目描述 生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着 ...
- 生命游戏(Java)
在研究元胞自动机理论过程中,Conway发明生命游戏(Game of Life.GoL),在1970s风靡一时. 这是0人游戏,即按照初始的设置,游戏自动演化.在类似围棋的棋盘中,每一个格子可以是空格 ...
- 蓝桥杯------2017 Java B组 国赛:第二题 生命游戏
题目描述: 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的状态 ...
- Java B组蓝桥杯第八届国赛:生命游戏
标题:生命游戏 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的 ...
- 生命游戏Java实现
关于生命游戏 之前在学校看到ThoughtWorks举办的线下结对编程的比赛一等奖是大疆无人机,冲着无人机就拉着实验室小伙伴马总一起报了个名.然后题目就是实现一个界面版的生命游戏,所以才了解了生命游戏 ...
- 分布与并行计算—生命游戏(Java)
生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着的细胞数量 ...
最新文章
- Sprites实现翻页按钮,圆角,宽度不固定
- UNIX环境高级编程--第七章
- Acwing第 22 场周赛【未完结】
- Nancy简单实战之NancyMusicStore(二):打造首页
- Redis Cluster日常操作命令梳理
- 页面上有两个元素id相同,js中如何取值
- python遍历文件对象_Python文件常见操作实例分析【读写、遍历】
- android xml通知栏权限配置,Android开发中 AndroidManifest.xml配置之service,receiver标签配置详解...
- c语言数组前缀和,关于最大子数组问题
- 查看服务器的性能和使用状态(top,free,df)
- 奥的斯自动人行道服务器密码,奥的斯服务器中文说明21页
- aspeed显卡安装ubuntu驱动
- 问题 K: [入门OJ]开会时间(初中生请多多指教)
- 计算机毕业设计ssm基于ssm框架的动漫网站设计与实现q6dcx系统+程序+源码+lw+远程部署
- mysql 1032_[MySQL] SQL_ERROR 1032解决办法
- 三维形体的数据结构(1)半边数据结构
- Jquery取得动态id中的值
- 【云原生 | 从零开始学Kubernetes】二十三、Kubernetes控制器Statefulset
- STM32的中断向量表是干什么的?到底有什么用?它放在哪里?
- python 单词拆音节_计算一个单词的音节数
热门文章
- Java虚拟机类加载器--双亲委派模型
- SpringBoot系列(1):Spring和SpringBoot常用注解总结
- PC连Moto V180上网
- docker.[7] 数据卷容器
- 删除OSX中第三方的「偏好设置」程序(.prefPane)
- 【转】Android世界的Swift - Kotlin语言
- HDU 1422 重温世界杯
- 在企业级开发中使用Try...Catch...会影响效率吗?
- 大学计算机导学,大学计算机一级--导学.ppt
- 微型计算机机房湿度不宜过大,全国计算机一级考试选择题试题与详细答案(免费)...