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复制文件的方法实例详解
May 22 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
一个Python最简单的接口自动化框架
Jan 02 Python
python匿名函数用法实例分析
Aug 03 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
Aug 12 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
python实现扫雷游戏
Mar 03 Python
python合并多个excel文件的示例
Sep 23 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
教你用python控制安卓手机
May 13 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
用PHP 4.2书写安全的脚本
2006/10/09 PHP
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
Python3实现的字典遍历操作详解
2018/04/18 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python编写计算器功能
2019/10/25 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
python图片合成的示例
2020/11/09 Python
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
教师自我评价范例
2013/09/24 职场文书
中文系师范生自荐信
2013/10/01 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
财务总监岗位职责
2015/02/03 职场文书