《我的第一本程式設計書》第五章 將程式分離,更輕鬆地繪製大量的方塊

伊徵銀王發表於2020-01-03

第五章 將程式分離,更輕鬆地繪製大量的方塊

1.引用程式,也就是函式的形式呼叫。 規則是:

點()
點() 是
    儲存區[60000]->999999

點():相當於呼叫,可多次呼叫輸出“點() 是”中的內容。“點”可以任意命名 “點() 是”:可以理解成將裡面的代表打包成一個名為“點()”的東西。

2.回顧上一章繪製牆壁的程式碼

#左邊的牆壁
儲存區[2]->0
只要 儲存區[2]<20
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[3]->儲存區[0]+(儲存區[1]*100)+(儲存區[2]*500)
            儲存區[60000+儲存區[3]]->999999    #左
            儲存區[60055+儲存區[3]]->999999    #右
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1
    儲存區[2]->儲存區[2]+1

#底面的牆壁
儲存區[2]->0
只要 儲存區[2]<10
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[69505+儲存區[0]+(儲存區[1]*100)+(儲存區[2]*5)]->999999    #底
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1
    儲存區[2]->儲存區[2]+1

3.先拿底面牆壁做例子
將繪製方塊的部分打包後,就成了以下程式碼:

#將方塊提取出來的部分
儲存區[2]->0
只要 儲存區[2]<10
    方塊()
    儲存區[2]->儲存區[2]+1

方塊的部分
方塊() 是
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[69505+儲存區[0]+(儲存區[1]*100)+(儲存區[2]*5)]->999999
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1

4.左右牆壁也一樣。
如下:

#提取之後的部分
儲存區[2]->0
只要 儲存區[2]<20
    方塊左()
    方塊右()
    儲存區[2]->儲存區[2]+1

#打包的部分,方塊左和方塊右
方塊左() 是
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[2]*500)]->999999
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1

方塊右() 是
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[60055+儲存區[0]+(儲存區[1]*100)+(儲存區[2]*500)]->999999
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1

5.然而這還存在大量的重複程式碼,所以需要進行優化。
(依舊想吐槽一句,自己就是想不到啊!)

#左右牆壁的部分
儲存區[2]->0
只要 儲存區[2]<20
    儲存區[3]->60000+(儲存區[2]*500)
    方塊()
    儲存區[3]->60055+(儲存區[2]*500)
    方塊()
    儲存區[2]->儲存區[2]+1

#底面牆壁的部分
儲存區[2]->0
只要 儲存區[2]<10
    儲存區[3]->69505+(儲存區[2]*5)
    方塊()
    儲存區[2]->儲存區[2]+1

#整體打包的部分
方塊() 是
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[儲存區[0]+(儲存區[1]*100)+儲存區[3]]->999999    #關鍵在這個“儲存區[3]”上
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1

6.左牆壁、右牆壁、底面牆壁的核心程式碼:

#左牆壁
儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[2]*500)]->999999
#右牆壁
儲存區[60055+儲存區[0]+(儲存區[1]*100)+(儲存區[2]*500)]->999999
#底面牆壁
儲存區[66505+儲存區[0]+(儲存區[1]*100)+(儲存區[2]*5)]->999999

將三者不同的部分提取出來,並賦予一個新的變數“儲存區[3]”就是上述的關鍵

儲存區[3]->60000+(儲存區[2]*500)    #括號很重要
方塊()    #左牆壁
儲存區[3]->60055+(儲存區[2]*500)    #括號很重要
方塊()    #右牆壁
儲存區[3]->69505+(儲存區[2]*5)    #括號很重要
方塊()    #底牆壁
#(程式碼不完整)

#共同的部分
方塊() 是
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[儲存區[3]+儲存區[0]+(儲存區[1]*100)]->999999
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1

7.通過橫軸和縱軸進行改造。
原理其實就是將畫素以橫縱5*5為一個單位,然後在螢幕上進行定位。

#呼叫
左右牆壁()
底面牆壁()

左右牆壁() 是
    儲存區[2]->0
    只要 儲存區[2]<20
        #左邊牆壁
        儲存區[3]->儲存區[2]    #縱
        儲存區[4]->0                #橫(因為是想下的方塊,所以橫向為0)
        方塊()
        #右邊牆壁
        儲存區[3]->儲存區[2]    #縱
        儲存區[4]->11              #橫(因為有11個方塊的距離,並且固定不變,所以是個定值)
        方塊()
        儲存區[2]->儲存區[2]+1

底面牆壁() 是
    儲存區[2]->0
    只要 儲存區[2]<10
        儲存區[3]->19                     #縱(因為是最底層,有19個方塊,所以向下19*500)
        儲存區[4]->1+儲存區[2]      #橫(因為第一個方塊由縱向繪製了,所以跳過第一個方塊,所以+1)
        方塊()
        儲存區[2]->儲存區[2]+1

方塊() 是
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[0]->0
        只要 儲存區[0]<4
            儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->999999
            儲存區[0]->儲存區[0]+1
        儲存區[1]->儲存區[1]+1

通過兩次打包,以及橫縱(xy)軸定位。 1)首先是:

儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->999999

通過“儲存區[3]”和“儲存區[4]”來作為縱軸和橫軸的增量。
*500:表示縱向一個方塊的偏移量
*5:表示橫向一個方塊的偏移量

2)然後是:

#以左右牆壁為例
儲存區[3]->儲存區[2]
        儲存區[4]->0
        方塊()
        儲存區[3]->儲存區[2]
        儲存區[4]->11
        方塊()

因為在“方塊()”裡確定了縱“(儲存區[3]*500)”+橫“(儲存區[4]*5)”的偏移量 所以只需要滿足“縱向”和“橫向”的條件就行。

3)最後是:

#呼叫
左右牆壁()
底面牆壁()

這要不寫,螢幕根本不出東西!

最後總結: 1.區域性程式這一功能的使用方法。
(也就是所謂的函式)

2.使用區域性程式,可以通過“引用”來多次利用同一行。
(所謂的函式呼叫)

3.使用區域性程式能讓程式碼更短,通過取名讓程式更易懂。
(也就是函式的好處。)

4.註釋和“特殊的數字”周邊可修改的更好。
(這個沒弄明白,大致理解成用數字定位橫縱座標。)

5.編寫出區域性程式後,可以另做一個小程式來確認它能否執行。
(所謂的舉一反三?)

相關文章