Fangeleg

Microbit Python # 1

Vi laver en fangeleg til Microbit i Python.
Det handler om at man har en microbit der mister liv når man bliver rystet. Så skal man ryste fjendernes microbit, uden at sin egen bliver rystet.

Der skal bruges https://python.microbit.org/v/2.0 som editor.

Man kan bruge WebUSB tli at flashe sin microbit direkte fra siden, se mere her https://support.microbit.org/support/solutions/articles/19000084059-using-web-usb-with-the-apps-and-editors

Dokumentation til MicroPython kan findes på https://microbit-micropython.readthedocs.io/en/latest/
Herfra bruger vi blandt andet Gestures og Images

Vred På Ryst

Vi laver et program der 1. importerer microbit biblioteket 2. finder ud af om der er en “gesture” 3. hvis gesture er “shake”, altså et ryst, så viser vi et vredt billede

from microbit import *

while True:
    gesture = accelerometer.current_gesture()

    if gesture == "shake":
        display.show(Image.ANGRY)

Glad når Microbit ikke ryster

Vi tilføjer at hvis microbitten ikke ryster, så viser den et glad billede

from microbit import *

while True:
    gesture = accelerometer.current_gesture()

    if gesture == "shake":
        display.show(Image.ANGRY)
    else:
        display.show(Image.HAPPY)

Dødningshoved når microbit har mistet alle liv

Vi tilføjer en variable life som holder styr på hvor mange liv vi har, og sætter den til 1. Så går vi ud af vores løkke, som gentager koden der viser glad ansigt, når vi har mistet et liv. Derefter viser vi et dødningshoved.

from microbit import *

life = 1

while life > 0:
    gesture = accelerometer.current_gesture()

    if gesture == "shake":
        life = life - 1
    else:
        display.show(Image.HAPPY)

display.show(Image.SKULL)

Flyt rystelogik i sin egen metode

Vi laver en funktion som indeholder rystelogikken. Det gør at vores if deklaration bliver mere læselig.

from microbit import *
life = 1

def ryster():
    gesture = accelerometer.current_gesture()
    return gesture == "shake"

while life > 0:
    if ryster():
        life = life - 1
    else:
        display.show(Image.HAPPY)

display.show(Image.SKULL)

Mist et liv ad gangen

Vi tilføjer en variable der holder styr på hvornår vi sidst tog skade. microbit.running_time() svarer til tiden siden Microbitten startede.

Så laver vi også en metode der tjekker om vi er blevet skadet for nyligt. Det er fordi vi ikke skal miste alle vores liv på en gang. Derudover sætter vi vores liv op til 3.

I vores if tjekker vi så også om vi er blevet skadet for nyligt ved at bruge metoden.

from microbit import *

sidste_skade = microbit.running_time()
life = 3

def ryster():
    gesture = accelerometer.current_gesture()
    return gesture == "shake"

def ikke_skadet_for_nyligt():
    nu = microbit.running_time()
    tidsforskellen = sidste_skade - nu
    return tidsforskellen > 1000

while life > 0:
    gesture = accelerometer.current_gesture()

    if ryster() && ikke_skadet_for_nyligt():
        life = life - 1
		sidste_skade = microbit.running_time()
        display.show(Image.ANGRY)
    else:
        display.show(Image.HAPPY)

display.show(Image.SKULL)

Tid som argument

Vi ændrer vores metode for at tjekke hvornår man sidst blev skadet, til at tage imod et argument som siger hvor lang tid det er

from microbit import *

sidste_skade = microbit.running_time()
life = 3

def ryster():
    gesture = accelerometer.current_gesture()
    return gesture == "shake"

def ikke_skadet_i(mikrosekunder):
    nu = microbit.running_time()
    tidsforskellen = sidste_skade - nu
    return tidsforskellen > mikrosekunder

while life > 0:
    if ryster() && ikke_skadet_i(2000):
        life = life - 1
		sidste_skade = microbit.running_time()
        display.show(Image.ANGRY)
    else:
        display.show(Image.HAPPY)

display.show(Image.SKULL)

Tag skade metode

Vi rykker vores logik for at tage skade ind i en metode der holder styr på det.

from microbit import *

sidste_skade = microbit.running_time()
life = 3

def ryster():
    gesture = accelerometer.current_gesture()
    return gesture == "shake"

def ikke_skadet_i(mikrosekunder):
    nu = microbit.running_time()
    tidsforskellen = sidste_skade - nu
    return tidsforskellen > mikrosekunder

def tag_skade():
    life = life - 1
    sidste_skade = microbit.running_time()
    display.show(Image.ANGRY)

while life > 0:
    if ryster() && ikke_skadet_i(2000):
        tag_skade()
    else:
        display.show(Image.HAPPY)

display.show(Image.SKULL)