-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path03-led-memory-game.py
128 lines (105 loc) · 2.82 KB
/
03-led-memory-game.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from machine import Pin
import time
import random
import sys
# Set up our button names and GPIO pin numbers
# Also set pins as inputs and use pull downs
greenButton = Pin(13, Pin.IN, Pin.PULL_DOWN)
amberButton = Pin(8, Pin.IN, Pin.PULL_DOWN)
redButton = Pin(3, Pin.IN, Pin.PULL_DOWN)
onboardLED = Pin(25, Pin.OUT)
# Set up our LED names and GPIO pin numbers
greenLed = Pin(18, Pin.OUT)
amberLed = Pin(19, Pin.OUT)
redLed = Pin(20, Pin.OUT)
level = {
'e': 4,
'n': 6,
'h': 8
}
led = {
'green': greenLed,
'amber': amberLed,
'red': redLed
}
def chooseDifficulty():
difficulty = input('Choose a difficulty, easy, normal, hard: (e,n,h) ')
while difficulty not in ('e', 'n', 'h'):
difficulty = input('You can only choose e,n,h: ')
return difficulty
def generatePattern(difficulty):
choices = ['green', 'amber', 'red']
pattern = []
for n in range(level[difficulty]):
pattern.append(random.choice(choices))
print(pattern)
return pattern
def toggleLed(light):
led[light].toggle()
time.sleep(1)
led[light].toggle()
time.sleep(0.5)
def showPattern(pattern):
for x in pattern:
toggleLed(x)
def lose():
for i in range(3):
redLed.toggle()
amberLed.toggle()
greenLed.toggle()
time.sleep(0.5)
redLed.toggle()
amberLed.toggle()
greenLed.toggle()
time.sleep(0.5)
def win():
for i in range(20):
redLed.value(1)
time.sleep(0.1)
redLed.value(0)
amberLed.value(1)
time.sleep(0.1)
amberLed.value(0)
greenLed.value(1)
time.sleep(0.1)
greenLed.value(0)
time.sleep(0.1)
amberLed.value(1)
time.sleep(0.1)
amberLed.value(0)
def checkGuess(playerGuess, light, loopNum, pattern):
if pattern[loopNum] != light:
lose()
onboardLED.value(0)
sys.exit()
elif playerGuess == pattern:
win()
onboardLED.value(0)
sys.exit()
def playGame():
guess = []
i = 0
difficulty = chooseDifficulty()
patternToGuess = generatePattern(difficulty)
showPattern(patternToGuess)
while True:
time.sleep(0.5) # Short delay
if greenButton.value() == 1:
toggleLed('green')
guess.append('green')
checkGuess(guess, 'green', i, patternToGuess)
i += 1
elif amberButton.value() == 1:
toggleLed('amber')
guess.append('amber')
checkGuess(guess, 'amber', i, patternToGuess)
i += 1
elif redButton.value() == 1:
toggleLed('red')
guess.append('red')
checkGuess(guess, 'red', i, patternToGuess)
i += 1
def main():
onboardLED.value(1)
playGame()
main()