游戏的生活在C中,如何在文件中编写

  • 本文关键字:文件 的生活 游戏 c
  • 更新时间 :
  • 英文 :


所以我已经实现了生活游戏,现在必须将每个新生成的字段放入gif或pbm中,并在最后使用命令创建动画gif。

下面的函数是给定的,但我没有得到第一个参数,指针const char?我在函数中看到的是文件名,但是我怎么写,我真的很困惑。

static int write_pbm_file(const char *fn, struct game_field *gf) {
int i, j;
FILE *fp;

fp = fopen(fn, "w+");
if(!fp){
    printf("unable to open '%s' - '%s'n", fn, strerror(errno));
    return -1;
}
fprintf(fp, "P1n");
fprintf(fp, "%cn", gf->length);
fprintf(fp, "%cn", gf->length);
for(i = 0; i < gf->length; i++)
    for(j = 0; j < gf->length; j++)
        fprintf(fp, "%cn", gf->field[i][j] == 0 ? 48 : 
        gf->field[i][j] == 1 ? 219 : 197);
fclose(fp);
return 0; 
}

这就是我得到上述函数的代码:

while( iterations > 0 ) {
    write_pbm_file(..., pstField);
    pstField = game_iteration(pstField);
    iterations--;
}

我应该写什么来创建这个文件?请帮助

谢谢!

指向不变字符数据的指针最容易通过使用字符串字面值生成:

write_pbm_file("life.pbm", pstField);

您可能想要更改每个迭代的文件名。也许像这样:

char filename[100];
while(...)
{
 sprintf(filename, "life-%03d.pbm", iteration);
 write_pbm_file(filename, pstField);

这重用了您的iteration计数器(向后计数),因此要写入的第一个文件将具有最大的数字。我给三个十进制数字加了0-padding,当然我不知道你需要多少次迭代

参数fn只是文件的路径。在unix系统上,您可以写"/home/someuser/somefile.ext",在windows上,您可以写"C:\Some\Path\somefile.ext"

您还可以通过程序参数使其可配置,使用argv[1]或类似的参数。例句:

int main(int argc, char** argv) {
    if (argc < 1) exit(1);
    char* filename = argv[1];
    ...
    while( iterations > 0 ) {
        write_pbm_file(filename, pstField);
        pstField = game_iteration(pstField);
        iterations--;
    }
}

假设您有一个game_field field,那么将其写入/home/you/foo.pbm将是

write_pbm_file("/home/you/foo.pbm", &field);

const char *是字符串字面值、char *const char []char []衰变成的类型。

最新更新