2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論