版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計(jì)</b></p><p><b> 俄羅斯方塊改進(jìn)</b></p><p> 2016年4月20日</p><p><b> 俄羅斯方塊改進(jìn)</b></p><p><b> 1. 課程設(shè)計(jì)問題</b><
2、/p><p> 據(jù)百度百科,俄羅斯方塊(Tetris)是一款由俄羅斯人阿列克謝·帕基特諾夫于1984年6月發(fā)明的休閑游戲。游戲的基本規(guī)則是移動(dòng)、旋轉(zhuǎn)和擺放游戲自動(dòng)輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。</p><p> 要求支持鍵盤操作和7種不同類型方塊的旋轉(zhuǎn)變換,并且界面上顯示下一個(gè)方塊的提示以及當(dāng)前的玩家的得分,隨著游戲的進(jìn)行,等級(jí)越高,游戲難度越大,即方塊
3、的下落速度越快,相應(yīng)的等級(jí),等級(jí)越高,消去一行所得到的分?jǐn)?shù)越高,為玩家提供了不同的選擇。</p><p><b> 2. 功能分析</b></p><p> 俄羅斯方塊游戲需要解決的問題包括:</p><p> ?、虐慈我怄I開始游戲,隨機(jī)產(chǎn)生方塊并自動(dòng)下移</p><p> ?、朴肊sc鍵退出游戲。 </p&g
4、t;<p><b> ⑶用 鍵變換方塊</b></p><p> ?、扔谩 ℃I和 鍵左右移動(dòng)方塊</p><p> ?、捎谩 ℃I使方塊加速下移</p><p> ⑹用空格鍵使方塊暫停</p><p> ?、四苷_判斷滿行并消行、計(jì)分、定級(jí)別</p><p> ?、淘O(shè)定游戲
5、方塊為不同形狀重點(diǎn):</p><p> *游戲面包的數(shù)據(jù)結(jié)構(gòu):二維數(shù)組</p><p> *7種形狀方塊的數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體保存每種形狀方塊的坐標(biāo)</p><p> 3. 程序設(shè)計(jì)實(shí)現(xiàn)過程</p><p> 3.1 程序總體設(shè)計(jì)結(jié)構(gòu)</p><p> 首先初始化進(jìn)入圖形模式,進(jìn)入歡迎界面,玩家按任意進(jìn)入主菜單界
6、面,按鍵進(jìn)入游戲界面,鍵然后設(shè)置新的時(shí)鐘中斷。開始游戲后,進(jìn)入該程序最核心的部分——處理和實(shí)現(xiàn)進(jìn)行過程中的各種事件和函數(shù)。在處理中判斷游戲是否結(jié)束,如果沒有結(jié)束,則重新開始游戲,否則結(jié)束游戲。</p><p><b> 詳解如下:</b></p><p> ?。?)游戲方塊預(yù)覽功能。在游戲過程中,當(dāng)在游戲底板中出現(xiàn)一個(gè)游戲方塊時(shí),必須在游戲方塊預(yù)覽區(qū)域中出現(xiàn)下一個(gè)游
7、戲方塊,這樣有利于游戲玩家控制游戲的策略。由于在此游戲中存在19種不同的游戲方塊,所以在游戲方塊預(yù)覽區(qū)域中需要顯示隨機(jī)生成的游戲方塊。</p><p> ?。?)游戲方塊控制功能。通過各種條件的判斷,實(shí)現(xiàn)對(duì)游戲方塊的左移、右移、快速下移、自由下落、旋轉(zhuǎn)功能,以及行滿消除行的功能。</p><p><b> 否</b></p><p><
8、b> 是</b></p><p><b> 游戲執(zhí)行主流程圖</b></p><p> ?。?)游戲顯示更新功能。在判斷鍵值時(shí),有左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、變形旋轉(zhuǎn)VK_UP、退出VK_ESC鍵值的判斷。當(dāng)游戲方塊左右移動(dòng)、下落、旋轉(zhuǎn)時(shí),要清除先前的游戲方塊,用新坐標(biāo)重繪游戲方塊。當(dāng)消除滿行時(shí),要重繪游戲底板的
9、當(dāng)前狀態(tài)。</p><p> ?。?)游戲速度分?jǐn)?shù)更新功能。在游戲玩家進(jìn)行游戲過程中,需要按照一定的游戲規(guī)則給玩家計(jì)算游戲分?jǐn)?shù)。比如,消除一行加10分。當(dāng)游戲分?jǐn)?shù)達(dá)到一定數(shù)量之后,需要給游戲者進(jìn)行等級(jí)的上升,每上升一個(gè)等級(jí),游戲方塊的下落速度將加快,游戲的難度將增加。</p><p> (5)游戲幫助功能。玩家進(jìn)入游戲后,將有對(duì)本游戲如何操作的友情提示。</p><p
10、><b> 主函數(shù):</b></p><p> void main()</p><p><b> {</b></p><p> InitializeGraph();</p><p> SetTimer(newtimer); /*設(shè)置新的時(shí)鐘中斷*/</p><p&
11、gt;<b> while(1)</b></p><p><b> {</b></p><p> StartGame();</p><p> ProcessInGame();</p><p> if(GameOver())</p><p><b> br
12、eak;</b></p><p> bOver = FALSE;</p><p><b> }</b></p><p> KillTimer();</p><p> closegraph();</p><p><b> }</b></p>
13、<p><b> 3.2 界面設(shè)計(jì)</b></p><p><b> 分為左右兩個(gè)部分:</b></p><p><b> *左邊為游戲面板</b></p><p> *右邊有三部分:下一個(gè)形狀提示框、速度框和計(jì)分框</p><p> 3.3 重要數(shù)據(jù)的數(shù)據(jù)
14、結(jié)構(gòu)設(shè)計(jì)</p><p><b> 1)定義方塊形狀:</b></p><p> 定義如下的結(jié)構(gòu)體來表示每一個(gè)形狀:</p><p> struct block{</p><p> int arrXY[8];</p><p> int nColor;</p><p&g
15、t; int nNext;</p><p> }; /*保存某一形狀信息的結(jié)構(gòu)體*/</p><p> Struct SHAPE shapes[MAX_BOX]=</p><p><b> {</b></p><p> 口 口口口 口口 口</p><p> 口
16、 口 口 口口口</p><p> 口口 口 </p><p> {0x88, 0xc0, CYAN, 1},</p><p> {0xe8, 0x0, CYAN, 2},</p><p> {0xc4, 0x40, CYAN, 3},&l
17、t;/p><p> {0x2e, 0x0, CYAN, 0},</p><p> 口 口口 口口口</p><p> 口 口 口 口</p><p> 口口 口口口 口 </p><p> {0x44, 0xc0, MAGENT
18、A, 5},</p><p> {0x8e, 0x0, MAGENTA, 6},</p><p> {0xc8, 0x80, MAGENTA, 7},</p><p> {0xe2, 0x0, MAGENTA, 4},</p><p><b> 口</b></p>&l
19、t;p> 口口 口口</p><p> 口 口口</p><p> {0x8c, 0x40, YELLOW, 9},</p><p> {0x6c, 0x0, YELLOW, 8},</p><p> 口 口口</p><p> 口口
20、 口口</p><p><b> 口</b></p><p> {0x4c, 0x80, BROWN, 11},</p><p> {0xc6, 0x0, BROWN, 10},</p><p> 口 口 口</p><p>
21、; 口口口 口口 口口口 口口</p><p> 口 口 口</p><p> {0x4e, 0x0, WHITE, 13},</p><p> {0x8c, 0x80, WHITE, 14},</p><p> {0xe4, 0x0, WHITE, 15},<
22、;/p><p> {0x4c, 0x40, WHITE, 12},</p><p><b> 口</b></p><p><b> 口</b></p><p> 口 口口口口</p><p><b> 口</b>&
23、lt;/p><p> {0x88, 0x88, RED, 17},</p><p> {0xf0, 0x0, RED, 16},</p><p><b> 口口</b></p><p><b> 口口</b></p><p> {0xcc,
24、0x0, BLUE, 18),</p><p><b> }</b></p><p> 2)定義游戲的主界面:寬10、高20的游戲板</p><p> ?。?) 數(shù)據(jù)結(jié)構(gòu):全局?jǐn)?shù)組Gameboard[12][22],1表示已有的方塊,0表示這個(gè)位置空著。在10*20基礎(chǔ)上各自加2行、2列為了便于判斷形狀在移動(dòng)時(shí)是否到邊、到底。整個(gè)
25、屏幕的坐標(biāo)系原先為640*480。在此游戲中,將16個(gè)像素定義為一個(gè)方格的邊長,所以坐標(biāo)系轉(zhuǎn)變成為了40*30(640/16=40,480/10=30)。</p><p> ?。?)玩家進(jìn)行游戲時(shí),需要對(duì)游戲界面進(jìn)行初始化工作。此代碼被main()函數(shù)調(diào)用。主要進(jìn)行的工作如下:</p><p> ?、?循環(huán)調(diào)用line()函數(shù)繪制當(dāng)前游戲板。</p><p> ?、?/p>
26、 調(diào)用nScore()函數(shù)顯示初始的成績,初始成績?yōu)?。</p><p> ③ 調(diào)用npeed()函數(shù)顯示初始的速度(等級(jí)),初始速度1。</p><p> ****************************************************</p><p> * 注:x,y為左上角坐標(biāo)</p><p> * *
27、 m,n對(duì)應(yīng)于Vertical_boxs,Horizontal_boxs</p><p> * * 分別表示縱橫方向上方塊的個(gè)數(shù)(以方塊為單位)</p><p> ** BOARD_LEFT_X ,BOARD_LEFT_Y </p><p> *****************************************************
28、</p><p><b> 3.4 函數(shù)設(shè)計(jì)</b></p><p> 1、本程序有主函數(shù)和個(gè)函數(shù)組成:本程序總共由24個(gè)函數(shù)組成。</p><p> 2、函數(shù)相互作用關(guān)系見下圖</p><p><b> 否</b></p><p><b> 是</
29、b></p><p><b> 函數(shù)運(yùn)用</b></p><p><b> 4. 運(yùn)行效果</b></p><p><b> 5. 源代碼詳解</b></p><p> #include <stdio.h></p><p>
30、#include <windows.h></p><p> #include <conio.h></p><p> #include <time.h></p><p><b> //游戲窗口</b></p><p> #define FrameX 4 //游戲窗口左上角的X
31、軸坐標(biāo)</p><p> #define FrameY 4 //游戲窗口左上角的Y軸坐標(biāo)</p><p> #define Frame_height 20 //游戲窗口的高度</p><p> #define Frame_width 18 //游戲窗口的寬度</p><p><b> //定義全局變量</b&
32、gt;</p><p> int i,j,temp,temp1,temp2; //temp,temp1,temp2用于記住和轉(zhuǎn)換方塊變量的值</p><p> int a[80][80]={0}; //標(biāo)記游戲屏幕的圖案:2,1,0分別表示該位置為游戲邊框、方塊、無圖案;初始化為無圖案</p><p> int b[4]; //標(biāo)記4個(gè)"
33、口"方塊:1表示有方塊,0表示無方塊</p><p> char shape[10][4]={"□","■","○","●","☆","★","◇","◆","△","▲"}; </p>&
34、lt;p><b> int ss=0;</b></p><p> //聲明俄羅斯方塊的結(jié)構(gòu)體</p><p> struct Tetris</p><p><b> {</b></p><p> int x; //中心方塊的x軸坐標(biāo)</p><p>
35、 int y; //中心方塊的y軸坐標(biāo)</p><p> int flag; //標(biāo)記方塊類型的序號(hào)</p><p> int next; //下一個(gè)俄羅斯方塊類型的序號(hào)</p><p> int speed; //俄羅斯方塊移動(dòng)的速度</p><p> int count; //產(chǎn)生俄羅斯方塊的個(gè)數(shù)&
36、lt;/p><p> int score; //游戲的分?jǐn)?shù)</p><p> int level; //游戲的等級(jí)</p><p><b> };</b></p><p><b> //函數(shù)原型聲明</b></p><p> //光標(biāo)移到指定位置</p
37、><p> void gotoxy(HANDLE hOut, int x, int y);</p><p><b> //制作游戲窗口</b></p><p> void make_frame();</p><p> //隨機(jī)產(chǎn)生方塊類型的序號(hào)</p><p> void get_flag(
38、struct Tetris *);</p><p><b> //制作俄羅斯方塊</b></p><p> void make_tetris(struct Tetris *);</p><p><b> //打印俄羅斯方塊</b></p><p> void print_tetris(HAN
39、DLE hOut,struct Tetris *);</p><p> //清除俄羅斯方塊的痕跡</p><p> void clear_tetris(HANDLE hOut,struct Tetris *);</p><p> //判斷是否能移動(dòng),返回值為1,能移動(dòng),否則,不動(dòng)</p><p> int if_moveable(st
40、ruct Tetris *);</p><p> //判斷是否滿行,并刪除滿行的俄羅斯方塊</p><p> void del_full(HANDLE hOut,struct Tetris *);</p><p><b> //開始游戲</b></p><p> void start_game();</p&
41、gt;<p> void main()</p><p><b> {</b></p><p><b> int t;</b></p><p> for ( t=0; t<10; t++)</p><p><b> {</b></p>
42、<p> printf("%s",shape[t]);</p><p><b> }</b></p><p> printf("\n0 1 2 3 4 5 6 7 8 9\n");</p><p> printf("請(qǐng)輸入形狀編號(hào)");</p><
43、p> scanf("%d",&ss);</p><p><b> //制作游戲窗口</b></p><p> make_frame(); </p><p><b> //開始游戲</b></p><p> start_game();</p&
44、gt;<p><b> }</b></p><p> /******光標(biāo)移到指定位置**************************************************************/</p><p> void gotoxy(HANDLE hOut, int x, int y)</p><p>&
45、lt;b> {</b></p><p> COORD pos;</p><p> pos.X = x; //橫坐標(biāo)</p><p> pos.Y = y; //縱坐標(biāo)</p><p> SetConsoleCursorPosition(hOut, pos);</p><p><b&
46、gt; }</b></p><p> /******制作游戲窗口******************************************************************/</p><p> void make_frame()</p><p><b> {</b></p><p&
47、gt; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //定義顯示器句柄變量</p><p> gotoxy(hOut,FrameX+Frame_width-5,FrameY-2); //打印游戲名稱</p><p> printf("俄羅斯方塊");</p><p> gotoxy(
48、hOut,FrameX+2*Frame_width+3,FrameY+7); //打印選擇菜單</p><p> printf("**********下一個(gè)方塊:");</p><p> gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);</p><p> printf("*******
49、***");</p><p> gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);</p><p> printf("↑鍵:變體");</p><p> gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);</p><p>
50、 printf("空格:暫停游戲");</p><p> gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);</p><p> printf("Esc :退出游戲");</p><p> gotoxy(hOut,FrameX,FrameY); //打印框角并記住該處已
51、有圖案</p><p> printf("╔");</p><p> gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);</p><p> printf("╗");</p><p> gotoxy(hOut,FrameX,FrameY+Frame_height
52、);</p><p> printf("╚");</p><p> gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);</p><p> printf("╝");</p><p> a[FrameX][FrameY+Frame_hei
53、ght]=2; </p><p> a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;</p><p> for(i=2;i<2*Frame_width-2;i+=2)</p><p><b> {</b></p><p> gotoxy(hOut,F
54、rameX+i,FrameY);</p><p> printf("═"); //打印上橫框</p><p><b> }</b></p><p> for(i=2;i<2*Frame_width-2;i+=2)</p><p><b> {</b>
55、</p><p> gotoxy(hOut,FrameX+i,FrameY+Frame_height);</p><p> printf("═"); //打印下橫框</p><p> a[FrameX+i][FrameY+Frame_height]=2; //記住下橫框有圖案</p><p>&
56、lt;b> }</b></p><p> for(i=1;i<Frame_height;i++)</p><p><b> {</b></p><p> gotoxy(hOut,FrameX,FrameY+i); </p><p> printf("║");
57、 //打印左豎框</p><p> a[FrameX][FrameY+i]=2; //記住左豎框有圖案</p><p><b> }</b></p><p> for(i=1;i<Frame_height;i++)</p><p><b> {</b></p&g
58、t;<p> gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i); </p><p> printf("║"); //打印右豎框</p><p> a[FrameX+2*Frame_width-2][FrameY+i]=2; //記住右豎框有圖案</p><p><
59、;b> }</b></p><p><b> }</b></p><p> /******制作俄羅斯方塊********************************************************************/</p><p> void make_tetris(struct Tetri
60、s *tetris)</p><p><b> {</b></p><p> a[tetris->x][tetris->y]=b[0]; //中心方塊位置的圖形狀態(tài):1-有,0-無</p><p> switch(tetris->flag) //共6大類,19種類型</p><p>
61、;<b> {</b></p><p> case 1: //田字方塊</p><p><b> { </b></p><p> a[tetris->x][tetris->y-1]=b[1];</p><p> a[tetris->x+2][tetris
62、->y-1]=b[2];</p><p> a[tetris->x+2][tetris->y]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 2: //直線方塊:----<
63、/p><p><b> { </b></p><p> a[tetris->x-2][tetris->y]=b[1];</p><p> a[tetris->x+2][tetris->y]=b[2];</p><p> a[tetris->x+4][tetris->y]=b[3]
64、;</p><p><b> break;</b></p><p><b> }</b></p><p> case 3: //直線方塊: |</p><p><b> { </b></p><p> a[tetris->
65、;x][tetris->y-1]=b[1];</p><p> a[tetris->x][tetris->y-2]=b[2];</p><p> a[tetris->x][tetris->y+1]=b[3];</p><p><b> break;</b></p><p><b&
66、gt; }</b></p><p> case 4: //T字方塊</p><p><b> { </b></p><p> a[tetris->x-2][tetris->y]=b[1];</p><p> a[tetris->x+2][tetris->y]
67、=b[2];</p><p> a[tetris->x][tetris->y+1]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 5: //T字順時(shí)針轉(zhuǎn)90度方塊</p>
68、<p><b> { </b></p><p> a[tetris->x][tetris->y-1]=b[1];</p><p> a[tetris->x][tetris->y+1]=b[2];</p><p> a[tetris->x-2][tetris->y]=b[3];</p
69、><p><b> break;</b></p><p><b> }</b></p><p> case 6: //T字順時(shí)針轉(zhuǎn)180度方塊</p><p><b> { </b></p><p> a[tetris->x
70、][tetris->y-1]=b[1];</p><p> a[tetris->x-2][tetris->y]=b[2];</p><p> a[tetris->x+2][tetris->y]=b[3];</p><p><b> break;</b></p><p><b>
71、; }</b></p><p> case 7: //T字順時(shí)針轉(zhuǎn)270度方塊</p><p><b> { </b></p><p> a[tetris->x][tetris->y-1]=b[1];</p><p> a[tetris->x][tetris-&g
72、t;y+1]=b[2];</p><p> a[tetris->x+2][tetris->y]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 8: //Z字方塊</p>
73、<p><b> { </b></p><p> a[tetris->x][tetris->y+1]=b[1];</p><p> a[tetris->x-2][tetris->y]=b[2];</p><p> a[tetris->x+2][tetris->y+1]=b[3];</
74、p><p><b> break;</b></p><p><b> }</b></p><p> case 9: //Z字順時(shí)針轉(zhuǎn)90度方塊</p><p><b> { </b></p><p> a[tetris->x
75、][tetris->y-1]=b[1];</p><p> a[tetris->x-2][tetris->y]=b[2];</p><p> a[tetris->x-2][tetris->y+1]=b[3];</p><p><b> break;</b></p><p><b&
76、gt; }</b></p><p> case 10: //Z字順時(shí)針轉(zhuǎn)180度方塊</p><p><b> { </b></p><p> a[tetris->x][tetris->y-1]=b[1];</p><p> a[tetris->x-2][tetri
77、s->y-1]=b[2];</p><p> a[tetris->x+2][tetris->y]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 11: //Z字順時(shí)針轉(zhuǎn)270度方塊
78、</p><p><b> { </b></p><p> a[tetris->x][tetris->y+1]=b[1];</p><p> a[tetris->x+2][tetris->y-1]=b[2];</p><p> a[tetris->x+2][tetris->y
79、]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 12: //7字方塊</p><p><b> { </b></p><p> a[tetris-
80、>x][tetris->y-1]=b[1];</p><p> a[tetris->x][tetris->y+1]=b[2];</p><p> a[tetris->x-2][tetris->y-1]=b[3];</p><p><b> break;</b></p><p>&
81、lt;b> }</b></p><p> case 13: //7字順時(shí)針轉(zhuǎn)90度方塊</p><p><b> { </b></p><p> a[tetris->x-2][tetris->y]=b[1];</p><p> a[tetris->x-2][t
82、etris->y+1]=b[2];</p><p> a[tetris->x+2][tetris->y]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 14: //7字順時(shí)針轉(zhuǎn)18
83、0度方塊</p><p><b> { </b></p><p> a[tetris->x][tetris->y-1]=b[1];</p><p> a[tetris->x][tetris->y+1]=b[2];</p><p> a[tetris->x+2][tetris->
84、;y+1]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 15: //7字順時(shí)針轉(zhuǎn)270度方塊</p><p><b> {</b></p><p>
85、 a[tetris->x-2][tetris->y]=b[1];</p><p> a[tetris->x+2][tetris->y-1]=b[2];</p><p> a[tetris->x+2][tetris->y]=b[3];</p><p><b> break;</b></p>
86、<p><b> }</b></p><p> case 16: //倒7字方塊</p><p><b> { </b></p><p> a[tetris->x][tetris->y+1]=b[1];</p><p> a[tetris->x][
87、tetris->y-1]=b[2];</p><p> a[tetris->x+2][tetris->y-1]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 17: //倒7字順指
88、針轉(zhuǎn)90度方塊</p><p><b> { </b></p><p> a[tetris->x-2][tetris->y]=b[1];</p><p> a[tetris->x-2][tetris->y-1]=b[2];</p><p> a[tetris->x+2][tetris
89、->y]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p> case 18: //倒7字順時(shí)針轉(zhuǎn)180度方塊</p><p><b> { </b></p><p
90、> a[tetris->x][tetris->y-1]=b[1];</p><p> a[tetris->x][tetris->y+1]=b[2];</p><p> a[tetris->x-2][tetris->y+1]=b[3];</p><p><b> break;</b></p&
91、gt;<p><b> }</b></p><p> case 19: //倒7字順時(shí)針轉(zhuǎn)270度方塊</p><p><b> { </b></p><p> a[tetris->x-2][tetris->y]=b[1];</p><p> a[
92、tetris->x+2][tetris->y+1]=b[2];</p><p> a[tetris->x+2][tetris->y]=b[3];</p><p><b> break;</b></p><p><b> }</b></p><p><b>
93、} </b></p><p><b> }</b></p><p> //******判斷是否可動(dòng)*************************************************************************/</p><p> int if_moveable(struct Tetris *
94、tetris)</p><p><b> {</b></p><p> if(a[tetris->x][tetris->y]!=0)//當(dāng)中心方塊位置上有圖案時(shí),返回值為0,即不可移動(dòng)</p><p><b> {</b></p><p><b> return 0;&
95、lt;/b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if( //當(dāng)為田字方塊且除中心方塊位置外,其他"口"字方塊位置上無圖案時(shí),返回值為1,即可
96、移動(dòng)</p><p> ( tetris->flag==1 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||&
97、lt;/p><p> //或?yàn)橹本€方塊且除中心方塊位置外,其他"口"字方塊位置上無圖案時(shí),返回值為1,即可移動(dòng)</p><p> ( tetris->flag==2 && ( a[tetris->x-2][tetris->y]==0 && </p><p> a[tetris->x+
98、2][tetris->y]==0 && a[tetris->x+4][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==3 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x][te
99、tris->y-2]==0 && a[tetris->x][tetris->y+1]==0 ) ) ||</p><p> ( tetris->flag==4 && ( a[tetris->x-2][tetris->y]==0 &&</p><p> a[tetris->x+2][tet
100、ris->y]==0 && a[tetris->x][tetris->y+1]==0 ) ) ||</p><p> ( tetris->flag==5 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x][tetris-&
101、gt;y+1]==0 && a[tetris->x-2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==6 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x-2][tetris-&g
102、t;y]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==7 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x][tetris->y+1
103、]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==8 && ( a[tetris->x][tetris->y+1]==0 &&</p><p> a[tetris->x-2][tetris->y]==
104、0 && a[tetris->x+2][tetris->y+1]==0 ) ) ||</p><p> ( tetris->flag==9 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x-2][tetris->y]==0 &
105、amp;& a[tetris->x-2][tetris->y+1]==0 ) ) ||</p><p> ( tetris->flag==10 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x-2][tetris->y-1]==0 &a
106、mp;& a[tetris->x+2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==11 && ( a[tetris->x][tetris->y+1]==0 &&</p><p> a[tetris->x+2][tetris->y-1]==0 &
107、& a[tetris->x+2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==12 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x][tetris->y+1]==0 &&
108、 a[tetris->x-2][tetris->y-1]==0 ) ) ||</p><p> ( tetris->flag==13 && ( a[tetris->x-2][tetris->y]==0 &&</p><p> a[tetris->x-2][tetris->y+1]==0 &&
109、a[tetris->x+2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==14 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x][tetris->y+1]==0 && a[tet
110、ris->x+2][tetris->y+1]==0 ) ) ||</p><p> ( tetris->flag==15 && ( a[tetris->x-2][tetris->y]==0 &&</p><p> a[tetris->x+2][tetris->y-1]==0 && a[tetr
111、is->x+2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==16 && ( a[tetris->x][tetris->y+1]==0 &&</p><p> a[tetris->x][tetris->y-1]==0 && a[tetris-&g
112、t;x+2][tetris->y-1]==0 ) ) ||</p><p> ( tetris->flag==17 && ( a[tetris->x-2][tetris->y]==0 &&</p><p> a[tetris->x-2][tetris->y-1]==0 && a[tetris->
113、;x+2][tetris->y]==0 ) ) ||</p><p> ( tetris->flag==18 && ( a[tetris->x][tetris->y-1]==0 &&</p><p> a[tetris->x][tetris->y+1]==0 && a[tetris->x-2]
114、[tetris->y+1]==0 ) ) ||</p><p> ( tetris->flag==19 && ( a[tetris->x-2][tetris->y]==0 &&</p><p> a[tetris->x+2][tetris->y+1]==0 && a[tetris->x+2][
115、tetris->y]==0 ) ) )</p><p><b> {</b></p><p><b> return 1;</b></p><p><b> }</b></p><p><b> }</b></p><p&
116、gt;<b> return 0;</b></p><p><b> }</b></p><p> /******隨機(jī)產(chǎn)生俄羅斯方塊類型的序號(hào)**********************************************************/</p><p> void get_flag(stru
117、ct Tetris *tetris)</p><p><b> {</b></p><p> tetris->count++; //記住產(chǎn)生方塊的個(gè)數(shù)</p><p> srand((unsigned)time(NULL)); //初始化隨機(jī)數(shù)</p><p> if(tetris->cou
118、nt==1)</p><p><b> {</b></p><p> tetris->flag = rand()%19+1; //記住第一個(gè)方塊的序號(hào)</p><p><b> }</b></p><p> tetris->next = rand()%19+1; //記住下
119、一個(gè)方塊的序號(hào)</p><p><b> }</b></p><p> /******打印俄羅斯方塊**********************************************************************/</p><p> void print_tetris(HANDLE hOut,struct Te
120、tris *tetris)</p><p><b> {</b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> b[i]=1; //數(shù)組b[4]的每個(gè)元素的值都為1</p><p>&
121、lt;b> }</b></p><p> make_tetris(tetris); //制作俄羅斯方塊</p><p> for( i=tetris->x-2; i<=tetris->x+4; i+=2 )</p><p><b> {</b></p><p> f
122、or(j=tetris->y-2;j<=tetris->y+1;j++)</p><p><b> {</b></p><p> if( a[i][j]==1 && j>FrameY )</p><p><b> {</b></p><p> goto
123、xy(hOut,i,j);</p><p> printf("%s",shape[ss]); //打印邊框內(nèi)的方塊□</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p
124、><p><b> //打印菜單信息</b></p><p> gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+1);</p><p> printf("level : %d",tetris->level);</p><p> gotoxy(hOut,Fr
125、ameX+2*Frame_width+3,FrameY+3);</p><p> printf("score : %d",tetris->score);</p><p> gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+5);</p><p> printf("speed : %dms&q
126、uot;,tetris->speed);</p><p><b> }</b></p><p> /******清除俄羅斯方塊的痕跡****************************************************************/</p><p> void clear_tetris(HANDLE h
127、Out,struct Tetris *tetris)</p><p><b> {</b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> b[i]=0; //數(shù)組b[4]的每個(gè)元素的值都為0</p>
128、;<p><b> }</b></p><p> make_tetris(tetris); //制作俄羅斯方塊</p><p> for( i=tetris->x-2; i<=tetris->x+4; i+=2 )</p><p><b> {</b></p>
129、<p> for(j=tetris->y-2;j<=tetris->y+1;j++)</p><p><b> {</b></p><p> if( a[i][j]==0 && j>FrameY )</p><p><b> {</b></p>&l
130、t;p> gotoxy(hOut,i,j);</p><p> printf(" "); //清除方塊</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p&g
131、t;<p><b> }</b></p><p> /******判斷是否滿行并刪除滿行的俄羅斯方塊****************************************************/</p><p> void del_full(HANDLE hOut,struct Tetris *tetris)</p>&l
132、t;p> { //當(dāng)某行有Frame_width-2個(gè)方塊時(shí),則滿行</p><p> int k,del_count=0; //分別用于記錄某行方塊的個(gè)數(shù)和刪除方塊的行數(shù)的變量</p><p> for(j=FrameY+Frame_height-1;j>=FrameY+1;j--)</p><p><b> {<
133、/b></p><p><b> k=0;</b></p><p> for(i=FrameX+2;i<FrameX+2*Frame_width-2;i+=2)</p><p><b> { </b></p><p> if(a[i][j]==1) //豎坐標(biāo)依次從下往上,橫坐
134、標(biāo)依次由左至右判斷是否滿行</p><p><b> {</b></p><p> k++; //記錄此行方塊的個(gè)數(shù)</p><p> if(k==Frame_width-2)</p><p><b> {</b></p><p> for(k=FrameX+2;
135、k<FrameX+2*Frame_width-2;k+=2)</p><p> { //刪除滿行的方塊</p><p> a[k][j]=0;</p><p> gotoxy(hOut,k,j);</p><p> printf(" ");</p><p><b> S
136、leep(1);</b></p><p><b> }</b></p><p> for(k=j-1;k>FrameY;k--)</p><p> { //如果刪除行以上的位置有方塊,則先清除,再將方塊下移一個(gè)位置</p><p> for(i=FrameX+2;i<FrameX+2*F
137、rame_width-2;i+=2)</p><p><b> {</b></p><p> if(a[i][k]==1)</p><p><b> {</b></p><p> a[i][k]=0;</p><p> gotoxy(hOut,i,k);</p
138、><p> printf(" ");</p><p> a[i][k+1]=1;</p><p> gotoxy(hOut,i,k+1);</p><p> printf("%s",shape[ss]);</p><p><b> }</b><
139、/p><p><b> }</b></p><p><b> }</b></p><p> j++; //方塊下移后,重新判斷刪除行是否滿行</p><p> del_count++; //記錄刪除方塊的行數(shù)</p><p><b> }</b>
140、;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> tetris->score+=100*del_count; //每刪除一行,得100分</p><p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《c++俄羅斯方塊》課程設(shè)計(jì)--俄羅斯方塊
- c課程設(shè)計(jì)--俄羅斯方塊
- 俄羅斯方塊c++課程設(shè)計(jì)報(bào)告
- 俄羅斯方塊課程設(shè)計(jì)報(bào)告
- c_課程設(shè)計(jì)-俄羅斯方塊
- c++俄羅斯方塊課程設(shè)計(jì)
- c#俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)報(bào)告
- c++俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(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)告
- 俄羅斯方塊游戲課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論