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

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  第一章 課程設(shè)計目的和要求4</p><p>  1.1 C語言課程設(shè)計的目的4</p><p>  1.2 C語言課程設(shè)計的要求4</p><p>  第二章 課程設(shè)計任務(wù)內(nèi)容5</p><p>  第三章 詳細(xì)設(shè)計說明6

2、</p><p><b>  3.1模塊6</b></p><p>  3.1.1函數(shù)功能模塊圖6</p><p>  3.1.2模塊描述6</p><p><b>  3.2 流程圖7</b></p><p>  3.3系統(tǒng)程序流程圖8</p>&l

3、t;p><b>  3.4限制條件9</b></p><p><b>  3.5測試計劃9</b></p><p>  第四章 軟件使用說明及運行結(jié)果10</p><p>  4.1使用說明10</p><p>  4.2 運行結(jié)果11</p><p>  第

4、五章 課程設(shè)計心得與體會15</p><p>  附錄1: 參考文獻(xiàn)16</p><p>  附錄2: 源程序代碼17</p><p>  第一章 課程設(shè)計目的和要求</p><p>  C語言課程設(shè)計的目的</p><p>  本次課程設(shè)計使得課堂教學(xué)與實驗實踐之間關(guān)系更為密切,讓同學(xué)們認(rèn)識到必須重視實踐環(huán)節(jié),

5、多讀程序,多編寫程序,多上機(jī)實踐。進(jìn)一步培養(yǎng)結(jié)構(gòu)化程序設(shè)計的思想,加深對高級語言要素和控制結(jié)構(gòu)的理解,針對C語言中的重點和難點內(nèi)容進(jìn)行訓(xùn)練,獨立完成有一定工作量的程序設(shè)計任務(wù),同時強(qiáng)調(diào)好的程序風(fēng)格。</p><p>  本次課程設(shè)計著眼于知識的運用,把平常學(xué)的知識運用到課程時間中來,考察我們知識運用能力,對我們所學(xué)的理論知識進(jìn)一步深化。</p><p>  C語言課程設(shè)計的要求</p

6、><p>  1.分析課程設(shè)計題目的要求。</p><p>  2.對系統(tǒng)功能模塊進(jìn)行分析,寫出詳細(xì)設(shè)計說明文檔。</p><p>  3.編寫程序代碼,代碼量要求不少于300行。調(diào)試程序使其能正確運行。</p><p>  4.設(shè)計完成的軟件要便于操作和使用。</p><p>  5.設(shè)計完成后提交課程設(shè)計報告

7、。</p><p>  第二章 課程設(shè)計任務(wù)內(nèi)容</p><p><b>  題目:</b></p><p><b>  俄羅斯方塊</b></p><p><b>  需求分析:</b></p><p>  制作一個俄羅斯方塊的小游戲,用戶能夠通過上下

8、左右鍵來控制方塊,滿行消去。</p><p><b>  備注:</b></p><p>  基于windows環(huán)境下SDK編程,簡易的圖形界面。程序不對游戲分?jǐn)?shù)進(jìn)行統(tǒng)計。</p><p>  第三章 詳細(xì)設(shè)計說明</p><p><b>  3.1模塊</b></p><p&g

9、t;  3.1.1函數(shù)功能模塊圖</p><p>  圖3-1 函數(shù)功能模塊圖</p><p><b>  3.1.2模塊描述</b></p><p><b>  1.主函數(shù)</b></p><p>  主函數(shù)為一有返回值型的整型函數(shù),主要功能為執(zhí)行游戲主線及定義邊界。</p><

10、;p><b>  2. 游戲執(zhí)行函數(shù)</b></p><p>  此函數(shù)為一無返回值型的函數(shù),其功能為控制整個游戲的循環(huán)以及對各子函數(shù)的調(diào)用。</p><p><b>  3. 輸出函數(shù)</b></p><p>  此函數(shù)的功能為刷新并輸出游戲界面,包括游戲操作按鍵設(shè)置及游戲畫面。</p><p&

