声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3186|回复: 5

[Python] pygame一个强大而简单的游戏引擎(官方是这样说的)

[复制链接]
发表于 2010-12-27 16:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
一个想给我的pygep找一个有趣的例子,可惜到现在都没有完成.最后下决心做一个2d的虚拟生态环境,正在构思中.为了完成这个构想,我学习了L-system用以绘制植物,这个系统绘制植物的优势是你可以给每个枝条加上能力函数以方便我们的gep编程.当然,我们还需要可视化.与是pygame又重新在我的电脑的某个角落被翻了出来.上次看她的时候,因为找不到好的教程(中文)没有继续下去,现在还是不能不去看那该死的英语.
经过这几天的郁闷加痛苦终于干了个可以动的动画了,不禁想拿来显摆显摆.
下面是代码,需求(1安装python2安装pygame.)
安装python就不多说了,pygame也不用多说了,要知道python的包只要copy+paste就够了.只要找对地方.然后import就够了.
这个程序是让树枝慢慢生长出来,使用了L-system绘制树木.

  1. try:
  2.     import sys
  3.     import random
  4.     import math
  5.     import os
  6.     import getopt
  7.     import pygame
  8.     from socket import *
  9.     from pygame.locals import *
  10. except ImportError, err:
  11.     print "couldn't load module. %s" % (err)
  12.     sys.exit(2)
  13. pygame.init()
  14. screen = pygame.display.set_mode((640,480),0,32)

  15. class L_system(pygame.sprite.Sprite):
  16.     def __init__(self,rule):
  17.         pygame.sprite.Sprite.__init__(self)
  18.         info = rule['S']
  19.         for _ in range(rule['iter']):
  20.             ninfo = []
  21.             for c in info:
  22.                 if c in rule:
  23.                     ninfo.append(rule[c])
  24.                 else:
  25.                     ninfo.append(c)
  26.             info = "".join(ninfo)
  27.         self.rule = rule
  28.         self.info = info
  29.     def get_lines(self):
  30.         d = self.rule['direct']
  31.         a = self.rule['angle']
  32.         p=(0.0,0.0)
  33.         l=1.0
  34.         lines = []
  35.         stack = []
  36.         for c in self.info:
  37.             if c in "Ff":
  38.                 r = d*math.pi/180
  39.                 t= p[0] + l*math.cos(r),p[1]+l*math.sin(r)
  40.                 lines.append(((p[0],p[1]),(t[0],t[1])))
  41.                 p=t
  42.             elif c == "+":
  43.                 d += a
  44.             elif c == "-":
  45.                 d -= a
  46.             elif c =="[":
  47.                 stack.append((p,d))
  48.             elif c == "]":
  49.                 p,d = stack[-1]
  50.                 del stack[-1]
  51.         return lines
  52. rule={
  53.       "X":"F-[[X]+X]+F[+FX]-X",
  54.       "F":"FF",
  55.       "S":"X",
  56.       "direct":-45,
  57.       "angle":25,
  58.       "iter":6,
  59.       "title":"plant"
  60.       }        
  61. def main():
  62.     lc=L_system(rule)
  63.     lines=lc.get_lines()
  64.     while True:
  65.         for event in pygame.event.get():
  66.             if event.type == QUIT:
  67.                 sys.exit()
  68.         screen.fill((255,255,255))
  69.         b_pos = pygame.mouse.get_pos()
  70.         for x in lines:
  71.             b_pos=x[0][0]+300,x[0][1]+300
  72.             e_pos=x[1][0]+300,x[1][1]+300
  73.             pygame.draw.line(screen,(222,0,222),b_pos,e_pos)
  74.             pygame.display.update()
  75.             pygame.time.delay(10)
  76. if __name__ == '__main__': main()






















复制代码

评分

1

查看全部评分

回复
分享到:

使用道具 举报

 楼主| 发表于 2010-12-27 16:09 | 显示全部楼层
再年轻点,绝对不会左手拿着<实分析与复分析>右手鼠标,眼睛看<python+pygame>,并不时切换名叫L...的外国的L-system的论文,捣鼓代码,还要考虑Lp空间的嵌入定理了.
 楼主| 发表于 2010-12-27 16:11 | 显示全部楼层
再说一句,在windows下我等了5+的秒的时间出现了画面,linux下,没有延迟直接出来了.
强烈推荐linux.我用ubuntu
发表于 2010-12-27 17:35 | 显示全部楼层
回复 2 # smtmobly 的帖子

明白了……smtmobly现在是多线程并行……
 楼主| 发表于 2010-12-27 17:42 | 显示全部楼层
呵呵,什么叫多线程并行阿!刚在玩论坛的城市家园还又点好玩阿

点评

赞成: 5.0
赞成: 5
我网速慢……玩不了~  发表于 2010-12-27 19:09
发表于 2010-12-27 19:18 | 显示全部楼层
回复 5 # smtmobly 的帖子

smtmobly,你今天受啥刺激了……全站到处都是你回帖的身影……

点评

呵呵,没有啊!只是最近找好的gep的例子,没有什么成果,今天出来透透气。呵呵  发表于 2010-12-28 13:43
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-20 20:14 , Processed in 0.064935 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表