|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
一个想给我的pygep找一个有趣的例子,可惜到现在都没有完成.最后下决心做一个2d的虚拟生态环境,正在构思中.为了完成这个构想,我学习了L-system用以绘制植物,这个系统绘制植物的优势是你可以给每个枝条加上能力函数以方便我们的gep编程.当然,我们还需要可视化.与是pygame又重新在我的电脑的某个角落被翻了出来.上次看她的时候,因为找不到好的教程(中文)没有继续下去,现在还是不能不去看那该死的英语.
经过这几天的郁闷加痛苦终于干了个可以动的动画了,不禁想拿来显摆显摆.
下面是代码,需求(1安装python2安装pygame.)
安装python就不多说了,pygame也不用多说了,要知道python的包只要copy+paste就够了.只要找对地方.然后import就够了.
这个程序是让树枝慢慢生长出来,使用了L-system绘制树木.
- try:
- import sys
- import random
- import math
- import os
- import getopt
- import pygame
- from socket import *
- from pygame.locals import *
- except ImportError, err:
- print "couldn't load module. %s" % (err)
- sys.exit(2)
- pygame.init()
- screen = pygame.display.set_mode((640,480),0,32)
- class L_system(pygame.sprite.Sprite):
- def __init__(self,rule):
- pygame.sprite.Sprite.__init__(self)
- info = rule['S']
- for _ in range(rule['iter']):
- ninfo = []
- for c in info:
- if c in rule:
- ninfo.append(rule[c])
- else:
- ninfo.append(c)
- info = "".join(ninfo)
- self.rule = rule
- self.info = info
- def get_lines(self):
- d = self.rule['direct']
- a = self.rule['angle']
- p=(0.0,0.0)
- l=1.0
- lines = []
- stack = []
- for c in self.info:
- if c in "Ff":
- r = d*math.pi/180
- t= p[0] + l*math.cos(r),p[1]+l*math.sin(r)
- lines.append(((p[0],p[1]),(t[0],t[1])))
- p=t
- elif c == "+":
- d += a
- elif c == "-":
- d -= a
- elif c =="[":
- stack.append((p,d))
- elif c == "]":
- p,d = stack[-1]
- del stack[-1]
- return lines
- rule={
- "X":"F-[[X]+X]+F[+FX]-X",
- "F":"FF",
- "S":"X",
- "direct":-45,
- "angle":25,
- "iter":6,
- "title":"plant"
- }
- def main():
- lc=L_system(rule)
- lines=lc.get_lines()
- while True:
- for event in pygame.event.get():
- if event.type == QUIT:
- sys.exit()
- screen.fill((255,255,255))
- b_pos = pygame.mouse.get_pos()
- for x in lines:
- b_pos=x[0][0]+300,x[0][1]+300
- e_pos=x[1][0]+300,x[1][1]+300
- pygame.draw.line(screen,(222,0,222),b_pos,e_pos)
- pygame.display.update()
- pygame.time.delay(10)
- if __name__ == '__main__': main()
复制代码 |
评分
-
1
查看全部评分
-
|