mirror of
https://github.com/alankrantas/microbit-micropython-cookbook.git
synced 2025-12-20 20:10:24 +01:00
79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
from microbit import display, Image, Sound, set_volume, accelerometer, sleep
|
|
from micropython import const
|
|
import audio, music, speech
|
|
|
|
max_score = const(5) # number of games you have to pass (shake micro:bit to add on the level value)
|
|
add_level = const(10) # max level can be added to the level value
|
|
drop_level = const(10) # value that will auto subtracted from the level value
|
|
max_level = const(250) # max level value to pass
|
|
volume = const(50) # buzzer volume during gameplay (0~255)
|
|
|
|
def translate(value, leftMin, leftMax, rightMin, rightMax):
|
|
leftSpan = leftMax - leftMin
|
|
rightSpan = rightMax - rightMin
|
|
valueScaled = float(value - leftMin) / float(leftSpan)
|
|
return rightMin + (valueScaled * rightSpan)
|
|
|
|
def plotBarGraph(value, max_value, b=9):
|
|
order = (23, 21, 20, 22, 24,
|
|
18, 16, 15, 17, 19,
|
|
13, 11, 10, 12, 14,
|
|
8, 6, 5, 7, 9,
|
|
3, 1, 0, 2, 4,)
|
|
counter = 0
|
|
display.clear()
|
|
for y in range(5):
|
|
for x in range(5):
|
|
if value / max_value > order[counter] / 25:
|
|
display.set_pixel(x, y, b)
|
|
counter += 1
|
|
|
|
level = 0
|
|
score = 0
|
|
buzzer = True
|
|
set_volume(255)
|
|
|
|
display.clear()
|
|
audio.play(Sound.SPRING)
|
|
sleep(500)
|
|
numbers = ('One', 'Two', 'Three')
|
|
for i in range(3, 0, -1):
|
|
display.show(i)
|
|
speech.say(numbers[i-1], speed=500, pitch=50, throat=100, mouth=50)
|
|
sleep(750)
|
|
|
|
set_volume(volume)
|
|
|
|
while score < max_score:
|
|
shake = max(0, abs(accelerometer.get_x()) + abs(accelerometer.get_y()) + abs(accelerometer.get_z()) - 2048)
|
|
level = min(max(0, level - drop_level + translate(shake, 0, 2048, 0, add_level)), max_level)
|
|
pitch = round(translate(level, 0, max_level, 440, 880))
|
|
plotBarGraph(level, max_level)
|
|
if level == max_level:
|
|
level = 0
|
|
score += 1
|
|
music.stop()
|
|
sleep(50)
|
|
display.show(Image.YES)
|
|
music.play(music.BA_DING)
|
|
sleep(450)
|
|
continue
|
|
if buzzer:
|
|
music.pitch(pitch)
|
|
else:
|
|
music.stop()
|
|
buzzer = not buzzer
|
|
sleep(50)
|
|
|
|
set_volume(255)
|
|
sleep(500)
|
|
display.show(Image.HEART)
|
|
music.play(music.RINGTONE)
|
|
sleep(500)
|
|
|
|
while True:
|
|
display.show(Image.HAPPY)
|
|
sleep(500)
|
|
display.clear()
|
|
sleep(500)
|