




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課 程 設(shè) 計 說 明 書課程名稱: 高級語言程序設(shè)計 設(shè)計題目: 俄羅斯方塊游戲 院 部: 計算機科學(xué)與信息工程學(xué)院 學(xué)生姓名: 學(xué) 號: 專業(yè)班級: 物聯(lián)網(wǎng)工程 指導(dǎo)教師: 2015年 6月課 程 設(shè) 計 任 務(wù) 書設(shè)計題目 俄羅斯方塊學(xué)生姓名所在院部計算機科學(xué)與信息工程學(xué)院專業(yè)、班級物聯(lián)網(wǎng)工程設(shè)計要求:設(shè)計要求1.用設(shè)計與實現(xiàn)俄羅斯方塊游戲。2.要求包括系統(tǒng)的需求分析;3.系統(tǒng)總框圖及每個模塊的設(shè)計分析;4.mfc應(yīng)用程序架構(gòu);框架的擴展;5.算法的設(shè)計與實現(xiàn);6.游戲的內(nèi)部實現(xiàn);游戲區(qū)域繪圖的實現(xiàn);7.列出所有定義的函數(shù)及說明;8.附上程序源代碼。 學(xué)生應(yīng)完成的工作:1. 學(xué)生應(yīng)認真學(xué)
2、習(xí)參考程序,理解每個文件、每個函數(shù)以及各個變量的作用和意義。在此基礎(chǔ)上進一步改進程序,最后正確地運行程序。2. 對程序進行測試,設(shè)計詳細的測試計劃,然后根據(jù)測試計劃設(shè)計測試用例,對程序進行測試。測試時應(yīng)注意對各種邊緣情況進行測試。3. 完成課程設(shè)計報告。參考文獻:1. 梁旭等 c程序設(shè)計課程設(shè)計 電子工業(yè)出版社 20112. 譚浩強 c程序設(shè)計(第四版) 清華大學(xué)出版社2010工作計劃:1. 小組審題,查閱資料,進行設(shè)計前的必要資料準備(3天)。 2. 把程序完整運行出來(4天)。 3. 增加改進程序(3天)。 4. 寫課程設(shè)計報告(3天)。 5. 提交課程設(shè)計報告及答辯(1天)任務(wù)下達日期:
3、2015 年 6 月 9 日 任務(wù)完成日期:2015 年 6 月 22 日指導(dǎo)教師(簽名): 學(xué)生(簽名):目 錄一 前言1二 需求分析1三 概要設(shè)計1四 詳細設(shè)計3五 改進或增加功能模塊說明4六 程序測試4七 課程設(shè)計總結(jié)5八 致 謝5九 參考文獻5十 源程序6俄羅斯方塊游戲一 前言c+程序設(shè)計牽涉到面向?qū)ο蟪绦蛟O(shè)計的理論、c+語言的語法以及算法等3個方面的內(nèi)容,其中每一方面都包含十分豐富的內(nèi)容,都可以分別單獨成論。顯然在一個程序中深入、詳細地介紹以上3個方面的知識是不可能的,必須把它們有機地結(jié)合起來,綜合應(yīng)用。不同的書對此采取不同的寫法,側(cè)重點有所不同,各有道理,也各有優(yōu)缺點,適合于不同的
4、讀者。需要在教學(xué)實踐中檢驗,取長補短,不斷完善。作者認為:要進行c+程序設(shè)計當(dāng)然需要了解面向?qū)ο蟪绦蛟O(shè)計的有關(guān)概念,但是本課程畢竟不是一門面向?qū)ο蟪绦蛟O(shè)計的理論課程,在本書中不是抽象地介紹面向?qū)ο蟪绦蛟O(shè)計的理論,而是在介紹c+語言的特點和應(yīng)用過程中自然地引出面向?qū)ο蟪绦蛟O(shè)計的有關(guān)概念,通過c+的編程過程理解面向?qū)ο蟪绦蛟O(shè)計方法。在介紹程序設(shè)計過程中,介紹有關(guān)的算法,引導(dǎo)讀者思考怎樣構(gòu)造一個算法。編寫程序的過程就是設(shè)計算法的過程。要用c+編程序,最基本的要求是正確掌握和運用c+。由于c+語法復(fù)雜,內(nèi)容又多,如果對它缺乏系統(tǒng)的了解,將難以真正應(yīng)用,編出來的程序?qū)e誤百出,編譯出錯,事倍功半。本書
5、的做法是全面而系統(tǒng)地介紹c+的主要特點和功能,引導(dǎo)讀者由簡而繁地學(xué)會編寫c+程序。有了c+編程的初步基礎(chǔ)后,再進一步提高,掌握更多更深入的算法。這樣的方法可能符合大多數(shù)學(xué)習(xí)者的情況,降低了學(xué)習(xí)難度。程序設(shè)計是一門實踐性很強的課程,只靠聽課和看書是學(xué)不好的。衡量學(xué)習(xí)好壞的標準不是“懂不懂”,而是“會不會干”。因此必須強調(diào)多編程,多上機實踐??紤]到不同學(xué)校、不同專業(yè)、不同讀者對學(xué)習(xí)c+有不同的要求。二 需求分析1 要求(1)用c語言實現(xiàn)程序設(shè)計;(2)定義各個函數(shù)分別完成不同功能,如背景設(shè)計,判斷等;(3)畫出查詢模塊的流程圖;(4)系統(tǒng)的各個功能用函數(shù)調(diào)用的形式實現(xiàn);(5)界面友好(良好的人機互
6、交),程序要有注釋。2 任務(wù)(1)定義各類頭文件,變量及宏定義;(2)圖形模塊,設(shè)計出俄羅斯方塊背景界面;(3)設(shè)定玩家操作模塊和勝負判斷模塊;(4)畫出部分模塊的流程圖;(5)編寫代碼;(6)程序分析與調(diào)試。3 運行環(huán)境(1)windows7/8/2000/xp系統(tǒng)(2)turboc2.0編譯環(huán)境4 開發(fā)工具c+三 概要設(shè)計3.1 模塊組成圖根據(jù)分析,俄羅斯方塊這個程序一共要實現(xiàn)如下幾個功能,開始游戲、游戲的暫停繼續(xù)、游戲控制和退出游戲。其中游戲控制最為主要和重要,它控制著整個游戲的畫面和有關(guān)數(shù)據(jù)的操作,是游戲的核心部分。暫停和退出功能做成一體,在退出的提示下不做任何操作即可實現(xiàn)暫停的功能。
7、程序結(jié)構(gòu)如圖3-1所示。 圖3-1 功能模塊圖2 查詢函數(shù)流程圖根據(jù)分析后的程序結(jié)構(gòu)圖設(shè)計出相應(yīng)的流程圖。俄羅斯方塊的內(nèi)容主要包括游戲開始,畫背景和邊框,顯示分數(shù)等級和下一個方塊的預(yù)覽圖;根據(jù)速度沒隔一定時間方塊自動下落,當(dāng)有按鍵操作時,根據(jù)相應(yīng)按鍵執(zhí)行動作,每次動作前要判斷是否動作可以執(zhí)行。下落方塊滿一行時,消去該行,根據(jù)消去行數(shù)得到相應(yīng)分數(shù)。分數(shù)達到一定程度,等級提升,速度加快。如圖3-2所示。圖3-2 系統(tǒng)流程圖四 詳細設(shè)計在程序的開頭部分定義要用到的頭文件,以及各種常量如設(shè)定棋盤大小,設(shè)定游戲模式及如何執(zhí)行。代碼如下。bool rotate(scord *lpscord,int rty
8、pe,int rnumber,bool firstrotate);void getrandom();/初始化方格形狀void getnext(scord *targ,const scord* sur);/取出下一個方塊void draw();/繪出方格void start();/開始游戲bool downable();/能否下落bool leftable();/能否左移bool rightable();/能否右移bool disrows(hwnd hwnd);/判斷能否消行五 改進或增加功能模塊說明5.1游戲界面游戲界面采用wndclass函數(shù)編寫,代碼如下。wndclass wndclass
9、;wndclass.style=cs_hredraw|cs_vredraw;/|(ws_minimizebox|ws_maximizebox) ; wndclass.lpfnwndproc=wndproc; wndclass.cbclsextra=0; wndclass.cbwndextra=0; wndclass.hinstance=hinstance; wndclass.hicon = loadicon(null, idi_application); wndclass.hcursor = loadcursor (null, idc_arrow); wndclass.hbrbackgroun
10、d= (hbrush)getstockobject (white_brush);/ createsolidbrush(rgb(195,195,237); wndclass.lpszmenuname= null; wndclass.lpszclassname= szappname; 俄羅斯方塊的游戲界面包括游戲區(qū)域邊框、下落方塊繪制、右部計分和預(yù)覽圖顯示等。游戲區(qū)域邊框的繪制比較簡單,循環(huán)中確定光標的位置輸出特定字符,即可完成邊框繪制。游戲區(qū)方塊的繪制,循環(huán)從數(shù)據(jù)數(shù)組中依次讀出數(shù)據(jù),根據(jù)讀到的數(shù)據(jù)顯示“”,最后組成方塊的形狀,完成方塊的繪制。計分和預(yù)覽圖部分先畫出一個矩形區(qū)域,然后控制光標在其中
11、顯示分數(shù)、等級、預(yù)覽圖和提示信息。5.2生成方塊本程序中生成的方塊有七種形狀,在程序運行生成方塊時,調(diào)k=rand()%kinds+1;語句,確定當(dāng)前要顯示的是哪一個方塊形狀。而在實際運行中,第一次需要調(diào)用兩次生成方塊函數(shù)getrandom(),將先產(chǎn)生的賦給游戲當(dāng)前方塊,第二個賦給預(yù)覽圖方塊。以后每次產(chǎn)生一個方塊,把預(yù)覽方塊賦給當(dāng)前方塊,把新產(chǎn)生的賦給預(yù)覽方塊。5.3方塊變形 俄羅斯方塊的特點就在于通過方塊的變形拼滿整行來消去該行方塊從而使游戲可以繼續(xù)下去,很難想象不能變形的俄羅斯方塊是什么樣子。而變形的過程就是根據(jù)當(dāng)前方塊形狀改變方塊的相對位置,這樣就可以改變方塊的形狀了。在程序中每當(dāng)按下
12、up鍵,程序判斷可以變形后,根據(jù)當(dāng)前方塊的形狀序號和變化形狀序號調(diào)用相應(yīng)的方塊數(shù)值賦給draw()函數(shù),通過刷新重畫就可以顯示變化后的方塊了。5.4方塊顯示 以上方塊的操作都是數(shù)據(jù)層面的操作,而真正要在游戲窗口中看到數(shù)據(jù)的變化,還必須把方塊不斷的繪制出來。這就是draw()函數(shù)的作用。把當(dāng)前運動的方塊對應(yīng)節(jié)點存儲在一個4*4數(shù)組里,變形和生成方塊的過程就是更新該數(shù)組數(shù)據(jù)的過程。然后在draw()函數(shù)里檢測數(shù)組的各個值,并控制光標跳到一定位置,畫出“”組成方塊。5.5障礙判斷 障礙判斷,就是在方塊運動中或者變形中判斷周圍是否有障礙阻礙下落、移位、變形。當(dāng)方塊下落遇到下面有方塊或者到達下邊界則應(yīng)停
13、止下落并記錄數(shù)據(jù),存入背景數(shù)據(jù)數(shù)組。變形時應(yīng)判斷這個變形是否可以進行,如果有障礙則不能變形。例如當(dāng)方塊達到右邊界,而若變形則會越過邊界,那么這個變形的命令是不應(yīng)執(zhí)行的。所有這些判斷都由meet()函數(shù)進行,根據(jù)是否有障礙返回1或0,再由其他函數(shù)接收執(zhí)行相應(yīng)操作。5.6消行計分 游戲玩家拼滿一行后,程序消去滿行,并計分。中當(dāng)一個方塊下落停止后,程序檢查方塊是否充滿了游戲區(qū)域,如果是結(jié)束游戲。不是,則判斷是否構(gòu)成消行條件,從下落方塊的最低點依次向上檢查是否可以消行,根據(jù)消去行數(shù)分數(shù)增加。分數(shù)達到一定程度,等級提升,速度加快。六 程序測試1 測試游戲能否正確顯示期盼界面游戲打開界面,如圖3-3所示。
14、圖 3-3 打開界面2執(zhí)行程序后,顯示本游戲的界面,進行模式選擇 游戲中界面,如圖3-4所示。圖 3-4 游戲界面七 課程設(shè)計總結(jié)通過這次課程設(shè)計,我收獲了很多。首先把所學(xué)知識加以利用和鞏固,其次在實踐中遇到問題去探索和學(xué)習(xí),更增加了新知識實踐證明達到了預(yù)期的目的,積累了經(jīng)驗。由于程序是用文本窗口模擬的圖形,界面比較簡陋,如果使用mfc用c+來實現(xiàn),那么界面將會非常好,只是由于所學(xué)知識有限,只有下一步去探索了。通過這次的學(xué)習(xí)設(shè)計,我發(fā)現(xiàn)我還有許許多多的不足的地方,比如c+的程序設(shè)計,源代碼的書寫等等,剛開始我發(fā)現(xiàn)我的問題后,十分緊張,感覺很絕望,沒有別人的幫助,自己動手設(shè)計曾經(jīng)自己想都沒想過的
15、東西,雖然很興奮,但想想自己無從下手,后來通過上網(wǎng)查找資料,進圖書館查找書籍等,終于知道了俄羅斯方塊游戲的設(shè)計概念,終于知道了設(shè)計的方法,于是,漸漸地我的游戲設(shè)計理念誕生了。通過這次設(shè)計,我學(xué)會了很多東西,例如通過網(wǎng)絡(luò)資料來尋求幫助,自己改正錯誤,加強了我自己的自己動手能力,對今后的學(xué)習(xí)和生活有很大的幫助,有助于以后的課程設(shè)計順利完成。八 致 謝 經(jīng)過兩個多星期的努力,終于把本游戲程序改寫出來,在這期間要感謝各同學(xué)對我?guī)椭椭С?,同時也感謝程序老師對我的教導(dǎo)。九 參考文獻(1)c課程設(shè)計黃明梁旭周紹斌編著,電子工業(yè)出版社出版(2)c課程設(shè)計案例精編黃曉東編著,中國水利水電出版社出版。(3)c程
16、序設(shè)計實用教程張永常主編,電子工業(yè)出版社出版。 十 源程序/*頭文件data.h:*/#ifndef data_h_#define data_h_#includestatic const int kinds=7;/方塊種類數(shù)量static const int cols=10;/數(shù)據(jù)列數(shù)/* * 7行10列數(shù)組 每行對應(yīng)一種方塊類別。 * 每行的前四列為x坐標,中間四列為y坐標 * 第九列為方塊類別代碼,最后一列為該類型方塊有幾種變形 * 用一個5*5的矩陣表示 7種類別方塊 共19種變形 */每種方塊的代號static const int type1=1;static const int ty
17、pe2=2;static const int type3=3;static const int type4=4;static const int type5=5;static const int type6=6;static const int type7=7;/變形的種類static const int rtype1=1;static const int rtype2=2;static const int rtype3=4;static int rtypenext;static int rtypedown;/初始化方塊坐標及對應(yīng)的類別和變形種類static const int indexki
18、ndscols= 0,1,0,1,0,0,-1,-1,type1,rtype1, -1,0,1,2,0,0,0,0,type2,rtype2, 0,0,1,1,1,0,0,-1,type3,rtype2, 0,0,1,1,-1,0,0,1,type4,rtype2, -1,0,0,1,0,0,1,0,type5,rtype3, -1,0,1,1,0,0,0,-1,type6,rtype3, -1,0,1,1,0,0,0,1,type7,rtype3;/定時器idstatic const int timer=1;/初始游戲級別對應(yīng)的時間間隔static int currentlevel=600;
19、static int level=1;/每種圖形所包含的小方塊數(shù)static const int ctn=4;typedef struct /方塊形狀定義int x;int y;scord;scord sdownctn,snextctn;/下一個方塊的坐標static rect rectnextctn;/正在下落方塊的坐標static rect rectdownctn;/顯示區(qū)域的大小static const int cxsize=25;static const int cysize=35;/方塊偏離(0,0)得位置static int offsetx;static int offsety;s
20、tatic int offsetxnext;static int offsetynext;/自定義消息static const int ms_down=10001;/暫停static bool go=true;/開始static bool startgame=false;/結(jié)束static bool gameover=false;/得分static int score;rect rt=326,81,425,455;/每個方格包含的像素static const int pelssize=13;/顯示區(qū)域大小的定義static const point area=0,455,326,455,326,
21、0;/顯示區(qū)域的表示方法 最后一列最后一行分別對應(yīng)該行該列所具有的方塊總數(shù) 0表示沒有方塊1表示有static int fillareacysize+1cxsize+1;hbrush hbrush1=createsolidbrush(rgb(0,0,255);/方塊顏色:藍色hbrush hbrush2=createsolidbrush(rgb(255,0,128); /分數(shù)區(qū)域顏色:粉色hpen hpen1=createpen(ps_solid,0,rgb(245,245,245);/背景格顏色:灰色#endif /* data_h_ */這是源文件mainpro.cpp#includeda
22、ta.h#include#includelresult callback wndproc(hwnd, uint, wparam, lparam);/* * 逆時針方向旋轉(zhuǎn)方格 返回能否旋轉(zhuǎn) * param lpscord 要旋轉(zhuǎn)的方塊坐標指針 * param rtype 旋轉(zhuǎn)類型 * param rnumber 旋轉(zhuǎn)次數(shù) * param 是否第一次旋轉(zhuǎn) */bool rotate(scord *lpscord,int rtype,int rnumber,bool firstrotate);void getrandom();/初始化方格形狀void getnext(scord *targ,con
23、st scord* sur);/取出下一個方塊void draw();/繪出方格void start();/開始游戲bool downable();/能否下落bool leftable();/能否左移bool rightable();/能否右移bool disrows(hwnd hwnd);/判斷能否消行void getrandom() /初始化方格形狀 int k=rand()%kinds+1; for(int i=0;ikinds;i+) if(indexicols-2=k) rtypenext=indexicols-1;/獲得旋轉(zhuǎn)類型 for(int j=0;jctn;j+) snext
24、j.x=indexij; snextj.y=indexij+4; break; rotate(snext,rtypenext,rand()%rtypenext+1,true); int min_y=0; for (int t = 0; t snextt.y ? snextt.y : min_y; offsetxnext=(int)(cxsize/2)*pelssize+(int)(pelssize/2);/x方向的中間顯示 offsetynext=(-min_y)*pelssize+(int)(pelssize/2);/保證置頂顯示bool rotate(scord *lpscord,int
25、rtype,int rnumber,bool firstrotate) / 旋轉(zhuǎn) int tempx; int tempy; int temp; int tx=(offsetx-(int)(pelssize/2)/pelssize; int ty=(offsety-(int)(pelssize/2)/pelssize; bool ra=true; switch(rtype) case rtype1: ra=false; break; case rtype2: if(rnumber%2!=0) for (int j = 0; j y+tx; tempy=lpscord-x+ty; lpscord
26、+; if(!firstrotate&(fillareatempxtempy0|tempx24|tempx0|tempy34) ra=false; lpscord-=4; if(ra) if (rnumber % 2 != 0) for (int k = 0; k x; lpscord-x = lpscord-y; lpscord-y = temp; lpscord+; break; case rtype3: for(int k=0;krnumber;k+) for(int l=0;ly+tx; tempy=(-lpscord-x)+ty; lpscord+; if(!firstrotate&
27、(fillareatempxtempy0|tempx24|tempx0|tempy34) ra = false; lpscord-=4; if(ra) for (int i = 0; i rnumber; i+) for (int j = 0; j x; lpscord-x = lpscord-y; lpscord-y = temp; lpscord+; lpscord=lpscord-4; break; return ra;void getnext(scord *targ,const scord* sur) /取出下一個方塊 rtypedown=rtypenext; offsetx=offs
28、etxnext; offsety=offsetynext; for(int i=0;ix=sur-x; targ-y=sur-y; sur+; targ+; getrandom();void draw(hwnd hwnd,const scord* shape,rect *rect,hbrush hbrush,int offsetx,int offsety) /繪出方格 hdc hdc=getdc(hwnd); selectobject(hdc,hbrush); selectobject(hdc,hpen1);for(int i=0;ix-(int)(pelssize/2)+offsetx,pe
29、lssize*shape-y-(int)(pelssize/2)+offsety, pelssize*shape-x+(int)(pelssize/2)+offsetx+2,pelssize*shape-y+(int)(pelssize/2)+offsety+2); shape+; releasedc(hwnd,hdc);void start() /開始游戲 if(!startgame) for (int i = 0; i cysize + 1; i+) for (int j = 0; j cxsize + 1; j+) fillareaij = 0; startgame=true; go=t
30、rue; score=0; bool downable() /能否下落 bool da=true; int x=(offsetx-(int)(pelssize/2)/pelssize; int y=(offsety-(int)(pelssize/2)/pelssize; int xtemp; int ytemp; for(int i=0;i0|ytemp34) da=false; break; if (!da) for (int k = 0; k ctn; k+) xtemp = sdownk.x + x; ytemp = sdownk.y + y; fillareaytempxtemp =
31、1; fillareaytempcxsize+; fillareacysizextemp+; return da;bool leftable() /能否左移 bool la = true; int x = (offsetx - (int) (pelssize / 2) / pelssize; int y = (offsety - (int) (pelssize / 2) / pelssize; int xtemp; int ytemp; for (int i = 0; i 0 | xtemp 0) la = false; break; return la;bool rightable() /能
32、否右移 bool ra = true; int x = (offsetx - (int) (pelssize / 2) / pelssize; int y = (offsety - (int) (pelssize / 2) / pelssize ; int xtemp; int ytemp; for (int i = 0; i 0 | xtemp 24) ra = false; break; return ra;bool disrows(hwnd hwnd) /消行 hdc hdc=getdc(hwnd); bool da=false; int rowctn;/可以消除的行 for (int
33、ii = 0; ii ctn; ii+) rowii = 0; int number = 0;/可連續(xù)消的行數(shù) static int levelscore; selectobject(hdc,hpen1); for (int i = 0; i 0)/可以消行 da=true; levelscore+=(number + 1) * number / 2; score += (number + 1) * number / 2; if(levelscore2)/增加游戲級別 levelscore=0; currentlevel=(int)currentlevel*2/3; settimer(hwnd
34、,timer,currentlevel,null); for(int i=0;i=600) level=i+2; break; invalidaterect(hwnd,&rt,true); for (int k = 0; k 0;i-) for(int j=0;jcxsize+1;j+) fillareaij=fillareai-1j; invalidaterect(hwnd,null,true); releasedc(hwnd,hdc); return da;int main() hinstance hinstance=null; static tchar szappname=text(el
35、s); hwnd hwnd; msg msg; wndclass wndclass;wndclass.style=cs_hredraw|cs_vredraw;/|(ws_minimizebox|ws_maximizebox) ; wndclass.lpfnwndproc=wndproc; wndclass.cbclsextra=0; wndclass.cbwndextra=0; wndclass.hinstance=hinstance; wndclass.hicon = loadicon(null, idi_application); wndclass.hcursor = loadcursor
36、 (null, idc_arrow); wndclass.hbrbackground= (hbrush)getstockobject (white_brush);/ createsolidbrush(rgb(195,195,237); wndclass.lpszmenuname= null; wndclass.lpszclassname= szappname;if(!registerclass(&wndclass) messagebox(null,text(register error),szappname,mb_iconerror); return 0; hwnd=createwindow(
37、szappname,text(俄羅斯方塊),ws_dlgframe|ws_overlapped|ws_caption|ws_sysmenu|ws_minimizebox,/(ws_overlapped|ws_sysmenu|ws_minimizebox)&ws_border,/ws_sizebox ws_overlappedwindow&ws_maximizebox,ws_caption|/&ws_maximizebox禁用最大化選項 300,100,429,480, null,null,hinstance,null);showwindow(hwnd,sw_shownormal); updat
38、ewindow(hwnd);while(getmessage(&msg,null,0,0) translatemessage(&msg); dispatchmessage(&msg); return msg.wparam;lresult callback wndproc (hwnd hwnd, uint message, wparam wparam, lparam lparam) hdc hdc; paintstruct ps; rect r; static bool down=false; bool issend=false; switch(message) case wm_create:
39、settimer(hwnd,timer,currentlevel,null); /coutlevel1endl; return 0; case wm_size:return 0; case wm_timer: if(startgame&go) if (down) if(!downable()/不能再下落條件 / coutcan not downendl; down=false; disrows(hwnd); if(!issend) sendmessage(hwnd,ms_down,0,0); issend=true; else draw(hwnd, sdown, rectdown,(hbrus
40、h)getstockobject(white_brush), offsetx, offsety); offsety += pelssize; draw(hwnd, sdown, rectdown,hbrush1, offsetx, offsety); return 0; case ms_down: draw(hwnd,snext,rectnext,(hbrush)getstockobject(white_brush),369,44); getnext(sdown,snext); draw(hwnd,snext,rectnext,hbrush1,369,44); draw(hwnd,sdown,
41、rectdown,hbrush1,offsetx,offsety); /判斷游戲是否結(jié)束 offsety-=pelssize; if(downable() offsety+=pelssize; issend=false; down=true; else / coutgame over!endl; startgame=false; gameover=true; invalidaterect(hwnd,&rt,true); case wm_paint: hdc = beginpaint(hwnd, &ps); getclientrect(hwnd, &r); selectobject(hdc,hp
42、en1); selectobject(hdc,hbrush1); for(int i=1;icxsize+8;i+) movetoex(hdc,i*pelssize,0,null); lineto(hdc,i*pelssize,476); for(int j=1;jcysize;j+) movetoex(hdc,0,j*pelssize,null); lineto(hdc,425,j*pelssize); savedc(hdc); for(int t=0;tcysize;t+) for(int k=0;k0) rectangle(hdc,k*pelssize,t*pelssize,(k+1)*
43、pelssize+1,(t+1)*pelssize+1); if(startgame) draw(hwnd,snext,rectnext,hbrush1,369,44); draw(hwnd,sdown,rectdown,hbrush1,offsetx,offsety); fillrect(hdc,&rt,hbrush2); wchar ss20; wchar ll20; wsprintf(ss,text(score:%d),score); wsprintf(ll,text(level:%d),level); textout(hdc,331,300,ll,lstrlen(ll); textou
44、t(hdc,331,320,ss,lstrlen(ss); if(gameover) textout(hdc,330,200,text(game over!),strlen(game over!); selectobject(hdc, getstockobject(black_pen); polyline(hdc, area, 3);/繪制一個矩形 movetoex(hdc, 325, 80, null); lineto(hdc, 425, 80); endpaint(hwnd, &ps); return 0; case wm_keydown: switch(wparam) case vk_u
45、p: if(go&startgame) down=false; draw(hwnd,sdown,rectdown,(hbrush)getstockobject(white_brush),offsetx,offsety); rotate(sdown,rtypedown,1,false); draw(hwnd,sdown,rectdown,hbrush1,offsetx,offsety); return 0; case vk_down: if(go&startgame) down=false;draw(hwnd,sdown,rectdown,(hbrush)getstockobject(white_brush),offsetx,offsety); int k=(offsety-(int)(pelssize)/2)/pelssize; while(kcysize) if(downable() offsety+=pelssize; else break; draw(hwnd,sd
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)答辯-學(xué)前教育
- 組件封裝工藝流程
- 婚慶策劃居間協(xié)議模板
- 自助便利店創(chuàng)業(yè)計劃書
- 老年護理與老年人安全保護
- 實驗室翻新附加合同范本
- 端子壓接機安全操作規(guī)程
- 咖啡連鎖店裝修協(xié)議樣本
- 產(chǎn)品銷售合同范本
- 2024清河縣職業(yè)技術(shù)教育中心工作人員招聘考試及答案
- 4-甲基-2-戊醇-理化性質(zhì)及危險特性表
- GB/T 17622-2008帶電作業(yè)用絕緣手套
- GB/T 1041-2008塑料壓縮性能的測定
- 高效液相色譜簡介及操作課件
- 江西住建云-建設(shè)項目數(shù)字化審圖·項目監(jiān)管一體化平臺-建設(shè)單位用戶手冊
- 【計算機應(yīng)用基礎(chǔ)試題】上海中僑職業(yè)技術(shù)學(xué)院2022年練習(xí)題匯總(附答案解析)
- 中國近代化歷程課件
- 產(chǎn)品防錯措施一覽表
- 氟橡膠基本課件
- 上海市一模二?;蛑锌紨?shù)學(xué)答題紙
- 幼兒繪本故事:愛書的孩子
評論
0/150
提交評論