陳新龍
每年Scratch考級(jí)考試中必然會(huì)出現(xiàn)關(guān)于繪制復(fù)雜圖形的題目。繪制圖形主要考核對(duì)畫筆積木和重復(fù)及旋轉(zhuǎn)積木的掌握,還需要有一定的數(shù)學(xué)能力和提取圖形變化規(guī)律的能力。
其實(shí)考題中所有復(fù)雜圖形都是通過簡(jiǎn)單圖形重復(fù)構(gòu)成的,在考試中有些同學(xué)會(huì)使用重復(fù)的代碼塊進(jìn)行組合拼搭實(shí)現(xiàn)最終的效果。今天就和大家一起探討圖形題目中的程序優(yōu)化。
例題:圖中有6個(gè)三角形,第一行有1個(gè)正三角形,第二行有2個(gè)正三角形,第三行有3個(gè)正三角形,每一行的第一個(gè)三角形是上下對(duì)齊的。小明要用Scratch繪制出這個(gè)圖形,你覺得小明這樣編寫程序可以實(shí)現(xiàn)效果嗎?能否對(duì)程序進(jìn)行優(yōu)化呢?(圖1)
從最終的運(yùn)行效果我們可以看到小明的方法確實(shí)可以實(shí)現(xiàn)題目的要求,他先自定義繪制三角形的方法,然后用坐標(biāo)定位將6個(gè)三角形移動(dòng)到指定的位置,最終代碼的長(zhǎng)度也適中(圖2)。
但如果將題目稍微修改一下,由用戶輸入行數(shù),繪制出n行三角形,每行三角形的個(gè)數(shù)依次遞增,還能使用坐標(biāo)定位的方法嗎?答案是肯定不行。這個(gè)時(shí)候我們需要對(duì)程序進(jìn)行整體的優(yōu)化和修改(圖3)。
對(duì)原有程序優(yōu)化的第一步是檢查三角形的畫法,這一步需要重復(fù)很多次,是程序的核心,包含確定畫筆的粗細(xì),確定畫筆的顏色,重復(fù)執(zhí)行三次,每次左轉(zhuǎn)或者右轉(zhuǎn)120度,確定每次移動(dòng)的步數(shù)。
接下來需確定初始的坐標(biāo)(0,0),通過“詢問需要繪制多少行的三角形”獲取繪制的行數(shù)。新增變量i(變量i的初始值為1)確定每行三角形的個(gè)數(shù),通過雙重循環(huán)的方式,外層循環(huán)代表繪制整體圖形的行數(shù),并且設(shè)置每行的第一個(gè)三角形X的坐標(biāo)為0,內(nèi)循環(huán)代表每行三角形的個(gè)數(shù),通過變量i表示,在內(nèi)循環(huán)中使用自制繪制三角形積木,兩個(gè)三角形的間隔為20。內(nèi)循環(huán)每循環(huán)結(jié)束一次,變量i的值增加1,Y坐標(biāo)增加20(間隔高度根據(jù)實(shí)際情況來確定)。
優(yōu)化后的程序進(jìn)行對(duì)比不難發(fā)現(xiàn)兩者的差距還是很大的,前者通過坐標(biāo)定位的方法來確定位置,后者通過雙重循環(huán)的方法來確定位置。
其實(shí)這種雙重循環(huán)的方法是從VB編程中獲得的思路。我把VB編程的方法也放在了后面,感興趣的同學(xué)也可以學(xué)習(xí)(圖4)。
在學(xué)習(xí)編程的過程中,我們需要不斷提高自己的邏輯思維與創(chuàng)造力,在分析問題和完成程序的過程中不斷去探索,思考最佳、最便捷的解決問題的方式,同時(shí)在學(xué)習(xí)過程中逐漸形成邏輯分析、獨(dú)立思考創(chuàng)新的思維方式,學(xué)會(huì)提出問題,解決問題。