C语言写的俄罗斯方块
源:C語言寫的俄羅斯方塊
?
2014年最后一天, 任天堂將風靡全球30年的經典游戲<<俄羅斯方塊>>下架. 作為全球最暢銷的游戲, 其移植版本遍布各個平臺. 下面這個是我去年在51平臺上實現的, 使用12864液晶做為顯示器, 用矩陣鍵盤操作. 大家都知道標準51只有幾百字節的RAM, 當時我用的那款單片機RAM只有512字節, 使用256字節做為顯示緩存, 還剩下256字節, 最后居然也夠用.
前段時間兄弟很好奇這個游戲是怎么運作的(他有C語言基礎), 想讓我給他講一下, 然后我就整理了一下代碼, 將其移植到PC平臺, 后來又將其移植到MSP430 Launchpad上, 使用超級終端(PuTTy)作為游戲界面.
代碼使用模塊化編寫, 簡單且易于移植. Windows平臺的控制臺程序和MSP430 Launchpad上的絕大部分代碼都是相同的, 只有UI模塊根據平臺進行了重寫. 所以, 如果你想要移植它到其它平臺, 或者使用其它顯示設備, 只要簡單的重寫UI模塊即可實現.
在游戲模塊中會將消行的行數返回, 而計分和升級全是獨立于模塊之外的, 故可使用自己的計分方法.
Windows控制臺版本中的dep文件夾中是依賴模塊, 用于改變控制臺字符顏色與其它一些屬性. 來自己第三方, 詳見文件開頭的聲明.
另外在Windos控制臺還實現了一個彩色版本, 接口與單色版本兼容. 在編譯參數中定義 TETRIS_USE_COLOR 宏即可編譯為彩色版. Windows控制臺版本由GCC編譯, 詳細見對應目錄下的builder.bat批處理文件.
MSP430 Launchpad版本使用PuTTy做為顯示終端, 用IAR For MSP430進行編譯, 對應目錄下有建立好的工程文件可直接使用.
代碼位于Github, 主分支為單色版本, 彩色版本見 CTetris 分支.
原理說明(以單色版本為例, 彩色版略有區別):
游戲主要使用兩個表和一個緩存區來配合進行.
兩個表中一個為方塊(包括各個變形)的點陣數據表, 另外一個為方塊旋轉時的掩碼表.
在兩個表中每個數據為無符號16位整數, 每4個一組, 可以排列為一個4 * 4 的點陣, 方塊數據就記錄于此點陣中.? 旋轉掩碼表的結構相同, 是用于簡化方塊旋轉時沖突判斷, 里面記錄的是方塊旋轉時經過的所有路徑. 可以將某一類方塊數據和掩碼數據展開看一下就會很輕松明白了.
沖突檢測. 游戲的運行過程就是根據輸入不改變方塊的坐標, 判斷方塊移動情況, 采取相應的措施. 為了方便判斷方塊的旋轉, 故使用了旋轉掩碼表. 旋轉掩碼表中標為1的地方就是方塊旋轉到下一個變形所經過的路徑, 其對應的位置不可位于地圖外, 且不可被占用, 否則表示方塊不可旋轉, 詳見代碼.
消行. 經典的俄羅斯方塊地圖區是10 * 20大小的, 在單色模式下使用了一個uint16_t[20]的數組做為地圖, 方塊的每一步動作都在地圖中表現出來. 其中每一位表示地圖中的一個小方格, 數組的每一個元素實際上只用到10位(橫向), 所以當數據中某一個元素值大于2^10即1023時即表明此行已滿, 再進行消行處理即可.
另外其它一些相關信息可參考源代碼目錄下的readme.md.
查看位于Github的源代碼: https://github.com/ykaidong/Tetris
轉載于:https://www.cnblogs.com/LittleTiger/p/5378441.html
總結
以上是生活随笔為你收集整理的C语言写的俄罗斯方块的全部內容,希望文章能夠幫你解決所遇到的問題。