第一次寫俄羅斯方塊,完全是按照自己的想法做的。做完了很奇怪。
估計是按照相對坐標(biāo)來算,好多的分支語句把自己都搞暈了。
所以決定放棄了,貼出來以祭奠。

設(shè)計的草稿是這樣的

棋子記錄狀態(tài)

棋盤根據(jù)棋子狀態(tài)進行判斷和繪制

主要檢測:

越界檢測:每次左移或者右移時檢測(在邊界內(nèi)則移動否則不動)OK

觸底檢測:每次下降時檢測OK,也就是在時鐘記錄一次時探測

消行檢測:觸底觸發(fā)時檢測

旋轉(zhuǎn)檢測:能否旋轉(zhuǎn)

 

檢測時首先根據(jù)棋子種類再根據(jù)棋子狀態(tài)進行篩選。

 

全局棋盤只在觸底時更新(檢測消行后的狀態(tài)),上部分在數(shù)組部分不更新 僅僅根據(jù)狀態(tài)由畫刷畫出。

 

觸發(fā)事件:

觸底時觸發(fā)產(chǎn)生新的方塊設(shè)置high_pos變量。

 

已經(jīng)實現(xiàn)的功能:

越界檢測觸底檢測

旋轉(zhuǎn)檢測旋轉(zhuǎn)檢測

 

代碼這里下載,我想沒人愿意去找錯誤所在的。呵呵相當(dāng)繁瑣。
 
如果大家有什么想法或者好的設(shè)計方法告訴我哈。非常樂意重新寫。
我聽同學(xué)說存儲每個圖形做比較簡單。可以減少分支判斷。

哈哈,第二天醒來終于意識到問題了,是數(shù)組的坐標(biāo)系和圖形的坐標(biāo)系混淆了。以及數(shù)組和方塊的參照系獨立的原因。
可以修改了。


現(xiàn)在的問題只剩下旋轉(zhuǎn)的時候會插到墻壁里,應(yīng)該是個小問題。也是因為單個點記錄造成對整體的把握性下降。

所以只能重新用新的方法去設(shè)計。

vczh跟我說他以前寫過這個代碼,我就打算參照他的腳本寫的代碼用C++寫一個。這個腳本還真牛叉: