课程实践实验1:生命之数(题目)
问题描述及要求
生命游戏在一个无边界的矩形网格上进行,这个矩形网格中的每个单元可被占据,或者不被占据。被占据的单元称为活的,不被占据的单元称为死的。哪一个单元是活的是根据其周围活的邻居单元的数目而一代一代地发生变化的。一代一代转换的具体规则如下:
给定单元的邻居单元指的是与它在垂直、水平或对角方向上相接的8个单元。
如果一个单元是活的,则如果它具有2个或3个活的邻居单元,则此单元在下一代还是活的。
如果一个单元是活的,则如果它具有0个或1个、4个或4个以上的活的邻居单元,则此单元在下一代会因为孤独或拥塞而死亡。
如果一个单元是死的,则如果它具有恰好有3个活的邻居,则此单元在下一代会复活,否则该单元在下一代仍然是死的。
(1)要求编写程序,模拟任意一个初始输入配置以及代代更替的不同状态并进行显示。
(2)修改以上程序,要求生成一个网格时,用“空格”和“x”分别表示网格中每一个死的单元和活的单元,并且可根据用户选择从键盘或者从文件读入初始配置。
概要设计
-
输入表格 初始化表格 更新表格 询问客户是否继续
-
程序运行的界面设计
-
建立一个生成表格的类。在类里分别initialize()构构造初始化表格、print()
将表格化成要求输出和update()更新表格的三个函数。
详细设计
- 主函数主要是说明引导输入
- 通过双层循环初始化
- 通过双层循环输出
- 询问客户是否继续
- 继续的话用循环更新
- 难点是循环
附代码:
#include <iostream>
using namespace std;
const int maxrow=20, maxcol=60;
class Life
{
int grid[maxrow+2][maxcol+2];
int neighbor_count(int row,int col)
{
int count=0;
for(int i=row-1;i<=row+1;i++)
for(int j=col-1;j<=col+1;j++)
count+=grid[i][j];
count-=grid[row][col];
return count;