from time import sleep, ticks_ms, ticks_diff
import random
from machine import Pin
# ascii logo - https://patorjk.com/software/taag/
# print(len('marcel vanmoerbeke')) -> 18
# fr -> f voor ondersteunen van formatted text, r voor correcte ascii
logo = fr"""
{"-"*(2*9+18)}
_ __
/\ /\/\ /\ /\/\ /_\ /\ \ \
/ /_/ / / \ \/ \ //_\\ / \/ /
/ __ /\ \_/ / /\/\ \/ _ \/ /\ /
\/ /_/ \___/\/ \/\_/ \_/\_\ \/
{"-"*9}Marcel Vanmoerbeke{"-"*9}
"""
class Game:
"""
het main programma
"""
def __init__(self):
"""
declaratie van de variablen
"""
self.led_red = Pin(16, Pin.OUT)
self.led_green = Pin(18, Pin.OUT)
self.led_ylw = Pin(21, Pin.OUT)
self.leds = (self.led_red, self.led_green, self.led_ylw)
self.btn1 = Pin(15, Pin.IN, Pin.PULL_UP)
self.btn2 = Pin(12, Pin.IN, Pin.PULL_UP)
self.btn3 = Pin(8, Pin.IN, Pin.PULL_UP)
self.last_btn = 0
print(f"{logo:^65}") # print het logo en center het op 65 chars
def btn_pressed(self):
"""
return nummer van knop momenteel ingedrukt, als niets, dan 0
"""
if not self.btn1.value(): return 1
if not self.btn2.value(): return 2
if not self.btn3.value(): return 3
return 0
def read_button_event(self):
btn_pressed = self.btn_pressed() # huidige knop ingedrukt
# als er een ingedrukt is en de vorige was nikske
if btn_pressed != 0 and self.last_btn == 0:
self.last_btn = btn_pressed # maak de 'vorige knop' (voor volgende keer) 1,2 of 3
return btn_pressed # return 1, 2 of 3
elif btn_pressed == 0: # geen knop ingedrukt
self.last_btn = 0 # maak de 'vorige knop' (voor volgende keer) 0
return 0 # als er geen knop ingedrukt was
def memory_game(self):
"""
het geheugenspel dat wordt geactiveerd na knop 1
"""
print('MEMORY GAME')
for led in self.leds:
led.value(0)
sleep(0.5)
selected = [] # lege lijst
correct=True
while correct: # oneindige lus tot het fout is
selected.append(random.randint(1,3))
print(selected)
self.leds[selected[-1]-1].value(1)
sleep(0.5)
self.leds[selected[-1]-1].value(0)
i=0 # teller voor juist één lus
while i < len(selected): # blijven checken voor # items in lus
btn_pressed = self.read_button_event() # welke knop is ingedrukt?
if btn_pressed == selected[i]: # als het degene is waar we dan zijn in de lijst, correct
print("CORRECT")
i += 1
elif btn_pressed: # alleen uitgevoerd als vorige fout was, en als btn_pressed niet 0 is.
print("WRONG")
correct=False
break
sleep(0.01)
sleep(0.25)
def reflexes_game(self):
"""
reflexen spel geactiveerd na knop 2 indrukken
"""
print('REFLEXES GAME')
for led in self.leds: # zet alle leds uit
led.value(0)
sleep(0.5)
MAX_AMOUNT_OF_TIMES,times_ran,times_ms = 10,0,[]
while times_ran < MAX_AMOUNT_OF_TIMES:
times_ran+=1
chosen_led = random.randint(1,3) # kies 'n lampje
# laat het flikkeren
self.leds[chosen_led-1].value(1)
sleep(0.15)
self.leds[chosen_led-1].value(0)
self.read_button_event()
start = ticks_ms() # start de timer
while True:
btn_pressed = self.read_button_event()
if btn_pressed in [1,2,3]: # 0-> geen knop gedrukt
if btn_pressed == chosen_led:
end = ticks_ms()
print('CORRECT')
times_ms.append(ticks_diff(end, start))
print(f"Time taken: {ticks_diff(end, start)}ms")
else:
print('WRONG')
times_ran=MAX_AMOUNT_OF_TIMES
break
sleep(0.01)
sleep(0.25)
print(times_ms)
if len(times_ms)> 0: # anders error als van eerste keer fout
avg=0
for i in times_ms:
avg+=i
avg = avg/len(times_ms)
print(f"Average time taken {round(avg,2)}ms")
def start(self):
i = True
while True:
for led in self.leds:
led.value(i)
pressed = self.read_button_event()
if pressed == 1:
self.memory_game()
elif pressed == 2:
self.reflexes_game()
elif pressed == 3:
print('stopping') # stopt alles
for led in self.leds:
led.value(0)
return
sleep(0.1)
i = not i
# als het programma niet als import wordt gerunt, maak een object van het spel en run startscherm
if __name__ == "__main__":
newGame = Game()
sleep(0.1)
newGame.start()