使用类C 设计生活游戏

Designing Game of Life using classes C++

本文关键字:生活 游戏      更新时间:2023-10-16

对于我的介绍C 类中的最后一个项目,我们必须使用类和文件I/O设计一种生活版本。我已经得到了一些开始功能/说明,但甚至无法开始了解从哪里开始,或者如果我缺少其他功能来开始。我包括给出的说明以及到目前为止的内容。我不一定需要为我准备的整个事情,但是如果我能为如何入门提供一些帮助,那就太好了。

说明:由于该项目在第7章中,因此本书的版本与课程不起作用,并且没有任何文件IO。让我们首先处理文件IO。在项目下载页面上,除了通常的项目外,还将有两个数据文件包含非常简单的生活社区规范。文件具有以下格式:文件中的第一个项目是社区所需的行数,文件中的第二个项目是社区所需的列数,第三项项目是生命社区,以"。在两个值之前。为了使您的项目与这些输入一起使用,您需要指定二维数组。这本书指定了22乘80阵列。GTA项目使用50 x 100(col(阵列的100 x。只要您的数组大于指定的大小通过输入,您的代码将与输入一起使用。创建数组后,代码将在输入中的数据中读取填充您的人生社区阵列。这本书暗示直接用星号直接填充网格死细胞的细胞和空白。我们将使用类对象。生命的正常实施使用两个相同的阵列。一个存储现在的一代,一个用于存储下一代。(请参阅本书PGS 446& 447(我们将使用一个包含由生命细胞对象的数组我们可以想到的最简单的有用类。我们的类对象将包含两个储存细胞寿命的布尔数据项条件和一个将使单元老化的功能。您的生活社区的大小应为正方形,边缘长度在全球定义为const int Edge =#。你的班级是命名单元格并包含公共布尔变量aod_d0,aod_d1和void函数age((。创建将军计算单元格的生活邻居数量并用以下声明声明其类型的功能:intnbors_sum(单元格[edge] [edge],int,int,int,int(;。您的生活社区一次每天都有年龄,因此创建一个一般功能在D0处读取细胞,并确定该细胞是活着还是死亡(AOD(D1。该声明是:void oneDay(单元格[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){
}

这并不难 - 这是一个很常见的练习,因此网络上有很多材料。例如,只需检查Wikipedia即可获得一个想法,并查看该"游戏"中的一些动画:https://en.wikipedia.org/wiki/conway's_game_of_life

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

  1. 使您的程序在文件中读取并将数据存储在2D中阵列,如练习所建议的
  2. 使您的程序打印由此产生的2D数组到控制台(标准输出(

如果您设法完成了这两个步骤,那么到了您进行的一点,您已经对此有了更好的了解。

我的一般建议是,如果您遇到这样的问题,您不知道该怎么做,只需开始做任何需要做的明显的事情(例如读取文件,在这种情况下(。这样,您将在途中熟悉其余的。