版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題 目:俄羅斯方塊設(shè)計(jì)</p><p><b> 設(shè) 計(jì) 者:* *</b></p><p><b> 專業(yè)班級(jí):* *</b></p><p> 學(xué) 號(hào):* *</p>&
2、lt;p><b> 指導(dǎo)教師:* *</b></p><p><b> 所屬系部:* *</b></p><p> * *年* *月* *日</p><p><b> 、</b></p><p><b> 目錄</b></p>
3、<p><b> 目錄2</b></p><p> 一.設(shè)計(jì)的目的和要求3</p><p><b> 二.設(shè)計(jì)內(nèi)容3</b></p><p><b> 三.設(shè)計(jì)任務(wù)3</b></p><p> 四.游戲基本規(guī)則3</p><p
4、><b> 五.總體設(shè)計(jì)4</b></p><p> 六.詳細(xì)設(shè)計(jì)與程序?qū)崿F(xiàn)4</p><p> 七.主要處理流程8</p><p> 八.游戲設(shè)計(jì)源程序10</p><p><b> 九.截圖30</b></p><p><b> 十
5、心得體會(huì)31</b></p><p> 十一 參考文獻(xiàn)31</p><p> 一.設(shè)計(jì)的目的和要求</p><p> 加深對(duì)《C語言》課程所學(xué)知識(shí)的理解,進(jìn)一步鞏固C語言語法規(guī)則。學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)模谜Z言程序,從而具備解決綜合性實(shí)際問題的能力。 </p><p><b> 二
6、.設(shè)計(jì)內(nèi)容</b></p><p> 在熟練掌握C語言的基本知識(shí):數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(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ù),以及文件的讀寫操作等。 </p><p><b&g
7、t; 三.設(shè)計(jì)任務(wù)</b></p><p><b> 1.游戲歡迎界面。</b></p><p> 2.游戲執(zhí)行功能,包括計(jì)算得分。</p><p><b> 3.游戲結(jié)束界面。</b></p><p><b> 四.游戲基本規(guī)則</b></p>
8、;<p> 游戲共由7種不同形狀的方塊組成,游戲開始以后隨機(jī)產(chǎn)生一個(gè)方塊由屏幕的頂端開始向下落下,落到低端則固定到桌面,并開始下一個(gè)方塊。在游戲窗口的左邊作為游戲的桌面,用寬度10和高度20的表格表示。游戲桌面的右邊靠上顯示得分,最下邊顯示游戲幫助。如果固定到游戲桌面的方塊超出了頂端游戲結(jié)束。方塊固定以后如果桌面上已經(jīng)固定了的方塊滿一行,則消除一行并將消除行之上的部分向下移動(dòng),消除一行得1分。基本操作如下: </p
9、><p> 方塊落下的過程中可以用左右方向鍵移動(dòng)方塊的位置。</p><p> 上方向鍵用來旋轉(zhuǎn)方塊,即所謂的變形。</p><p> 下方向鍵用來加速方塊下落。</p><p> 游戲中按下回車鍵暫停游戲。再次按回車鍵繼續(xù)游戲。</p><p><b> 五.總體設(shè)計(jì)</b></p&
10、gt;<p> 游戲以Windows窗口的形式運(yùn)行。窗口的左邊作為游戲的桌面,桌面的大小是10X20個(gè)單位。隨機(jī)出現(xiàn)一個(gè)方塊從游戲桌面的上方開始向下移動(dòng),并隨機(jī)生產(chǎn)一個(gè)向下方塊顯示到桌面的右邊。方塊的顏色分為7種。在顯示下一個(gè)方塊的上面顯示玩家得分,下面顯示游戲幫助。</p><p> 當(dāng)方塊不能向下移動(dòng)的時(shí)候,將方塊固定到桌面上,固定的方法是將方塊的每個(gè)部分所在的坐標(biāo)的桌面數(shù)值設(shè)置為1.固定以
11、后,判斷桌面數(shù)值的每一行,如果一行的數(shù)值全部都是1的話,就將桌面上的這一行數(shù)值刪除,并將這一行上面所有行向下移動(dòng)一行。刪除一行的同時(shí),玩家的得分加1。上述操作完成以后,將下一個(gè)方塊從桌面的頂部開始下落,重新生成下一個(gè)方塊。在固定方塊到桌面的時(shí)候,還要判斷方塊的最頂端部分是否超出桌面范圍,并以此作為游戲結(jié)束的依據(jù)。</p><p> 六.詳細(xì)設(shè)計(jì)與程序?qū)崿F(xiàn)</p><p><b>
12、; 一.方塊設(shè)計(jì)</b></p><p> 游戲的核心和重點(diǎn)在于7種方塊的設(shè)計(jì),這7種方塊的形狀分別為Z形、S形、線形、T形、方形、L形和反L形、其數(shù)據(jù)結(jié)構(gòu)分別用相對(duì)坐標(biāo)表示如下:</p><p> {{0,-1},{0,0},{-1,0},{-1,1}}</p><p> {{0,-1},{0,0},{1,0},{1,1}}</p>
13、<p> {{0,-1},{0,0},{0,1},{0,2}}</p><p> {{-1,0},{0,0},{1,0},{0,1}}</p><p> {{0,0},{1,0},{0,1},{1,1}}</p><p> {{-1,-1},{0,-1},{0,0},{0,1}}</p><p> {{1,-1},{0
14、,-1},{0,0},{0,1}}</p><p> 因?yàn)槠聊坏淖笊辖菫樵c(diǎn),向右為x軸增加的方向,向下為y軸增加的方向,將上述坐標(biāo)對(duì)號(hào)入座即可得到向?qū)?yīng)的方塊形狀。</p><p><b> 二.方塊形狀</b></p><p><b> ?、伲甖形方塊</b></p><p> Z形方塊對(duì)
15、號(hào)入座如下圖所示:</p><p> {{0,-1},{0,0},{-1,0},{-1,1}}</p><p><b> Z形方塊坐標(biāo)圖</b></p><p><b> ②.S型方塊</b></p><p> S形方塊對(duì)號(hào)入座如下圖所示:</p><p> {{0
16、,-1},{0,0},{1,0},{1,1}}</p><p> S形方塊坐標(biāo)圖 </p><p> ?、郏€形方塊 </p><p> 線形方塊對(duì)號(hào)入座如圖所示:</p><p> {{0,-1},{0,0},{0,1},{0,2}}</p>
17、<p><b> 線形方塊坐標(biāo)圖</b></p><p><b> ?、埽甌型方塊</b></p><p> T型方塊對(duì)號(hào)入座如圖所示:</p><p> {{-1,0},{0,0},{1,0},{0,1}}
18、 </p><p><b> T型方塊坐標(biāo)圖</b></p><p><b> ?、荩叫畏?lt;/b></p><p> 方形方塊對(duì)號(hào)入座如圖所示:</p><p> {{0,0},{1,0},{0,1},{1,1
19、}}</p><p><b> 方形方塊坐標(biāo)圖</b></p><p><b> ?、蓿甃形方塊</b></p><p> L.L型方塊對(duì)號(hào)入座如圖所示:</p><p> {{-1,-1},{0,-1},{0,0},{0,1}}</p><p><b>
20、.L型方塊坐標(biāo)圖</b></p><p><b> ?、撸碙形方塊</b></p><p> 反L形方塊對(duì)號(hào)入座如圖所示:</p><p> {{1,-1},{0,-1},{0,0},{0,1}}</p><p><b> L形方塊坐標(biāo)圖</b></p><p
21、> 在方塊相對(duì)坐標(biāo)基礎(chǔ)上加上x和y的偏移量,就可以在屏幕的不同位置得到相應(yīng)的反面方塊。完成方塊的向左,向右及向下移動(dòng)。</p><p> 將方塊的相對(duì)坐標(biāo)旋轉(zhuǎn)90度得到的新坐標(biāo)就算變形后的坐標(biāo)。順時(shí)針操作的公式是:</p><p><b> x’=-y</b></p><p><b> y’=x</b><
22、;/p><p> 逆時(shí)針旋轉(zhuǎn)操作的公式是:</p><p><b> x’=y</b></p><p><b> y’=x</b></p><p> 其中,x和y代表旋轉(zhuǎn)前方塊的相對(duì)坐標(biāo),x和y代表旋轉(zhuǎn)后方塊的相對(duì)坐標(biāo)。</p><p> 唯一例外的是方形方塊,在旋轉(zhuǎn)處
23、理的時(shí)候不做處理。</p><p><b> 七.主要處理流程</b></p><p> 游戲的主要流程圖如下: </p><p><b> 八.游戲設(shè)計(jì)源程序</b></p><p><b> //zhangdi</b>&
24、lt;/p><p> #include<windows.h></p><p> #include<time.h></p><p> #include<stdio.h></p><p> #include"tetris.h"</p><p> #define
25、APP_NAME "TETRIS"</p><p> #define APP_TITLE "Tetris Game"</p><p> #define GAMEOVER "GAME OVER"</p><p> #define SHAPE_COUNT 7</p><p> #
26、define BLOCK_COUNT 4</p><p> #define MAX_SPEED 5</p><p> #define COLUMS 10</p><p> #define ROWS 20</p><p> #define RED RGB(255,0,0)</p><p> #define
27、YELLOW RGB(255,255,0)</p><p> #define GRAY RGB(128,128,128)</p><p> #define BLACK RGB(0,0,0)</p><p> #define WHITE RGB(255,255,255)</p><p> #define STONE RGB(192,19
28、2,192)</p><p> #define CHARS_IN_LINE 14</p><p> #define SCORE "SCORE %4d"</p><p><b> //全局變量定義</b></p><p> char score_char[CHARS_IN_LINE]={0};&
29、lt;/p><p> char*press_enter="Press Enter key...";</p><p><b> //幫助提示信息</b></p><p> char*help[]=</p><p><b> {</b></p><p>
30、 "Press space or up key to transform shape.",</p><p> "Press left or right key to move shape.",</p><p> "Press down key to speed up.",</p><p> "
31、;Press enter key to pause game.",</p><p> "Enjoy it. :-)",</p><p><b> 0</b></p><p><b> };</b></p><p><b> //枚舉游戲的狀態(tài)</
32、b></p><p> enum game_state</p><p><b> {</b></p><p> game_start,</p><p><b> game_run,</b></p><p> game_pause,</p><
33、;p><b> game_over</b></p><p> }state= game_start;</p><p><b> //定義方塊的顏色</b></p><p> COLORREF shape_color[]=</p><p><b> {</b>&l
34、t;/p><p> RGB(255,0,0),</p><p> RGB(0,255,0),</p><p> RGB(0,0,255),</p><p> RGB(255,255,0),</p><p> RGB(0,255,255),</p><p> RGB(255,0,255),
35、</p><p> RGB(255,255,255)</p><p><b> };</b></p><p> //定義方塊的種類型</p><p> int shape_coordinate[SHAPE_COUNT][BLOCK_COUNT][2]=</p><p><b>
36、 {</b></p><p> {{0,-1},{0,0},{-1,0},{-1,1}},</p><p> {{0,-1},{0,0},{1,0},{1,1}},</p><p> {{0,-1},{0,0},{0,1},{0,2}},</p><p> {{-1,0},{0,0},{1,0},{0,1}},</p
37、><p> {{0,0},{1,0},{0,1},{1,1}},</p><p> {{-1,-1},{0,-1},{0,0},{0,1}},</p><p> {{1,-1},{0,-1},{0,0},{0,1}}</p><p><b> };</b></p><p> int scor
38、e=0;//得分</p><p> shape next=0;//下一個(gè)方塊</p><p> shape current=0;//當(dāng)前方塊</p><p> int current_coordinate[4][2]={0};//當(dāng)前方塊的每一部分坐標(biāo)</p><p> int table[ROWS][COLUMS]={0};//游戲
39、桌面</p><p> int shapex=0;//當(dāng)前方塊的x坐標(biāo)</p><p> int shapey=0;//當(dāng)前方塊的y坐標(biāo)</p><p> int speed=0;//方塊下移速度</p><p> clock_t start=0;//每一幀開始時(shí)間</p><p> clock_t fini
40、sh=0;//每一幀結(jié)束時(shí)間</p><p> /*windows 繪圖用變量*/</p><p> HWND gameWND; /*window 窗口句柄*/</p><p> HBITMAP memBM; /*內(nèi)存位圖*/</p>
41、<p> HBITMAP memBMOld; /*內(nèi)存原始位圖*/</p><p> HDC memDC; /*內(nèi)存DC*/</p><p> RECT clientRC; /*客戶端矩形區(qū)域*/<
42、/p><p> HBRUSH blackBrush; /*黑色畫筆*/</p><p> HBRUSH stoneBrush; /*深灰色畫筆*/</p><p> HBRUSH shapeBrush[SHAPE_COUNT]; /*方塊畫筆,種方
43、塊,每種一個(gè)*/</p><p> HPEN grayPen; /*灰色畫筆*/</p><p> HFONT bigFont; /*大字體,用來顯示游戲名字和Game Over*/</p><p> HFONT smallFont;
44、 /*小字體用來顯示幫助信息等*/</p><p> /*主要處理函數(shù)*/</p><p> int maxX() /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p><b> {</b></p>
45、<p> int i=0; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p> int x=current_coordinate[i][0]; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p> int m=x;
46、 /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p> for (i=1; i<BLOCK_COUNT;i++) /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p><b> { </b></p><p> x=curr
47、ent_coordinate[i][0]; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p> if (m<x) /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p><b> {</b></p><p>
48、m=x; /*取最大坐標(biāo),函數(shù)名稱:maxX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/</p><p><b> }</b></p><p><b> }</b></p><p> return m; /*取最大坐標(biāo),函數(shù)名稱:m
49、axX;函數(shù)功能:取得當(dāng)前方塊的最大x坐標(biāo)*/ </p><p><b> }</b></p><p> int minX() /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p><b> {</b></p>&l
50、t;p> int i=0; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p> int x=current_coordinate[i][0]; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p> int m=x;
51、 /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p> for (i=1; i<BLOCK_COUNT;i++) /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p><b> { </b></p><p> x=curren
52、t_coordinate[i][0]; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p> if (m>x) /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p><b> {</b></p><p> m=
53、x; /*取最小坐標(biāo),函數(shù)名稱:minX;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/</p><p><b> }</b></p><p><b> }</b></p><p> return m; /*取最小坐標(biāo),函數(shù)名稱:min
54、X;函數(shù)功能:取得當(dāng)前方塊的最小x坐標(biāo)*/ </p><p><b> }</b></p><p> /*逆時(shí)針旋轉(zhuǎn)方塊*/</p><p> void turn_left() /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)度*/</p><p><
55、;b> { </b></p><p> int i=0; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)度*/</p><p> int x,y; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)度*/</p>
56、<p> for (i=0;i<4;i++) /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)度*/</p><p><b> {</b></p><p> x=current_coordinate[i][0]; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)
57、度*/</p><p> y=current_coordinate[i][1]; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)度*/</p><p> current_coordinate[i][0]=y; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)度*/</p><p> current_co
58、ordinate[i][1]=-x; /*函數(shù)名稱:turn_left ;函數(shù)功能:將當(dāng)前方塊逆時(shí)針旋轉(zhuǎn)度*/</p><p><b> }</b></p><p><b> }</b></p><p> /*順時(shí)針旋轉(zhuǎn)方塊*/</p><p> void turn_right()
59、 /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/ </p><p><b> {</b></p><p> int i=0; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/</p><p> in
60、t x,y; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/</p><p> for (i=0;i<4;i++) /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/</p><p><b> {</b></p>&
61、lt;p> x=current_coordinate[i][0]; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/</p><p> y=current_coordinate[i][1]; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/</p><p> current_coordinate[i][0]=-y;
62、 /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/</p><p> current_coordinate[i][1]=x; /*函數(shù)名稱:turn_right ;函數(shù)功能:將當(dāng)前方塊順時(shí)針旋轉(zhuǎn)度*/</p><p><b> } </b></p><p><b> } </b>&
63、lt;/p><p> /*檢查方塊是否越界*/</p><p> int out_of_table() /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p><b> {</b></p><p> int i=0;
64、 /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p> int x,y; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p> for (i=0
65、;i<4;i++) /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p><b> {</b></p><p> x=shapex+current_coordinate[i][0]; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)
66、前方塊是否超出桌面范圍*/</p><p> y=shapey+current_coordinate[i][1]; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p> if (x<0||x>(COLUMS-1)||y>(ROWS-1)) /*函數(shù)名稱:out_of_table;函數(shù)功
67、能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p><b> { </b></p><p> return 1; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p><b> }</b></p>
68、;<p> if (table[y][x]) /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p><b> {</b></p><p> return 1; /*函數(shù)名稱:out_of_
69、table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌面范圍*/</p><p><b> }</b></p><p> } </p><p> return 0; /*函數(shù)名稱:out_of_table;函數(shù)功能:檢查當(dāng)前方塊是否超出桌
70、面范圍*/</p><p><b> }</b></p><p><b> /*旋轉(zhuǎn)方塊*/</b></p><p> void transform() /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/</p><p><b&g
71、t; {</b></p><p> if (current==SquareShape) /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/</p><p><b> {</b></p><p> return; /*函數(shù)名稱:transfo
72、rm; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/</p><p><b> }</b></p><p> turn_right(); /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/</p><p> if (out_of_table()) /*函數(shù)名稱:tr
73、ansform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/</p><p><b> {</b></p><p> turn_left(); /*函數(shù)名稱:transform; 函數(shù)功能:旋轉(zhuǎn)當(dāng)前方塊*/</p><p><b> }</b></p><p>&l
74、t;b> }</b></p><p> /*判斷方塊能否向左移動(dòng)*/</p><p> int leftable() /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> {</b></
75、p><p> int i=0; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p> int x,y; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/<
76、;/p><p> for (i=0;i<4;i++) /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> {</b></p><p> x=shapex+current_coordinate[i][0]; /*函數(shù)
77、名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p> y=shapey+current_coordinate[i][1]; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p> if (x<=0||table[y][x-1]==1) /*函數(shù)名
78、稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> {</b></p><p> return 0; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b>
79、 }</b></p><p><b> }</b></p><p> return 1; /*函數(shù)名稱:leftable;函數(shù)功能:判斷當(dāng)前方塊能否向左移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> }</b></p>
80、<p> /*判斷方塊能否向右移動(dòng)*/</p><p> int rightable() /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> {</b></p><p> int i=0;
81、 /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p> int x,y; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p> for (i=0
82、;i<4;i++) /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> {</b></p><p> x=shapex+current_coordinate[i][0]; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向
83、右移動(dòng),能移動(dòng)返回,否則返回*/</p><p> y=shapey+current_coordinate[i][1]; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p> if (x>=(COLUMS-1)||table[y][x+1]==1) /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否
84、向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> {</b></p><p> return 0; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> }</b></p>
85、<p><b> } </b></p><p> return 1; /*函數(shù)名稱:rightable;函數(shù)功能:判斷當(dāng)前方塊能否向右移動(dòng),能移動(dòng)返回,否則返回*/</p><p><b> }</b></p><p> /*判斷方塊能
86、否向下移動(dòng)*/</p><p> int downable() /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動(dòng),能移動(dòng)返回,否則返回*/ </p><p><b> {</b></p><p> int i=0;
87、 /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動(dòng),能移動(dòng)返回,否則返回*/ </p><p><b> int x,y;</b></p><p> for (i=0;i<4;i++) /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動(dòng),能移
88、動(dòng)返回,否則返回*/ </p><p><b> {</b></p><p> x=shapex+current_coordinate[i][0]; /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動(dòng),能移動(dòng)返回,否則返回*/ </p&g
89、t;<p> y=shapey+current_coordinate[i][1]; /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動(dòng),能移動(dòng)返回,否則返回*/ </p><p> if (y>=(ROWS-1)||table[y+1][x]==1) /*函數(shù)名稱:downable;函數(shù)
90、功能:判斷當(dāng)前方塊能否向下移動(dòng),能移動(dòng)返回,否則返回*/ </p><p><b> {</b></p><p> return 0; /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動(dòng),能移動(dòng)返回,否則返回*/
91、 </p><p><b> }</b></p><p><b> }</b></p><p> return 1; /*函數(shù)名稱:downable;函數(shù)功能:判斷當(dāng)前方塊能否向下移動(dòng),能移動(dòng)返回,否則返回*
92、/ </p><p> } </p><p> /*向左移動(dòng)當(dāng)前方塊*/</p><p> void move_left() /*函數(shù)名稱:move_left;函數(shù)功能:向左移動(dòng)當(dāng)前方塊*/</p>
93、<p><b> {</b></p><p> if (leftable()) /*函數(shù)名稱:move_left;函數(shù)功能:向左移動(dòng)當(dāng)前方塊*/</p><p><b> {</b></p><p> shapex--; /*函數(shù)名稱:move_lef
94、t;函數(shù)功能:向左移動(dòng)當(dāng)前方塊*/</p><p><b> }</b></p><p><b> }</b></p><p> /*向右移動(dòng)當(dāng)前方塊*/</p><p> void move_right() /*函數(shù)名稱:move_right;函數(shù)功能:向右移動(dòng)方
95、塊*/</p><p><b> {</b></p><p> if (rightable()) /*函數(shù)名稱:move_right;函數(shù)功能:向右移動(dòng)方塊*/</p><p><b> {</b></p><p> shapex++;
96、 /*函數(shù)名稱:move_right;函數(shù)功能:向右移動(dòng)方塊*/</p><p><b> }</b></p><p><b> }</b></p><p> /*向下移動(dòng)當(dāng)前方塊*/</p><p> void move_down() /*函數(shù)名稱:mo
97、ve_down;函數(shù)功能:向下移動(dòng)當(dāng)前方塊*/</p><p><b> {</b></p><p> if (downable()) /*函數(shù)名稱:move_down;函數(shù)功能:向下移動(dòng)當(dāng)前方塊*/</p><p><b> {</b></p><p>
98、shapey++; /*函數(shù)名稱:move_down;函數(shù)功能:向下移動(dòng)當(dāng)前方塊*/</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if
99、(add_to_table()) /*函數(shù)名稱:move_down;函數(shù)功能:向下移動(dòng)當(dāng)前方塊*/</p><p><b> {</b></p><p> remove_full(); /*函數(shù)名稱:move_down;函數(shù)功能:向下移動(dòng)當(dāng)前方塊*/</p><p> next_shape();
100、 /*函數(shù)名稱:move_down;函數(shù)功能:向下移動(dòng)當(dāng)前方塊*/</p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p> state=game_over;
101、 /*函數(shù)名稱:move_down;函數(shù)功能:向下移動(dòng)當(dāng)前方塊*/</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*將當(dāng)前方塊固定到桌面上*/</p>
102、<p> int add_to_table() /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p><b> {</b></p><p> int i=0; /*函數(shù)名稱:add_
103、to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p> int x,y; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p> for (i=0;i<4;i++) /*函數(shù)
104、名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p><b> {</b></p><p> x=shapex+current_coordinate[i][0]; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p>
105、 y=shapey+current_coordinate[i][1]; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p> if (y<0||table[y][x]==1) /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p&g
106、t;<b> {</b></p><p> return 0; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p><b> }</b></p><p> table[y][x]=1;
107、 /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/</p><p><b> }</b></p><p> return 1; /*函數(shù)名稱:add_to_table;函數(shù)功能:將當(dāng)前方塊固定到桌面上,若返回,表示游戲結(jié)束*/&
108、lt;/p><p><b> }</b></p><p> /*刪除填滿的行*/</p><p> void remove_full() /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p>
109、;<b> {</b></p><p> int c=0; /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p> int i,j;
110、 /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p> for (i=ROWS-1;i>0;i--) /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p><b> {</b></
111、p><p> c=0; /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p> for(j=0;j<COLUMS;j++) /*函數(shù)名稱:remove_full;
112、函數(shù)功能:刪除桌面上填滿的行*/</p><p><b> {</b></p><p> c+=table[i][j]; /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p><b> } </b>&
113、lt;/p><p> if (c==COLUMS) /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p><b> {</b></p><p> memmove(table[1],table[0],sizeof(int
114、)*COLUMS*i); /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p> memset(table[0],0,sizeof(int)*COLUMS); /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p> score++;
115、 /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p> speed=(score/100)%MAX_SPEED; /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p><b> i++
116、;</b></p><p><b> }</b></p><p> else if (c==0) /*函數(shù)名稱:remove_full;函數(shù)功能:刪除桌面上填滿的行*/</p><p><b> {</b><
117、/p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //lijin</b&g
118、t;</p><p><b> //創(chuàng)建新游戲</b></p><p> void new_game()</p><p><b> {</b></p><p> memset(table,0,sizeof(int)*COLUMS*ROWS);</p><p> st
119、art=clock();</p><p> next=random(SHAPE_COUNT);</p><p><b> score=0;</b></p><p><b> speed=0;</b></p><p><b> }</b></p><p
120、><b> //運(yùn)行游戲</b></p><p> void run_game()</p><p><b> {</b></p><p> finish=clock();</p><p> if ((finish-start)>(MAX_SPEED-speed)*100)<
121、;/p><p><b> {</b></p><p> move_down();</p><p> start=clock();</p><p> InvalidateRect(gameWND,NULL,TRUE);</p><p><b> }</b></p&g
122、t;<p><b> }</b></p><p><b> //操作當(dāng)前方塊</b></p><p> void next_shape()</p><p><b> {</b></p><p> current=next;</p><
123、p> memcpy(current_coordinate, shape_coordinate[next], sizeof(int)*BLOCK_COUNT*2);</p><p> shapex=(COLUMS-((maxX(current)-minX(current)))) /2;</p><p><b> shapey=0;</b></p>
124、<p> next = random(SHAPE_COUNT);</p><p><b> }</b></p><p><b> //取隨機(jī)數(shù)</b></p><p> int random(int seed)</p><p><b> {</b><
125、;/p><p> if (seed==0)</p><p><b> {</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> srand((unsigned)time(NULL));
126、</p><p> return (rand() % seed);</p><p><b> }</b></p><p><b> //繪圖</b></p><p> void paint()</p><p><b> {</b></p&
127、gt;<p> PAINTSTRUCT ps;</p><p><b> HDC hdc;</b></p><p> draw_table();</p><p> hdc=BeginPaint(gameWND,&ps);</p><p> BitBlt(hdc, clientRC.left
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 俄羅斯方塊課程設(shè)計(jì)報(bào)告
- 《c++俄羅斯方塊》課程設(shè)計(jì)--俄羅斯方塊
- 俄羅斯方塊課程設(shè)計(jì)報(bào)告
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 課程設(shè)計(jì)---俄羅斯方塊
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 課程設(shè)計(jì)--俄羅斯方塊設(shè)計(jì)報(bào)告
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告-俄羅斯方塊
- c課程設(shè)計(jì)--俄羅斯方塊
- 簡(jiǎn)單俄羅斯方塊課程設(shè)計(jì)
- java俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)論文
- arm課程設(shè)計(jì)俄羅斯方塊
- c語言課程設(shè)計(jì)報(bào)告-俄羅斯方塊
評(píng)論
0/150
提交評(píng)論