问题说明:
生命游戏,为1970年英国数学家J.H.Conway所提出,某一细胞的邻居包括上,下,左,右,左上,左下,右上与右下相邻的细胞,游戏规则如下:
1,孤单死亡:如果细胞的邻居小于一个,则该细胞在下一个状态死亡。
2,拥挤死亡:如果细胞的邻居在四个以上,则该细胞在下一个状态死亡。
3,稳定:如果细胞的邻居为两个或三个,则该细胞在下一个状态稳定。
4,复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一个细胞。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LifeGame {
private boolean[][] map;
private boolean[][] newmap;
public LifeGame(int maxRow, int maxColumn) {
map = new boolean[maxRow][maxColumn];
newmap = new boolean[maxRow][maxColumn];
}
public void setCell(int x, int y) {
map[x][y] = true;
}
public void next() {
for(int row = 0; row < map.length; row++) {
for(int col = 0; col < map[0].length; col++) {
switch (neighbors(row, col)) {
case 0:
case 1:
case 4:
case 5:
case 6:
case 7:
case 8:
newmap[row][col] = false;
break;
case 2:
newmap[row][col] = map[row][col];
break;
case 3:
newmap[row][col] = true;
break;
}
}
}
copyMap();
}
public void outputMap() throws IOException {
System.out.println("\n\nGame of life cell status");
for(int row = 0; row < map.length; row++) {
System.out.print("\n ");
for(int col = 0; col < map[0].length; col++)
if(map[row][col] == true)
System.out.print('#');
else
System.out.print('-');
}
}
private void copyMap() {
for(int row = 0; row < map.length; row++)
for(int col = 0; col < map[0].length; col++)
map[row][col] = newmap[row][col];
}
private int neighbors(int row, int col) {
int count = 0;
for(int r = row-1; r <= row+1; r++)
for(int c = col-1; c <= col+1; c++) {
if(r < 0 || r >= map.length ||
c < 0 || c >= map[0].length)
continue;
if(map[r][c] == true)
count++;
}
if(map[row][col] == true)
count--;
return count;
}
public static void main(String[] args)
throws NumberFormatException, IOException {
BufferedReader bufReader =
new BufferedReader(
new InputStreamReader(System.in));
LifeGame game = new LifeGame(10, 25);
System.out.println("Game of life Program");
System.out.println(
"Enter x, y where x, y is living cell");
System.out.println("0 <= x < 10, 0 <= y < 25");
System.out.println("Terminate with x, y = -1, -1");
while(true) {
String[] strs = bufReader.readLine().split(" ");
int row = Integer.parseInt(strs[0]);
int col = Integer.parseInt(strs[1]);
if(0 <= row && row < 10 && 0 <= col && row < 25)
game.setCell(row, col);
else if(row == -1 || col == -1) {
break;
}
else {
System.out.print(
"(x, y) exceeds map ranage!");
}
}
while(true) {
game.outputMap();
game.next();
System.out.print(
"\nContinue next Generation ? ");
String ans = bufReader.readLine().toUpperCase();
if(!ans.equals("Y"))
break;
}
}
}
分享到:
相关推荐
开发平台visual studio 2008 基于MFC 包含源代码和调试生成的应用程序
开发平台visual studio 2008 基于MFC 包含源代码和调试生成的应用程序 这是我发的另一个lifegame的升级版 就是好看了点 用了CButtonST类 但是没有原版容易二次开发
康威生命游戏(Game of Life)Delphi版本
元胞自动机(cellular automata
主要介绍了python实现生命游戏的示例代码(Game of Life),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
生命游戏 源码 vc Game of life beautiful and interesting 敲空格开始游戏 knock at space bar to start the game
生命游戏是用来虚拟生存环境的一种游戏规则。 具体的规则请浏览相关网页。
生命游戏lifegame的matlab代码。也是元胞自动机的一种应用。
在C++中实现生命游戏 (Game of Life) ,并 遵循一些限制。 ·生命游戏的规则 一个无限的二维正交方格单元格网格。 每个单元格处于两种可能的状态之一: 存活 或死亡。 每个单元格与其八个邻居进行交互:存活的 单元格...
NULL 博文链接:https://codeprac.iteye.com/blog/1125136
生命游戏其实是一个零玩家游戏,英文名叫Game of Life,也称生命棋。它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞...
这个C#实现的小游戏是一个简单的猜数字游戏,让玩家猜一个1到100之间的随机生成的数字。以下是对这个小游戏的分析: Random 类的使用:游戏开始时,使用 Random 类生成一个1到100之间的随机数作为要猜的数字。 ...
3D_game of life_3d元胞自动机_三维生命游戏_gameoflife_生命游戏.zip
生命游戏的演化代码,用python写的可以控制演化的代数可以控制演化的单元
实现生命游戏的C#类,可以进行经典生命游戏实现
计算机科学 生命游戏 细胞 Came of Life
它不仅对细胞空间没有限制、运行速度非常快、界面很友好,而且能够为你提供大量的初始细胞分布图案,你还可以任意组合这些图案达到你象要的构形,然后让这些构形动起来组合出更加神奇的生命游戏的世界。
Java GUI界面展示生命游戏的演化过程,允许自定义地图和系统随机生成地图
康威生命游戏(Conway's game of life) 游戏以细胞为单元,每个细胞有两种状态:存活、死亡。 游戏有下面几条规则: 当细胞存活时,如果周围八格存活细胞时(不包含2个),该细胞死亡。 当细胞存活时,如果周围...
3D_game of life_3d元胞自动机_三维生命游戏_gameoflife_生命游戏