初学Python和OpenGL,练手的第一个小程序life.py,这个小程序在日后会不断调整,增加类、优化判断及操作

  执行效果:

    按正规生命游戏的规则:

      1、周围生命等于3时产生生命

      2、周围生命等于2时保持不变

      3、红绿两种互相侵蚀(新增)

      4、其他情况死亡

  新增了边界循环(2017/2/13)

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import random
'''全局参数开始'''
life_down_p = #竞争参数下限
life_up_p = #竞争参数上限
life_die_time = #死亡时间
life_begin = #开局生成时间
map_size =
'''全局参数结束'''
num = #golbal
life_map = []*map_size*map_size #golbal
life_new = []*map_size*map_size #golbal
all_c = []*map_size*map_size
green_c = []*map_size*map_size
red_c = []*map_size*map_size
w = /map_size #width pre
h = /map_size #height pre
RED =
GREEN =
def draw_point(color,p) : #画点
x = int(p%map_size)
y = int(p/map_size)
glColor3f(color[],color[],color[])
glBegin(GL_QUADS)
glVertex2f(x*w-,y*h-)
glVertex2f((x+)*w-,y*h-)
glVertex2f((x+)*w-,(y+)*h-)
glVertex2f(x*w-,(y+)*h-)
glEnd()
def god() :
global life_map,num,font_map,all_c,green_c,red_c
if num < life_begin : #初始生成开始
num +=
x = random.randint(,map_size-)*map_size+random.randint(,map_size-)
if random.randint(,) : #绿色生物
life_map[x] = GREEN
draw_point([,,],x)
else : #红色生物
life_map[x] = RED
draw_point([,,],x)
else : #初始生成结束,开始繁殖
'''情况判断开始'''
for x in range(,map_size) :
for y in range(,map_size) :
i = y*map_size+x
'''获取周边信息'''
c = [(y-)%map_size*map_size+(x-)%map_size,
(y-)%map_size*map_size+ x ,
(y-)%map_size*map_size+(x+)%map_size,
y *map_size+(x-)%map_size,
y *map_size+(x+)%map_size,
(y+)%map_size*map_size+(x-)%map_size,
(y+)%map_size*map_size+ x ,
(y+)%map_size*map_size+(x+)%map_size,]
red_c[i],green_c[i],all_c[i] = ,,
for cc in c :
if life_map[cc] == GREEN :
green_c[i] +=
elif life_map[cc] == RED :
red_c[i] +=
all_c[i] = green_c[i] + red_c[i]
'''判断'''
for i in range(,map_size*map_size) :
if all_c[i] == life_up_p : #生存
if green_c[i] > red_c[i] :
life_map[i] = GREEN
draw_point([,,],i)
elif green_c[i] < red_c[i] :
life_map[i] = RED
draw_point([,,],i)
else :
if random.randint(,) :
life_map[i] = GREEN
draw_point([,,],i)
else :
life_map[i] = RED
draw_point([,,],i)
elif all_c[i] > life_up_p or all_c[i] < life_down_p : #死亡
life_map[i] =
draw_point([,,],i)
#else : 保持
def drawFunc() :
god()
glFlush()
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(,)
glutCreateWindow(b"life-forver")
glutDisplayFunc(drawFunc)
glutIdleFunc(drawFunc)
glutMainLoop()

执行截图:

Python,OpenGL生命游戏的更多相关文章

  1. Python实现生命游戏

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

  2. python实现简单动画——生命游戏

    生命游戏 生命游戏的宇宙是一个无限的,其中细胞的二维正交网格,每个细胞处于两种可能的状态之一,即*活着*或*死亡*(分别是*人口稠密*和*无人居住*).每个细胞与它的八个邻居相互作用,这八个邻居是水平 ...

  3. Python 速通爆肝、列表推导式、生成器、装饰器、生命游戏

    列表推导式.赋值.切片(替换.插入).字符串处理与判断.enumerate().格式化字符串.读写文件.global 关键字.字符串startswith().类与对象.生成器.装饰器.Self.*ar ...

  4. 生命游戏(python实现,pygame显示图形)

    # 游戏规则:# 生命游戏(Game of Life),或者叫它的全称John Conway's Game of Life.是英国数学家约翰·康威在1970年代所发明的一种元胞自动机.# 1. 活细胞 ...

  5. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册       首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...

  6. Conway生命游戏

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9986679.html 作者:窗户 Q ...

  7. [LeetCode] Game of Life 生命游戏

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  8. React项目(二):生命游戏

    引子 这是16年最后的一个练手项目,一贯的感觉就是,做项目容易,写说明文档难.更何况是一个唤起抑郁感觉的项目,码下的每个字,心就如加了一个千斤的砝码. 2016年,有些事我都已忘记,但我现在还记得.2 ...

  9. 生命游戏/Game of Life的Java实现(转)

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

随机推荐

  1. HDU 1374

    http://acm.hdu.edu.cn/showproblem.php?pid=1374 已知三点坐标,求三点确定的圆的周长 #include <iostream> #include ...

  2. SAPUI5实例一:来创建Web应用UI

    试试SAPUI5.这是SAP比较重要的一个UI库.完全通过HTML5实现,可以作为Web和移动应用的UI开发. 现在已经开源了.在这里可以下载: http://sap.github.io/openui ...

  3. Linux下升级安装Python-3.6.2版本

    本文主要介绍在Linux(CentOS)下将Python的版本升级为3.6.2的方法 众所周知,在2020年python官方将不再支持2.7版本的python,所以使用3.x版本的python是必要的 ...

  4. 6.二元查找树的后序遍历结果[PostOrderOfBST]

    [题目] 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...

  5. python 之头像上传,预览

    上传头像 我们需要实现的效果是:当我们点击默认头像,用户可以进行选择要上传的头像文件,其原理就是头像的img标签与文件input(file类型)框重合或者关联,可以通过如下两种方式进行实现: 方法一l ...

  6. Sublime 笔记

    1. 安装PackageControl 官网:https://packagecontrol.io/ v2: import urllib2,os,hashlib; h = '2915d1851351e5 ...

  7. Android HOOK工具Cydia Substrate使用详解

    目录(?)[+] Substrate几个重要API介绍 MShookClassLoad MShookMethod 使用方法 短信监控实例   Cydia Substrate是一个代码修改平台.它可以修 ...

  8. 用eclipse打包可执行的jar(含第三方jar包)

    在eclipse中的解决方式如下: 在工程目录下(与src同层)建立lib目录,将第三方Jar包放到这个目录里(copy,paste即可)[如果直接引用本地的jar,一旦换电脑就呵呵了...] 右击工 ...

  9. WPF 跨应用程序域的 UI(Cross AppDomain UI)

    为自己写的程序添加插件真的是一个相当常见的功能,然而如果只是简单加载程序集然后去执行程序集中的代码,会让宿主应用程序暴露在非常危险的境地!因为只要插件能够运行任何一行代码,就能将宿主应用程序修改得天翻 ...

  10. 51nod 1118 机器人走方格

    M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. 收起   输入 第1行,2个数M,N,中间用空格隔开 ...