对于我的intro C ++类的最终项目,我们必须使用类和文件I / O设计一个Game of Life版本。我已经获得了一些开始的功能/指令,但是甚至无法开始了解从哪里开始,或者我是否缺少其他功能来开始。我已经包含了给出的说明和我到目前为止所拥有的内容。我不一定需要为我准备好整个事情,但如果我能在如何开始时获得一些帮助,那就太棒了。
说明:由于项目在第7章,因此本书的版本不适用于类,并且没有任何文件IO。让我们 首先解决文件IO。在项目下载页面上,除了常用项目外,还有两个数据文件 包含非常简单的生活社区规范。文件格式如下:文件中的第一项是 社区需要的行数,文件中的第二项是社区需要的列数,第三项 item是LIFE社区,它存储为由指定的数组形状中的“。”(死)或“O”(活动)字符。 前两个值。 为了使您的项目能够使用这些输入,您需要指定一个二维数组。这本书指定了一个 22乘80阵。 GTA项目使用50乘100(逐列)数组。只要您的数组大于指定的大小 通过输入,您的代码将使用输入。创建数组后,代码从输入中读取数据 填写你的LIFE社区阵列。该书建议直接用星号填充网格进行直播 死细胞的细胞和空白。我们将使用类对象。 LIFE的正常实现使用两个相同的数组。一个存储现在的一个,一个用于存储 下一代。 (参见第446页和第447页)我们将使用一个包含LIFE单元格对象的数组 我们能想到的最简单有用的课程。我们的类对象将包含两个存储单元生命的布尔数据项 条件和一个将细胞老化的功能。 您的LIFE社区的大小应该是正方形,并且边长度全局定义为const int edge =#。你的课是 命名单元格并包含公共布尔变量aod_d0,aod_d1和void函数age()。创建一个通用 函数,计算单元格的活动邻居数,并使用以下声明声明其类型:int nbors_sum(cell [edge] [edge],int,int,int,int);.您的LIFE社区每天都会老化一天,因此可以创建一个通用功能 在d0处读取细胞并确定该细胞在d1处是活着的还是死的(aod)。它的声明是:void oneday(cell [edge] [edge],int,int);. oneday函数将调用nbors_sum函数。 GTA版本中有相当数量的代码 main()包括文件输入和while(true)显示循环。
代码:
#include <iostream>
#include <fstream>
using namespace std;
const int edge=20;
class cell{
public:
bool aod_d0, aod_d1;
int nbors_sum(cell[edge][edge],int,int,int,int);
void oneday(cell[edge][edge],int,int);
int main()
{
ifstream in;
in.open("glidergun.txt");
if(in.fail())
{
cout <<"Input file failed to open.\n";
return 1;
}
oneday()
in.close();
return 0;
}
void age();
int nbors_sum(cell[edge][edge],int,int,int,int);
void oneday(cell[edge][edge],int,int){
}
答案 0 :(得分:2)
这不是那么难 - 这是一个非常常见的练习,所以网上有很多材料。例如,只需查看维基百科,即可获得一个想法,并观看动画中这个“游戏”的动画: https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
作为一个起点,我建议您执行以下操作:
如果你设法完成这两个步骤,那么在你继续进行的过程中,你已经对这一点有了更好的理解。
我的一般建议是,如果你遇到类似的问题,你不知道该怎么做,那就开始做一些非常明显的事情,无论如何都需要做(比如阅读文件,在这种情况下)。通过这样做,您将在途中熟悉其余部分。