記得8月份寫過俄羅斯方塊,那會全是用坐標表示的。包括所有方塊的變換,甚至方塊的表示。導(dǎo)致程序內(nèi)部許多的case語句,甚為麻煩。代碼量也有近1800行左右。而且寫完后bug很多,修正也修正不完,異常頭痛便放棄了。
現(xiàn)在看看《編程之美》的俄羅斯方塊的思路,又想起vczh用腳本的寫的俄羅斯方塊,就又起了興趣。便重新設(shè)計完成了,這次基本沒什么bug了。只不過操作習(xí)慣上和QQ的俄羅斯方塊還有些不同。
1. 在底部的時候,如果按住旋轉(zhuǎn)不放,則會停留原地旋轉(zhuǎn)。原因是為了檢測接觸底部時旋轉(zhuǎn)不插入墻壁,就同接觸左右墻壁一樣,做了調(diào)整方塊坐標處理。處理方法是根據(jù)旋轉(zhuǎn)后方塊的坐標加上(減去)最大列(最小列)在減去(左)右邊界得到。底部也是這樣計算的。當然有了這樣的檢測便出現(xiàn)了這樣的小小的bug,不過我相信沒人會在底部按住不放的。
2. 這次方塊全部存儲在一個一維數(shù)組中,通過指針的變換來改變方塊種類與旋轉(zhuǎn)狀態(tài),但是為了方便操作,就拷貝到了一個二維數(shù)組中。起初設(shè)計是一個四維數(shù)組,這樣就方便多了,但是VS2008的編譯器卻不能編譯通過,int[4][4]到int **p的轉(zhuǎn)換不成功,朋友說是編譯器問題。后來經(jīng)Lend3d說,很多項目都是不用大于二維的數(shù)組的,于是干脆就用了一維數(shù)組,本來要聽從他意見用結(jié)構(gòu)表示一個低二位的數(shù)組元素,但是初始化和使用都不是很方便。
3. 另外關(guān)于GDI緩沖,試用了一下,但是作用貌似不大,不知道原因。關(guān)于這方面的知識援助還是要感謝HAM2008的幫助。