Life of game 趣味游戏

本文介绍由J.H.康威于1970年提出的‘生命游戏’,一种基于二维网格的简单规则系统,通过模拟生物生存与繁殖的基本原则,展现了复杂行为与模式的涌现。游戏通过设定的六条规则,探索了方格内元素(生命细胞)的存活、死亡及其邻居数量之间的关系,展示了如何通过简单的逻辑操作,生成出看似随机但又蕴含规律的图案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值