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

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

因为网上大多数版本都是基于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 实现元胞自动机中的生命游戏(Game of life)
(0)

相关推荐

  • 详解Python 实现元胞自动机中的生命游戏(Game of life)

    简介 细胞自动机(又称元胞自动机),名字虽然很深奥,但是它的行为却是非常美妙的.所有这些怎样实现的呢?我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N的空间就有NN个格子.而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色.每一个格子旁边都有邻居格子存在,如果我们把33的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子. 每个格子的生死遵循下面的原则: 1. 如果一个细胞周围有3个细胞

  • Python实现生命游戏的示例代码(tkinter版)

    目录 生命游戏(Game of Life) 游戏概述 生存定律 图形结构 代码实现 运行界面 使用简介 后续改进 生命游戏(Game of Life) 由剑桥大学约翰·何顿·康威设计的计算机程序.美国趣味数学大师马丁·加德纳(Martin Gardner,1914-2010)通过<科学美国人>杂志,将康威的生命游戏介绍给学术界之外的广大渎者,一时吸引了各行各业一大批人的兴趣,这时细胞自动机课题才吸引了科学家的注意. 游戏概述 用一个二维表格表示“生存空间”,空间的每个方格中都可放置一个生命细胞

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

    生命游戏的算法就不多解释了,百度一下介绍随处可见. 因为网上大多数版本都是基于pygame,matlab等外部库实现的,二维数组大多是用numpy,使用起来学习成本比较高,所以闲暇之余写一个不用外部依赖库,console输出的版本. # -*- coding: utf-8 -*- from time import sleep from copy import deepcopy WORLD_HIGH = 20 #世界长度 WORLD_WIDE = 40 #世界宽度 ALIVE_CON = 3 #复

  • 基于Python实现超级玛丽游戏的示例代码

    目录 效果演示 基础源码 1.基础设置(tools部分) 2.设置背景音乐以及场景中的文字(setup部分) 3.设置游戏规则(load_screen) 4.设置游戏内菜单等(main_menu) 5.main() 6.调用以上函数实现 效果演示 基础源码 1.基础设置(tools部分) 这个部分设置马里奥以及游戏中蘑菇等怪的的移动设置. import os import pygame as pg keybinding = { 'action':pg.K_s, 'jump':pg.K_a, 'l

  • 基于Python实现围棋游戏的示例代码

    目录 1.导入模块 2.初始化棋盘 3. 开始游戏 4.放弃当前回合落子 5.悔棋判断 6.重新开始 7.右侧太极图的设置 8.落子设置 9.吃子规则判定设置 10.其他 11.程序入口 12.效果图 文件自取 1.导入模块 tkinter:ttk覆盖tkinter部分对象,ttk对tkinter进行了优化 copy:深拷贝时需要用到copy模块 tkinter.messagebox:围棋应用对象定义 如没有以上模块,在pycharm终端输入以下指令: pip install 相应模块 -i h

  • python 实现弹球游戏的示例代码

    运行效果 实现代码 # -*- coding: utf-8 -*- import tkinter as tkinter import tkinter.messagebox as mb import random,time class Ball(): ''' 创建Ball类,初始化对象,即创建对象设置属性, init函数是在对象被创建的同时就设置属性的一种方法,Python会在创建新对象时自动调用这个函数. ''' def __init__(self,canvas,paddle,score,col

  • Python使用random模块实现掷骰子游戏的示例代码

    引入内容 根据人民邮电出版社出版的<Python程序设计现代设计方法>P102习题中的第7题--掷骰子游戏,进行代码编写. 题目要求 一盘游戏中,两人轮流掷骰子5次,并将每次掷出的点数累加,5局之后,累计点数较大者获胜,点数相同则为平局.根据此规则实现掷骰子游戏,并算出50盘之后的胜利者( 50盘中嬴得盘数最多的,即最终胜利者). 审题: 共有50盘游戏.一盘游戏有5局,每一局双方各掷骰子一次,5局结束以后统计分数,分数高的一方获胜.至此,一盘游戏结束.50盘游戏结束后,赢得盘数最多的一方为最

  • Python实现炸金花游戏的示例代码

    今天的第二个作品,哈哈哈哈,搞起来感觉还挺有意思的,不过代码里纸牌J,Q,K,A几个数字被我替换成了11,12,13,14......主要是没有想到简单的办法让其比较,索性都用数字了,我太菜了,希望有大佬指点一下. 代码如下: import random   #导入随机数函数 def puke():     """     生成一副52张的扑克牌(除去大小王)     :return:     """     list1 = ['黑桃', '红桃

  • 通过Python实现猜灯谜游戏的示例代码

    目录 导语 猜灯谜界面 程序讲解 构造初始界面 构造灯谜类对象 监控鼠标事件 源码 导语 新的一年迎来了元宵节,元宵佳节在陪伴家人的同时,自然也少不了赏花灯,猜灯谜的项目.当然,受到疫情的影响,许多地方今年无法出门赏花灯,猜灯谜. 但是不要紧,小编昨晚用Python弄了一猜灯谜的小程序让大家享受一把猜灯谜乐趣 猜灯谜界面 来看一下猜灯谜的小程序是怎么玩的.先看一下效果图: 程序讲解 构造初始界面 对于程序界面的构造,利用的是python3.6版本下安装2.0.1版本的pygame库.其界面的初始

  • 基于Python编写简易版的天天跑酷游戏的示例代码

    写出来的效果图就是这样了: 下面就更新一下全部的代码吧 还是老样子先定义 import pygame,sys import random 写一下游戏配置 width = 1200            #窗口宽度 height = 508            #窗口高度 size = width, height    score=None              #分数 myFont=myFont1=None     #字体 surObject=None          #障碍物图片   

  • 基于Python实现开心消消乐小游戏的示例代码

    目录 前言 一.准备 1.1 图片素材 1.2 音频素材 二.代码 2.1 导入模块 2.2 游戏音乐设置 2.3 制作树类 2.4 制作鼠标点击效果 2.5 制作出现元素 2.6 数组 2.7 制作人物画板 三.效果展示(仅部分) 3.1 初始页面 3.2 第一关画面 3.3 失败画面 3.4 第十关画面 穿过云朵升一级是要花6个金币的,有的时候金币真的很重要 前言 嗨喽,大家好呀!这里是魔王~ 一天晚上,天空中掉下一颗神奇的豌豆种子,正好落在了梦之森林的村长屋附近. 种子落地后吸收了池塘的水

随机推荐