01題目要求
在Scratch圖形化編程中私有變量,克隆和列表的題目是屬於比較難的,如果結合了三者則會更加難。今天我們就一起看看這道綜合了三者的九宮格題目。
題目要求:用編程的方式做一個九宮格的遊戲,把1-9這些數字拖入左邊9個方框內,使得每一行,每一列,斜對角三個數字相加都為15.
正確排列的結果:
錯誤排列的結果:
這個遊戲涉及的角色如下:
02問題解答
這裡大家可能會有一些疑問,其實澄清這些問題之後,這個題目會清晰很多,下面我們一起來過一下:
方格為什麼不直接用畫圖指令畫,這樣還能畫得更準確一些?
因為用畫圖指令畫出來的方框,將無法用碰撞檢測,只能通過數字的X,Y座標來確定落在哪個格子。舉個例子,如果要判斷數字1是否在第一個格子,而第一個格子的X座標是-120到-80, Y座標是100到170。那麼判斷邏輯是這樣的: 數字1的X座標是否小於-80並大於-120, 數字1的Y座標是否小於170並大於100,如果滿足這個條件則說明在第一個格子,否則還需要依次判斷數字1是否在其他格子裡。每一次判斷,X座標需要做兩次比較運算,Y座標也需要做兩次比較運算,一共是4次運算。
方格用角色的方式,可以用碰撞檢測的方式來判斷每個方格碰到數字幾,每次判斷只需要一次碰撞檢測,比判斷X,Y座標的4次運算更加容易。
方格怎麼畫出來正正方方的?為什麼我畫出來的是長方形?
按住鍵盤上shift鍵,再用鼠標拖動矩形方框就可以畫出來。
為什麼不創建9個格子角色?
因為可以用克隆。這樣同樣的代碼不用複製到9個格子角色裡;同樣發現一處問題,不需要改9個地方。
為什麼數字角色不用克隆,只用一個角色9個造型?
如果數字角色用克隆,格子角色也能判斷出來是否碰到克隆的數字角色,似乎看起來也行得通。可是再進一步思考,我們沒有指令“碰到角色的造型”,“碰到角色的編號”等等,類似下面這樣的指令只能獲取到角色本體的造型編號,所以我們只能知道某個格子是否碰到數字,但是沒法檢測到格子具體碰到哪個數字。所以數字角色要有9個。
03具體代碼
方格:
1,2代碼段運行之後,格子的編號是這樣的:
下面第三段代碼是記錄格子中放置的數字。
數字的主要代碼,需要拷貝9份到9個數字:
人物的主要代碼:
人物這裡有個技巧,我們用到了自定義積木,可以讓代碼更加清晰,同時用到了一個“停止判斷”廣播來停止其他腳本的技巧,因為Scratch的自定義積木中
“停止這個腳本”指令僅僅會停止自定義積木中的指令,並不能令執行過程停止。
而直接調用
“停止該角色的其他腳本”指令也並不會令執行過程停止。
所以我們要加一個“停止判斷”廣播。
另外需要注意的是:在拖動數字的時候需要在運行模式,也就是需要點了右上角這個按鈕到大窗口。否則Scratch不會把鼠標的拖拽動作與編程指令掛鉤。
做到這裡題目就結束了。同學們可以繼續思考兩個問題:
如果1個數字跨了2個格會有什麼後果?如何避免這個問題呢?
能不能換種做法,用1個數字角色,而格子角色創建9個呢?
後面看同學們的響應程度再決定是否給出來這兩個問題的答案
。另外大家關注下方"碼小愛"公眾號回覆“源碼”,將可以得到本次程序的源碼。