Adafruit_Learning_System_Gu.../CPX_Simon_Game/code.py
Mike Barela 2760efc1af
Update code.py
delete semicolon, use intermediate variable to get around exceeding the return limit (7 vs. limit of 6)
2019-07-23 14:19:15 -04:00

108 lines
2.5 KiB
Python

import time
import random
from adafruit_circuitplayground.express import cpx
cpx.pixels.brightness = 0.1 # adjust NeoPixel brightness to your liking
REGION_LEDS = [
[5, 6, 7], # yellow region
[2, 3, 4], # blue region
[7, 8, 9], # red region
[0, 1, 2], # green region
]
REGION_COLOR = [
(255, 255, 0), # yellow region
(0, 0, 255), # blue region
(255, 0, 0), # red region
(0, 255, 0), # green region
]
REGION_TONE = [
252, # yellow region
209, # blue region
310, # red region
415, # green region
]
PAD_REGION = {
'A1': 0, # yellow region
'A2': 2, # red region
'A3': 2, # red region
'A4': 3, # green region
'A5': 3, # green region
'A6': 1, # blue region
'A7': 1, # blue region
}
def light_region(region, duration=1):
# turn the LEDs for the selected region on
for led in REGION_LEDS[region]:
cpx.pixels[led] = REGION_COLOR[region]
# play a tone for the selected region
cpx.start_tone(REGION_TONE[region])
# wait the requested amount of time
time.sleep(duration)
# stop the tone
cpx.stop_tone()
# turn the LEDs for the selected region off
for led in REGION_LEDS[region]:
cpx.pixels[led] = (0, 0, 0)
def read_region(timeout=30):
val = 0
start_time = time.time()
while time.time() - start_time < timeout:
if cpx.touch_A1:
val = PAD_REGION['A1']
elif cpx.touch_A2:
val = PAD_REGION['A2']
elif cpx.touch_A3:
val = PAD_REGION['A3']
elif cpx.touch_A4:
val = PAD_REGION['A4']
elif cpx.touch_A5:
val = PAD_REGION['A5']
elif cpx.touch_A6:
val = PAD_REGION['A6']
elif cpx.touch_A7:
val = PAD_REGION['A7']
return val
def play_sequence(sequence):
duration = 1 - len(sequence) * 0.05
if duration < 0.1:
duration = 0.1
for region in sequence:
light_region(region, duration)
def read_sequence(sequence):
for region in sequence:
if read_region() != region:
# the player made a mistake!
return False
light_region(region, 0.25)
return True
def play_error():
cpx.start_tone(160)
time.sleep(1)
cpx.stop_tone()
def play_game():
sequence = []
while True:
sequence.append(random.randint(0, 3))
play_sequence(sequence)
if not read_sequence(sequence):
# game over
play_error()
break
time.sleep(1)
while True:
play_game()