2019年1月5日 星期六

台中市難題「等差級數 LED 燈牆」解題心法

這題可以說是台中市107年Scratch國小程式設計組最難的一題,能夠成功作出來的非常少,不過把題目仔細拆解成小部分,還是有方法可以做出來,前面能夠得分的部分還是要盡量拿。
題目:可到以下網址下載,本題為第2題
https://contest.tc.edu.tw/pub/showrank.aspx

玩法 按下「 開始設計」後,提出使用者要輸入 3 到 17 的奇數數字, 並出現輸入框。
如果使用者輸入的是偶數數字, 則畫面要出現提示「 您輸入的是偶數, 請重新輸
入 3 到 17 的奇數數字」( 2 秒);如果輸入的數字不在範圍內, 則畫面要出現提
示「 您輸入值不在圍內, 請重新輸入 3 到 17 的奇數數字」( 2 秒)。如果輸入正
確,則出現則在畫面中央出現一面由紅、白二種顏色的正方形 LED 燈牆,且排列
規則需依下圖所示正確呈現。


1.匯入舞台背景圖與各項元件10%

(基本分數,必拿)

2.按下綠旗 ,舞台畫面切換到 background-0.png,並出現「 開始按鈕」 (Start.png)。 其他角色隱藏。10%


舞台程式碼:

「開始按鈕」程式碼:


其他元件皆設為:
(是否要定位可自行決定)


3.滑鼠按下「開始按鈕」(Start.png)後,舞台畫面切換到background-1.png;同時出現 Giga 人物角色(Giga-b2 造型)、顯示提示用語「請輸入 3 到 17 的奇數數字」( 2 秒),以及等待使用者輸入列。10%


「開始按鈕」程式碼:

Giga程式碼:
(定位點可自行決定)

4.如果使用者輸入的是「偶數」 數字, Giga 人物角色呈現不高興造型(Giga-d),並出現「 您輸入的是偶數, 請重新輸入 3 到 17 的奇數數字」( 2 秒)的提示,然後再請使用者重新輸入。10%

此部分為偵錯功能,在角色Giga上繼續接上這一段即可。

5.如果輸入的數字不在範圍內, Giga 人物角色呈現不高興造型(Giga-d),並出現「您輸入值不在範圍內, 請重新輸入 3 到 17 的奇數數字」( 2 秒)的提示,然後再請使用者重新輸入。10%

這也是偵錯功能,在角色Giga上繼續接這一段即可,可以直接複製上面整塊程式碼稍稍修改即可。


6.正確產生輸入值的正方形矩陣的 LED 牆圖形。例如輸入 3,則產生 3x3 的 LED 牆圖形,例如輸入 17,則產生 17x17 正方形的 LED牆圖形。顯示位置不做限定,惟不可以超出邊緣之外。20%

這部分已經稍有難度了,可以利用「蓋章」或「分身」產生矩陣。
先向上、向左移動足夠的空間(每格大小15像素),再重複執行「蓋章」,每排蓋(輸入數字)個,蓋完再換行,向下移動1排,向左移動(輸入數字)*15個像素繼續蓋第2排,直到蓋完(輸入數字)為止。


7.依據規則正確產生紅、白色 LED 牆,其中紅色 LED 部份須以等差級數及「中間」上下對稱方式產生。例如 7x7 的 LED 牆圖形,其中紅色部份要依序由上而下產生 1、 3、 5、 7、 5、 3、 1 個紅色 LED。25%

這也是本題最難的部分,目前只有看到一人用「新增積木」的方式成功完成(在其他程式設計語言這功能叫做「函式」)。

新增兩個變數M、N,M負責「白色」,N負責「紅色」

在「更多積木」新增一個LED,並選擇「數字輸入」。
將「答案」嵌入LED後面的數字中。

函式LED的寫法如下:
「否則」之後如下:

N(紅燈)從1開始,左右之M(白登)數量=(答案-N)/2
之後的N每一排比上一排增加2個
當(答案-1)<N時表示整排都是紅燈
之後的N每一排比上一排減少2個直到最後一排剩下1個

沒有留言:

張貼留言