利用前面所提供的圖案的平移函數功能,再加上亂數的使用,很容易地就可以建立一個模擬雪花飄落的動畫,先來看程式碼的內容:
Copy from microbit import *
import random
track = Image (
'00000:'
'00000:'
'00000:'
'00000:'
'00000' )
while True :
track . set_pixel (random. randint ( 0 , 4 ), 0 , random. randint ( 3 , 6 ))
display . show (track)
sleep ( 400 )
track = track . shift_down ( 1 )
這個程式的第3行建立一個空白的圖案,然後在第10行,也就是迴圈中的第1行的位置利用set_pixel函數在LED矩陣第0列的某一個位置(以隨機數來產生)設定一個要點亮的值,而這個值也是利用亂數在3到6之間任選一個數值,營造出不同亮度的效果。
在加入一個位置的LED點亮數值之後,接著就顯示出目前的結果,最重要的是,在第13行,利用shift_down函數把整個圖案往下移動一列,再設定回新的track值上面,如此不斷地循環,就可以看到一個逐漸落下的LED燈光的效果,而且可以確保每一列中只有一個隨機選定的LED位置是點亮的。
學會了如何製作出落下物效果之後,接下來就可以製作避障遊戲了,先來看程式:
Copy from microbit import *
import random
track = Image (
'00000:'
'00000:'
'00000:'
'00000:'
'00000' )
car = 2
while True :
track . set_pixel (random. randint ( 0 , 4 ), 0 , random. randint ( 3 , 6 ))
if button_a . was_pressed ():
car -= 1
if car < 0 :
car = 0
if button_b . was_pressed ():
car += 1
if car > 4 :
car = 4
if track . get_pixel (car, 4 ) > 0 :
break
track . set_pixel (car, 4 , 9 )
display . show (track)
sleep ( 400 )
track = track . shift_down ( 1 )
display . scroll ( 'Game Over' )
程式的第10行先設定我們的汽車(想像它是一台汽車)的位置在第2行(直行橫列來看的話),在第13行到第16行偵測A按鈕來決定是否要把汽車的位置往左移動(也就是把car的內容減1),當然如果減到小於0的話就是0,不能是負數。
在第17行到第20行檢查B按鈕是否被按下去,如果有的話,就再把汽車的位置往右移動(也就是把car的內容加1,當然car的內容不能超過4。
第21行檢查汽車所在的位置是否已經有亮燈,如果該值大於0的話,就表示發生了磁撞,就要執行第22行的break,離開迴圈結束這個遊戲。
如果幸運沒有發生碰撞的話,就在第23行把代表汽車的燈點亮上去,之後在第24行顯示出整個完成處理之後的圖案,在第25行暫停0.4秒之後,就在第26行把整個圖案往下降一列,這個操作讓東西有落下來的感覺。
第27行是離開迴圈的地方,會離開迴圈表示發生了碰撞,因此只要顯示Game Over代表遊戲結束即可。
假設我們需要有計分的功能的話,就需按額外加上1個變數 score來記錄目前的分數,我們希望在每下降一列的時候加1分,程式設計如下:
Copy from microbit import *
import random
track = Image (
'00000:'
'00000:'
'00000:'
'00000:'
'00000' )
car = 2
score = 0
while True :
track . set_pixel (random. randint ( 0 , 4 ), 0 , random. randint ( 3 , 6 ))
if button_a . was_pressed ():
car -= 1
if car < 0 :
car = 0
if button_b . was_pressed ():
car += 1
if car > 4 :
car = 4
if track . get_pixel (car, 4 ) > 0 :
break
track . set_pixel (car, 4 , 9 )
display . show (track)
sleep ( 400 )
track = track . shift_down ( 1 )
score += 1
display . scroll ( 'Game Over' )
display . scroll ( 'Score: {} ' . format (score))
在上述的程式中可以看到,在第11行的地方定義一個score變數,接著在第28行完成下降一列的操作時加1分,最後在第30列的地方顯示獲得的分數。