题目描述:
main.cpp
#include <iostream>
#include "Life.h"
using namespace std;
int main()
{
Life game;
game.initialize();
game.print();
char c;
cin>>c;
while(c=='y')
{
game.update();
game.print();
cin>>c;
}
return 0;
}
Life.h
#ifndef LIFE_H
#define LIFE_H
const int maxrow = 20, maxcol = 60; // grid dimensions
class Life {
public:
void initialize();
void print(); //输出当前配置(数组状态)
void update(); //一次迭代
private:
int grid[maxrow + 2][maxcol + 2];//周围加一圈,防止溢出,不算在游戏内。但是我一开始没有理解老师的意思orz
int grid1[maxrow + 2][maxcol + 2];
int neighbor_count(int row, int col);
};
#endif // LIFE_H
Life.cpp
#include "Life.h"
#include <iostream>
using namespace std;
void Life::initialize()
{
int i,j;
for(i=0;i<maxrow-8;i++)
{
for(j=0;j<maxcol+2;j++)
{
grid[i][j]=0;
grid1[i][j]=0;
}
}
for(i=maxrow-8;i<maxrow+2;i++)
{
for(j=0;j<maxcol+2;j++)
{
grid[i][j]=1;
grid1[i][j]=1;
}
}
}
void Life::print()
{
int i,j;
for(i=0;i<maxrow+2;i++)
{
for(j=0;j<maxcol+2;j++)
{
cout<<grid[i][j];
}
cout<<endl;
}
}
void Life::update()
{
int ct;
int i,j;
for(i=1;i<maxrow+1;i++)
{
for(j=1;j<maxcol+1;j++)
{
ct=neighbor_count(i,j);
if(ct>3||ct<2)
{
grid[i][j]=0;
}
if(ct==2)
{
;
}
if(ct==3)
{
grid[i][j]=1;
}
}
}
for(i=0;i<maxrow+2;i++)
{
for(j=0;j<maxcol+2;j++)
{
grid1[i][j]=grid[i][j];
}
}
}
int Life::neighbor_count(int row, int col)
{
int cnt=0;
int i,j;
for(i=row-1;i<=row+1;i++)
{
for(j=col-1;j<=col+1;j++)
{
if(grid1[i][j]==1)
{
cnt++;
}
}
}
return cnt;
}
注:1.这道题最开始的版本我有一个逻辑上的错误。按顺序改变数组元素状态的时候后面的会受影响,后来引入了一个同样大小的二维数组暂存每一轮的初始状态用于判断。
2.由于老师要求的数组行列较大,不方便实现输入。因此这份代码只有一种情况下的输出。