You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Tutorial<br />
derby.py<br />
01.<br />
02.<br />
03.<br />
04.<br />
05.<br />
06.<br />
07.<br />
08.<br />
09.<br />
10.<br />
11.<br />
12.<br />
13.<br />
14.<br />
15.<br />
16.<br />
17.<br />
18.<br />
19.<br />
20.<br />
21.<br />
22.<br />
23.<br />
24.<br />
25.<br />
26.<br />
27.<br />
28.<br />
29.<br />
30.<br />
31.<br />
32.<br />
33.<br />
34.<br />
35.<br />
36.<br />
37.<br />
38.<br />
39.<br />
40.<br />
41.<br />
42.<br />
43.<br />
44.<br />
45.<br />
46.<br />
47.<br />
48.<br />
49.<br />
50.<br />
51.<br />
52.<br />
53.<br />
54.<br />
55.<br />
56.<br />
57.<br />
58.<br />
59.<br />
60.<br />
WALKTHROUGH<br />
# Pi Derby - Horse race game<br />
# By Mike Cook - November 2016<br />
import pygame, time, os, random<br />
import wiringpi2 as io<br />
pygame.init() # initialise graphics interface<br />
pygame.mixer.quit()<br />
pygame.mixer.init(frequency=22050, size=-16,<br />
channels=2, buffer=512)<br />
os.environ['SDL_VIDEO_WINDOW_POS'] = 'center'<br />
pygame.display.set_caption("The Raspberry Pi Derby")<br />
pygame.event.set_allowed(None)<br />
pygame.event.set_allowed([pygame.KEYDOWN,pygame.QUIT])<br />
screen = pygame.display.set_mode([942,466],0,32)<br />
textHeight = 36 ; textHeight2 = 24<br />
font = pygame.font.Font(None, textHeight)<br />
font2 = pygame.font.Font(None, textHeight2)<br />
random.seed() ; winningPost = 704<br />
ballPins = [ [17,24,4,27],[22,10,9,11 ] ]<br />
targetGx = [ 18,102,18,102 ]<br />
targetGy = [ 18,18,102,102 ]<br />
gallopInc = [1,1] ; gallop= [0,0]<br />
dInc = [0,0] # distance increment<br />
puzzle = [5,5] ; restart = True<br />
moveTarget = [1,1] ; movePhase = [0,0]<br />
def main():<br />
global restart,dInc,gallop,puzzle,moveTarget,movePhase<br />
initGraphics()<br />
initGPIO()<br />
#print "The Pi Derby"<br />
distance = [-120, -120]<br />
showPicture(distance,gallop)<br />
while True:<br />
checkForEvent()<br />
if restart :<br />
gameSound[3].play()<br />
windBack(distance)<br />
pygame.mixer.fadeout(1000)<br />
time.sleep(3.5)<br />
distance[0] = -120 ; distance[1] = -120<br />
gallop[0] = 0 ; gallop[1] = 0<br />
gallopInc[0] = 1 ; gallopInc[1] = 1<br />
dInc[0] = 0 ; dInc[1] = 0<br />
puzzle = [5,5]<br />
moveTarget = [1,1] ; movePhase = [0,0]<br />
gameSound[0].play()<br />
showPicture(distance,gallop)<br />
time.sleep(5)<br />
restart = False # show Puzzle<br />
showPicture(distance,gallop)<br />
moveDetect(distance)<br />
if dInc[0] or dInc[1] :<br />
for n in range(0,2):<br />
if dInc[n] :<br />
distance[n] += 3<br />
if dInc[n] :<br />
61.<br />
62.<br />
63.<br />
64.<br />
65.<br />
66.<br />
67.<br />
68.<br />
69.<br />
70.<br />
71.<br />
72.<br />
73.<br />
74.<br />
75.<br />
76.<br />
77.<br />
78.<br />
79.<br />
80.<br />
81.<br />
82.<br />
83.<br />
84.<br />
85.<br />
86.<br />
87.<br />
88.<br />
89.<br />
90.<br />
91.<br />
92.<br />
93.<br />
94.<br />
95.<br />
96.<br />
97.<br />
98.<br />
99.<br />
100.<br />
101.<br />
102.<br />
103.<br />
104.<br />
105.<br />
106.<br />
107.<br />
108.<br />
109.<br />
110.<br />
111.<br />
112.<br />
113.<br />
114.<br />
115.<br />
116.<br />
117.<br />
118.<br />
119.<br />
120.<br />
121.<br />
122.<br />
123.<br />
124.<br />
dInc[n] -=1<br />
gallop[n] = gallopAdv(gallop,n)<br />
showPicture(distance,gallop)<br />
if checkForFinish(distance):<br />
restart = True<br />
time.sleep(4.0)<br />
def moveDetect(dis):<br />
global dInc, puzzle, moveTarget<br />
move = -1<br />
for n in range(0,2):<br />
move = checkInput(n) # look at ball switch<br />
if move != -1 :<br />
# check if it is a valid move<br />
if move == moveTarget[n] :<br />
if movePhase[n] == 1 : # move complete<br />
dInc[n] = 50 # move this * 3<br />
gameSound[1].play()<br />
last = moveTarget[n]<br />
puzzle[n] = random.randint(0,11)<br />
while last == moveState[puzzle[n]][0] :<br />
puzzle[n] = random.randint(0,11)<br />
moveTarget[n] = moveState[puzzle[n]][0]<br />
movePhase[n] = 0<br />
else :<br />
moveTarget[n] = moveState[puzzle[n]][1]<br />
movePhase[n] = 1<br />
showPicture(dis,gallop) # update move graphic<br />
if n ==0 :<br />
gameSound[4].play()<br />
else :<br />
gameSound[5].play()<br />
def gallopAdv(gallop,n):<br />
global gallopInc<br />
gallop[n] += gallopInc[n]<br />
if gallop[n] > 6 or gallop[n] =winningPost or d[1] >=winningPost:<br />
gameSound[2].play()<br />
finish(d[0] - d[1])<br />
time.sleep(3.0)<br />
return True<br />
else :<br />
return False<br />
def windBack(d):<br />
wind = 4<br />
while d[0] >= -120 or d[1] >= -120:<br />
showPicture(d,gallop)<br />
checkForEvent()<br />
for n in range(0,2):<br />
if d[n] >=-120:<br />
d[n] -= wind<br />
def checkInput(player):<br />
ball = -1<br />
for pin in range(0,4):<br />
if io.digitalRead(ballPins[player][pin]) == 0 :<br />
ball = pin<br />
return ball<br />
54 January 2017<br />
raspberrypi.org/magpi