陳新龍
除了正常下圍棋,我還喜歡用圍棋子在棋盤上擺出各種圖形,棋雖然沒學(xué)明白,各種各樣的圖形倒是擺出了不少。今天我們用Scratch和VB擺出一個(gè)簡單的造型。
在棋盤上我們用棋子擺出一個(gè)倒三角形,從下往上數(shù)有六層,第一層數(shù)量(2×1-1=1)個(gè),第二層(2×2-1=3)個(gè)……第六層(2×6-1=11)個(gè),如果我們接著往上擺放棋子那么第n層(2×n-1)個(gè)。我們選擇容易理解的算法在VB和Scratch中編寫程序,通過對比兩個(gè)不同語言的代碼來看一下兩者之間的不同之處。
首先我們要確定繪制的層數(shù),通過用戶輸入確定層數(shù),如果我們想畫6層,那么最頂層數(shù)量就是(2×6-1=11)個(gè),確定了最頂層的個(gè)數(shù),也就找到了解題的突破口。接下來我們從最頂層的最左側(cè)開始,通過畫筆圖章指令印出一個(gè)小球,重復(fù)執(zhí)行11次;向右移動X=30步,這里需要注意的是,移動距離一定要大于超出小球的直徑,保證小球不能重疊。小球的直徑可以通過角色的大小查看。頂層畫完之后,我們要去畫下一層,難度就是在于如何確定下一層的開始位置。目前小球停在第一行末尾的位置上,在畫第二層時(shí),我們要通過計(jì)算求出小球移回的距離,在畫頂層時(shí)小球總共向右移動了10次,每次移動30步,現(xiàn)在小球應(yīng)向左移動9個(gè)30步就可到達(dá)下一層起始位置。同樣道理還要計(jì)算向下移動小球的距離,讓Y的坐標(biāo)減小30即可,這樣小球可到達(dá)下一層的起始位置。重復(fù)控制小球向右移動通過圖章復(fù)制留下下一層的印記。程序主體使用了嵌套雙重循環(huán)來完成。
VB代碼更加簡潔,首先詢問用戶需要輸入的層數(shù),也是使用嵌套雙重循環(huán)方法,第一層(i)代表共有多少層,層數(shù)倒敘排列輸出(step-1),第二層(j)代表每行的個(gè)數(shù)(2*i-1)。程序關(guān)鍵點(diǎn)也是換行過程,先要確定起始位置,相對Scratch就更簡單了,直接使用Print Tab方法就可以了,需要空幾格使用數(shù)學(xué)公式(2*n-i)便可求出,確定每行小球的起始位置,并且對每行小球的個(gè)數(shù)進(jìn)行輸出。
大家在學(xué)會了繪制倒立三角形的圖案后,還可以在此基礎(chǔ)上去完成一些更加漂亮的圖案,比如愛心或者五角星等等……通過對比兩種語言的代碼,我們可以了解兩種代碼的特點(diǎn),VB的代碼更加簡潔,Scratch的代碼更容易理解。