Copy from microbit import *
import random
def setLED ( number , value ):
x = number % 5
y = number // 5
display . set_pixel (x, y, value)
seq = [ 0 , 1 , 2 , 3 , 4 , 9 , 14 , 19 , 24 , 23 , 22 , 21 , 20 , 15 , 10 , 5 ]
counter , old = 0 , 0
delay = 1
while True :
setLED (seq[old], 0 )
setLED (seq[counter], 9 )
delay += random . randint ( 1 , 10 )
sleep (delay)
if delay > 500 : break
old = counter
counter = counter + 1
if counter >= len (seq):
counter = 0
sleep ( 2000 )
display . show (Image.HEART)
這個程式一開始執行之後,就會有一個LED由快而慢地輪流在LED矩陣外圍旋轉顯示,至於會停在哪一個位置上並不會固定,因為主要在輪流點亮LED位置的迴圈是第12行,它沒有預定的重複次數,一開始的delay變數從1開始,每一次在第15行執行的時候就會在1~10之間隨機取一個數字加到delay中,一直到第17行的地方檢查delay是否大於500,如果大於500就離開迴圈,也就是它的停止條件 。
Copy counter , old = 0 , 0
setLED (seq[counter], 9 )
while True :
if old != counter :
setLED (seq[old], 0 )
setLED (seq[counter], 9 )
if button_a . is_pressed () and button_b . is_pressed ():
break
elif button_a . was_pressed ():
old = counter
counter -= 1
if counter < 0 :
counter = len (seq) - 1
sleep ( 200 )
elif button_b . was_pressed ():
old = counter
counter += 1
if counter >= len (seq):
counter = 0
sleep ( 200 )
不同於前面的程式,這個程式是由玩家來決定要顯示的LED位置,一開始把counter設定在串列seq的第0個位置,並在第2行的時候點亮該位置的LED。接著進入迴圈中,這個迴圈也是不定重複次數,它是由第7行的偵測動作以決定是否要離開這個迴圈,也就是當玩家同時按下A按鈕及B按鈕的時候,就會離開這個迴圈以繼續後續的作。
如果玩家按下A按鈕的話,就讓LED逆時針移動,若是按下B按鈕,則讓LED順時針轉動。如此,這個程式片段就可以讓玩家設定要猜測的位置,也就是當玩家同時按下A和B按鈕離開這個迴圈的時候,此時的counter變數的內容就是玩家要猜測的編號,在離開迴圈之後,要用另外一個變數guess來記錄此數值,以便和後來的隨機數做比較。
Copy from microbit import *
import random
def setLED ( number , value ):
x = number % 5
y = number // 5
display . set_pixel (x, y, value)
seq = [ 0 , 1 , 2 , 3 , 4 , 9 , 14 , 19 , 24 , 23 , 22 , 21 , 20 , 15 , 10 , 5 ]
counter , old = 0 , 0
setLED (seq[counter], 9 )
while True :
if old != counter :
setLED (seq[old], 0 )
setLED (seq[counter], 9 )
if button_a . is_pressed () and button_b . is_pressed ():
break
elif button_a . was_pressed ():
old = counter
counter -= 1
if counter < 0 :
counter = len (seq) - 1
sleep ( 200 )
elif button_b . was_pressed ():
old = counter
counter += 1
if counter >= len (seq):
counter = 0
sleep ( 200 )
answer = counter
counter , old = 0 , 0
delay = 1
while True :
setLED (seq[old], 0 )
setLED (seq[counter], 9 )
delay += random . randint ( 1 , 10 )
sleep (delay)
if delay > 500 : break
old = counter
counter = counter + 1
if counter >= len (seq):
counter = 0
sleep ( 2000 )
if counter == answer :
display . show (Image.HEART)
else :
display . show (Image.SAD)