11、gt;<b>  3.2 流程圖</b></p><p>  圖3-2 函數(shù)流程圖</p><p>  3.3系統(tǒng)程序流程圖</p><p>  圖3-3系統(tǒng)程序流程圖</p><p><b>  3.4限制條件</b></p><p>  在玩游戲時,必須按規(guī)定的五個鍵才能

12、控制挖金者,任何別的按鍵均無法控制挖金者的運動。</p><p><b>  3.5測試計劃</b></p><p>  該程序可以讓操作者看到自己所得的分?jǐn)?shù),當(dāng)格子超出范圍時游戲結(jié)束,當(dāng)分?jǐn)?shù)達(dá)到一定時游戲可以進(jìn)入下一關(guān)。。</p><p>  第四章 軟件使用說明及運行結(jié)果</p><p><b>  4.1

13、使用說明</b></p><p>  該程序可以實現(xiàn)對挖金子游戲的挖金、闖關(guān)和結(jié)束功能,安裝VisualC++6.0中文版后,在工具欄“文件”中單擊“新建”選項,單擊“文件”菜單,選擇“C++ Source file”輸入文件名“單項選擇題標(biāo)準(zhǔn)化考試系統(tǒng)”。開始輸入程序,程序輸入完成,單擊“組建”工具欄,選擇“編譯[簡化版挖金子游戲.cpp1]”,待程序無誤后,開始執(zhí)行程序。</p>&

14、lt;p>  界面顯示后,按要求首先按任意鍵開始游戲,進(jìn)入游戲界面后用五個鍵控制操作者進(jìn)行上下左右移動挖金子。</p><p><b>  4.2 運行結(jié)果</b></p><p>  圖4-2-1開始界面</p><p>  圖4-2-2游戲進(jìn)行界面一</p><p>  圖4-2-3游戲進(jìn)行界面二</p&

15、gt;<p>  圖4-2-4游戲結(jié)束界面</p><p>  第五章 課程設(shè)計心得與體會</p><p>  經(jīng)過兩個星期的上機(jī)實踐學(xué)習(xí),使我對C語言有了更進(jìn)一步的認(rèn)識和了解,要想學(xué)好它要重在實踐,要通過不斷的上機(jī)操作才能更好地學(xué)習(xí)它,通過實踐,我也發(fā)現(xiàn)我的好多不足之處,首先是自己編程粗心大意,經(jīng)常出錯,通過學(xué)習(xí)也有所改進(jìn);再有對C語言的一些標(biāo)準(zhǔn)函數(shù)不太了解,還有對函數(shù)調(diào)用

16、的正確使用不夠熟悉,以及對C語言中經(jīng)常出現(xiàn)的錯誤也不了解,通過實踐,使我在這幾個方面的認(rèn)識有所提高。這次的課程設(shè)讓我認(rèn)識到很多C++的內(nèi)在要素:</p><p>  程序設(shè)計語言是程序設(shè)計的工具。這是我通過兩周課程設(shè)計深深體會的一點,并且發(fā)現(xiàn)如果想有效的進(jìn)行程序設(shè)計,正確地應(yīng)用程序設(shè)計語言表達(dá)算法,必須準(zhǔn)確的運用程序設(shè)計語言,掌握其語法知識。</p><p>  學(xué)習(xí)程序設(shè)計必須重視時間環(huán)

17、節(jié),多讀程序,多編寫程序,多上機(jī)實踐。這次的課程設(shè)計就使得課堂教學(xué)、式樣和實踐之間的關(guān)系更為緊密。對我的學(xué)習(xí)有著很深遠(yuǎn)的影響。</p><p>  我發(fā)現(xiàn)作為一個程序設(shè)計人員,需要掌握面向過程的程序設(shè)計,也要掌握面向?qū)ο蟮某绦蛟O(shè)計。從前,人們通過C語言學(xué)習(xí)面向過程的程序設(shè)計,再通過C++學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計。其實C++并不是純粹的面向?qū)ο蟮恼Z言,它是一種混合語言。學(xué)習(xí)C++既可以編寫面向過程的程序,也可以編寫面

