生命游戏建立在9个方格的网格中,每个细胞有8个相邻细胞。
游戏有三个规则:
1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。
2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)

import sys, argparse
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animationON = 255
OFF = 0
vals = [ON, OFF]#np的choice()方法将从给定列表vals中选择一个值,概率从0.2到0.8,创建了n*n个值,使用reshape()方法使它成为一个二维数组
def randomGrid(N):return np.random.choice(vals, N*N, p=[0.2, 0.8]).reshape(N, N)#用numpy数组定义一个图案并用切片操作将其复制到二维网格中
def addGlider(i, j, grid):"""adds a glider with top left cell at (i, j)"""glider = np.array([[0,    0, 255], [255,  0, 255], [0,  255, 255]])grid[i:i+3, j:j+3] = glider#添加高斯帕滑翔枪图形
def addGosperGliderGun(i, j, grid):gun = np.zeros(11*38).reshape(11, 38)gun[5][1] = gun[5][2] = 255gun[6][1] = gun[6][2] = 255gun[3][13] = gun[3][14] = 255gun[4][12] = gun[4][16] = 255gun[5][11] = gun[5][17] = 255gun[6][11] = gun[6][15] = gun[6][17] = gun[6][18] = 255gun[7][11] = gun[7][17] = 255gun[8][12] = gun[8][16] = 255gun[9][13] = gun[9][14] = 255gun[1][25] = 255gun[2][23] = gun[2][25] = 255gun[3][21] = gun[3][22] = 255gun[4][21] = gun[4][22] = 255gun[5][21] = gun[5][22] = 255gun[6][23] = gun[6][25] = 255gun[7][25] = 255gun[3][35] = gun[3][36] = 255gun[4][35] = gun[4][36] = 255grid[i:i+11, j:j+38] = gundef update(frameNum, img, grid, N):# copy grid since we require 8 neighbors for calculation# and we go line by line newGrid = grid.copy()for i in range(N):for j in range(N):#计算与其相邻的八个邻居的值,求和除于255来获取ON的细胞数量total = int((grid[i, (j-1)%N] + grid[i, (j+1)%N] + grid[(i-1)%N, j] + grid[(i+1)%N, j] + grid[(i-1)%N, (j-1)%N] + grid[(i-1)%N, (j+1)%N] + grid[(i+1)%N, (j-1)%N] + grid[(i+1)%N, (j+1)%N])/255)# apply Conway's rulesif grid[i, j]  == ON:if (total < 2) or (total > 3):newGrid[i, j] = OFFelse:if total == 3:newGrid[i, j] = ON# update dataimg.set_data(newGrid)grid[:] = newGrid[:]return img,# main() function
def main():# Command line args are in sys.argv[1], sys.argv[2] ..# sys.argv[0] is the script name itself and can be ignored# parse argumentsparser = argparse.ArgumentParser(description="Runs Conway's Game of Life simulation.")# add arguments#dest :参数名#dest:如果提供dest,例如dest="a",那么可以通过args.a访问该参数parser.add_argument('--grid-size', dest='N', required=False)parser.add_argument('--mov-file', dest='movfile', required=False)parser.add_argument('--interval', dest='interval', required=False)#store_true和store_false:值存为True或Falseparser.add_argument('--glider', action='store_true', required=False)parser.add_argument('--gosper', action='store_true', required=False)#parse_args()方法实际上从我们的命令行参数中返回了一些数据args = parser.parse_args()#设置网格尺寸N = 100if args.N and int(args.N) > 8:N = int(args.N)# set animation update intervalupdateInterval = 50if args.interval:updateInterval = int(args.interval)# declare gridgrid = np.array([])# check if "glider" demo flag is specifiedif args.glider:grid = np.zeros(N*N).reshape(N, N)addGlider(1, 1, grid)elif args.gosper:grid = np.zeros(N*N).reshape(N, N)addGosperGliderGun(10, 10, grid)else:# populate grid with random on/off - more off than ongrid = randomGrid(N)#设置动画fig, ax = plt.subplots()img = ax.imshow(grid, interpolation='nearest')ani = animation.FuncAnimation(fig, update, fargs=(img, grid, N, ),frames = 10,interval=updateInterval,save_count=50)# # of frames? # set output fileif args.movfile:ani.save(args.movfile, fps=30, extra_args=['-vcodec', 'libx264'])plt.show()# call main
if __name__ == '__main__':main()

