annotate menu.py @ 14:8239a9ade11d draft default tip

Add a license
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Fri, 23 Feb 2018 12:07:23 +0100
parents 46a5abc02fd1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
1 import sys
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
2 import os
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
3 import time
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
4 import pew
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
5
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
6
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
7 def scroll(pix, dx=1):
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
8 x = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
9 while True:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
10 for x in range(x, pix.width, dx):
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
11 screen.blit(pix, -x, 1)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
12 yield x
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
13 x = -8
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
14
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
15
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
16 def change(pix, next_pix, x, dy):
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
17 for y in range(1, 1 + 8 * dy, dy):
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
18 screen.box(0)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
19 screen.blit(pix, -x, y)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
20 screen.blit(next_pix, 0, y - 7 * dy)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
21 yield
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
22
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
23
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
24 def hold_keys():
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
25 global hold
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
26
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
27 try:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
28 keys = pew.keys()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
29 except pew.GameOver:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
30 keys = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
31 if keys:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
32 hold = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
33 while pew.keys() and time.monotonic() - hold < 0.25:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
34 return 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
35 hold = time.monotonic()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
36 return keys
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
37
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
38
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
39 def menu(entries):
13
46a5abc02fd1 Add readme
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 11
diff changeset
40 brightness = 0
11
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
41 pew.brightness(brightness)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
42 selected = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
43 pix = pew.Pix.from_text(entries[selected])
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
44 x = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
45 animation = scroll(pix)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
46 while True:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
47 keys = hold_keys()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
48 if keys & pew.K_O:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
49 return
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
50 if keys & pew.K_RIGHT:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
51 brightness = min(brightness + 1, 15)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
52 pew.brightness(brightness)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
53 if keys & pew.K_LEFT:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
54 brightness = max(brightness - 1, 0)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
55 pew.brightness(brightness)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
56 if keys & pew.K_UP:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
57 selected = (selected - 1) % len(entries)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
58 next_pix = pew.Pix.from_text(entries[selected])
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
59 yield from change(pix, next_pix, x, 1)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
60 hold_keys()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
61 pix = next_pix
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
62 animation = scroll(pix)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
63 keys = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
64 if keys & pew.K_DOWN:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
65 selected = (selected + 1) % len(entries)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
66 next_pix = pew.Pix.from_text(entries[selected])
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
67 yield from change(pix, next_pix, x, -1)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
68 hold_keys()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
69 pix = next_pix
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
70 animation = scroll(pix)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
71 keys = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
72 x = next(animation)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
73 yield selected
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
74 yield selected
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
75
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
76
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
77 pew.init()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
78 pew.init()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
79 while True:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
80 hold = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
81 screen = pew.Pix()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
82 files = [name[:-3] for name in os.listdir()
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
83 if name.endswith('.py') and name not in {
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
84 'main.py', 'boot.py', 'menu.py', 'pew.py', 'lameboy.py'
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
85 }]
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
86 m = menu(files)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
87 selected = 0
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
88 try:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
89 while pew.keys():
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
90 pew.tick(1/24)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
91 except pew.GameOver:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
92 pass
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
93 while True:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
94 try:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
95 selected = next(m)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
96 except StopIteration:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
97 break
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
98 pew.show(screen)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
99 pew.tick(1/24)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
100 screen.box(0)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
101 pew.show(screen)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
102 game = files[selected]
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
103 del screen
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
104 del m
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
105 del files
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
106 try:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
107 __import__(game)
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
108 except pew.GameOver:
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
109 continue
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
110 del sys.modules[game]
464aa1a9f0f8 Add a custom menu.py
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
111