18、向?qū)ο蟮某绦颉_@一點是我通過可課程設(shè)計所的實踐發(fā)現(xiàn)的。</p><p>  4. 深切的感受到了C++語法的復(fù)雜,內(nèi)容的繁多。發(fā)現(xiàn)如果對它缺乏系統(tǒng)的了解,將難以真正的運用,編出來的程序錯誤百出,編譯出錯,事倍功半。</p><p>  這次的C++課程設(shè)計很快就要結(jié)束了,想說的是,這兩周實踐所學(xué)到的東西比我一個學(xué)期在教室學(xué)到的東西要多得多。設(shè)計中遇到很多難題,都是費了很大勁才解決得,但是所

19、有的努力都沒有白費,我的課程設(shè)計終于“竣工”了,而且更是從中感受到了一些書本上和課堂上所不能感受到的。</p><p>  通過實踐的學(xué)習(xí),我認(rèn)識到學(xué)好計算機(jī)要重視實踐操作,不僅僅是學(xué)習(xí)C++語言,還是其它的語言,以及其它的計算機(jī)方面的知識都要重在實踐,所以后在學(xué)習(xí)過程中,我會更加注視實踐操作,使自己更好地學(xué)好計算機(jī)。</p><p><b>  附錄1: 參考文獻(xiàn)</b&

20、gt;</p><p>  [1]、譚浩強(qiáng)編著:C++程序設(shè)計,北京:清華大學(xué)出版社,2004</p><p>  [2]、(美)戴特爾(Deitel,H.M.)等編著,張引等譯:C++大學(xué)基礎(chǔ)教程(第五版),北京:電子工業(yè)出版社,2006.6</p><p>  [3]、夏云慶編著:Visual C++ 6.0數(shù)據(jù)庫高級編程,北京:希望電子出版社 2002<

21、/p><p>  [4]、伍俊良編著:Visual C++6.0課程設(shè)計與系統(tǒng)開發(fā)案例,北京:清華大學(xué)出版社,2002.11</p><p>  附錄2: 源程序代碼</p><p>  #include "stdafx.h"//沒有函數(shù)庫,只是定義了一些環(huán)境參數(shù),使得編譯出來的程序能在32位的操作系統(tǒng)環(huán)境下運行。 </p><p

22、>  #include <windows.h></p><p>  #include <time.h></p><p>  #include <stdlib.h></p><p>  #define CELL 15 // 方格的邊長(pix) </p><p>  #

23、define W 22 // 游戲區(qū)寬(22個方格邊長)</p><p>  #define H 30 // 游戲區(qū)高(30個方格邊長)</p><p>  #define MS_NEWBLOCK WM_USER+1 // 消息ID,產(chǎn)生新的方塊</p><p>  #define

24、MS_DRAW WM_USER+2 </p><p>  LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM);//窗口過程處理</p><p>  int WINAPI WinMain ( HINSTANCE hInstance, //當(dāng)前實例句柄</p><p>  HINSTA

25、NCE hPrevInstance, //前一實例句柄</p><p>  PSTR szCmdLine, //指向程序命令行參數(shù)的指針</p><p>  int iCmdShow) //應(yīng)用程序開始執(zhí)行窗口時顯示方式用int類型標(biāo)志</p><p><b>  {</b></p

26、><p>  static char AppName[]="ToyBrick";//定義一個靜態(tài)字符數(shù)組保存字符串"ToyBrick"(應(yīng)用程序名)</p><p>  HWND hwnd; //定義一個窗口句柄</p><p>  MSG msg;

27、//定義一消息結(jié)構(gòu)體變量</p><p>  WNDCLASSEX wndclass; //定義一窗口類結(jié)構(gòu)變量,包含窗口類全部信息</p><p>  int iScreenWide; //定義屏幕顯示寬度</p><p>  wndclass.cbSize = sizeof(wndclass);

28、//窗口類對象大小</p><p>  wndclass.style = CS_HREDRAW|CS_VREDRAW;//窗口類對象風(fēng)格</p><p>  wndclass.lpfnWndProc = WndProc;//窗口處理函數(shù)為WndProc</p><p>  wndclass.cbClsExtra = 0; //窗口

