生命游戏的算法就不多解释了,百度一下介绍随处可见。

因为网上大多数版本都是基于pygame,matlab等外部库实现的,二维数组大多是用numpy,使用起来学习成本比较高,所以闲暇之余写一个不用外部依赖库,console输出的版本。

# -*- coding: utf-8 -*-
from time import sleep
from copy import deepcopyWORLD_HIGH = 20 #世界长度
WORLD_WIDE = 40 #世界宽度
ALIVE_CON = 3 #复活条件
KEEP_CON = 2  #保有条件class Cell(object):'''细胞对象'''def __init__(self, pos):'''自身坐标x,y, 已经是否还存活'''self.point, self.is_alive = pos, Falseself.x, self.y = self.pointdef setAlive(self):self.is_alive = Truedef setDied(self):self.is_alive = Falsedef display(self):if self.is_alive:return '*'return ' 'def displayLinux(self):'''在linux环境下可以打印黑白块'''if self.is_alive:return '\033[0;37;47m \033[0m'return '\033[0;30;40m \033[0m'class GameManager(object):def __init__(self):self.world = self.initWorld()self.initAliveCell()def initWorld(self):world = []for pos_x in range(WORLD_WIDE):column = []for pos_y in xrange(WORLD_HIGH):column.append(Cell((pos_x, pos_y)))world.append(column)return worlddef initAliveCell(self):from random import choicefor high in self.world:for cell in high:if choice((0, 1)) == 0:continuecell.setAlive()def getNeighbours(self, cell_obj):alive_count = 0for x_of in range(-1, 2):for y_of in range(-1, 2):c_x, c_y = cell_obj.x + x_of, cell_obj.y + y_ofif ((c_x, c_y) == cell_obj.point) or \(c_x < 0 or c_x >= WORLD_WIDE) or \(c_y < 0 or c_y >= WORLD_HIGH):'''排除自身和越界的点'''continueif self.world[c_x][c_y].is_alive:alive_count += 1return alive_countdef display(self):print('='*WORLD_WIDE) # 等号分割线for index in range(WORLD_HIGH):print(''.join([high[index].displayLinux() for high in self.world]))print('='*WORLD_WIDE)def gameStart(self):while True:self.display()new_world = deepcopy(self.world)for p_x, wide_list in enumerate(self.world):for p_y, _ in enumerate(wide_list):current_cell = new_world[p_x][p_y]nei_num = self.getNeighbours(current_cell)if nei_num == ALIVE_CON:current_cell.setAlive()elif nei_num != KEEP_CON:current_cell.setDied()              self.world = new_worldsleep(0.2)if __name__ == '__main__':world = GameManager()try:world.gameStart()except KeyboardInterrupt:'''防止ctrl+c退出报错'''pass

Python实现生命游戏(Game of Life)相关推荐

  1. 康威生命游戏java_Java Python 康威生命游戏 - 命令行版

    Java & Python 康威生命游戏 - 命令行版(2020年7月23日) 制作背景 高二的时候看霍金的<大设计>最后几页的时候看到里面提到了康威生命游戏,介绍了它的规则,感觉 ...

  2. Python 实现生命游戏

    这次我们使用 Python 来实现生命游戏,这是一种简单的元胞自动机.基于一定规则,程序可以自动从当前状态推演到下一状态.制作的成品如下: 先来说说生命游戏的规则: 在生命游戏中,每个单元格有两种状态 ...

  3. Python - 康威生命游戏Conway's game of life

    使用python实现康威生命游戏Conway's game of life 参考<python极客项目编程> 游戏规则: 任何四周邻居存活数少于两个的存活网格将死亡,因为人口稀少. 任何四 ...

  4. Python实现生命游戏

    作者 | 借我一生执拗 来源 | Python高效编程 这次我们使用 Python 来实现生命游戏,这是一种简单的元胞自动机.基于一定规则,程序可以自动从当前状态推演到下一状态.制作的成品如下: 先来 ...

  5. python游戏后端_Python实现生命游戏

    1. 生命游戏是什么 生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个 ...

  6. 用pygame做一个简单的python小游戏---生命游戏

    用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...

  7. python做的大型游戏_Python实现数据量较大的生命游戏

    我现在要用串行的方法实现一个生命游戏,这个生命游戏是在一个100000 x 100000的棋盘上,并且繁衍500代.我选择用list形成一个二维数组来装这个棋盘上的数据,可是程序运行到一半,报错说me ...

  8. Python | 实现简单的康威生命游戏

    康威生命游戏是由英国教授John Horton Conway提出的一种生命仿真游戏.其具体的形式是,所有的细胞生活在一个二维平面上,一个细胞在下一个时刻的生存状态取决于当前时刻周围的各个细胞的生存状态 ...

  9. 复杂性思维中文第二版 六、生命游戏

    六.生命游戏 原文:Chapter 6 Game of Life 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本章中,我们考虑二维细胞自动机,特别是 John Conway ...

最新文章

  1. linux 内存 面试,【Linux内存面试题】面试问题:查看机器配置命… - 看准网
  2. 带有Python示例的math.sin()方法
  3. 50个linux初学者必须掌握的命令
  4. 为什么 Python 4.0 会与 Python 3.0 不同?
  5. 「回血赠书」Python入门书单,新年全力扬帆
  6. ztree 后台异步加载_ztree 异步加载示例
  7. 谷歌浏览器文件下载了缓存的问题与解决方案
  8. ping、arping、fping、hping、hping3、nping
  9. 使用layui实现表格制作
  10. java服务器返回中文乱码:???
  11. 巨佬Jake Wharton曾说过:一个App只需要一个Activity
  12. 什么是指纹浏览器,修改浏览器指纹工具
  13. 使用ASP.NET MVC Web SignalR 构建单身聊天室(一)
  14. 标梵微信小程序开发价格之做一个小程序要多少钱?
  15. 苹果审核Metadata Rejected解决
  16. 第三批更新鸿蒙系统,emui11第三批更新名单-emui11第三批更新名单介绍 - 系统家园...
  17. Joining_thread简单实现
  18. nodejs aes 加解密
  19. 大数据挖掘及应用(期末复习版)
  20. 【错误汇总】PYTHON开发

热门文章

  1. Android工程中前红色感叹号是什么意思
  2. 2023艾灸展/中国山东·济南国际艾灸仪器设备与艾制品展览会
  3. 腾讯云Linux服务器搭建(一) 服务器选择
  4. Linux下pdf 编辑器 pdftk 用法集锦(最全易懂)
  5. 系统学习车载仿真测试HiL,成为HiL测试工程师
  6. 基于HTML+CSS+JavaScript (品优购)电商购物项目的设计与实现(计算机毕业设计)
  7. Kubernetes(k8s) pod 重启策略
  8. New start, new life!
  9. 统信UOS系统Kafka_2.13-2.5.0单节点安装包方式部署
  10. 波特“钻石”模型理论的基本内容