如何利用python实现生命游戏

本文介绍了如何用Python实现英国数学家约翰·康威的‘生命游戏’,详细讲解了游戏规则,并展示了核心代码,包括生成生命网格、计算邻居、判断存活及主函数等。
摘要由CSDN通过智能技术生成

英国数学家约翰·何顿·康威在1970年发明了 the game of life,今天番茄加速就来分享下如何利用python实现生命游戏,规则如下:在这里插入图片描述

每个细胞有两种状态 - 存活或死亡

每个细胞与以自身为中心的周围八格细胞产生互动

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

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

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

当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。(模拟繁殖)

拿个例子阐述上述状态,如下种子时代:

[0, 0, 1, 0, 0]

[0, 1, 1, 0, 0]

[0, 0, 1, 1, 0]

[0, 1, 1, 1, 0]

[0, 0, 0, 0, 0]

坐标[0,2]为一个存活的细胞,因为周围细胞个数为2,所以繁衍后依然存活;

坐标[1,2]的存活细胞,因为周围有4个存活细胞,所以繁衍后死亡;

坐标[0,1]死亡细胞,因为周围恰好有3个存活细胞,所以[0,1]处出现生命,

繁衍一代后的,完整图如下:

[0, 1, 1, 0, 0]

[0, 1, 0, 0, 0]

[0, 0, 0, 0, 0]

[0,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Python实现生命游戏的示例代码: ```python import random import time import copy WIDTH = 60 HEIGHT = 20 # 创建一个二维列表,用于存储细胞的状态 next_cells = [] for x in range(WIDTH): column = [] for y in range(HEIGHT): if random.randint(0, 1) == 0: column.append('#') else: column.append(' ') next_cells.append(column) while True: print('\n\n\n\n\n') current_cells = copy.deepcopy(next_cells) # 输出当前细胞状态 for y in range(HEIGHT): for x in range(WIDTH): print(current_cells[x][y], end='') print() # 计算下一代细胞的状态 for x in range(WIDTH): for y in range(HEIGHT): left_coord = (x - 1) % WIDTH right_coord = (x + 1) % WIDTH above_coord = (y - 1) % HEIGHT below_coord = (y + 1) % HEIGHT num_neighbors = 0 if current_cells[left_coord][above_coord] == '#': num_neighbors += 1 if current_cells[x][above_coord] == '#': num_neighbors += 1 if current_cells[right_coord][above_coord] == '#': num_neighbors += 1 if current_cells[left_coord][y] == '#': num_neighbors += 1 if current_cells[right_coord][y] == '#': num_neighbors += 1 if current_cells[left_coord][below_coord] == '#': num_neighbors += 1 if current_cells[x][below_coord] == '#': num_neighbors += 1 if current_cells[right_coord][below_coord] == '#': num_neighbors += 1 if current_cells[x][y] == '#' and (num_neighbors == 2 or num_neighbors == 3): next_cells[x][y] = '#' elif current_cells[x][y] == ' ' and num_neighbors == 3: next_cells[x][y] = '#' else: next_cells[x][y] = ' ' time.sleep(1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值