29、類無擴(kuò)展</p><p>  wndclass.cbWndExtra = 0;//窗口類實例沒有擴(kuò)展</p><p>  wndclass.hInstance = hInstance;//當(dāng)前實例句柄</p><p>  wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);//窗口

30、最小化圖標(biāo)為默認(rèn)圖標(biāo)</p><p>  wndclass.hCursor = LoadCursor (NULL,IDC_ARROW);//窗口當(dāng)前光標(biāo)為箭頭光標(biāo)</p><p>  wndclass.hbrBackground = (HBRUSH)GetStockObject (BLACK_BRUSH);//獲得當(dāng)前背景設(shè)置為黑色</p><p&g

31、t;  wndclass.lpszMenuName = NULL;//窗體菜單名為空</p><p>  wndclass.lpszClassName = AppName;//應(yīng)用程序名</p><p>  wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);//為應(yīng)用程序加載圖標(biāo)</p><

32、p>  if(!RegisterClassEx (&wndclass)) return FALSE; //注冊一個窗口類</p><p>  // 獲取顯示器分辨率的X值iScreenWide,將程序窗口置于屏幕中央</p><p>  iScreenWide=GetSystemMetrics (SM_CXFULLSCREEN);</p><p>&l

33、t;b>  //創(chuàng)建窗口</b></p><p>  hwnd =CreateWindow (AppName, </p><p><b>  "俄羅斯方塊",</b></p><p>  WS_MINIMIZEBOX|WS_SYSMENU ,</p><p>  iScreenW

34、ide/2-W*CELL/2, CELL,</p><p>  (W+1)*CELL-8, H*CELL,</p><p>  NULL, NULL,</p><p>  hInstance,</p><p><b>  NULL );</b></p><p>  if(!hwnd) return

35、 FALSE; //沒有獲得窗口句柄,返回假</p><p>  ShowWindow (hwnd,iCmdShow); //顯示窗口</p><p>  UpdateWindow (hwnd); //更新窗口 </p><p>  MessageBox(hwnd,"開始游戲","開始",MB_OK);//顯示M

36、essage</p><p>  SendMessage(hwnd,MS_NEWBLOCK,0,0);//向當(dāng)前窗口發(fā)送消息</p><p>  SetTimer (hwnd, 1, 550,NULL);//設(shè)置下落時間</p><p>  while (GetMessage (&msg, NULL, 0, 0))//進(jìn)入消息循環(huán)</p>&l

37、t;p><b>  {</b></p><p>  TranslateMessage (&msg); </p><p>  DispatchMessage (&msg); </p><p><b>  }</b></p><p>  return msg.wParam;<

38、;/p><p><b>  }</b></p><p>  // 函數(shù)DrawRact: 畫正方形</p><p>  // 參數(shù): 設(shè)備環(huán)境句柄和正方形的四角坐標(biāo)</p><p>  void DrawRect (HDC hdc, int l, int t, int r, int b)</p><p&g

39、t;<b>  {</b></p><p>  MoveToEx (hdc, l, t, NULL);</p><p>  LineTo (hdc, r, t);</p><p>  LineTo (hdc, r, b);</p><p>  LineTo (hdc, l, b);</p><p>

40、;  LineTo (hdc, l,t);</p><p><b>  }</b></p><p>  // 函數(shù)DrawCell: 畫方格</p><p>  // 參數(shù): 設(shè)備環(huán)境句柄和方格的四角坐標(biāo)</p><p>  // 每個方格由內(nèi)外兩個正方形(DrawCell)畫成,使其有立體感</p>&l

41、t;p>  void DrawCell (HDC hdc, int l, int t, int r, int b)</p><p><b>  {</b></p><p>  DrawRect (hdc,l+1, t+1, r-1, b-1);</p><p>  DrawRect (hdc,l+3, t+3, r-3, b-3);<

42、;/p><p><b>  }</b></p><p>  // 函數(shù)DrawBlock: 畫方塊</p><p>  // 參數(shù): 設(shè)備環(huán)境句柄和方塊中四個方格在游戲區(qū)域中的位置</p><p>  // 每個方塊由四個方格組成7種不同的形狀</p><p>  void DrawBlock (HD

