初学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. 评价指标的计算:accuracy、precision、recall、F1-score等

    记正样本为P,负样本为N,下表比较完整地总结了准确率accuracy.精度precision.召回率recall.F1-score等评价指标的计算方式: (右键点击在新页面打开,可查看清晰图像) 简单 ...

  2. js之留言字数限制

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. python中利用类创建的对象来保存信息

    在类创建的对象中,一般都是以字典的方式来保存信息 class Student: def __init__(self, name, age, score): self.name = name self. ...

  4. C++ 项目经验总结:程序严谨性(一)

    作者:JK 时间:2015/09/24 特别说明:版权所有,转载请注明出处: 最近笔者在参与项目时,遇到了一些很奇特的问题,程序运行正常,产生的结果异常,程序功能是对当天的数据进行统计,数据里有可能有 ...

  5. springboot项目启动之后初始化自定义配置类

    前言 今天在写项目的时候,需要再springboot项目启动之后,加载我自定义的配置类的一些方法,百度了之后特此记录下. 正文 方法有两种: 1. 创建自定义类实现 CommandLineRunner ...

  6. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  7. Jquery 点击父类全选子类 , 子类选父类

    <p> <label style="font-size:18px;font-weight: bold;" class="checkboxs"& ...

  8. vs2010 创建和C#使用动态链接库(dll)

    一.VS 用 C++ 创建动态链接库 Step 1:创建Win32 Console Application 本例中我们创建一个叫做“Test”的Solution. Step 2:将Applicatio ...

  9. MSDN中回调函数的讲解及其C#例子:用委托实现回调函数

    转自:http://blog.csdn.net/sizheng0320/article/details/1615777 ms-help://MS.MSDNQTR.2003FEB.2052/cpguid ...

  10. 【转】简述configure、pkg-config、pkg_config_path三者的关系

    原文网址:http://www.mike.org.cn/articles/description-configure-pkg-config-pkg_config_path-of-the-relatio ...