陳新龍
除了正常下圍棋,我還喜歡用圍棋子在棋盤上擺出各種圖形,棋雖然沒學明白,各種各樣的圖形倒是擺出了不少。今天我們用Scratch和VB擺出一個簡單的造型。

在棋盤上我們用棋子擺出一個倒三角形,從下往上數有六層,第一層數量(2×1-1=1)個,第二層(2×2-1=3)個……第六層(2×6-1=11)個,如果我們接著往上擺放棋子那么第n層(2×n-1)個。我們選擇容易理解的算法在VB和Scratch中編寫程序,通過對比兩個不同語言的代碼來看一下兩者之間的不同之處。
首先我們要確定繪制的層數,通過用戶輸入確定層數,如果我們想畫6層,那么最頂層數量就是(2×6-1=11)個,確定了最頂層的個數,也就找到了解題的突破口。接下來我們從最頂層的最左側開始,通過畫筆圖章指令印出一個小球,重復執行11次;向右移動X=30步,這里需要注意的是,移動距離一定要大于超出小球的直徑,保證小球不能重疊。小球的直徑可以通過角色的大小查看。頂層畫完之后,我們要去畫下一層,難度就是在于如何確定下一層的開始位置。目前小球停在第一行末尾的位置上,在畫第二層時,我們要通過計算求出小球移回的距離,在畫頂層時小球總共向右移動了10次,每次移動30步,現在小球應向左移動9個30步就可到達下一層起始位置。同樣道理還要計算向下移動小球的距離,讓Y的坐標減小30即可,這樣小球可到達下一層的起始位置。重復控制小球向右移動通過圖章復制留下下一層的印記。程序主體使用了嵌套雙重循環來完成。

VB代碼更加簡潔,首先詢問用戶需要輸入的層數,也是使用嵌套雙重循環方法,第一層(i)代表共有多少層,層數倒敘排列輸出(step-1),第二層(j)代表每行的個數(2*i-1)。程序關鍵點也是換行過程,先要確定起始位置,相對Scratch就更簡單了,直接使用Print Tab方法就可以了,需要空幾格使用數學公式(2*n-i)便可求出,確定每行小球的起始位置,并且對每行小球的個數進行輸出。

大家在學會了繪制倒立三角形的圖案后,還可以在此基礎上去完成一些更加漂亮的圖案,比如愛心或者五角星等等……通過對比兩種語言的代碼,我們可以了解兩種代碼的特點,VB的代碼更加簡潔,Scratch的代碼更容易理解。