Life of game 趣味遊戲

        1970年英國數學家J.H.CONWAY提出了一種名爲Life的趣味遊戲,遊戲在一個模擬的方格盤上進行,每個方格都有兩種可能的狀態:存活或死亡。賦予方格一個初始的狀態,它將按照一下的規則進行變化:

    1:每個方格相鄰的八個方格稱爲方格的鄰居。

    2:如果一個方格是存活的但是它的鄰居數爲0或者只有一個,下一代中這個方格由於過於孤獨而死亡。

    3:如果一個方格是存活的並且有四個或者更多的鄰居,下一代中這個方格會由於過於擁擠而死亡。

    4:如果一個方格是存活的並且有兩個或者三個鄰居,下一代中這個方格會繼續存活。

    5:如果一個方格是死亡的,而它正好有三個鄰居,那麼下一代中這個方格將復活。

    6:所有的死亡和復活事件是同時發生的。

     實現思路:用二維數組構造方格,接受用戶輸入的初始狀態,計算每個方格的鄰居數,然後根據繁衍規則(總結起來很簡單:鄰居數爲2時狀態不變,鄰居數爲3時下一代總是存活的,其餘鄰居數下一代總是死亡的)進行改變。

#include<iostream>
#include<conio.h>
using namespace std;
const int Maxline=20;
class life
{public:
	void initialize();
	void update();
	void print();
	private:
	int grid[Maxline+2][Maxline+2];
	int row,col;
};
void life::initialize()
{
    for(row=0;row<=Maxline+1;row++)
    for(col=0;col<=Maxline+1;col++)
    grid[row][col]=0;
    cout<<"please input the row and column of the living cells(terminate with 0 0)"<<endl;
    cin>>row>>col;
    while(row||col)
    {if(row>=1&&row<=Maxline&&col>=1&&col<=Maxline)
    grid[row][col]=1;
    else
    cout<<"your input is out of range"<<endl;
    cin>>row>>col;}
}
void life::print()
{
for(row=1;row<=Maxline;row++)
{for(col=1;col<=Maxline;col++)
if(grid[row][col])cout<<"*";
else cout<<" ";
cout<<endl;}
}
void life::update()
{
int newgrid[Maxline+2][Maxline+2];
int count=0,i,j;
for(row=1;row<=Maxline;row++)
for(col=1;col<=Maxline;col++)
{
for(i=row-1;i<=row+1;i++)
for(j=col-1;j<=col+1;j++)
count+=grid[i][j];
count-=grid[row][col];
if(count==2)newgrid[row][col]=grid[row][col];
else if(count==3)newgrid[row][col]=1;
else newgrid[row][col]=0;
count=0;
}
for(row=1;row<=Maxline;row++)
for(col=1;col<=Maxline;col++)
grid[row][col]=newgrid[row][col];
}
bool user_says_yes()
{
	char choice;
	cin>>choice;
	while(choice!='y'&&choice!='Y'&&choice!='n'&&choice!='N')
        cin>>choice;
	return (choice=='y'||choice=='Y');
}
int main()
{
 life configuration;
 configuration.initialize();
 configuration.print();
 cout<<"continue viewing new generations?(y/n)"<<endl;
 while(user_says_yes())
 {configuration.update();
 configuration.print();
 cout<<"continue viewing new generations?(y/n)"<<endl;
 }
 return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章