43、C hdc, int block[4][2])</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  HPEN hpen;</p><p>  hpen =CreatePen (PS_SOLID,1,RGB(255,255,255));<

44、/p><p>  SelectObject (hdc,hpen);</p><p>  for(i=0; i<4; i++)</p><p>  DrawCell (hdc, (block[i][0]-1)*CELL, (block[i][1]-1)*CELL, //....</p><p>  block[i][0]*CELL, bloc

45、k[i][1]*CELL);</p><p>  DeleteObject (hpen);</p><p><b>  }</b></p><p>  // 函數(shù)Cover: 清除原來位置的方塊</p><p>  // 參數(shù): 設(shè)備環(huán)境句柄和待清除的方塊</p><p>  // 清除方塊即在該

46、方塊的每個方塊處畫一個正方形的黑塊</p><p>  void Cover (HDC hdc, int org[4][2])</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  SelectObject (hdc, (HBRUSH)GetS

47、tockObject (BLACK_BRUSH));</p><p>  for(i=0; i<4; i++)</p><p>  Rectangle ( hdc, (org[i][0]-1)*CELL, (org[i][1]-1)*CELL, //.....</p><p>  org[i][0]*CELL, org[i][1]*CELL);</p&g

48、t;<p><b>  }</b></p><p>  // 窗口過程函數(shù)WndProc</p><p>  LRESULT CALLBACK WndProc ( HWND hwnd, </p><p>  UINT iMsg, </p><p>  WPARAM wPar

49、am, </p><p>  LPARAM lParam )</p><p><b>  {</b></p><p>  int i,j,k,lines,r;</p><p>  static int top, sel, flag;</p><p>  stati

50、c int cells[W+2][H]; // 控制游戲的方格矩陣</p><p>  static int org[4][2], block[4][2]; // 方塊</p><p>  HDC hdc;</p><p>  HPEN hpen;</p><p&

51、gt;  PAINTSTRUCT ps;</p><p>  switch (iMsg)</p><p><b>  {</b></p><p>  case WM_CREATE:</p><p><b>  top=H-1;</b></p><p>  // 將第一列和最后

52、一列方格置1,控制方塊不超出游戲區(qū)域</p><p>  for(i=0; i<H; i++)</p><p>  { cells[0][i]=1; cells[W+1][i]=1; }</p><p>  // 將最底下一行方格置1,控制方塊不超出游戲區(qū)域</p><p>  for(i=0; i<W+2; i++)

53、 cells[i][H-1]=1;</p><p>  // 其他方格置0,游戲方塊只能在這里移動</p><p>  for(i=1; i<=W; i++)</p><p>  for(j=0; j<H-1; j++)</p><p>  cells[i][j]=0;</p><p><b&g

54、t;  return 0;</b></p><p>  case MS_NEWBLOCK:</p><p>  flag=0; // flag表示方塊旋轉(zhuǎn)了幾次</p><p>  for(i=top; i<H-1; i++)</p><p><b>  {</b></p>

55、<p><b>  lines =0;</b></p><p>  // 循環(huán)語句檢查是否有某一行全部被方格都填滿</p><p>  for(j=1; j<=W+1; j++)</p><p>  if(! cells[j][i]) </p><p>  { lines=1; break;

56、 }</p><p>  // 若該行被填滿,則將上一行的填充狀態(tài)復(fù)制到該行,依此類推</p><p>  // 即從該行開始,所有的方格都下移一行</p><p>  if(!lines)</p><p>  { for(j=1;j<W+1; j++)</p><p>  for(k=i; k>

57、;=top; k--)</p><p>  cells[j][k]=cells[j][k-1];</p><p><b>  top++;</b></p><p>  InvalidateRect (hwnd, NULL, TRUE);</p><p><b>  }</b></p>

