首页 文章

使用C类设计生命游戏[关闭]

提问于
浏览
-5

对于我的intro C类中的最终项目,我们必须使用类和文件I / O设计一个Game of Life版本 . 我已经获得了一些开始的功能/指令,但是甚至无法开始了解从哪里开始,或者我是否缺少其他功能来开始 . 我已经包含了给出的说明和我到目前为止的说明 . 我不一定需要为我准备好整件事,但如果我能对如何开始提供一些帮助,那就太棒了 .

说明:由于项目在第7章,该书的版本不适用于类,它没有任何文件IO . 让我们先解决文件IO . 在项目下载页面上除了常用项目之外,还有两个包含非常简单的生活社区规范的数据文件 . 这些文件具有以下格式:文件中的第一项是社区需要的行数,文件中的第二项是社区需要的列数,第三项是LIFE社区,存储为“ . ”(死)或由前两个值指定的数组形状中的'O'(活动)字符 . 为了使您的项目能够使用这些输入,您需要指定一个二维数组 . 这本书指定了一个22乘80的数组 . GTA项目使用50乘100(逐列)数组 . 只要您的数组大于输入指定的大小,您的代码就可以使用输入 . 创建数组后,代码从输入中读取数据并填充您的LIFE社区数组 . 该书建议直接用星号填充活细胞和死细胞的空白 . 我们将使用类对象 . LIFE的正常实现使用两个相同的数组 . 一个存储现在的一代,一个用于存储下一代 . (参见第446和447页)我们将使用一个包含LIFE单元对象的数组,这些对象是我们能想到的最简单有用的类 . 我们的类对象将包含两个存储单元生命条件的布尔数据项和一个将对单元进行老化的函数 . 您的LIFE社区的大小应该是正方形,并且边长度全局定义为const int edge =# . 您的类名为cell,包含公共布尔变量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){

}

1 回答

  • 2

    它是一个非常常见的练习,所以网上有很多材料 . 例如,只需查看维基百科即可获得一个想法并查看动画中的一些动画:https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

    作为一个起点,我建议您执行以下操作:

    • 按照练习的建议,将程序读入文件并将数据存储在2D数组中

    • 使程序将生成的2D数组打印到控制台(标准输出)

    如果你设法完成这两个步骤,那么在你继续进行的过程中,你已经对这一切有了更好的理解 .

    我的一般建议是,如果你面临一个你不知道该做什么的问题,那么就开始做那些需要做的非常明显的事情(例如阅读文件,在这种情况下) ) . 通过这样做,您将在途中熟悉其余部分 .

相关问题