Update of /cvsroot/ggi/wrappers/piggy/demos
In directory sc8-pr-cvs1:/tmp/cvs-serv20910
Modified Files:
snake.py
Log Message:
improve performance (maybe)
Index: snake.py
===================================================================
RCS file: /cvsroot/ggi/wrappers/piggy/demos/snake.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- snake.py 24 May 2003 17:20:24 -0000 1.1
+++ snake.py 28 May 2003 15:00:19 -0000 1.2
@@ -6,6 +6,13 @@
if x < a: return a
return x
+def drawbox(v,x1,y1,x2,y2,c):
+ v.fg = c
+ v.hline(x1, y1, x2-x1)
+ v.hline(x1, y2, x2-x1)
+ v.vline(x1, y1, y2-y1)
+ v.vline(x2, y1, y2-y1)
+
class Snake:
def __init__(self,x,y, x1,y1,x2, y2, length = 10, speed = 10 ):
self.max = length
@@ -14,6 +21,10 @@
self.xmin, self.xmax, self.ymin, self.ymax = x1, x2, y1, y2
def draw(self, v):
+ if len(self.body)>self.max:
+ i=self.body[0]
+ v.line(i[0],i[1],i[2],i[3],0)
+ del self.body[0]
for i in self.body:
v.line(i[0],i[1],i[2],i[3],i[4])
@@ -25,10 +36,9 @@
clamp(ey+randint(-self.speed,self.speed),
self.ymin, self.ymax),
randint(0,0xffffff)))
- if len(self.body)>self.max: del self.body[0]
vis = GGI.ggi.Visual()
-vis.mode = vis.Mode() #"F2")
+vis.mode = vis.Mode()
size = vis.mode.visible
vis.flags = GGI.flagAsync
vis.mask=GGI.emPointer | GGI.emKeyPress
@@ -36,32 +46,12 @@
snakes = [ Snake(30,30, 20, 60, 150, 200, speed=30),
Snake(200, 200, 0,0, size[0], size[1], length=20) ]
-df, wf = 0, 0
-vis.displayframe, vis.writeframe = df, wf
-
px = size[0]/2
py = size[1]/2
selected = None
box = None
+updatebox = 0
while 1:
- vis.fill()
- for i in snakes:
- i.evolve()
- i.draw(vis)
- # df, wf = wf, df
- # vis.displayframe, vis.writeframe = df, wf
- if selected:
- box = ( min(px,selected[0]),
- min(py,selected[1]),
- max(px,selected[0]),
- max(py,selected[1]))
-
- vis.hline(box[0], box[1], box[2]-box[0], 0xffffff)
- vis.hline(box[0], box[3], box[2]-box[0], 0xffffff)
- vis.vline(box[0], box[1], box[3]-box[1], 0xffffff)
- vis.vline(box[2], box[1], box[3]-box[1], 0xffffff)
-
- vis.flush()
e = vis.poll(GGI.emPointer | GGI.emKey)
if e:
if e & GGI.emKey:
@@ -69,11 +59,29 @@
ev = vis.read(GGI.emPointer)
while(ev):
t = ev.type
- if t == GGI.evPtrAbsolute: px, py = ev.x, ev.y
- elif t == GGI.evPtrRelative: px += ev.x; py += ev.y
+ if t == GGI.evPtrAbsolute:
+ if selected: updatebox = 1
+ px, py = ev.x, ev.y
+ elif t == GGI.evPtrRelative:
+ if selected: updatebox = 1
+ px += ev.x; py += ev.y
elif t == GGI.evPtrButtonPress: selected = (px, py)
elif t == GGI.evPtrButtonRelease and selected:
snakes.append(Snake(box[0],box[1],
box[0],box[1],box[2],box[3]))
+ updatebox = 1
selected = None
ev = vis.read(GGI.emPointer)
+ if updatebox:
+ drawbox(vis, box[0], box[1], box[2], box[3], 0)
+ updatebox = 0
+ if selected:
+ box = (min(px,selected[0]),
+ min(py,selected[1]),
+ max(px,selected[0]),
+ max(py,selected[1]))
+ drawbox(vis, box[0], box[1], box[2], box[3], 0xffffff)
+ for i in snakes:
+ i.evolve()
+ i.draw(vis)
+ vis.flush()
|