Python,OpenGL生命游戏
初学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生命游戏的更多相关文章
- Python实现生命游戏
1. 生命游戏是什么 生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个 ...
- python实现简单动画——生命游戏
生命游戏 生命游戏的宇宙是一个无限的,其中细胞的二维正交网格,每个细胞处于两种可能的状态之一,即*活着*或*死亡*(分别是*人口稠密*和*无人居住*).每个细胞与它的八个邻居相互作用,这八个邻居是水平 ...
- Python 速通爆肝、列表推导式、生成器、装饰器、生命游戏
列表推导式.赋值.切片(替换.插入).字符串处理与判断.enumerate().格式化字符串.读写文件.global 关键字.字符串startswith().类与对象.生成器.装饰器.Self.*ar ...
- 生命游戏(python实现,pygame显示图形)
# 游戏规则:# 生命游戏(Game of Life),或者叫它的全称John Conway's Game of Life.是英国数学家约翰·康威在1970年代所发明的一种元胞自动机.# 1. 活细胞 ...
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...
- Conway生命游戏
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9986679.html 作者:窗户 Q ...
- [LeetCode] Game of Life 生命游戏
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
- React项目(二):生命游戏
引子 这是16年最后的一个练手项目,一贯的感觉就是,做项目容易,写说明文档难.更何况是一个唤起抑郁感觉的项目,码下的每个字,心就如加了一个千斤的砝码. 2016年,有些事我都已忘记,但我现在还记得.2 ...
- 生命游戏/Game of Life的Java实现(转)
首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...
随机推荐
- 单一功能学习——百度AI之身份证识别
以下内容基本是从官方接口文档复制过来的,附带自己封装的代码 时间:2018年4月4日 一.导入工具包 使用maven依赖: <dependency> <groupId>com. ...
- 新的开源java反汇编程序Procyon
wiki:https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler 由于jd好多年没更新了,今天找到这个新的开源反汇编,很不错 分享一 ...
- 每天一个linux命令:【转载】mkdir命令
linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令 ...
- Vim-Go环境搭建
Vim-Go环境搭建 https://www.cnblogs.com/qcloud1001/p/10072325.html https://www.cnblogs.com/chris-cp/p/584 ...
- SQL夯实基础(九)MySQL联接查询算法
书接上文<SQL夯实基础(八):联接运算符算法归类>. 这里先解释下EXPLAIN 结果中,第一行出现的表就是驱动表(Important!). 对驱动表可以直接排序,对非驱动表(的字段排序 ...
- Django的url别名功能的使用
- URL: from django.urls import reverse url(r'^all/(?<article_type_id>\d+).html$', home.index, ...
- Django之Models
1.数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite的数据库,默 ...
- {Reship}{Sparse Representation}稀疏表示入门
声明:本人属于绝对的新手,刚刚接触“稀疏表示”这个领域.之所以写下以下的若干个连载,是鼓励自己不要急功近利,而要步步为赢!所以下文肯定有所纰漏,敬请指出,我们共同进步! 踏入“稀疏表达”(Sparse ...
- Python 运行其他程序
10.4 运行其他程序 在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程, ...
- 笔记:Node.js 的 Buffer 缓冲区
笔记:Node.js 的 Buffer 缓冲区 node.js 6.0 之前创建的 Buffer 对象使用 new Buffer() 构造函数来创建对象实例,但权限很大,可以获得敏感信息,所以建议使用 ...