基于康威的生命游戏的任务不堪重负

时间:2014-11-13 23:13:44

标签: c++ conways-game-of-life

给我文件gameOfLife.cpp,life.cpp和life.h.我只能编辑life.cpp以使程序正常工作。我不知道在哪里编辑life.cpp,因为有很多事情我不熟悉。我有一个文件checkoutLife.cpp来检查我的工作。

我花了最近两天的时间看着其他人的生命游戏文件,试图看看如何继续但却不知所措。我不希望有人为我做我的工作,但我需要一些指导。

gameOfLife.cpp

#include <iostream>
#include "life.cpp"
#include "life.h"

const int GENERATIONS=100;

using namespace std;

//make a random array of initial living cells
void gen(bool a[ROWS][COLS]){
    for(int i=0;i<ROWS;++i){
        for(int j=0;j<COLS;++j){
            if(rand()%100<10)a[i][j]=true;
            else a[i][j]=false;
        }
    }
    a[5][5]=true;
    a[5][6]=true;
    a[5][7]=true;
    return;
}

// check to see if two arrays are equal
bool equal(const bool a[ROWS][COLS], const bool b[ROWS][COLS]){
    int i,j;
    for(i=0;i<ROWS;++i)for(j=0;j<COLS;++j)if(a[i][j]!=b[i][j])return false;
    return true;
}

//copy the b array into the a array
void copy(bool a[ROWS][COLS], const bool b[ROWS][COLS]){
    for(int i=0;i<ROWS;++i){
        for(int j=0;j<COLS;++j){
            a[i][j]=b[i][j];
        }
    }
    return;
}

//print out the array
void print(const bool a[ROWS][COLS]){
    for(int i=0;i<ROWS;++i){
        for(int j=0;j<COLS;++j){
            if(a[i][j])cout << 'X';
            else       cout << ' ';
        }
        cout << endl;
    }
    return;
}


int main(){
    bool current[ROWS][COLS];
    bool next[ROWS][COLS];
    int i=0;

    //initialze the cell array and print it out
    gen(current);
    print(current);

    while(i<GENERATIONS){
        //get a carriage return before the next generation
        cin.get();

        //give the current generation to life()
        //it puts the next generation into next
        life(current,next);

        //copy the next generation into the current
        copy(current,next);

        //print it out
        print(current);
        i++;
    }

    return 0;
}

life.cpp

/*1. You need to write a file life.cpp that implements the function prototyped in life.h.  You can and should write other functions
     and tuck them into the same file; whatever you need to get your function working in an elegant manner.

  2. Compile your file with checkoutLife.cpp and run the resulting executable to see if it passes all the tests.

  3. Compile yourfile with gameOfLife.cpp and run the resulting executable to see if it makes pretty pictures.

  4. If you are convinced steps 2 and 3 are working, submit your life.cpp via canvas.
*/

#include <iostream>
#include <cstdlib>
#include "life.h"

using namespace std;

void life(const bool current[ROWS][COLS], bool next[ROWS][COLS]){

}

life.h

#ifndef LIFE_H
#define LIFE_H
const int ROWS=25;
const int COLS=25;

// Simulate one generation of Conways Game of Life
//
// Given:
//        a constant 2D bool array called "current" where each true element
//        indicates a live cell and each false element indicates a dead cell.
//
//        an empty  2D bool array called "next"

void life(const bool current[ROWS][COLS], bool next[ROWS][COLS]);
#endif

1 个答案:

答案 0 :(得分:1)

life()用两个参数调用:你的电路板当前状态的数组(可能你不会触摸)和电路板下一个状态的数组(你将填充)。

以下是您可以使用的算法:

  • 对于ROW中的每一行:
    • 对于COL中的每个col:
      • 在当前[] []中添加所有周围的邻居,存储在&#34;邻居&#34;
      • 如果当前[row] [col]是活着的并且邻居&lt; 2,下一个[row] [col] = dead
      • 否则,如果当前[row] [col]处于活动状态且邻居== 2或3,则[row] [col] = alive
      • 如果当前[row] [col]是活着的并且邻居&gt; 4,下一个[row] [col] = dead
      • 否则,如果当前[row] [col]已经死亡且邻居== 3,则[row] [col] = alive

你可以稍微清理逻辑,但我打印出的就像维基百科的生命游戏入门规则一样。复杂的部分(IMO)是&#34;加起来所有周围的邻居&#34; - 这里有很多界限检查。为了清楚起见,我建议你写一种不同的方法。