當前位置:遊戲中心平台 - 遊戲盒子 - 請高手用C++編寫程序—生命遊戲

請高手用C++編寫程序—生命遊戲

#include<iostream>

using?namespace?std;

#include<time.h>

#define?M?70

#define?N?20

void?mShow(int?a[N+2][M+2])

{?int?i,j;

for?(?i=0;i<N;i++,cout<<endl?)

for?(?j=0;j<M;j++?)

if?(?a[i+1][j+1]?)?cout<<'*';

else?cout<<'.';

//cout<<(?a[i+1][j+1]?)?('*'):('?');

}

int?mJduge(int?a[N+2][M+2])

{?int?i,j,k,s,*p[9],b[N][M];

for?(?i=0;i<N;i++?)

{

p[0]=p[4]=p[5]=&a[i+1][1];?p[4]--;?p[5]++;//?1?2?3

p[1]=p[2]=p[3]=p[0]-M-2;?p[1]--;?p[3]++;?//?4?0?5

p[6]=p[7]=p[8]=p[0]+M+2;?p[6]--;?p[8]++;//?6?7?8

for?(?j=0;j<M;j++?)

{?for?(?k=1,s=0;k<9;k++?)?s+=(*p[k]);

b[i][j]=*p[0];

if?(?s>=3?)?b[i][j]=1;

else?if?(?s<2?)?b[i][j]=0;

for?(?k=0;k<9;k++?)?p[k]++;

}

}

for?(?i=0,s=1;i<N;i++?)?for?(?j=0;j<M;j++?)?{?a[i+1][j+1]=b[i][j];?if?(?b[i][j]==0?)?s=0;?}

return?s;

}

void?main()

{

int?a[N+2][M+2],b[N][M],*p[9];

int?t,i,j,k;

for?(?i=0;i<N+2;i++?)?for?(?j=0;j<M+2;j++?)?a[i][j]=0;

srand((unsigned?int)time(NULL));

for?(?i=0;i<N;i++?)?for?(?j=0;j<M;j++?)?{?k=rand()%100;?a[i+1][j+1]=(?k>=77?)?(1):(0);?}

cout<<"--------?T=0--------"<<endl;?mShow(a);

k=0;?t=0;

while?(?!k?)

{?k=mJduge(a);?t++;

cout<<"--------?T="<<t<<"?--------"<<endl;?mShow(a);

}

}

a數組比實際要的數組大壹圈,大出來的壹圈永恒等於0,作為邊界,省得計算8連通數據時數組越界

b數組用於計算本次的結果,計算完成後復制、覆蓋a數組中間部分作為結果

主程序做直到所有空間都被活細胞占滿情況停止

以下是設置M=10,N=5的測試部分結果

  • 上一篇:說吧,妳對什麽沒有抵抗力?
  • 下一篇:周記:今天就不說了(體驗作文)
  • copyright 2024遊戲中心平台