package qinglin.learn.arithmetic;
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;
}
}
}
分享到:
相关推荐
第一次看到生命游戏,我被那简单规则涌现出的奇妙模式震惊了, 尤其是用小方块构成大方块, 大方块的行为和小方块一直, 可以无限嵌套, 这不就是分行吗, 简直就是二维的我的世界了, 有人在我的世界里建造出我的世界, 在...
生命游戏matlab代码,可以用来演示生命游戏的演变过程
生命游戏,实验课的要求内容,需要的话可以,直接下载,java课程上学的,可以用来测试代码,点击方块就会开始生命,然后还会影响边上的方块生命
康威生命游戏,是一个模拟生命的小游戏,游戏规则如下: 1.当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖) 2.当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该...
约翰·康威最常被专业人士和大众拿来讨论的成果,就是他在1970年发明的生命游戏,Game of Life。它的意义在于验证了某些科学家的宇宙观,即最简单的逻辑规则能产生出复杂有趣的活动。 康威生命游戏在方格网上进行,...
康威生命游戏计算程序源码+项目说明.zip康威生命游戏计算程序源码+项目说明.zip康威生命游戏计算程序源码+项目说明.zip康威生命游戏计算程序源码+项目说明.zip康威生命游戏计算程序源码+项目说明.zip康威生命游戏...
用C#实现的简单生命游戏 使用WinForm作为界面,用方格表示一个生命,界面大小可以通过代码中的常量修改,界面绘制用GDI+。 欢迎提出修改意见。
生命游戏(game of life)为1970年由英国数学家J. H. Conway所提出,某-细胞的邻居包括上、下、左、右、左上、左下、右上与右下相邻之细胞,游戏规则如下: 孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将...
在C++中实现生命游戏 (Game of Life) ,并 遵循一些限制。 ·生命游戏的规则 一个无限的二维正交方格单元格网格。 每个单元格处于两种可能的状态之一: 存活 或死亡。 每个单元格与其八个邻居进行交互:存活的 单元格...
康威的生命游戏 每个细胞有两种状态 - 存活1或死亡0,每个细胞与以自身为中心的周围八格细胞产生互动。 当前细胞为存活状态1时,当周围细胞存活低于2个时,该细胞变成死亡状态。(模拟生命数量稀少) 当前细胞为存活...
生命游戏是最经典的C语言例子,文档内是可运行的生命游戏代码
生命游戏(源码+可执行jar) java ,jse 6 , 通过。 <br>什么是生命游戏?你既然找到这里来就不用我介绍了吧。 <br>特点,加如两种细胞的情形,本来开始也写过更多的细胞和更复杂规则的,可惜我的本本太慢, ...
计算机科学 生命游戏 细胞 Came of Life
Java编写的生命游戏,可以调整整个程序的生命数 还有生命规则,可以读取 或保存 当前生命游戏的发展状态
生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量...
生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量...
生命游戏在C语言基础上的MPI并行实现,运行环境VS+MPICH2
康威生命游戏,又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。它最初于1970年10月在《科学美国人》杂志上马丁·葛登能的“数学游戏”专栏出现。 规则 每个细胞有两种状态-存活或死亡,每...
生命游戏优化源码 C 和 C++两个版本
生命游戏c实现,有兴趣的可以看看。挺好玩的。