九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

俄羅斯方塊編程 課程設(shè)計報告

上傳人:燈火****19 文檔編號:20559650 上傳時間:2021-03-29 格式:DOC 頁數(shù):30 大小:154.51KB
收藏 版權(quán)申訴 舉報 下載
俄羅斯方塊編程 課程設(shè)計報告_第1頁
第1頁 / 共30頁
俄羅斯方塊編程 課程設(shè)計報告_第2頁
第2頁 / 共30頁
俄羅斯方塊編程 課程設(shè)計報告_第3頁
第3頁 / 共30頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《俄羅斯方塊編程 課程設(shè)計報告》由會員分享,可在線閱讀,更多相關(guān)《俄羅斯方塊編程 課程設(shè)計報告(30頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、課程設(shè)計報告題 目:俄羅斯方塊設(shè)計設(shè) 計 者:* *專業(yè)班級:* *學(xué) 號:* *指導(dǎo)教師:* *所屬系部:* * * *年* *月* *日、目錄目錄2一設(shè)計的目的和要求3二設(shè)計內(nèi)容3三設(shè)計任務(wù)3四游戲基本規(guī)則3五總體設(shè)計4六詳細(xì)設(shè)計與程序?qū)崿F(xiàn)4七.主要處理流程8八.游戲設(shè)計源程序10九.截圖30十 心得體會31十一 參考文獻(xiàn)31一設(shè)計的目的和要求加深對C語言課程所學(xué)知識的理解,進(jìn)一步鞏固C語言語法規(guī)則。學(xué)會編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)恼Z言程序,從而具備解決綜合性實(shí)際問題的能力。二設(shè)計內(nèi)容在熟練掌握C語言的基本知識:數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)

2、算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等);程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));大程序的功能分解方法(即函數(shù)的使用)等。進(jìn)一步掌握各種函數(shù)的應(yīng)用,包括時間函數(shù)、繪圖函數(shù),以及文件的讀寫操作等。三設(shè)計任務(wù)1.游戲歡迎界面。2.游戲執(zhí)行功能,包括計算得分。3.游戲結(jié)束界面。四游戲基本規(guī)則 游戲共由7種不同形狀的方塊組成,游戲開始以后隨機(jī)產(chǎn)生一個方塊由屏幕的頂端開始向下落下,落到低端則固定到桌面,并開始下一個方塊。在游戲窗口的左邊作為游戲的桌面,用寬度10和高度20的表格表示。游戲桌面的右邊靠上顯示得分,最下邊顯示游戲幫助。如果固定到游戲桌面的方塊超出了頂端游戲結(jié)束。方塊固定以后如果桌面上已

3、經(jīng)固定了的方塊滿一行,則消除一行并將消除行之上的部分向下移動,消除一行得1分。基本操作如下: (1) 方塊落下的過程中可以用左右方向鍵移動方塊的位置。(2) 上方向鍵用來旋轉(zhuǎn)方塊,即所謂的變形。(3) 下方向鍵用來加速方塊下落。(4) 游戲中按下回車鍵暫停游戲。再次按回車鍵繼續(xù)游戲。五總體設(shè)計 游戲以Windows窗口的形式運(yùn)行。窗口的左邊作為游戲的桌面,桌面的大小是10X20個單位。隨機(jī)出現(xiàn)一個方塊從游戲桌面的上方開始向下移動,并隨機(jī)生產(chǎn)一個向下方塊顯示到桌面的右邊。方塊的顏色分為7種。在顯示下一個方塊的上面顯示玩家得分,下面顯示游戲幫助。當(dāng)方塊不能向下移動的時候,將方塊固定到桌面上,固定的

4、方法是將方塊的每個部分所在的坐標(biāo)的桌面數(shù)值設(shè)置為1.固定以后,判斷桌面數(shù)值的每一行,如果一行的數(shù)值全部都是1的話,就將桌面上的這一行數(shù)值刪除,并將這一行上面所有行向下移動一行。刪除一行的同時,玩家的得分加1。上述操作完成以后,將下一個方塊從桌面的頂部開始下落,重新生成下一個方塊。在固定方塊到桌面的時候,還要判斷方塊的最頂端部分是否超出桌面范圍,并以此作為游戲結(jié)束的依據(jù)。六詳細(xì)設(shè)計與程序?qū)崿F(xiàn)一.方塊設(shè)計 游戲的核心和重點(diǎn)在于7種方塊的設(shè)計,這7種方塊的形狀分別為Z形、S形、線形、T形、方形、L形和反L形、其數(shù)據(jù)結(jié)構(gòu)分別用相對坐標(biāo)表示如下:0,-1,0,0,-1,0,-1,10,-1,0,0,1,

