一道難度等級比較高的少兒編程題目,你能做出來嗎?

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個呢?


後面看同學們的響應程度再決定是否給出來這兩個問題的答案

一道難度等級比較高的少兒編程題目,你能做出來嗎?

。另外大家關注下方"碼小愛"公眾號回覆“源碼”,將可以得到本次程序的源碼。



分享到:


相關文章: