一个关于生命游戏的程序

生命游戏小程序

罗锐鑫,陈佳俊

题目概述:

       它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过低,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过高,世界中又会被生命充满而没有什么变化。实际中,这个数目一般选取2或者3;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有2或3个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞。


原则:

每个格子的生死遵循下面的原则:
1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。
2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)


代码如下:

    #include<iostream>  
    using namespace std;  
       
    //定义细胞结构体  
    struct Cell  
    {  
     bool live;  
     int  others;  
    };  
        
    void main()  
    {  
       
     Cell cell[10][10];  
     int i=0;  
     int j=0;  
     //初始化数组  
     for(i = 0;i<10;i++)  
      for(j=0;j<10;j++)  
      {  
       cell[i][j].live=true;  
       cell[i][j].others=0;  
      }  
      //运行 
     while(1)  
     {  
      for(i=0;i<10;i++)  
       for(j=0;j<10;j++)  
       {  
        cell[i][j].others=0;  
       }  
       
      for( i=0;i<10;i++)  
      {  
       for(j=0;j<10;j++)  
       {  
        if(cell[i][j].live)  
         cout<<"$ ";  
        else  
         cout<<"- ";  
       }  
       cout<<endl;  
      }  
     //判断并输出执行结果  
      for(i=0;i<10;i++)  
       for(j=0;j<10;j++)  
       {  
        if((i-1)>=0 && (j-1)>=0 && cell[i-1][j-1].live)  
         cell[i][j].others++;  
        if((i-1)>=0 && cell[i-1][j].live)  
         cell[i][j].others++;  
        if((i-1)>=0 && (j+1)<10 && cell[i-1][j+1].live)  
         cell[i][j].others++;  
        if((j-1)>=0 && cell[i][j-1].live)  
         cell[i][j].others++;  
        if((j+1)<10 && cell[i][j+1].live)  
         cell[i][j].others++;  
        if((i+1)<10 && (j-1)>=0 && cell[i+1][j-1].live)  
         cell[i][j].others++;  
        if((i+1)<10 && cell[i+1][j].live)  
         cell[i][j].others++;  
        if((i+1)<10 && (j+1)<10 && cell[i+1][j+1].live)  
         cell[i][j].others++;  
       
        switch(cell[i][j].others)  
        {  
        case 2:break;  
        case 3:cell[i][j].live=true;break;  
        default:cell[i][j].live=false;break;  
        }  
       }  
       //Sleep(1000);  
       //clrscr();  
       system("cls");//可以用这个清屏  
     }  
    }  
程序截图:


小伙伴图片:











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值