58、<p><b>  }</b></p><p>  // 產(chǎn)生隨機(jī)數(shù)0~7,分別代表方塊的7種形狀</p><p>  srand( (unsigned)time( NULL ) );</p><p>  sel =rand()%7;</p><p>  //方塊形狀初始化,方塊的形狀由其每個方格的位置決定&l

59、t;/p><p>  // 游戲區(qū)寬W=22,block[?][0]=9/10/11/12,block[?][1]=0/1/2</p><p>  // 這樣方塊初始位置在游戲區(qū)的最頂部的中央 </p><p>  switch(sel)</p><p><b>  {</b></p><p><

60、;b>  case 0:</b></p><p><b>  // ▓▓</b></p><p><b>  // ▓▓</b></p><p>  org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;</p><p>  

61、org[1][0]=block[1][0] =11; org[1][1]=block[1][1] =0;</p><p>  org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =1;</p><p>  org[3][0]=block[3][0] =11; org[3][1]=block[3][1] =1;</p>

62、;<p><b>  break;</b></p><p><b>  case 1:</b></p><p><b>  // ▓▓▓▓</b></p><p>  org[0][0]=block[0][0] =9; org[0][1]=block[0][1] =0;</p

63、><p>  org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =0;</p><p>  org[2][0]=block[2][0] =11; org[2][1]=block[2][1] =0;</p><p>  org[3][0]=block[3][0] =12; org[3][1]=block[3

64、][1] =0;</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p><b>  //▓</b></p><p><b>  //▓▓</b></p><p><

65、;b>  // ▓</b></p><p>  org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;</p><p>  org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =1;</p><p>  org[2][0]=block[2]

66、[0] =11; org[2][1]=block[2][1] =1;</p><p>  org[3][0]=block[3][0] =11; org[3][1]=block[3][1] =2;</p><p><b>  break;</b></p><p><b>  case 3:</b></p&g

67、t;<p><b>  // ▓</b></p><p><b>  //▓▓</b></p><p><b>  //▓</b></p><p>  org[0][0]=block[0][0] =11; org[0][1]=block[0][1] =0;</p>

68、<p>  org[1][0]=block[1][0] =11; org[1][1]=block[1][1] =1;</p><p>  org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =1;</p><p>  org[3][0]=block[3][0] =10; org[3][1]=block[3][1] =

69、2;</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p><b>  //▓</b></p><p><b>  //▓</b></p><p><b> 

70、 //▓▓</b></p><p>  org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;</p><p>  org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =1;</p><p>  org[2][0]=block[2][0] =10;

71、 org[2][1]=block[2][1] =2;</p><p>  org[3][0]=block[3][0] =11; org[3][1]=block[3][1] =2;</p><p><b>  break;</b></p><p><b>  case 5:</b></p><

72、p><b>  // ▓</b></p><p><b>  // ▓</b></p><p><b>  //▓▓</b></p><p>  org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;</p><p&

73、gt;  org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =1;</p><p>  org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =2;</p><p>  org[3][0]=block[3][0] =9; org[3][1]=block[3][1] =2;</

74、p><p><b>  break;</b></p><p><b>  case 6:</b></p><p><b>  // ▓</b></p><p><b>  //▓▓▓</b></p><p>  org[0][0]=b

75、lock[0][0] =10; org[0][1]=block[0][1] =0;</p><p>  org[1][0]=block[1][0] =9; org[1][1]=block[1][1] =1;</p><p>  org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =1;</p><p>

76、  org[3][0]=block[3][0] =11; org[3][1]=block[3][1] =1;</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  SendMessage (hwnd, MS_NEWBLOCK, 0, 0);<

77、/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p>  case WM_TIMER:</p><p>  // 每個時間節(jié)拍方塊自動下移一行</

78、p><p>  for(i=0; i<4; i++)</p><p>  block[i][1]++;</p><p>  // 檢查方塊下移是否被檔住,即判斷下移后新位置是否有方格</p><p>  for(i=0; i<4; i++)</p><p>  if(cells[ block[i][0] ][

