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函數

更多詳情,請查看源碼及注釋。

關注以下公眾號,回復 「俄羅斯方塊」,獲取源碼和詳細注釋

作者公眾號《肖申克之自由鳥》weixin.qq.com/r/h0SEnOv

點擊以下鏈接獲取更多C語言課程文章:

《C語言核心30天突破》


推薦閱讀:

美國少女要嫁給俄羅斯方塊?這些玩法簡直難以描述

TAG:C编程语言 | C语言入门 | 俄罗斯方块Tetris |