python实现生命游戏的示例代码(Game of Life)


Posted in Python onJanuary 24, 2018

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

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

# -*- coding: utf-8 -*- 
from time import sleep 
from copy import deepcopy 
 
WORLD_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, False 
    self.x, self.y = self.point 
   
  def setAlive(self): 
    self.is_alive = True 
     
  def setDied(self): 
    self.is_alive = False 
     
  def 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 xrange(WORLD_WIDE): 
      column = [] 
      for pos_y in xrange(WORLD_HIGH): 
        column.append(Cell((pos_x, pos_y))) 
      world.append(column) 
    return world 
   
  def initAliveCell(self): 
    from random import choice 
    for high in self.world: 
      for cell in high: 
        if choice((0, 1)) == 0: 
          continue 
        cell.setAlive() 
   
  def getNeighbours(self, cell_obj): 
    alive_count = 0 
    for x_of in xrange(-1, 2): 
      for y_of in xrange(-1, 2): 
        c_x, c_y = cell_obj.x + x_of, cell_obj.y + y_of 
        if ((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): 
          '''''排除自身和越界的点''' 
          continue 
        if self.world[c_x][c_y].is_alive: 
          alive_count += 1 
    return alive_count 
        
  def display(self): 
    print '='*WORLD_WIDE #等号分割线 
    for index in xrange(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_world 
      sleep(0.2) 
 
if __name__ == '__main__': 
  world = GameManager() 
  try: 
    world.gameStart() 
  except KeyboardInterrupt: 
    '''''防止ctrl+c退出报错''' 
    pass

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python Requests 基础入门
Apr 07 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
Python socket模块方法实现详解
Nov 05 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
Python数据分析之pandas函数详解
Apr 21 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 Python
Python 获得命令行参数的方法(推荐)
Jan 24 #Python
Python实现的rsa加密算法详解
Jan 24 #Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 #Python
python做量化投资系列之比特币初始配置
Jan 23 #Python
python在非root权限下的安装方法
Jan 23 #Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 #Python
Python 查看文件的读写权限方法
Jan 23 #Python
You might like
全国中波电台频率表
2020/03/11 无线电
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
php模板引擎技术简单实现
2016/03/15 PHP
php实现学生管理系统
2020/03/21 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
pandas 将索引值相加的方法
2018/11/15 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
python实现广度优先搜索过程解析
2019/10/19 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
个人师德师风自我剖析材料
2014/09/29 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
年终工作总结范文
2019/06/20 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书