79、block[i][1] ])</p><p><b>  { </b></p><p>  for(i=0; i<4; i++) </p><p>  cells[ org[i][0] ][ org[i][1] ]=1; </p><p>  if(top>org[0][1]-2) top=org[0][1]

80、-2;</p><p>  if (top<1)</p><p><b>  {</b></p><p>  KillTimer (hwnd, 1);</p><p>  MessageBox (hwnd, "游戲結(jié)束,即將退出 !", "退出", MB_OK);</p

81、><p>  PostQuitMessage (0);</p><p><b>  }</b></p><p>  SendMessage (hwnd, MS_NEWBLOCK, 0, 0);</p><p><b>  return 0;</b></p><p><b&g

82、t;  }</b></p><p>  SendMessage (hwnd, MS_DRAW, 0, 0);</p><p><b>  return 0;</b></p><p><b>  // 響應(yīng)鍵盤控制</b></p><p>  case WM_KEYDOWN:</p&

83、gt;<p><b>  r=0;</b></p><p>  switch((int)wParam)</p><p><b>  {</b></p><p>  case VK_LEFT:</p><p>  for(i=0; i<4; i++)</p><

84、p>  block[i][0]--;</p><p><b>  break;</b></p><p>  case VK_RIGHT:</p><p>  for(i=0; i<4; i++)</p><p>  block[i][0]++;</p><p><b>  b

85、reak;</b></p><p>  case VK_DOWN:</p><p>  for(i=0; i<4; i++)</p><p>  block[i][1]++;</p><p><b>  break;</b></p><p>  // 按[向上鍵],方塊順時針旋轉(zhuǎn)

86、</p><p>  //方塊的旋轉(zhuǎn)不是真正的旋轉(zhuǎn),而是根據(jù)不同的方塊形狀和</p><p>  // 該方塊旋轉(zhuǎn)過的次數(shù)來移動其中的一個或幾個方格,從而</p><p>  // 達(dá)到旋轉(zhuǎn)的效果 這樣做很復(fù)雜,算法不夠理想,但是能夠保持方</p><p>  // 塊旋轉(zhuǎn)時的重心比較穩(wěn)定。</p><p>  cas

87、e VK_UP:</p><p><b>  r=1;</b></p><p>  flag++; //方塊旋轉(zhuǎn)加1</p><p>  switch(sel) // sel代表當(dāng)前方塊的形狀</p><p><b>  {</b></p><p>  case 0:

88、 break;</p><p><b>  case 1: </b></p><p>  flag =flag%2;</p><p>  for(i=0; i<4; i++)</p><p><b>  {</b></p><p>  block[i][(flag+1)

89、%2] =org[2][(flag+1)%2];</p><p>  block[i][flag] =org[2][flag]-2+i;</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 2:</b>

90、</p><p>  flag =flag%2;</p><p><b>  if(flag)</b></p><p>  { block[0][1] +=2; block[3][0] -=2; }</p><p><b>  else</b></p><p&g

91、t;  { block[0][1] -=2; block[3][0] +=2; }</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  flag =flag%2;</p><p><b>  if(fl

92、ag)</b></p><p>  { block[0][1] +=2; block[3][0] +=2; }</p><p><b>  else</b></p><p>  { block[0][1] -=2; block[3][0] -=2; }</p><p>&l

93、t;b>  break;</b></p><p><b>  case 4:</b></p><p>  flag=flag%4;</p><p>  switch(flag)</p><p><b>  {</b></p><p><b>  c

94、ase 0:</b></p><p>  block[2][0] +=2; block[3][0] +=2;</p><p>  block[2][1] +=1; block[3][1] +=1;</p><p><b>  break;</b></p><p><b>  case 1

95、:</b></p><p>  block[2][0] +=1; block[3][0] +=1;</p><p>  block[2][1] -=2; block[3][1] -=2;</p><p><b>  break;</b></p><p><b>  case 2:<

96、/b></p><p>  block[2][0] -=2; block[3][0] -=2;</p><p>  block[2][1] -=1; block[3][1] -=1;</p><p><b>  break;</b></p><p><b>  case 3:</b>

97、;</p><p>  block[2][0] -=1; block[3][0] -=1;</p><p>  block[2][1] +=2; block[3][1] +=2;</p><p><b>  break;</b></p><p><b>  }</b></p>

98、<p><b>  break;</b></p><p><b>  case 5:</b></p><p>  flag=flag%4;</p><p>  switch(flag)</p><p><b>  {</b></p><p>

99、;<b>  case 0:</b></p><p>  block[2][0] +=1; block[3][0] +=1;</p><p>  block[2][1] +=2; block[3][1] +=2;</p><p><b>  break;</b></p><p><

100、b>  case 1:</b></p><p>  block[2][0] +=2; block[3][0] +=2;</p><p>  block[2][1] -=1; block[3][1] -=1;</p><p><b>  break;</b></p><p><b>

101、  case 2:</b></p><p>  block[2][0] -=1; block[3][0] -=1;</p><p>  block[2][1] -=2; block[3][1] -=2;</p><p><b>  break;</b></p><p><b>  cas

102、e 3:</b></p><p>  block[2][0] -=2; block[3][0] -=2;</p><p>  block[2][1] +=1; block[3][1] +=1;</p><p><b>  break;</b></p><p><b>  }</b&

103、gt;</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  flag =flag%4;</p><p>  switch(flag)</p><p><b>  {</b></p

104、><p><b>  case 0:</b></p><p>  block[0][0]++; block[0][1]--;</p><p>  block[1][0]--; block[1][1]--;</p><p>  block[3][0]++; block[3][1]++;</p><p>

105、<b>  break;</b></p><p><b>  case 1:</b></p><p>  block[1][0]++; block[1][1]++; break;</p><p><b>  case 2:</b></p><p>  block[0][0]--

106、; block[0][1]++; break;</p><p><b>  case 3:</b></p><p>  block[3][0]--; block[3][1]--; break;</p><p><b>  }</b></p><p><b>  break;</b&g

107、t;</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  // 判斷方塊旋轉(zhuǎn)后新位置是否有方格,若有,則旋轉(zhuǎn)取消</p><p>  for(i=0; i&

108、lt;4; i++)</p><p>  if(cells[ block[i][0] ][ block[i][1] ])</p><p><b>  { </b></p><p>  if(r) flag +=3;</p><p>  for(i=0; i<4; i++)</p><p> 

109、 for(j=0; j<2; j++)</p><p>  block[i][j]=org[i][j];</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  SendMessage(hwnd, MS_DRAW, 0, 0);;&l

110、t;/p><p><b>  return 0;</b></p><p>  // 清除當(dāng)前方塊,并在新的位置重新繪制方塊</p><p>  case MS_DRAW:</p><p>  hdc =GetDC (hwnd);</p><p>  Cover (hdc, org);</p>

111、;<p>  for(i=0; i<4; i++)</p><p>  for(j=0; j<2; j++)</p><p>  org[i][j]=block[i][j];</p><p>  DrawBlock (hdc,block);</p><p>  ReleaseDC (hwnd, hdc);</p

112、><p><b>  return 0;</b></p><p>  // 按照方格矩陣重繪游戲區(qū)域的方格</p><p>  case WM_PAINT:</p><p>  hdc =BeginPaint (hwnd, &ps);</p><p>  hpen =CreatePen (PS

113、_SOLID,1,RGB(255,255,255));</p><p>  SelectObject (hdc,hpen);</p><p>  for (i=top; i<H-1; i++)</p><p>  for(j=1; j<=W; j++)</p><p>  if( cells[j][i] ) </p>

114、<p>  DrawCell (hdc, (j-1)*CELL, (i-1)*CELL, j*CELL, i*CELL);</p><p>  DeleteObject (hpen);</p><p>  EndPaint (hwnd, &ps);</p><p><b>  return 0;</b></p>

115、<p>  case WM_DESTROY:</p><p>  KillTimer (hwnd, 1);</p><p>  PostQuitMessage (0);</p><p><b>  return 0;</b></p><p><b>  }</b></p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論