C語言---俄羅斯方塊遊戲
我們接下來做一個,俄羅斯方塊的小遊戲,在這個程序中,我們幾乎用到了之前所有的知識點,還用到了一些ege庫裡邊的函數和功能,比如:按鍵處理,文字輸出、圖形繪製,還有圖片的顯示等。讓我們先來看一下遊戲界面:
遊戲歡迎界面
遊戲主界面:
遊戲結束界面:
遊戲界面:
1、 歡迎界面
2、 遊戲主界面(遊戲區、預告下一個模塊區、得分區、遊戲使用簡介區)
3、 遊戲結束界面
遊戲功能:
1、 在模塊下落中,可以左移、右移模塊、可以變換模塊形狀、可加速下落
2、 每有一行方塊滿行,則消除一行並得10分
3、 在預告模塊區,可看到下一個模塊的形狀展示
4、 遊戲結束後,可以按『r』鍵重新開始遊戲
程序數據結構
此程序的數據結構主要由兩個部分構成:
1、 遊戲池的數據結構
struct pooln{n int po[26][16];n color_t col[26][16];n char x; //下落方塊的坐標n char y;n}pool;n
我們看到的遊戲池中所有的方塊(包括正在下落的模塊),都是根據上述的結構體pool中的數據在屏幕中列印出來的結果。也就是我們通過不斷更改pool結構體中的數據,然後再將pool中的數據不停的顯示到屏幕,就變成了我們看到的模塊的移動、翻轉、消行等效果。
pool結構體的成員:
(1) int po[26][16];
即遊戲池是由一個26x16的二維數組構成的,即代表26x16個小方塊,數據為1則表示此方塊有內容,就會在屏幕上相應位置畫出一個20X20像素的小方塊,數據為0則表示此方塊為空,即不顯示。
(2) color_t col[26][16];
即遊戲池的顏色列表,分別表示26x16個小方塊的顏色,每個元素都是一個color_t 類型的數據(例:0x00ff00),顏色列表和數據列表是一一對應的,即col[0][0]就代表方塊po[0][0]的顏色,col[0][1]就代表方塊po[0][1]的顏色。
(3) char x 和char y
x 和 y 代表的是正在下落的模塊的初始坐標,用來記錄下落模塊的當前的位置。
2、 每個俄羅斯模塊的數據結構
struct modeln{n int mod[4][4];n color_t col;n}tetrisMod[16];n
我們定義了一個struct model類型的結構體數組,這個數組一共有16個元素,代表我們一共有16種不同的模塊類型(模塊旋轉後算成一種新的模塊類型)。我們在頭文件Tetris.h中定義並初始化了tetrisMod[16]數組中的內容。
model結構體的成員:
(1) int mod[4][4]
是一個整型的4x4的二維數組,即代表4x4個小方塊的組合,當其中的元素數據為1,則表示此處顯示方塊,為0則表示此位置沒有方塊,這樣一個俄羅斯方塊的模塊就構成了。
(2) color_t col;
由一個color_t 類型的數據代表此模塊的顏色(例:0x00ff00)
當模塊移動時數據的變化:
1、 模塊進入遊戲池
在模塊進入到遊戲池中時,我們會將模塊(即tetrisMod[16]數組中的一個元素)中的數據,複製到pool中,包括形狀、顏色、初始位置,這樣我們列印pool中數據的時候就可以看到模塊出現在遊戲池的頂部。
2、 左移、右移、下移
當我們通過鍵盤改變模塊在pool中的位置(即pool結構體中char x, char y)時,我們會相應的改變pool對應的模塊的數據(int po[26][16];和color_t col[26][16];),進而在列印pool中數據的時候就可以看到模塊在遊戲池中的位置發生了變化 。
3、 模塊的旋轉
當我們按下方向鍵『↑』的時候,我們會將旋轉90度後的模塊的數據在數組tetrisMod[16]中找出來,並將其數據根據坐標填充到pool結構體中(會先把pool中原來的模塊數據清除),進而顯示的時候,我們會看到模塊放生了旋轉。
俄羅斯方塊程序的主要模塊和運行流程:
1、整體框架
2、mainloop函數
更多詳情,請查看源碼及注釋。
關注以下公眾號,回復 「俄羅斯方塊」,獲取源碼和詳細注釋
作者公眾號《肖申克之自由鳥》:http://weixin.qq.com/r/h0SEnOvEerYFra--9xGV
點擊以下鏈接獲取更多C語言課程文章:
《C語言核心30天突破》
推薦閱讀:
TAG:C编程语言 | C语言入门 | 俄罗斯方块Tetris |