一个关于生命游戏的程序

生命游戏小程序

罗锐鑫,陈佳俊

题目概述:

       它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过低,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过高,世界中又会被生命充满而没有什么变化。实际中,这个数目一般选取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");//可以用这个清屏  
     }  
    }  
程序截图:


小伙伴图片:











  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生命游戏是一种细胞自动机,由英国数学家约翰·康威1970发明游戏中存在着许多细胞,每个细胞都是“活着”或“死亡”的状态。游戏开始时,每个细胞的状态是随机分布的。然后,根据一定的规则,每个细胞的状态会不断地更新。更新后,所有细胞的状态会同时显示出来。这个过程可以反复进行,直到满足某个终止条件为止。 以下是一个简单的Python实现: ```python import random # 定义细胞状态,0表示死亡,1表示活着 DEAD, ALIVE = 0, 1 def init_board(rows, cols): """ 初始化游戏板 :param rows: 游戏板的行数 :param cols: 游戏板的列数 :return: 游戏板 """ board = [[random.choice([DEAD, ALIVE]) for _ in range(cols)] for _ in range(rows)] return board def count_neighbors(board, row, col): """ 统计一个细胞周围的存活细胞数量 :param board: 游戏板 :param row: 细胞所在的行数 :param col: 细胞所在的列数 :return: 周围存活细胞数量 """ count = 0 for i in range(row - 1, row + 2): for j in range(col - 1, col + 2): if i == row and j == col: continue if i >= 0 and i < len(board) and j >= 0 and j < len(board[0]) and board[i][j] == ALIVE: count += 1 return count def update_board(board): """ 更新游戏板 :param board: 游戏板 """ new_board = [[0 for _ in range(len(board[0]))] for _ in range(len(board))] for i in range(len(board)): for j in range(len(board[0])): count = count_neighbors(board, i, j) if board[i][j] == ALIVE: if count < 2 or count > 3: new_board[i][j] = DEAD else: new_board[i][j] = ALIVE else: if count == 3: new_board[i][j] = ALIVE for i in range(len(board)): for j in range(len(board[0])): board[i][j] = new_board[i][j] def display_board(board): """ 显示游戏板 """ for row in board: print(' '.join(['*' if cell == ALIVE else '-' for cell in row])) print() if __name__ == '__main__': board = init_board(10, 10) display_board(board) for i in range(10): update_board(board) display_board(board) ``` 这个程序通过随机生成初始游戏板,然后根据规则更新游戏板,最后显示更新后的游戏板。程序循环进行这个过程,直到达到预定的次数或出现某个终止条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值