请用C++编这个 我还会追加的

来源:百度知道 编辑:UC知道 时间:2024/06/05 20:59:11
目标
实现一个简单的科学分析程序:“生命”。

内容
在这个程序中,玩家有一块地。
设计并初始化一个播种模式,即在一块地中种一些种子,每一粒种子占一个格子。这时称为第1代。
+ + + + + + + +
+ + + + + + @ +
+ + + + @ @ + +
+ + + + + + + +

每个种子有八个邻居。在第n+1代,每个格子是空还是被新的种子占据依赖于它们在第n代时的状态:
生存:有两个或三个邻居的种子将存活到下一代,即仍然占据该格子;
死亡:如果有四个或更多的邻居,种子将因为过度拥挤而死亡;如果种子只有一个或零个邻居,将因为孤独而死亡;
繁殖:如果一个空格子有三个邻居,那么将会长出一粒新种子。
+ + + + + + + +
+ + @ + + @ + +
@ @ + + + @ + +
+ + + + + + + +

一种模式在经过若干代之后有以下四种可能的结局之一:
消亡;
不变——静态;
振荡——在一组模式间循环多次后在相同的位置出现相同的模式;
滑动——在一组模式间循环多次后在不同的位置出现相同的模式。
+ + + + + + + + + + + +
+ + @ + + @ + + + + + +
@ @ + + + @ + + + + + +
+ + + + + + + + + + + +
1 2 3(die)

要求
允许用户指定初始的模式或计算机自动创建初始的模式;
显示进化的过程,即历代模式;
要求至少能判断出第一种结局;
当模式消亡就停止进化,或者提示用户是否继续显示下一代,或开始新的案例,抑或退出。

注释
可用一个n*n的矩阵表示模式:
+ + + + + + + +

#include<iostream>
#include<time.h>
using namespace std;

class field
{
private:
char *a;
char *group;
int M,N;
int generation;
int neighbors(int m,int n)
{
int x,y,z,w,i,j,c=0;
x=0>m-1?0:m-1;
y=m+1<M-1?m+1:M-1;
z=0>n-1?0:n-1;
w=n+1<N-1?n+1:N-1;
for(i=x;i<=y;i++)
for(j=z;j<=w;j++)
if(a[i*N+j])
c++;
return c;
}
void showfield1(int n)
{
int i,j;

cout<<" ";
for(j=0;j<N;j++)
cout<<"-";
cout<<" \n";

for(i=0;i<M;i++)
{
cout<<"|";
for(j=0;j<N;j++)
{
if(group[n*M*N+i*N+j])
cout<<"*";
else
cout<<" ";
}
cout<<"|"<<endl;
}