对于argparse的参考有以下的资料
https://blog.csdn.net/lis_12/article/details/54618868
https://www.cnblogs.com/zknublx/p/6106343.html

对于Matplotlib库的参考主要有:
https://www.cnblogs.com/LHWorldBlog/p/7819331.html
http://python.jobbole.com/85106/

Conway生命游戏相关推荐

  1. linux生命游戏实现,模拟生命——Conway生命游戏python实现(详细注释笔记)

    规则: 每个细胞有两种状态-存活ON或死亡OFF,每个细胞与以自身为中心的周围八格细胞产生互动.(请想象九宫格) 1)人口过少:当周围低于2个(不包含2个)存活细胞时, 本单元活细胞死亡. 2)稳定: ...

  2. 【Python】Conway生命游戏学习

    先尝试以下代码,如果成功就可以继续吧 import numpy as np #数组 import matplotlib.pyplot as plt #生成动画 import matplotlib.an ...

  3. 生命游戏代码_生命游戏 the Game of Life

    引言 群居性昆虫是一个生命,鱼群.鸟群是一个生命,社会.城市是一个有机体,人类的语言是活的,人类的集体行为也是活的.这些复杂系统是如何设计出来的?世界上最著名的游戏之一,Game of Life生命游 ...

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

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

  5. 「 生活太重要了,不能太过严肃 」:生命游戏之父、最神奇的数学家John Conway...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 在 82 年的人生中,John Conway 始终保持着狡黠淘气的幽默 ...

  6. 用Verilog实现二维细胞自动机——康威生命游戏(Conway's Game of Life)

    在一个二维的棋盘上,每个格子有存活(1)和死亡(0)两种状态.在每个时间周期,每个格子会根据他的8个邻居来决定自己下一个周期的状态: 0-1个邻居:人口稀少,死亡(0): 2个邻居:保持原状态: 3个 ...

  7. [Codewar训练]Conway's Game of Life - Unlimited Edition(康威生命游戏)

    问题: 段位:4 说明: 就是经典的康威生命游戏,输入会提供一个二维数组,然后根据提供的generations,计算出多少代的生命样子,并且需要把多余的(就是整行整列为0),外围的空间去掉,只剩下概括 ...

  8. conway生命小游戏,实现细胞普通行为

    """这是一个活的生命游戏""" import random, time, copy WIDTH = 10 HEIGHT = 5" ...

  9. Go语言模拟康威生命游戏Conway‘s Game of Life

    康威生命游戏是一种很有意思的游戏,显示的是细胞的生死状态取决于周边细胞(相邻8个细胞)的存活状态,是一种模拟生命的演化过程. 反过来看,还可模拟病毒的传染,患者传染给接触者,也可以设定概率,另外是否戴 ...

最新文章

  1. 在线作图丨做一张叠加mantel test的相关性热图
  2. SpringBoot之CommandLineRunner,预先加载系统数据
  3. java实现Kafka生产者示例
  4. Solr之搭建Solr6.0服务并从Mysql上导入数据
  5. 网络上经典的DOS小命令
  6. 收件服务器主机名未响应,邮箱收件服务器主机名是什么
  7. Redis 面试题补充与汇总
  8. win10一键重装系统​
  9. JS核心基础数组的操作概述
  10. WPF教程尝试(修正部分格式)
  11. 洛谷【数据结构1-1】线性表
  12. 如何实现大批量UKEY远程连接管控?
  13. 实验四 C程序的编译和调试(Linux基础教程 第2版)
  14. 2017H1日本畅销榜:《怪物弹珠》霸气连庄 FGO再掀二次元风暴
  15. 《机器学习基石》第12节课学习笔记
  16. 计算2个时间段的重叠天数
  17. SparkStreaming 实现广告计费系统中在线黑名单过滤实战
  18. oracle语句update使用case when连续更新
  19. 自连接、外连接和自连接查询
  20. Edge浏览器默认主页被莫名修改,修复流程分享

热门文章

  1. 私有网段IP地址的划分
  2. 超市用监控摄像头多大角的_小型超市如何安装监控摄像头以防止商品被偷
  3. 计算机选购知识点,购买笔记本电脑应参考的20个知识点
  4. 你若安好便是晴天nbsp;---------…
  5. PTA 用java编写 7-4 房产税费计算2022
  6. win10桌面频繁刷新
  7. Android车辆运动轨迹大数据采集最佳实践
  8. 松香的用法(电烙铁焊接)
  9. [CF506C]Mr. Kitayuta vs. Bamboos
  10. Python XML文件快速排版