5、0,1,10,-1,0,0,0,1,0,2-1,0,0,0,1,0,0,10,0,1,0,0,1,1,1-1,-1,0,-1,0,0,0,11,-1,0,-1,0,0,0,1 因?yàn)槠聊坏淖笊辖菫樵c(diǎn),向右為x軸增加的方向,向下為y軸增加的方向,將上述坐標(biāo)對號入座即可得到向?qū)?yīng)的方塊形狀。二.方塊形狀Z形方塊Z形方塊對號入座如下圖所示:0,-1,0,0,-1,0,-1,1 Z形方塊坐標(biāo)圖S型方塊S形方塊對號入座如下圖所示:0,-1,0,0,1,0,1,1 S形方塊坐標(biāo)圖 線形方塊 線形方塊對號入座如圖所示:0,-1,0,0,0,1,0,2線形方塊坐標(biāo)圖T型方塊T型方塊對號入座如圖所示:-1,0,

6、0,0,1,0,0,1 T型方塊坐標(biāo)圖方形方方形方塊對號入座如圖所示:0,0,1,0,0,1,1,1方形方塊坐標(biāo)圖L形方塊LL型方塊對號入座如圖所示:-1,-1,0,-1,0,0,0,1L型方塊坐標(biāo)圖反L形方塊反L形方塊對號入座如圖所示:1,-1,0,-1,0,0,0,1 L形方塊坐標(biāo)圖在方塊相對坐標(biāo)基礎(chǔ)上加上x和y的偏移量,就可以在屏幕的不同位置得到相應(yīng)的反面方塊。完成方塊的向左,向右及向下移動。將方塊的相對坐標(biāo)旋轉(zhuǎn)90度得到的新坐標(biāo)就算變形后的坐標(biāo)。順時針操作的公式是:x=-yy=x逆時針旋轉(zhuǎn)操作的公式是:x=yy=x其中,x和y代表旋轉(zhuǎn)前方塊的相對坐標(biāo),x和y代表旋轉(zhuǎn)后方塊的相對坐標(biāo)。

7、唯一例外的是方形方塊,在旋轉(zhuǎn)處理的時候不做處理。七.主要處理流程 游戲的主要流程圖如下: 左鍵 上鍵下鍵當(dāng)前方塊能夠左移向左移動當(dāng)前方塊當(dāng)前方塊能夠右移向右移動當(dāng)前方塊當(dāng)前方塊能夠旋轉(zhuǎn)當(dāng)前方塊能夠下移旋轉(zhuǎn)當(dāng)前方塊向下移動當(dāng)前方塊右鍵否八.游戲設(shè)計源程序/zhangdi#include#include#include#includetetris.h#define APP_NAME TETRIS#define APP_TITLE Tetris Game#define GAMEOVER GAME OVER#define SHAPE_COUNT 7#define BLOCK_COUNT 4#defin

8、e MAX_SPEED 5#define COLUMS 10#define ROWS 20#define RED RGB(255,0,0)#define YELLOW RGB(255,255,0)#define GRAY RGB(128,128,128)#define BLACK RGB(0,0,0)#define WHITE RGB(255,255,255)#define STONE RGB(192,192,192)#define CHARS_IN_LINE 14#define SCORE SCORE %4d/全局變量定義char score_charCHARS_IN_LINE=0;char

9、*press_enter=Press Enter key.;/幫助提示信息char*help= Press space or up key to transform shape., Press left or right key to move shape., Press down key to speed up., Press enter key to pause game., Enjoy it. :-), 0;/枚舉游戲的狀態(tài)enum game_state game_start, game_run, game_pause, game_overstate= game_start;/定義方塊的

10、顏色COLORREF shape_color= RGB(255,0,0), RGB(0,255,0), RGB(0,0,255), RGB(255,255,0), RGB(0,255,255), RGB(255,0,255), RGB(255,255,255);/定義方塊的種類型int shape_coordinateSHAPE_COUNTBLOCK_COUNT2=0,-1,0,0,-1,0,-1,1,0,-1,0,0,1,0,1,1,0,-1,0,0,0,1,0,2,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,-1,-1,0,-1,0,0,0,1,1,-1,0,-1,0

11、,0,0,1;int score=0;/得分shape next=0;/下一個方塊shape current=0;/當(dāng)前方塊int current_coordinate42=0;/當(dāng)前方塊的每一部分坐標(biāo)int tableROWSCOLUMS=0;/游戲桌面int shapex=0;/當(dāng)前方塊的x坐標(biāo)int shapey=0;/當(dāng)前方塊的y坐標(biāo)int speed=0;/方塊下移速度clock_t start=0;/每一幀開始時間clock_t finish=0;/每一幀結(jié)束時間/*windows 繪圖用變量*/HWND gameWND; /*window 窗口句柄*/HBITMAP memBM;

12、 /*內(nèi)存位圖*/HBITMAP memBMOld; /*內(nèi)存原始位圖*/HDC memDC; /*內(nèi)存DC*/RECT clientRC; /*客戶端矩形區(qū)域*/HBRUSH blackBrush; /*黑色畫筆*/HBRUSH stoneBrush; /*深灰色畫筆*/HBRUSH shapeBrushSHAPE_COUNT; /*方塊畫筆,種方塊,每種一個*/HPEN grayPen; /*灰色畫筆*/HFONT bigFont; /*大字體,用來顯示游戲名字和Game Over*/HFONT smallFont; /*小字體用來顯示幫助信息等*/*主要處理函數(shù)*/int maxX()

13、/*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ int i=0; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ int x=current_coordinatei0; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ int m=x; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ for (i=1; iBLOCK_COUNT;i+) /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ x=current_coordinatei0; /*取最大坐標(biāo),函數(shù)名稱:

14、maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ if (mx) /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ m=x; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ return m; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ int minX() /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ int i=0; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ int x=current_coordinatei0; /*取最小坐標(biāo),函數(shù)名稱:m

15、inX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ int m=x; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ for (i=1; ix) /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ m=x; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ return m; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ /*逆時針旋轉(zhuǎn)方塊*/void turn_left() /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時針旋轉(zhuǎn)度*/ int i=0; /*函數(shù)名稱:turn_

16、left ;函數(shù)功能:將當(dāng)前方塊逆時針旋轉(zhuǎn)度*/ int x,y; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時針旋轉(zhuǎn)度*/ for (i=0;i4;i+) /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時針旋轉(zhuǎn)度*/ x=current_coordinatei0; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時針旋轉(zhuǎn)度*/ y=current_coordinatei1; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時針旋轉(zhuǎn)度*/ current_coordinatei0=y; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時

17、針旋轉(zhuǎn)度*/ current_coordinatei1=-x; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時針旋轉(zhuǎn)度*/ /*順時針旋轉(zhuǎn)方塊*/void turn_right() /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/ int i=0; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/ int x,y; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/ for (i=0;i4;i+) /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/ x=current_coordi

18、natei0; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/y=current_coordinatei1; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/current_coordinatei0=-y; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/current_coordinatei1=x; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時針旋轉(zhuǎn)度*/ /*檢查方塊是否越界*/int out_of_table() /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍

19、*/ int i=0; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/ int x,y; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/ for (i=0;i4;i+) /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/ x=shapex+current_coordinatei0; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/y=shapey+current_coordinatei1; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超

