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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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>  加深對《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)分別用相對坐標(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)對號(hào)入座即可得到向?qū)?yīng)的方塊形狀。</p><p><b>  二.方塊形狀</b></p><p><b> ?、伲甖形方塊</b></p><p>  Z形方塊對

15、號(hào)入座如下圖所示:</p><p>  {{0,-1},{0,0},{-1,0},{-1,1}}</p><p><b>  Z形方塊坐標(biāo)圖</b></p><p><b> ?、冢甋型方塊</b></p><p>  S形方塊對號(hào)入座如下圖所示:</p><p>  {{0

16、,-1},{0,0},{1,0},{1,1}}</p><p>  S形方塊坐標(biāo)圖 </p><p> ?、郏€形方塊 </p><p>  線形方塊對號(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型方塊對號(hào)入座如圖所示:</p><p>  {{-1,0},{0,0},{1,0},{0,1}}

18、 </p><p><b>  T型方塊坐標(biāo)圖</b></p><p><b>  ⑤.方形方</b></p><p>  方形方塊對號(hào)入座如圖所示:</p><p>  {{0,0},{1,0},{0,1},{1,1

19、}}</p><p><b>  方形方塊坐標(biāo)圖</b></p><p><b>  ⑥.L形方塊</b></p><p>  L.L型方塊對號(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形方塊對號(hào)入座如圖所示:</p><p>  {{1,-1},{0,-1},{0,0},{0,1}}</p><p><b>  L形方塊坐標(biāo)圖</b></p><p

21、>  在方塊相對坐標(biāo)基礎(chǔ)上加上x和y的偏移量,就可以在屏幕的不同位置得到相應(yīng)的反面方塊。完成方塊的向左,向右及向下移動(dòng)。</p><p>  將方塊的相對坐標(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)前方塊的相對坐標(biāo),x和y代表旋轉(zhuǎn)后方塊的相對坐標(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論