《我的第一本程式設計書》第六章 會動的程式,讓方塊下落
第六章 會動的程式,讓方塊下落
1.回顧上一章的繪製牆壁
左右牆壁()
底面牆壁()
左右牆壁() 是
儲存區[2]->0
只要 儲存區[2]<20
儲存區[3]->儲存區[2]
儲存區[4]->0
方塊()
儲存區[3]->儲存區[2]
儲存區[4]->11
方塊()
儲存區[2]->儲存區[2]+1
底面牆壁() 是
儲存區[2]->0
只要 儲存區[2]<10
儲存區[3]->19
儲存區[4]->1+儲存區[2]
方塊()
儲存區[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
2.重新編寫嘗試讓方塊下落。
(因為單獨出來進行嘗試,可以減少程式碼量,以免混亂。)
1)首先採用最機器的寫法
儲存區[60000]->999999
儲存區[60000]->0
儲存區[60100]->999999
儲存區[60100]->0
儲存區[60200]->999999
儲存區[60200]->0
儲存區[60300]->999999
儲存區[60300]->0
儲存區[60400]->999999
2.用迴圈表示
1)分開依次迴圈
儲存區[0]->0
只要 儲存區[0]<100
儲存區[60000+(儲存區[0]*100)]->999999 #繪製白色(顯示) 繪製方塊()
儲存區[0]->儲存區[0]+1
儲存區[0]->0
只要 儲存區[0]<100
儲存區[60000+(儲存區[0]*100)]->0 #繪製黑色(隱藏)消除方塊()
儲存區[0]->儲存區[0]+1
2)合併 儲存區[0]->0 只要 儲存區[0]<100 儲存區[60000+(儲存區[0]*100)]->999999 #繪製白色(顯示) 繪製方塊() 儲存區[60000+(儲存區[0]*100)]->0 #繪製黑色(隱藏)消除方塊() 儲存區[0]->儲存區[0]+1
3)用區域性程式(函式)表示 儲存區[0]->0 只要 儲存區[0]<100 繪製方塊() #繪製白色(顯示) 消除方塊() #繪製黑色(隱藏) 儲存區[0]->儲存區[0]+1
繪製方塊() 是
儲存區[60000+(儲存區[0]*100)]->999999
消除方塊() 是
儲存區[60000+(儲存區[0]*100)]->0
3.加入4*4方塊再用區域性程式(函式)表示
1)程式碼如下: 儲存區[2]->0 #這裡的儲存區裡的數值不能與下面的發生衝突 只要 儲存區[2]<20 #這裡之所以迴圈20而不是100,是因為螢幕總共就100個畫素,所以超出會引發錯誤。 儲存區[3]->儲存區[2] #表示縱向的標號,因為向下移動,所以需要一個變換的值 儲存區[4]->0 #表示橫向的標號,由於暫時不考慮橫向移動,所以用0代替。 繪製方塊() 消除方塊() 儲存區[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
消除方塊() 是
儲存區[1]->0
只要 儲存區[1]<4
儲存區[0]->0
只要 儲存區[0]<4
儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->0
儲存區[0]->儲存區[0]+1
儲存區[1]->儲存區[1]+1
2)優化
(由於繪製方塊和消除方塊,就只有“999999”和“0”不同,所以只要新的“儲存區[5]”(變數)代替,就能節省一定的程式碼量)
儲存區[2]->0
只要 儲存區[2]<20
儲存區[3]->儲存區[2]
儲存區[4]->0
儲存區[5]->999999 #繪製白色方塊(也就是顯示方塊)顏色編碼:999999
方塊()
儲存區[5]->0 #繪製黑色方塊(也就是隱藏方塊)顏色編碼:0
方塊()
儲存區[2]->儲存區[2]+1
#函式區
方塊() 是
儲存區[1]->0
只要 儲存區[1]<4
儲存區[0]->0
只要 儲存區[0]<4
儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->儲存區[5]
儲存區[0]->儲存區[0]+1
儲存區[1]->儲存區[1]+1
整體思想:
i。先將4*4方塊部分獨立出來,打包成“方塊()”
ii。把裡面的“儲存區[3]”、“儲存區[4]”、“儲存區[5]”分別作為“縱向軸”、“橫向軸”、“顏色編號”提起出來,進行自定義。
(這裡作者解釋了很多,並且還提出了排錯的思想。就是我沒看懂。)
3)再度優化,也是所謂的多層封裝?
(這又是我沒能及時想到的部分!)
儲存區[2]->0
只要 儲存區[2]<20
儲存區[3]->儲存區[2]
儲存區[4]->0
繪製方塊() #呼叫
消除方塊() #呼叫
儲存區[2]->儲存區[2]+1
#第二層區域性程式
繪製方塊() 是
儲存區[5]->999999
方塊()
消除方塊() 是
儲存區[5]->0
方塊()
#第一層區域性程式(函式)封裝
方塊() 是
儲存區[1]->0
只要 儲存區[1]<4
儲存區[0]->0
只要 儲存區[0]<4
儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->儲存區[5]
儲存區[0]->儲存區[0]+1
儲存區[1]->儲存區[1]+1
4.讓方塊繪製的更快,“調控功能”
儲存區[55001]->1 #關閉調控
也就是說,之前在繪製時,調控功能是一直開啟的,所以才讓我們能一個畫素一個畫素看到繪製過程。 (至於為何會是這個數,這個樣子?我只能說,規定?)
5.寄信 ,類似製作動漫時的攝影、稍微移動一下、然後拍攝。 (事實上我也沒弄明白這個,只理解成了快速輸出畫面的一種節點?) (或者說是起到了臨時暫停的作用?)
儲存區[55000]->1 #哪裡需要有畫面,就放在哪個程式碼塊後面?
總之案例如下:
儲存區[55001]->1 #關閉調控功能(一個開關標記?)
儲存區[2]->0
只要 儲存區[2]<20
儲存區[3]->儲存區[2]
儲存區[4]->0
儲存區[5]->999999
方塊()
儲存區[55000]->1 #這裡是“寄信”,也就是輸出畫面給螢幕!注意是“55000”.
儲存區[5]->0
方塊()
儲存區[2]->儲存區[2]+1
方塊() 是
儲存區[1]->0
只要 儲存區[1]<4
儲存區[0]->0
只要 儲存區[0]<4
儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->儲存區[5]
儲存區[0]->儲存區[0]+1
儲存區[1]->儲存區[1]+1
6.綜合上一章繪製的牆壁
儲存區[55001]->1 #能讓牆壁一瞬間繪製出來
左右牆壁()
底面牆壁()
左右牆壁() 是
儲存區[2]->0
只要 儲存區[2]<20
儲存區[3]->儲存區[2]
儲存區[4]->0
儲存區[5]->999999 #因為要共用一個“方塊()”,所以需要追加一個“儲存區[5]”
方塊()
儲存區[3]->儲存區[2]
儲存區[4]->11
儲存區[5]->999999 #因為要共用一個“方塊()”,所以需要追加一個“儲存區[5]”
方塊()
儲存區[2]->儲存區[2]+1
底面牆壁() 是
儲存區[2]->0
只要 儲存區[2]<10
儲存區[3]->19
儲存區[4]->1+儲存區[2]
儲存區[5]->999999 #因為要共用一個“方塊()”,所以需要追加一個“儲存區[5]”
方塊()
儲存區[2]->儲存區[2]+1
#--------------下落程式碼塊
儲存區[55001]->1 #快速繪製
儲存區[2]->0
只要 儲存區[2]<20
儲存區[3]->儲存區[2]
儲存區[4]->0
繪製方塊() #呼叫
儲存區[55000]->1 #給個露臉的機會,否則就被下面的黑色覆蓋了!
消除方塊() #呼叫
儲存區[2]->儲存區[2]+1
#第二層區域性程式
繪製方塊() 是
儲存區[5]->999999
方塊()
消除方塊() 是
儲存區[5]->0
方塊()
#第一層區域性程式(函式)封裝
方塊() 是
儲存區[1]->0
只要 儲存區[1]<4
儲存區[0]->0
只要 儲存區[0]<4
儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->儲存區[5]
儲存區[0]->儲存區[0]+1
儲存區[1]->儲存區[1]+1
除去共用的“方塊()”,整體上依舊分為兩部分。
一部分是繪製不會動的“牆壁”
一部分是製作向下移動的“方塊”
2)但上述向下落的方塊會覆蓋掉左邊的牆壁,所以需要將向下的方塊移到牆壁的中間區域。
又因為下落到最後會把“底面牆壁”也塗黑掉,所以迴圈會少一個。
#--------------下落程式碼塊
儲存區[55001]->1 #快速繪製
儲存區[2]->0
只要 儲存區[2]<19 ###因為第20個就是底面牆壁了!
儲存區[3]->儲存區[2]
儲存區[4]->1 ####“0”是左牆壁,“11”是右牆壁,所以1-10之間是牆壁的內部。
繪製方塊() #呼叫
儲存區[55000]->1 #給個露臉的機會,否則就被下面的黑色覆蓋了!
消除方塊() #呼叫
儲存區[2]->儲存區[2]+1
#第二層區域性程式
繪製方塊() 是
儲存區[5]->999999
方塊()
消除方塊() 是
儲存區[5]->0
方塊()
#第一層區域性程式(函式)封裝
方塊() 是
儲存區[1]->0
只要 儲存區[1]<4
儲存區[0]->0
只要 儲存區[0]<4
儲存區[60000+儲存區[0]+(儲存區[1]*100)+(儲存區[3]*500)+(儲存區[4]*5)]->儲存區[5]
儲存區[0]->儲存區[0]+1
儲存區[1]->儲存區[1]+1
最後總結 1.要讓圖形運動,就等於先讓它消失,再在其他地方出現。 (就是製造視覺欺騙,動態錯覺。)
2.要消除圖形,就等於給它塗上背景色。
(也就是沒有所謂的橡皮擦,有的只是與背景色相同的畫筆。)
3.注意不要讓區域性程式內部和外部使用的儲存區編號重複。
(也就是“變數”不能衝突)
4.關閉調控功能的方法和調控功能的原理。寄信速度之慢。
(調控功能是繪製畫面的速度。預設是開著的,所以繪製就是一個畫素一個畫素的往上蹦!)
(寄信,就是在關閉調控功能後,讓某個區域變慢一下的技能?)
相關文章
- 《我的第一本程式設計書》第八章 可以操作的程式,操作方塊程式設計
- 《我的第一本程式設計書》第四章 程式的變形,繪製大量的方塊程式設計
- 我買的第一本程式設計書程式設計
- 《我的第一本程式設計書》第一章 第二章繪製方塊程式設計
- 《我的第一本程式設計書》第五章 將程式分離,更輕鬆地繪製大量的方塊程式設計
- 《我的第一本程式設計書》第三章 迴圈,讓程式變短程式設計
- 程式設計師的副業:我的第一本書出版啦!程式設計師
- [圖靈贈書]《我的第一本程式設計書》轉發贈書圖靈程式設計
- 程式設計會讓我發胖?!程式設計
- 我的俄羅斯方塊程式
- 程式設計師的副業:2021年初,寫完了我的第一本書程式設計師
- 《我的第一本程式設計書》第七章 為儲存區起名,更多的中文程式設計
- 伴隨我成長的程式設計書程式設計
- 我是如何閱讀程式設計書的程式設計
- [視訊]《我的第一本程式設計書》作者平山尚:“非科班”的逆襲(圖靈訪談)程式設計圖靈
- 我的程式設計生涯裡啟發我的15本書程式設計
- 讓我們成為更好的程式設計師程式設計師
- 我讀過的最佳程式設計書:一本沒有程式碼的書程式設計
- 老婆讓我教她程式設計程式設計
- 《我的第一本程式設計書》作者平山尚,訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- 讓程式設計的熱情感染你--《實用Common Lisp程式設計》書評程式設計Lisp
- 羨慕程式設計師的高薪?你會讓你的孩子當程式設計師嗎?程式設計師高薪
- 我的第一本Python書Python
- 程式設計師必看的書-Ruby程式設計師程式設計師
- 我的程式設計人生程式設計
- 我的程式設計之路程式設計
- 風變程式設計讓我的職場選擇更加自由程式設計
- 讓我至今仍引以為恥的程式設計經歷程式設計
- 陳梓瀚:伴隨我成長的程式設計書程式設計
- 我是如何自學程式設計的——“3遍讀書法”程式設計
- 讓程式碼寫程式碼,自主程式設計的 AI 離我們還有多遠?程式設計AI
- 程式設計師的情書程式設計師
- 程式設計師必看的書程式設計師
- 程式設計師必看的書之Java程式設計師程式設計師Java
- 國內第一本伴侶書!學習譚浩強老師的《C程式設計》,必配《C程式設計伴侶》!C程式程式設計
- 別逗了,我們真的需要會程式設計的設計師嗎?程式設計
- 《Scratch少兒趣味程式設計》讀書分享會,讀書+程式設計!雅酷起跑線!程式設計
- 我的書單 一個進階的Android程式設計師Android程式設計師