版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p> 第一章 課程設計目的和要求4</p><p> 1.1 C語言課程設計的目的4</p><p> 1.2 C語言課程設計的要求4</p><p> 第二章 課程設計任務內容5</p><p> 第三章 詳細設計說明6
2、</p><p><b> 3.1模塊6</b></p><p> 3.1.1函數功能模塊圖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> 第四章 軟件使用說明及運行結果10</p><p> 4.1使用說明10</p><p> 4.2 運行結果11</p><p> 第
4、五章 課程設計心得與體會15</p><p> 附錄1: 參考文獻16</p><p> 附錄2: 源程序代碼17</p><p> 第一章 課程設計目的和要求</p><p> C語言課程設計的目的</p><p> 本次課程設計使得課堂教學與實驗實踐之間關系更為密切,讓同學們認識到必須重視實踐環(huán)節(jié),
5、多讀程序,多編寫程序,多上機實踐。進一步培養(yǎng)結構化程序設計的思想,加深對高級語言要素和控制結構的理解,針對C語言中的重點和難點內容進行訓練,獨立完成有一定工作量的程序設計任務,同時強調好的程序風格。</p><p> 本次課程設計著眼于知識的運用,把平常學的知識運用到課程時間中來,考察我們知識運用能力,對我們所學的理論知識進一步深化。</p><p> C語言課程設計的要求</p
6、><p> 1.分析課程設計題目的要求。</p><p> 2.對系統(tǒng)功能模塊進行分析,寫出詳細設計說明文檔。</p><p> 3.編寫程序代碼,代碼量要求不少于300行。調試程序使其能正確運行。</p><p> 4.設計完成的軟件要便于操作和使用。</p><p> 5.設計完成后提交課程設計報告
7、。</p><p> 第二章 課程設計任務內容</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編程,簡易的圖形界面。程序不對游戲分數進行統(tǒng)計。</p><p> 第三章 詳細設計說明</p><p><b> 3.1模塊</b></p><p&g
9、t; 3.1.1函數功能模塊圖</p><p> 圖3-1 函數功能模塊圖</p><p><b> 3.1.2模塊描述</b></p><p><b> 1.主函數</b></p><p> 主函數為一有返回值型的整型函數,主要功能為執(zhí)行游戲主線及定義邊界。</p><
10、;p><b> 2. 游戲執(zhí)行函數</b></p><p> 此函數為一無返回值型的函數,其功能為控制整個游戲的循環(huán)以及對各子函數的調用。</p><p><b> 3. 輸出函數</b></p><p> 此函數的功能為刷新并輸出游戲界面,包括游戲操作按鍵設置及游戲畫面。</p><p&
11、gt;<b> 3.2 流程圖</b></p><p> 圖3-2 函數流程圖</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> 該程序可以讓操作者看到自己所得的分數,當格子超出范圍時游戲結束,當分數達到一定時游戲可以進入下一關。。</p><p> 第四章 軟件使用說明及運行結果</p><p><b> 4.1
13、使用說明</b></p><p> 該程序可以實現對挖金子游戲的挖金、闖關和結束功能,安裝VisualC++6.0中文版后,在工具欄“文件”中單擊“新建”選項,單擊“文件”菜單,選擇“C++ Source file”輸入文件名“單項選擇題標準化考試系統(tǒng)”。開始輸入程序,程序輸入完成,單擊“組建”工具欄,選擇“編譯[簡化版挖金子游戲.cpp1]”,待程序無誤后,開始執(zhí)行程序。</p>&
14、lt;p> 界面顯示后,按要求首先按任意鍵開始游戲,進入游戲界面后用五個鍵控制操作者進行上下左右移動挖金子。</p><p><b> 4.2 運行結果</b></p><p> 圖4-2-1開始界面</p><p> 圖4-2-2游戲進行界面一</p><p> 圖4-2-3游戲進行界面二</p&
15、gt;<p> 圖4-2-4游戲結束界面</p><p> 第五章 課程設計心得與體會</p><p> 經過兩個星期的上機實踐學習,使我對C語言有了更進一步的認識和了解,要想學好它要重在實踐,要通過不斷的上機操作才能更好地學習它,通過實踐,我也發(fā)現我的好多不足之處,首先是自己編程粗心大意,經常出錯,通過學習也有所改進;再有對C語言的一些標準函數不太了解,還有對函數調用
16、的正確使用不夠熟悉,以及對C語言中經常出現的錯誤也不了解,通過實踐,使我在這幾個方面的認識有所提高。這次的課程設讓我認識到很多C++的內在要素:</p><p> 程序設計語言是程序設計的工具。這是我通過兩周課程設計深深體會的一點,并且發(fā)現如果想有效的進行程序設計,正確地應用程序設計語言表達算法,必須準確的運用程序設計語言,掌握其語法知識。</p><p> 學習程序設計必須重視時間環(huán)
17、節(jié),多讀程序,多編寫程序,多上機實踐。這次的課程設計就使得課堂教學、式樣和實踐之間的關系更為緊密。對我的學習有著很深遠的影響。</p><p> 我發(fā)現作為一個程序設計人員,需要掌握面向過程的程序設計,也要掌握面向對象的程序設計。從前,人們通過C語言學習面向過程的程序設計,再通過C++學習面向對象的程序設計。其實C++并不是純粹的面向對象的語言,它是一種混合語言。學習C++既可以編寫面向過程的程序,也可以編寫面
18、向對象的程序。這一點是我通過可課程設計所的實踐發(fā)現的。</p><p> 4. 深切的感受到了C++語法的復雜,內容的繁多。發(fā)現如果對它缺乏系統(tǒng)的了解,將難以真正的運用,編出來的程序錯誤百出,編譯出錯,事倍功半。</p><p> 這次的C++課程設計很快就要結束了,想說的是,這兩周實踐所學到的東西比我一個學期在教室學到的東西要多得多。設計中遇到很多難題,都是費了很大勁才解決得,但是所
19、有的努力都沒有白費,我的課程設計終于“竣工”了,而且更是從中感受到了一些書本上和課堂上所不能感受到的。</p><p> 通過實踐的學習,我認識到學好計算機要重視實踐操作,不僅僅是學習C++語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐,所以后在學習過程中,我會更加注視實踐操作,使自己更好地學好計算機。</p><p><b> 附錄1: 參考文獻</b&
20、gt;</p><p> [1]、譚浩強編著:C++程序設計,北京:清華大學出版社,2004</p><p> [2]、(美)戴特爾(Deitel,H.M.)等編著,張引等譯:C++大學基礎教程(第五版),北京:電子工業(yè)出版社,2006.6</p><p> [3]、夏云慶編著:Visual C++ 6.0數據庫高級編程,北京:希望電子出版社 2002<
21、/p><p> [4]、伍俊良編著:Visual C++6.0課程設計與系統(tǒng)開發(fā)案例,北京:清華大學出版社,2002.11</p><p> 附錄2: 源程序代碼</p><p> #include "stdafx.h"//沒有函數庫,只是定義了一些環(huán)境參數,使得編譯出來的程序能在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,產生新的方塊</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, //當前實例句柄</p><p> HINSTA
25、NCE hPrevInstance, //前一實例句柄</p><p> PSTR szCmdLine, //指向程序命令行參數的指針</p><p> int iCmdShow) //應用程序開始執(zhí)行窗口時顯示方式用int類型標志</p><p><b> {</b></p
26、><p> static char AppName[]="ToyBrick";//定義一個靜態(tài)字符數組保存字符串"ToyBrick"(應用程序名)</p><p> HWND hwnd; //定義一個窗口句柄</p><p> MSG msg;
27、//定義一消息結構體變量</p><p> WNDCLASSEX wndclass; //定義一窗口類結構變量,包含窗口類全部信息</p><p> int iScreenWide; //定義屏幕顯示寬度</p><p> wndclass.cbSize = sizeof(wndclass);
28、//窗口類對象大小</p><p> wndclass.style = CS_HREDRAW|CS_VREDRAW;//窗口類對象風格</p><p> wndclass.lpfnWndProc = WndProc;//窗口處理函數為WndProc</p><p> wndclass.cbClsExtra = 0; //窗口
29、類無擴展</p><p> wndclass.cbWndExtra = 0;//窗口類實例沒有擴展</p><p> wndclass.hInstance = hInstance;//當前實例句柄</p><p> wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);//窗口
30、最小化圖標為默認圖標</p><p> wndclass.hCursor = LoadCursor (NULL,IDC_ARROW);//窗口當前光標為箭頭光標</p><p> wndclass.hbrBackground = (HBRUSH)GetStockObject (BLACK_BRUSH);//獲得當前背景設置為黑色</p><p&g
31、t; wndclass.lpszMenuName = NULL;//窗體菜單名為空</p><p> wndclass.lpszClassName = AppName;//應用程序名</p><p> wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);//為應用程序加載圖標</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);//向當前窗口發(fā)送消息</p><p> SetTimer (hwnd, 1, 550,NULL);//設置下落時間</p><p> while (GetMessage (&msg, NULL, 0, 0))//進入消息循環(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> // 函數DrawRact: 畫正方形</p><p> // 參數: 設備環(huán)境句柄和正方形的四角坐標</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> // 函數DrawCell: 畫方格</p><p> // 參數: 設備環(huán)境句柄和方格的四角坐標</p><p> // 每個方格由內外兩個正方形(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> // 函數DrawBlock: 畫方塊</p><p> // 參數: 設備環(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> // 函數Cover: 清除原來位置的方塊</p><p> // 參數: 設備環(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> // 窗口過程函數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表示方塊旋轉了幾次</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)復制到該行,依此類推</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> // 產生隨機數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, "游戲結束,即將退出 !", "退出", 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> // 響應鍵盤控制</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> // 按[向上鍵],方塊順時針旋轉
86、</p><p> //方塊的旋轉不是真正的旋轉,而是根據不同的方塊形狀和</p><p> // 該方塊旋轉過的次數來移動其中的一個或幾個方格,從而</p><p> // 達到旋轉的效果 這樣做很復雜,算法不夠理想,但是能夠保持方</p><p> // 塊旋轉時的重心比較穩(wěn)定。</p><p> cas
87、e VK_UP:</p><p><b> r=1;</b></p><p> flag++; //方塊旋轉加1</p><p> switch(sel) // sel代表當前方塊的形狀</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> // 判斷方塊旋轉后新位置是否有方格,若有,則旋轉取消</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> // 清除當前方塊,并在新的位置重新繪制方塊</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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論