版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 俄羅斯方塊課程設(shè)計報告
- 課程設(shè)計--俄羅斯方塊設(shè)計報告
- 《c++俄羅斯方塊》課程設(shè)計--俄羅斯方塊
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 課程設(shè)計---俄羅斯方塊
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊編程課程設(shè)計報告
- 俄羅斯方塊游戲課程設(shè)計報告
- 俄羅斯方塊課程設(shè)計
- java課程設(shè)計報告-俄羅斯方塊
- c課程設(shè)計--俄羅斯方塊
- 簡單俄羅斯方塊課程設(shè)計
- c語言課程設(shè)計報告-俄羅斯方塊
- 俄羅斯方塊c++課程設(shè)計報告
- java俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計論文
評論
0/150
提交評論