《我的第一本程式設計書》第六章 會動的程式,讓方塊下落
第六章 會動的程式,讓方塊下落
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年初,寫完了我的第一本書程式設計師
- 《我的第一本程式設計書》第七章 為儲存區起名,更多的中文程式設計
- 羨慕程式設計師的高薪?你會讓你的孩子當程式設計師嗎?程式設計師高薪
- 我的程式設計人生程式設計
- 我的程式設計之路程式設計
- 感悟我的程式設計之路程式設計
- 我的程式設計師之路程式設計師
- 風變程式設計讓我的職場選擇更加自由程式設計
- 別讓“防禦性程式設計”毀了我們的職業程式設計
- 83天!風變程式設計讓我成為了更好的自己程式設計
- 開啟我的程式設計之路程式設計
- 我的程式設計職業生涯程式設計
- 不同人對BUG的反應,程式設計師:誰動了我的程式碼?程式設計師
- 面試了一個 31 歲程式設計師,讓我有所觸動,30歲以上的程式設計師該何去何從?面試程式設計師
- 免費的程式設計中文書籍程式設計
- 我寫的第一本書《TypeScript 入門教程》TypeScript
- 風變程式設計——小白也能學會的程式設計課!程式設計
- 讓程式設計師崩潰的瞬間(非程式設計師勿入)程式設計師
- 什麼?又來智慧AI程式設計?讓不讓我們活了!AI程式設計
- 頂級程式設計師推薦的程式設計開發書籍【整合】程式設計師
- ESLint裡的規則教會我,無規矩 不程式設計EsLint程式設計
- 我是一個不會運維的後端程式設計師運維後端程式設計師
- 函數語言程式設計嘗試之俄羅斯方塊函數程式設計
- 讓程式設計迴歸原始的意義!程式設計
- 程式設計書說的 “Go 程式設計師應該讓聚合型別的零值也具有意義” 是在講什麼Go程式設計師型別
- 100行程式碼讓您學會JavaScript原生的Proxy設計模式行程JavaScript設計模式
- 《我的第一本演算法書》筆記一演算法筆記
- 程式設計師書單程式設計師
- 生活不只有工作——感謝風變程式設計讓我的生活更精彩程式設計
- 風變程式設計,讓我的有了不一樣的人生風景程式設計
- 我是如何提高自己的「程式設計能力」的?程式設計
- 學習風變程式設計,學會的不僅僅是程式設計程式設計