20、出桌面范圍*/if (x(COLUMS-1)|y(ROWS-1) /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/ return 1; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/ if (tableyx) /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/ return 1; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/ return 0; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/*旋轉(zhuǎn)方塊*/void tra

21、nsform() /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/ if (current=SquareShape) /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/ return; /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/ turn_right(); /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/ if (out_of_table() /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/ turn_left(); /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/ /*判斷方塊能否向左移動*/int le

22、ftable() /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/ int i=0; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/ int x,y; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/ for (i=0;i4;i+) /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/ x=shapex+current_coordinatei0; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返

23、回,否則返回*/ y=shapey+current_coordinatei1; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/ if (x=0|tableyx-1=1) /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/ return 0; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/ return 1; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動,能移動返回,否則返回*/*判斷方塊能否向右移動*/int rightable() /*函

24、數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動,能移動返回,否則返回*/ int i=0; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動,能移動返回,否則返回*/ int x,y; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動,能移動返回,否則返回*/ for (i=0;i=(COLUMS-1)|tableyx+1=1) /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動,能移動返回,否則返回*/ return 0; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動,能移動返回,否則返回*/

25、return 1; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動,能移動返回,否則返回*/*判斷方塊能否向下移動*/int downable() /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動,能移動返回,否則返回*/ int i=0; /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動,能移動返回,否則返回*/ int x,y; for (i=0;i=(ROWS-1)|tabley+1x=1) /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動,能移動返回,否則返回*/ return 0; /*函數(shù)名稱:downab

26、le;函數(shù)功能:判斷當(dāng)前方塊能否向下移動,能移動返回,否則返回*/ return 1; /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動,能移動返回,否則返回*/ /*向左移動當(dāng)前方塊*/void move_left() /*函數(shù)名稱:move_left;函數(shù)功能:向左移動當(dāng)前方塊*/ if (leftable() /*函數(shù)名稱:move_left;函數(shù)功能:向左移動當(dāng)前方塊*/ shapex-; /*函數(shù)名稱:move_left;函數(shù)功能:向左移動當(dāng)前方塊*/*向右移動當(dāng)前方塊*/void move_right() /*函數(shù)名稱:move_right;函數(shù)功能:向右移動方塊

27、*/ if (rightable() /*函數(shù)名稱:move_right;函數(shù)功能:向右移動方塊*/ shapex+; /*函數(shù)名稱:move_right;函數(shù)功能:向右移動方塊*/ /*向下移動當(dāng)前方塊*/void move_down() /*函數(shù)名稱:move_down;函數(shù)功能:向下移動當(dāng)前方塊*/ if (downable() /*函數(shù)名稱:move_down;函數(shù)功能:向下移動當(dāng)前方塊*/ shapey+; /*函數(shù)名稱:move_down;函數(shù)功能:向下移動當(dāng)前方塊*/ else if (add_to_table() /*函數(shù)名稱:move_down;函數(shù)功能:向下移動當(dāng)前方塊*/

28、 remove_full(); /*函數(shù)名稱:move_down;函數(shù)功能:向下移動當(dāng)前方塊*/next_shape(); /*函數(shù)名稱:move_down;函數(shù)功能:向下移動當(dāng)前方塊*/ else state=game_over; /*函數(shù)名稱:move_down;函數(shù)功能:向下移動當(dāng)前方塊*/ /*將當(dāng)前方塊固定到桌面上*/int add_to_table() /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/ int i=0; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/ int x,y

29、; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/ for (i=0;i4;i+) /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/ x=shapex+current_coordinatei0; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/y=shapey+current_coordinatei1; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/if (y0;i-) /*函數(shù)名稱:remo

30、ve_full;函數(shù)功能:刪除桌面上填滿的行*/ c=0; /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/ for(j=0;j(MAX_SPEED-speed)*100) move_down();start=clock();InvalidateRect(gameWND,NULL,TRUE); /操作當(dāng)前方塊void next_shape() current=next; memcpy(current_coordinate, shape_coordinatenext, sizeof(int)*BLOCK_COUNT*2); shapex=(COLUMS-(maxX(curr

31、ent)-minX(current) /2; shapey=0; next = random(SHAPE_COUNT);/取隨機(jī)數(shù)int random(int seed) if (seed=0) return 0; srand(unsigned)time(NULL); return (rand() % seed);/繪圖void paint() PAINTSTRUCT ps; HDC hdc; draw_table(); hdc=BeginPaint(gameWND,&ps); BitBlt(hdc, clientRC.left, clientRC.top, clientRC.right, c

32、lientRC.bottom, memDC, 0, 0, SRCCOPY); EndPaint(gameWND, &ps);/繪制游戲桌面void draw_table() HBRUSH hBrushOld; HPEN hPenOld; HFONT hFontOld; RECT rc; int x0, y0, w; int x, y, i, j; char* str; w = clientRC.bottom / (ROWS+2);/一個方塊的寬度 x0 = y0 =w; FillRect(memDC, &clientRC,blackBrush);/用黑色矩形填充桌面背景區(qū) /如果游戲是開始或結(jié)

33、束狀態(tài) if(state = game_start | state = game_over) memcpy(&rc, &clientRC, sizeof(RECT);rc.bottom =rc.bottom /2;hFontOld= SelectObject(memDC, bigFont);SetBkColor(memDC,BLACK);/如果游戲是開始狀態(tài),用黃色字顯示游戲開始畫面if(state=game_start) str = APP_TITLE; SetTextColor(memDC,YELLOW);else/如果游戲是結(jié)束狀態(tài),用紅色字顯示GAME OVER str = GAMEO

34、VER; SetTextColor(memDC,RED); DrawText(memDC, str, strlen(str), &rc, DT_SINGLELINE | DT_CENTER | DT_BOTTOM);SelectObject(memDC, hFontOld); hFontOld=SelectObject(memDC, smallFont);rc.top= rc.bottom;rc.bottom =rc.bottom *2;if (state = game_over) SetTextColor(memDC, YELLOW); sprintf(score_char, SCORE,

35、score); DrawText(memDC, score_char, strlen(score_char), &rc, DT_SINGLELINE | DT_CENTER | DT_TOP);SetTextColor(memDC, STONE);DrawText(memDC, press_enter, strlen(press_enter), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER); SelectObject(memDC, hFontOld);return; /畫桌面上殘留的方塊 hBrushOld =SelectObject(memDC,

36、stoneBrush); for (i=0; i ROWS; i+) for (j=0;jCOLUMS;j+) if (tableij=1) x=x0+j*w; y=y0+i*w; Rectangle(memDC,x,y,x+w+1,y+w+1); SelectObject(memDC,hBrushOld); /畫當(dāng)前的方塊 hBrushOld=SelectObject(memDC,shapeBrushcurrent); for(i=0;i4;i+) x=x0+(current_coordinatei0+shapex)*w;y=y0+(current_coordinatei1+shapey)*

37、w;if(xx0 | yy0) continue;Rectangle(memDC,x,y,x+w+1,y+w+1); SelectObject(memDC,hBrushOld); /畫桌上的表格線條 hPenOld=SelectObject(memDC,grayPen); for(i=0;i=ROWS;i+) MoveToEx(memDC,x0,y0+i*w,NULL);LineTo(memDC,x0+COLUMS*w,y0+i*w); for(i=0;i=COLUMS;i+) MoveToEx(memDC,x0+i*w,y0,NULL);LineTo(memDC,x0+i*w,y0+ROWS

38、*w); SelectObject(memDC,hPenOld); /畫玩家得分 x0=x0+COLUMS*w+3*w; y0=y0+w; hFontOld=SelectObject(memDC,smallFont);/選擇字體 SetTextColor(memDC,YELLOW);/設(shè)置字體顏色 sprintf(score_char,SCORE,score); TextOut(memDC,x0,y0,score_char,strlen(score_char);/輸出得分 /畫下一個方塊 y0 +=w; SetTextColor(memDC,STONE); TextOut(memDC,x0,y

39、0,NEXT,4); x0=x0+w; y0+=2*w; hBrushOld=SelectObject(memDC,shapeBrushnext); for(i=0;i4;i+) x=x0+shape_coordinatenexti0*w;y=y0+shape_coordinatenexti1*w;Rectangle(memDC,x,y,x+w+1,y+w+1); SelectObject(memDC,hBrushOld); /打印幫助信息 x0=(COLUMS+2)*w; y0+=4*w; SetTextColor(memDC,GRAY); i=0; while(helpi) TextOut

40、(memDC,x0,y0,helpi,strlen(helpi); y0+=w; i+; SelectObject(memDC,hFontOld);/xueshuang/處理按鍵void key_down(WPARAM wParam) /*如果游戲狀態(tài)不是運(yùn)行狀態(tài),按下回車鍵*/ if(state !=game_run) if(wParam=VK_RETURN) switch(state ) case game_start:/*游戲開始狀態(tài)*/ next_shape(); state=game_run; break;case game_pause:/*游戲暫停狀態(tài)*/ state=game_run; break;case game_over:/*游戲結(jié)束狀態(tài)*/ new_game(); next_shape(); state=game_run; break; else/*如果游戲狀態(tài)是運(yùn)行狀態(tài)*/ switch(wParam) case VK_SPACE: case VK_UP: transform();/*按空格鍵或向上鍵,旋轉(zhuǎn)

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!