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实现(转)
首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...
随机推荐
- linux系统编程-进程
进程 现实生活中 在很多的场景中的事情都是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的: 如下是一段视频,迈克杰克逊的一段视频: http://v.youku.com ...
- ubuntu16.04 LTS grafana安装与启动
1.首先从官网上下载相应的包,网址为:http://grafana.org/download 2.安装 cd Downloads sudo dpkg -i grafana_4.1.2-14869897 ...
- 每天一个linux命令(文件操作):【转载】locate命令
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...
- BZOJ1026 SCOI2009 windy数 【数位DP】
BZOJ1026 SCOI2009 windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B ...
- 异步任务中的重新进入(Reentrancy)
一个按钮,点击执行一个任务.我们可能直接在它的 Click 事件中写下了执行任务的代码. 一般我们无需担心这样的代码会出现什么问题——但是,这样的好事情只对同步任务有效:一旦进入了异步世界,这便是无尽 ...
- .NET中的那些受特别对待的类型(CriticalFinalizerObject)
转自:http://www.cnblogs.com/yuyijq/archive/2009/08/09/1542435.html 股票里面有个ST股,就是Special Treatment的意思.就是 ...
- (笔记)JQuery扩展方法实现Form表单与Json互相转换
JQuery笔记 记两段代码,使用JQuery实现从表单获取json与后端交互,以及把后端返回的json映射到表单相应的字段上. 把表单转换出json对象 //把表单转换出json对象 $.fn.to ...
- IOS Number 处理(int-->NSNumber,NSNumber-->nsinteger,string -->double,CGFloat --> dobule)
1 小结: 1)int-->NSNumber:numberWithInt 2)NSNumber-->nsinteger:integerValue 3)string -->double ...
- hadoop2.x常用端口、定义方法及默认端口、hadoop1.X端口对比
问题导读: 1.DataNode的http服务的端口.ipc服务的端口分别是哪个? 2.NameNode的http服务的端口.ipc服务的端口分别是哪个? 3.journalnode的http服务的端 ...
- 《DSP using MATLAB》示例 Example 6.11
上代码: % x = -7:7 y = OnesComplement(x, 4) 函数OnesComplement代码: function [y] = OnesComplement(x, B); % ...