Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # UfoZapper.py
- import key_codes, appuifw, e32, graphics, random
- MAX_UFO_SIZE = 50
- MAX_UFOS = 7
- UFO_TIME = 100.0
- PAD_W = 40
- PAD_H = 15
- PAD_COLOR = (12, 116, 204)
- PAD_SPEED = 7
- LASER_COLOR = (255, 0, 204)
- TIME = 1000
- def handle_redraw(rect):
- global shoot, sleep, ufos, timer
- buf.clear((0, 0, 0))
- buf.rectangle((pad_x, H - PAD_H, pad_x + PAD_W, H),\
- fill = PAD_COLOR)
- if shoot:
- x = pad_x + PAD_W / 2
- buf.line((x, H - PAD_H, x, 0),\
- width = 4, outline = LASER_COLOR)
- shoot = False
- sleep = 0.1
- check_hits(x)
- else:
- sleep = 0.01
- for x, y, s, t, hit in ufos:
- f = 1.0 - (timer - t) / UFO_TIME
- if hit:
- c = (255, 0, 0)
- else:
- c = (0, int(f * 255), 0)
- buf.ellipse((x, y, x + s, y + s), fill = c)
- buf.text((10, 40), u"%d" % score,
- fill = LASER_COLOR, font = "title")
- buf.text((W - 70, 40), u"%d" % (TIME - timer),
- fill = LASER_COLOR, font = "title")
- canvas.blit(buf)
- def check_hits(laser_x):
- global ufos, score
- i = 0
- ok_ufos = []
- for x, y, s, t, hit in ufos:
- if laser_x > x and laser_x < x + s:
- ok_ufos.append((x, y, s, t, True))
- score += MAX_UFO_SIZE*5 - (s - 1)
- else:
- ok_ufos.append((x, y, s, t, False))
- score -= 10
- ufos = ok_ufos
- def update_ufos():
- global ufos, timer
- ok_ufos = []
- for x, y, s, t, hit in ufos:
- if not hit and timer < t + UFO_TIME:
- ok_ufos.append((x, y, s, t, False))
- ufos = ok_ufos
- if len(ufos) < MAX_UFOS:
- s = random.randint(10, MAX_UFO_SIZE)
- x = random.randint(0, W - s)
- y = random.randint(0, H - PAD_H * 3)
- t = random.randint(0, UFO_TIME)
- ufos.append((x, y, s, timer + t, False))
- def handle_event(event):
- global direction, shoot
- if event['keycode'] == key_codes.EKeyLeftArrow:
- direction = -PAD_SPEED
- elif event['keycode'] == key_codes.EKeyRightArrow:
- direction = PAD_SPEED
- elif event['keycode'] == key_codes.EKeySelect or event['keycode'] == key_codes.EKeyUpArrow:
- shoot = True
- def quit():
- global timer
- timer = TIME
- ufos = []
- shoot = False
- direction = pad_x = score = timer = 0
- appuifw.app.exit_key_handler = quit
- appuifw.app.screen = 'large'
- canvas = appuifw.Canvas(event_callback = handle_event,\
- redraw_callback = handle_redraw)
- W, H = canvas.size
- H=(H/4*3)+5
- buf = graphics.Image.new((W, H))
- appuifw.app.body = canvas
- while timer < TIME:
- pad_x += direction
- pad_x = min(pad_x, W - PAD_W)
- pad_x = max(pad_x, 0)
- update_ufos()
- handle_redraw((W, H))
- e32.ao_sleep(sleep)
- timer += 1
- print "Score: %d!" % score
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement