From b246fe5b1c35b4d0a189e7c28597927e6e5241e8 Mon Sep 17 00:00:00 2001 From: Joe Wreschnig Date: Tue, 16 Mar 2010 00:04:45 -0700 Subject: [PATCH] Pygame-based runner. --- bulletml-runner | 81 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 bulletml-runner diff --git a/bulletml-runner b/bulletml-runner new file mode 100755 index 0000000..fc57bce --- /dev/null +++ b/bulletml-runner @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +import sys + +import pygame + +import bulletml + +def main(argv): + pygame.display.init() + screen = pygame.display.set_mode([600, 600], pygame.DOUBLEBUF) + bullet = pygame.Surface([3, 3]) + bullet.fill([255, 0, 0]) + filename = argv[0] + doc = bulletml.BulletML(open(filename, "rU")) + clock = pygame.time.Clock() + target = bulletml.Bullet() + + while True: + source = bulletml.Bullet.FromDoc( + doc, x=150, y=150, target=target, rank=0.5) + + active = set([source]) + source.vanished = True + print filename + print " Loaded %d top-level actions." % len(source.actions) + frames = 0 + total = 0 + paused = False + + while active: + go = False + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + raise SystemExit + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_SPACE: + paused ^= True + elif event.key == pygame.K_RIGHT: + go = True + target.x, target.y = pygame.mouse.get_pos() + target.x /= 2 + target.y = (screen.get_height() - target.y) / 2 + + if not paused or go: + for obj in list(active): + new = obj.step() + total += len(new) + active.update(new) + if (obj.finished + or not (-50 < obj.x < 350) + or not (-50 < obj.y < 350)): + active.remove(obj) + + frames += 1 + if frames % 100 == 0: + print " Processing: %04d: %d bullets, %d active." % ( + frames, total, len(active)) + + screen.fill([0, 0, 0]) + for obj in active: + try: + x, y = obj.x, obj.y + except AttributeError: + pass + else: + if not obj.vanished: + x *= 2 + y *= 2 + x -= 1 + y -= 1 + screen.blit(bullet, [x, screen.get_height() - y]) + pygame.display.flip() + + clock.tick(60) + + print " Finished: %04d: %d bullets." % (frames, total) + +if __name__ == "__main__": + main(sys.argv[1:]) -- 2.30.2