生命游戏(python版)

作者为编程萌新,如有不正之处,恳请大家多多指教!

同样的,先介绍一下生命游戏:

游戏开始时,每个细胞随机地设定为“生”或“死”之一的某个状态。然后,根据某种规则,计算出下一代每个细胞的状态,画出下一代细胞的生死分布图。

应该规定什么样的迭代规则呢?需要一个简单的,但又反映生命之间既协同又竞争的生存定律。为简单起见,最基本的考虑是假设每一个细胞都遵循完全一样的生存定律;再进一步,把细胞之间的相互影响只限制在最靠近该细胞的8个邻居中。

也就是说,每个细胞迭代后的状态由该细胞及周围8个细胞状态所决定。作了这些限制后,仍然还有很多方法来规定“生存定律”的具体细节。例如,在康威的生命游戏中,规定了如下生存定律。

(1)当前细胞为死亡状态时,当周围有3个存活细胞时,则迭代后该细胞变成存活状态(模拟繁殖);若原先为生,则保持不变。

(2)当前细胞为存活状态时,当周围的邻居细胞低于两个(不包含两个)存活时,该细胞变成死亡状态(模拟生命数量稀少)。

(3)当前细胞为存活状态时,当周围有两个或3个存活细胞时,该细胞保持原样。

(4)当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态(模拟生命数量过多)。

可以把最初的细胞结构定义为种子,当所有种子细胞按以上规则处理后,可以得到第1代细胞图。按规则继续处理当前的细胞图,可以得到下一代的细胞图,周而复始。

                                                                                                              ——————百度百科

 
          代码的原理我已经在另一篇文章说了,直接上代码:

goboard=[[i for j in range(19)]for i in range(19)]        #定义棋盘
for a in range(19):                                       #初始化
    for b in range(19):
        goboard[a][b]=0

print("please put in some number to initialize the goboard")
goboard[6][6]=1                       #赋初值样例(滑翔机)暂未实现人机交互
goboard[6][7]=1
goboard[6][8]=1
goboard[4][7]=1
goboard[5][8]=1
pass

for a in range(19):                                       #打印初始棋盘
    for b in range(19):
        print(goboard[a][b],end="")
    print("")

goboard2=[[m for n in range(19)]for m in range(19)]       #设置一变量棋盘
for a in range(19):                                       #初始化2
    for b in range(19):
        goboard2[a][b]=0

for x in range(10):                                       #自定义循环次数
    for a in range(1,17,1):
        for b in range(1,17,1):
            c=goboard[a+1][b]
            d=goboard[a-1][b]
            e=goboard[a][b+1]
            f=goboard[a][b-1]
            g=goboard[a+1][b+1]
            h=goboard[a+1][b-1]
            k=goboard[a-1][b+1]
            l=goboard[a-1][b-1]
            if (c+d+e+f+g+h+k+l)==3:
                goboard2[a][b]=1
            elif (c+d+e+f+g+h+k+l)==2:
                goboard2[a][b]=goboard[a][b]
            else:
                goboard2[a][b]=0

    y=(input())
    for a in range(19):                                     #打印棋盘
        for b in range(19):
            print(goboard2[a][b],end="")
        print("")

    for a in range(19):                                     #棋盘转换
        for b in range(19):
            goboard[a][b]=goboard2[a][b]

如果两种语言都会的可以对比一下,完全一模一样。只会python的可以参考这篇文章。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生命游戏(Game of Life)是一种细胞自动机,是由英国数学家约翰·康威在 1970 年发明的。它通过简单的规则模拟生命的演化过程,被认为是一种复杂系统。在游戏中,每个细胞只有两种状态:存活或死亡。通过规则来判断每个细胞在下一轮中的状态,从而模拟生命的繁衍和死亡。 在 Python 中,我们可以用 NumPy 来创建一个二维数组来表示细胞的状态,然后通过循环遍历每个细胞,根据其周围细胞的状态来判断其下一轮的状态。具体实现方式可以参考以下示例代码: ```python import numpy as np def generate_board(size): board = np.zeros((size, size), dtype=int) # 在这里可以初始化细胞的初始状态 return board def get_neighbours(board, x, y): neighbours = [] for i in range(x-1, x+2): for j in range(y-1, y+2): if i >= 0 and j >= 0 and i < len(board) and j < len(board) and (i, j) != (x, y): neighbours.append((i, j)) return neighbours def get_next_state(board, x, y): state = board[x][y] neighbours = get_neighbours(board, x, y) live_neighbours = sum([board[i][j] for i, j in neighbours]) if state == 1: if live_neighbours < 2 or live_neighbours > 3: return 0 else: return 1 else: if live_neighbours == 3: return 1 else: return 0 def update_board(board): new_board = np.zeros((len(board), len(board)), dtype=int) for i in range(len(board)): for j in range(len(board)): new_board[i][j] = get_next_state(board, i, j) return new_board ``` 以上代码实现了一个基本的生命游戏,并可以自定义初始状态。你可以根据自己的需要对代码进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值