九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

《軟件工程課程設(shè)計(jì)》報(bào)告俄羅斯方塊游戲

  • 資源ID:32515248       資源大?。?span id="24d9guoke414" class="font-tahoma">387.03KB        全文頁(yè)數(shù):23頁(yè)
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

《軟件工程課程設(shè)計(jì)》報(bào)告俄羅斯方塊游戲

華科學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系 軟件工程課程設(shè)計(jì)報(bào)告 -俄羅斯方塊游戲 (2011/2012學(xué)年 第一學(xué)期) 學(xué)生姓名: 專業(yè)班級(jí): 信息管理102202H 學(xué)生學(xué)號(hào): 指導(dǎo)教師: 2011年12月30日 軟件工程課程設(shè)計(jì) 目錄第一章 系統(tǒng)概述1 . 1 課程設(shè)計(jì)的目的和要求-11 . 2 課程設(shè)計(jì)任務(wù)內(nèi)容-11 . 3 關(guān)于編譯軟件-1第二章 詳細(xì)設(shè)計(jì)說(shuō)明-22 . 1 程序設(shè)計(jì)-2 2 .1 .1 主要功能設(shè)計(jì)-2 2 .1 .2 程序流程圖-22 . 2 參數(shù)說(shuō)明-3 2 .2 .1 類設(shè)計(jì)聲明(view類)-3 2 .2 .2 類設(shè)計(jì)聲明(squar類)-42 . 3 函數(shù)功能說(shuō)明-5 2 .3 .1 游戲界面-5 2 .3 .2 生成方塊-5 2 .3 .3 方塊變形-6 2 .3 .4 方塊顯示-6 2 .3 .5 障礙判斷-7 2 .3 .6 消行計(jì)分-7 2 .3 .7 暫停退出-72 . 4 程序調(diào)試-92 . 5 軟件使用說(shuō)明-9第三章 心得與體會(huì)-10附錄1-11附錄2-11軟件工程課程設(shè)計(jì) 第一章 系統(tǒng)概述 21軟件工程課程設(shè)計(jì) 1.1課程設(shè)計(jì)的目的和要求 俄羅斯是家喻戶曉的益智小游戲,選擇這個(gè)題目一是為了將自己的所學(xué)知識(shí)加以運(yùn)用,二是俄羅斯方塊是我第一個(gè)接觸到的游戲,它的實(shí)現(xiàn)方法也吸引著我。我希望通過(guò)探索實(shí)踐去實(shí)現(xiàn)它,在這次學(xué)習(xí)中從實(shí)踐和實(shí)際的項(xiàng)目中提高自己的編程能力。因此我選定了這個(gè)題目。C+課程所學(xué)的概念、理論和方法,按照C+程序設(shè)計(jì)的基本步驟,設(shè)計(jì)出一個(gè)適當(dāng)規(guī)模的程序來(lái)實(shí)現(xiàn)設(shè)計(jì)課程內(nèi)容中的全部功能;設(shè)計(jì)主控模塊程序?qū)o出的程序源代碼要給出各部分的詳細(xì)注釋自己根據(jù)能力及需要添加相應(yīng)功能模塊,增強(qiáng)模擬系統(tǒng)功能。1.2課程設(shè)計(jì)任務(wù)內(nèi)容利用Microsoft Visual C+編寫(xiě)一個(gè)文本窗口下的俄羅斯方塊游戲。要求:(1)利用類和多文件編寫(xiě)。(2)能夠記錄游戲得分和等級(jí)。(3)可暫停/繼續(xù)游戲,使玩家在不愿游戲時(shí)退出。(4)信息提示時(shí)顯示顏色變化。1.3關(guān)于編譯軟件本程序采用Microsoft Visual C+6.0的英文版本進(jìn)行編譯。VisualC+6.0是Microsoft公司推出的基于Windows操作系統(tǒng)的可視化C+編程工具,盡管Microsoft公司推出了.NET平臺(tái)的集成開(kāi)發(fā)環(huán)境,但由于其良好的界面和可操作性,加上支持標(biāo)準(zhǔn)C/C+規(guī)范,但仍有相當(dāng)多的編程人員使用VisualC+6.0進(jìn)行應(yīng)用系統(tǒng)的開(kāi)發(fā)。關(guān)于穩(wěn)定性,經(jīng)測(cè)試,本程序可以在windows操作系統(tǒng)中穩(wěn)定運(yùn)行,較為穩(wěn)定。 第二章 詳細(xì)設(shè)計(jì)說(shuō)明2.1程序設(shè)計(jì)2.1.1主要功能設(shè)計(jì)根據(jù)分析,俄羅斯方塊這個(gè)程序一共要實(shí)現(xiàn)如下幾個(gè)功能,開(kāi)始游戲、游戲的暫停繼續(xù)、游戲控制和退出游戲。其中游戲控制最為主要和重要,它控制著整個(gè)游戲的畫(huà)面和有關(guān)數(shù)據(jù)的操作,是游戲的核心部分。暫停和退出功能做成一體,在退出的提示下不做任何操作即可實(shí)現(xiàn)暫停的功能。程序結(jié)構(gòu)如圖2.1所示。 圖2.1 2.1.2 程序流程圖根據(jù)分析后的程序結(jié)構(gòu)圖設(shè)計(jì)出相應(yīng)的流程圖。俄羅斯方塊的內(nèi)容主要包括游戲開(kāi)始,畫(huà)背景和邊框,顯示分?jǐn)?shù)等級(jí)和下一個(gè)方塊的預(yù)覽圖;根據(jù)速度沒(méi)隔一定時(shí)間方塊自動(dòng)下落,當(dāng)有按鍵操作時(shí),根據(jù)相應(yīng)按鍵執(zhí)行動(dòng)作,每次動(dòng)作前要判斷是否動(dòng)作可以執(zhí)行。下落方塊滿一行時(shí),消去該行,根據(jù)消去行數(shù)得到相應(yīng)分?jǐn)?shù)。分?jǐn)?shù)達(dá)到一定程度,等級(jí)提升,速度加快。同時(shí)可以響應(yīng)Esc按鍵,提示是否退出程序。如圖2.2所示。 圖2.2 2.2參數(shù)說(shuō)明根據(jù)程序的結(jié)構(gòu),將俄羅斯方塊需要實(shí)現(xiàn)的功能細(xì)化為相應(yīng)的類成員函數(shù)。程序有兩個(gè)類,一個(gè)view類,用于背景相關(guān)操作。一個(gè)squar類,用于方塊相關(guān)操作。2.2.1類設(shè)計(jì)聲明(view類)class viewpublic:view();/類的缺省構(gòu)造函數(shù)int getbgdata(int,int);/取得數(shù)組x,y點(diǎn)的數(shù)據(jù)值void scoreadd(int);/得分增加,根據(jù)消去行數(shù)void scorereset();/得分清零,用于升級(jí)后void levelup();/等級(jí)提升,當(dāng)分?jǐn)?shù)達(dá)到規(guī)定值后執(zhí)行int gameover();/游戲結(jié)束void rowdelete();/消除滿行void previewset(int (*p)4);/設(shè)置預(yù)覽方塊的形狀數(shù)據(jù)void previewreset();/預(yù)覽方塊數(shù)據(jù)清零void setdata(int (*)2);/設(shè)置主游戲區(qū)數(shù)據(jù)值void datareset();/主游戲區(qū)數(shù)據(jù)清零void drawpreview();/顯示預(yù)覽方塊private:int data2526;/主游戲區(qū)數(shù)組int preview44;/預(yù)覽方塊數(shù)組int rowsdelete;/每次消除行數(shù)變量int score;/得分變量int scorelevel;/升級(jí)規(guī)定值變量int level;/等級(jí)變量bool overflag;/結(jié)束標(biāo)記變量void scorelevelup();/升級(jí)規(guī)定值提升;2.2.2類設(shè)計(jì)聲明(squar類)class view;/先向引用聲明class squarpublic:squar();/類的缺省構(gòu)造函數(shù)squar(squar &);/拷貝構(gòu)造函數(shù)friend void cursor(int,int);/友元函數(shù) 控制光標(biāo)位置void getcursor(int &,int &);/取得位置記錄坐標(biāo)void make();/隨機(jī)產(chǎn)生一個(gè)方塊void getmake(int (*p)4);/取得方塊數(shù)據(jù)值void draw();/顯示主方塊void drop(view &);/方塊下落void change();/方塊變形int meet(int);/判斷方塊周圍是否有障礙void torecord(int (*)2);/傳送需要記錄的數(shù)據(jù)void reset();/方塊數(shù)組清零int moveflag;/方塊運(yùn)動(dòng)標(biāo)記變量private:void move();/方塊運(yùn)動(dòng)int shape44;/方塊形狀數(shù)據(jù)int x,y;/坐標(biāo)int shapeindex;/方塊形狀序號(hào)int changeindex;/變形序號(hào)變量int speed;/下落速度變量;2.3函數(shù)功能說(shuō)明2.3.1游戲界面俄羅斯方塊的游戲界面包括游戲區(qū)域邊框、下落方塊繪制、右部計(jì)分和預(yù)覽圖顯示等。游戲區(qū)域邊框的繪制比較簡(jiǎn)單,循環(huán)中確定光標(biāo)的位置輸出特定字符,即可完成邊框繪制。游戲區(qū)方塊的繪制,循環(huán)從數(shù)據(jù)數(shù)組中依次讀出數(shù)據(jù),根據(jù)讀到的數(shù)據(jù)顯示“”,最后組成方塊的形狀,完成方塊的繪制。計(jì)分和預(yù)覽圖部分先畫(huà)出一個(gè)矩形區(qū)域,然后控制光標(biāo)在其中顯示分?jǐn)?shù)、等級(jí)、預(yù)覽圖和提示信息。2.3.2生成方塊本程序中生成的方塊有六種形狀,每一種方塊以shapeindex標(biāo)記,在程序運(yùn)行生成方塊時(shí),調(diào)用shapeindex=rand()%5+1;語(yǔ)句,確定當(dāng)前要顯示的是哪一個(gè)方塊形狀。而在實(shí)際運(yùn)行中,第一次需要調(diào)用兩次生成方塊函數(shù)make(),將先產(chǎn)生的賦給游戲當(dāng)前方塊,第二個(gè)賦給預(yù)覽圖方塊。以后每次產(chǎn)生一個(gè)方塊,把預(yù)覽方塊賦給當(dāng)前方塊,把新產(chǎn)生的賦給預(yù)覽方塊。具體如圖2.3所示。 圖2.32.3.3方塊變形俄羅斯方塊的特點(diǎn)就在于通過(guò)方塊的變形拼滿整行來(lái)消去該行方塊從而使游戲可以繼續(xù)下去,很難想象不能變形的俄羅斯方塊是什么樣子。而變形的過(guò)程就是根據(jù)當(dāng)前方塊形狀改變方塊的相對(duì)位置,這樣就可以改變方塊的形狀了。在程序中每當(dāng)按下Up鍵,程序判斷可以變形后,根據(jù)當(dāng)前方塊的形狀序號(hào)shapeindex和變化形狀序號(hào)changeindex調(diào)用相應(yīng)的方塊數(shù)值賦給draw()函數(shù),通過(guò)刷新重畫(huà)就可以顯示變化后的方塊了。具體形狀變化如圖2.4所示。2.3.4方塊顯示 以上方塊的操作都是數(shù)據(jù)層面的操作,而真正要在游戲窗口中看到數(shù)據(jù)的變化,還必須把方塊不斷的繪制出來(lái)。這就是draw()函數(shù)的作用。把當(dāng)前運(yùn)動(dòng)的方塊對(duì)應(yīng)節(jié)點(diǎn)存儲(chǔ)在一個(gè)4*4數(shù)組里,變形和生成方塊的過(guò)程就是更新該數(shù)組數(shù)據(jù)的過(guò)程。然后在draw()函數(shù)里檢測(cè)數(shù)組的各個(gè)值,并控制光標(biāo)跳到一定位置,畫(huà)出“”組成方塊。具體方塊對(duì)應(yīng)數(shù)組數(shù)值關(guān)系如圖2.5所示。 圖2.42.3.5障礙判斷障礙判斷,就是在方塊運(yùn)動(dòng)中或者變形中判斷周圍是否有障礙阻礙下落、移位、變形。當(dāng)方塊下落遇到下面有方塊或者到達(dá)下邊界則應(yīng)停止下落并記錄數(shù)據(jù),存入背景數(shù)據(jù)數(shù)組。變形時(shí)應(yīng)判斷這個(gè)變形是否可以進(jìn)行,如果有障礙則不能變形。例如當(dāng)方塊達(dá)到右邊界,而若變形則會(huì)越過(guò)邊界,那么這個(gè)變形的命令是不應(yīng)執(zhí)行的。所有這些判斷都由meet()函數(shù)進(jìn)行,根據(jù)是否有障礙返回1或0,再由其他函數(shù)接收?qǐng)?zhí)行相應(yīng)操作。2.3.6消行計(jì)分游戲玩家拼滿一行后,程序消去滿行,并計(jì)分。中當(dāng)一個(gè)方塊下落停止后,程序檢查方塊是否充滿了游戲區(qū)域,如果是結(jié)束游戲。不是,則判斷是否構(gòu)成消行條件,從下落方塊的最低點(diǎn)依次向上檢查是否可以消行,根據(jù)消去行數(shù)分?jǐn)?shù)增加。分?jǐn)?shù)達(dá)到一定程度,等級(jí)提升,速度加快。如圖2.6所示。2.3.7暫停退出游戲的友好性在于能考慮用戶的需要,隨時(shí)可以暫停/繼續(xù)游戲,在不愿繼續(xù)游戲時(shí)退出游戲。本程序可以在用戶需要的時(shí)候響應(yīng)Esc按鍵,提示是否退出游戲,如果不做選擇即可暫停游戲,等待選擇。界面如圖2.7所示。 圖2.5 圖2.6 圖2.72.4 程序調(diào)試經(jīng)過(guò)調(diào)試和修改,程序完全實(shí)現(xiàn)設(shè)計(jì)要求,成功模擬了俄羅斯方塊的運(yùn)行過(guò)程和游戲效果,只是界面略微簡(jiǎn)陋,但已從程序?qū)用嫔蠈?shí)現(xiàn)了游戲,達(dá)到了這次實(shí)訓(xùn)的要求和目的。程序正常生成方塊,根據(jù)速度值每隔一定時(shí)間自動(dòng)下落,如有操作按鍵按下,根據(jù)按鍵實(shí)現(xiàn)位移和變形。當(dāng)方塊滿一行后,可以消除該行,同時(shí)記錄分?jǐn)?shù)和等級(jí)。按下Esc鍵紅色提示信息正常顯示,可以響應(yīng)Y,N鍵決定是否退出游戲。2.5 軟件使用說(shuō)明 打開(kāi)俄羅斯方塊游戲后,通過(guò)控制方向區(qū)域的“上”、“下”、“左”、“右”來(lái)控制,“上”鍵代表變形轉(zhuǎn)換,“下”、“左”、“右”均代表方向鍵,而“空格”代表“沉底”,也可以通過(guò)“W”、“S”、“A”、“D”來(lái)控制方向;“esc”代表退出游戲鍵。若想暫停游戲,也可通過(guò)“esc”鍵,當(dāng)初來(lái)詢問(wèn)框是,可不做選擇,則可達(dá)到暫停的效果。 第三章 總結(jié)與體會(huì)通過(guò)這次課程設(shè)計(jì),我收獲了很多。首先把所學(xué)知識(shí)加以利用和鞏固,其次在實(shí)踐中遇到問(wèn)題去探索和學(xué)習(xí),更增加了新知識(shí)。在程序設(shè)計(jì)編寫(xiě)過(guò)程中兩個(gè)類的數(shù)據(jù)交換是個(gè)比較麻煩的過(guò)程,這個(gè)類的定義過(guò)程中要用到另一個(gè)類做參數(shù)類型,而在后一個(gè)類中亦需要第一個(gè)類做參數(shù)類型,出現(xiàn)了互相調(diào)用的情況。編譯提示未定義,只好在兩個(gè)類外定義函數(shù)負(fù)責(zé)兩個(gè)類函數(shù)的數(shù)據(jù)交換。實(shí)踐證明達(dá)到了預(yù)期的目的,積累了經(jīng)驗(yàn)。由于程序是用文本窗口模擬的圖形,界面比較簡(jiǎn)陋,如果使用MFC用C+來(lái)實(shí)現(xiàn),那么界面將會(huì)非常好,只是由于所學(xué)知識(shí)有限,只有下一步去探索了。通過(guò)這次的學(xué)習(xí)設(shè)計(jì),我發(fā)現(xiàn)我還有許許多多的不足的地方,比如c+的程序設(shè)計(jì),源代碼的書(shū)寫(xiě)等等,剛開(kāi)始我發(fā)現(xiàn)我的問(wèn)題后,十分緊張,感覺(jué)很絕望,沒(méi)有別人的幫助,自己動(dòng)手設(shè)計(jì)曾經(jīng)自己想都沒(méi)想過(guò)的東西,雖然很興奮,但想想自己無(wú)從下手,原來(lái)的興奮勁一下子都沒(méi)了,很忙然。但是,通過(guò)與王老師的交流,經(jīng)過(guò)老師的耐心講解,我慢慢感到希望又重生了,于是我通過(guò)上網(wǎng)查找資料,進(jìn)圖書(shū)館查找書(shū)籍等,終于知道了俄羅斯方塊游戲的設(shè)計(jì)概念,終于知道了設(shè)計(jì)的方法,于是,漸漸地我的游戲設(shè)計(jì)理念誕生了。通過(guò)幾個(gè)禮拜的設(shè)計(jì),我的游戲漸漸初見(jiàn)成效了,當(dāng)我把回車鍵摁下的一剎那,我十分激動(dòng),眼前的既熟悉又陌生的游戲出現(xiàn)在了我的面前,看著自己設(shè)計(jì)的童年時(shí)代經(jīng)常玩的游戲,我感慨萬(wàn)千。通過(guò)這次設(shè)計(jì),我學(xué)會(huì)了很多東西,例如通過(guò)網(wǎng)絡(luò)資料來(lái)尋求幫助,自己改正錯(cuò)誤,加強(qiáng)了我自己的自己動(dòng)手能力,對(duì)今后的學(xué)習(xí)和生活有很大的幫助,有助于以后的課程設(shè)計(jì)順利完成。附錄1 參考文獻(xiàn)1段鋼 編著 加密與解密(第三版).電子工業(yè)出版社.2009年8月2趙樹(shù)升 趙韶平.Windows信息安全原理與實(shí)現(xiàn).北京:清華大學(xué)出版社.2004年3楊永國(guó).Visual C+ 6.0實(shí)用教程.北京:清華大學(xué)出版社.2004年4唐俊明.Visual C+ 6.0 編程實(shí)例與技巧.北京:高等教育出版,2002年5潘錦平.軟件系統(tǒng)開(kāi)發(fā)技術(shù).西安:西安電子科技大學(xué)出版社, 1997年 附錄2 源程序代碼#include <graphics.h>#include <conio.h>#include <time.h>/ 定義常量、枚舉量、結(jié)構(gòu)體、全局變量/#define WIDTH 10 / 游戲區(qū)寬度#define HEIGHT 22 / 游戲區(qū)高度#define SIZE 20 / 每個(gè)游戲區(qū)單位的實(shí)際像素/ 定義操作類型enum CMD CMD_ROTATE, / 方塊旋轉(zhuǎn) CMD_LEFT, CMD_RIGHT, CMD_DOWN, / 方塊左、右、下移動(dòng) CMD_SINK, / 方塊沉底 CMD_QUIT / 退出游戲;/ 定義繪制方塊的方法enum DRAW SHOW, / 顯示方塊 HIDE, / 隱藏方塊 FIX / 固定方塊;/ 定義七種俄羅斯方塊struct BLOCK WORD dir4; / 方塊的四個(gè)旋轉(zhuǎn)狀態(tài) COLORREF color; / 方塊的顏色 g_Blocks7 = 0x0F00, 0x4444, 0x0F00, 0x4444, RED, / I 0x0660, 0x0660, 0x0660, 0x0660, BLUE, / 口 0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA, / L 0x2260, 0x0E20, 0x0644, 0x0470, YELLOW, / 反L 0x0C60, 0x2640, 0x0C60, 0x2640, CYAN, / Z 0x0360, 0x4620, 0x0360, 0x4620, GREEN, / 反Z 0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN; / T/ 定義當(dāng)前方塊、下一個(gè)方塊的信息struct BLOCKINFO byte id; / 方塊 ID char x, y; / 方塊在游戲區(qū)中的坐標(biāo) byte dir:2; / 方向 g_CurBlock, g_NextBlock;/ 定義游戲區(qū)BYTE g_WorldWIDTHHEIGHT = 0;/ 函數(shù)聲明/void Init(); / 初始化游戲void Quit(); / 退出游戲void NewGame(); / 開(kāi)始新游戲void GameOver(); / 結(jié)束游戲CMD GetCmd(); / 獲取控制命令void DispatchCmd(CMD _cmd); / 分發(fā)控制命令void NewBlock(); / 生成新的方塊bool CheckBlock(BLOCKINFO _block); / 檢測(cè)指定方塊是否可以放下void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); / 畫(huà)方塊void OnRotate(); / 旋轉(zhuǎn)方塊void OnLeft(); / 左移方塊void OnRight(); / 右移方塊void OnDown(); / 下移方塊void OnSink(); / 沉底方塊/ 函數(shù)定義/ 主函數(shù)void main() Init(); CMD c; while(true) c = GetCmd(); DispatchCmd(c); / 按退出時(shí),顯示對(duì)話框咨詢用戶是否退出 if (c = CMD_QUIT) HWND wnd = GetHWnd(); if (MessageBox(wnd, _T("您要退出游戲嗎?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) = IDOK) Quit(); / 初始化游戲void Init() initgraph(640, 480); srand(unsigned)time(NULL);/ 顯示操作說(shuō)明 setfont(14, 0, _T("宋體"); outtextxy(20, 330, _T("操作說(shuō)明"); outtextxy(20, 350, _T("上:旋轉(zhuǎn)"); outtextxy(20, 370, _T("左:左移"); outtextxy(20, 390, _T("右:右移"); outtextxy(20, 410, _T("下:下移"); outtextxy(20, 430, _T("空格:沉底"); outtextxy(20, 450, _T("ESC:退出"); / 設(shè)置坐標(biāo)原點(diǎn) setorigin(220, 20);/ 繪制游戲區(qū)邊界 rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE); rectangle(WIDTH + 1) * SIZE - 1, -1, (WIDTH + 5) * SIZE, 4 * SIZE); / 開(kāi)始新游戲 NewGame();/ 退出游戲void Quit() closegraph(); exit(0);/ 開(kāi)始新游戲void NewGame() / 清空游戲區(qū) setfillstyle(BLACK); bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1); ZeroMemory(g_World, WIDTH * HEIGHT);/ 生成下一個(gè)方塊 g_NextBlock.id = rand() % 7; g_NextBlock.dir = rand() % 4; g_NextBlock.x = WIDTH + 1; g_NextBlock.y = HEIGHT - 1;/ 獲取新方塊 NewBlock();/ 結(jié)束游戲void GameOver() HWND wnd = GetHWnd(); if (MessageBox(wnd, _T("游戲結(jié)束。n您想重新來(lái)一局嗎?"), _T("游戲結(jié)束"), MB_YESNO | MB_ICONQUESTION) = IDYES) NewGame(); else Quit();/ 獲取控制命令DWORD m_oldtime;CMD GetCmd() / 獲取控制值 while(true) / 如果超時(shí),自動(dòng)下落一格 DWORD newtime = GetTickCount(); if (newtime - m_oldtime >= 500) m_oldtime = newtime; return CMD_DOWN; / 如果有按鍵,返回按鍵對(duì)應(yīng)的功能 if (kbhit() switch(getch() case w: case W: return CMD_ROTATE; case a: case A: return CMD_LEFT; case d: case D: return CMD_RIGHT; case s: case S: return CMD_DOWN; case 27: return CMD_QUIT; case : return CMD_SINK; case 0: case 0xE0: switch(getch() case 72: return CMD_ROTATE; case 75: return CMD_LEFT; case 77: return CMD_RIGHT; case 80: return CMD_DOWN; / 延時(shí) (降低 CPU 占用率) Sleep(20); / 分發(fā)控制命令void DispatchCmd(CMD _cmd) switch(_cmd) case CMD_ROTATE: OnRotate(); break; case CMD_LEFT: OnLeft(); break; case CMD_RIGHT: OnRight(); break; case CMD_DOWN: OnDown(); break; case CMD_SINK: OnSink(); break; case CMD_QUIT: break; / 生成新的方塊void NewBlock() g_CurBlock.id = g_NextBlock.id, g_NextBlock.id = rand() % 7; g_CurBlock.dir = g_NextBlock.dir, g_NextBlock.dir = rand() % 4; g_CurBlock.x = (WIDTH - 4) / 2; g_CurBlock.y = HEIGHT + 2; / 下移新方塊直到有局部顯示 WORD c = g_Blocksg_CurBlock.id.dirg_CurBlock.dir; while(c & 0xF) = 0) g_CurBlock.y-; c >>= 4; / 繪制新方塊 DrawBlock(g_CurBlock);/ 繪制下一個(gè)方塊 setfillstyle(BLACK); bar(WIDTH + 1) * SIZE, 0, (WIDTH + 5) * SIZE - 1, 4 * SIZE - 1); DrawBlock(g_NextBlock);/ 設(shè)置計(jì)時(shí)器,用于判斷自動(dòng)下落 m_oldtime = GetTickCount();/ 畫(huà)方塊void DrawBlock(BLOCKINFO _block, DRAW _draw) WORD b = g_Blocks_block.id.dir_block.dir; int x, y; int color = BLACK; switch(_draw) case SHOW: color = g_Blocks_block.id.color; break; case HIDE: color = BLACK; break; case FIX: color = g_Blocks_block.id.color / 3; break; setfillstyle(color); for(int i=0; i<16; i+) if (b & 0x8000) x = _block.x + i % 4; y = _block.y - i / 4; if (y < HEIGHT) if (_draw != HIDE) bar3d(x * SIZE + 2, (HEIGHT - y - 1) * SIZE + 2, (x + 1) * SIZE - 4, (HEIGHT - y) * SIZE - 4, 3, true); else bar(x * SIZE, (HEIGHT - y - 1) * SIZE, (x + 1) * SIZE - 1, (HEIGHT - y) * SIZE - 1); b <<= 1; / 檢測(cè)指定方塊是否可以放下bool CheckBlock(BLOCKINFO _block) WORD b = g_Blocks_block.id.dir_block.dir; int x, y; for(int i=0; i<16; i+) if (b & 0x8000) x = _block.x + i % 4; y = _block.y - i / 4; if (x < 0) | (x >= WIDTH) | (y < 0) return false; if (y < HEIGHT) && (g_Worldxy) return false; b <<= 1; return true;/ 旋轉(zhuǎn)方塊void OnRotate() / 獲取可以旋轉(zhuǎn)的 x 偏移量 int dx; BLOCKINFO tmp = g_CurBlock; tmp.dir+; if (CheckBlock(tmp) dx = 0; goto rotate; tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp) dx = -1; goto rotate; tmp.x = g_CurBlock.x + 1; if (CheckBlock(tmp) dx = 1; goto rotate; tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp) dx = -2; goto rotate; tmp.x = g_CurBlock.x + 2; if (CheckBlock(tmp) dx = 2; goto rotate; return;rotate: / 旋轉(zhuǎn) DrawBlock(g_CurBlock, HIDE); g_CurBlock.dir+; g_CurBlock.x += dx; DrawBlock(g_CurBlock);/ 左移方塊void OnLeft() BLOCKINFO tmp = g_CurBlock; tmp.x-; if (CheckBlock(tmp) DrawBlock(g_CurBlock, HIDE); g_CurBlock.x-; DrawBlock(g_CurBlock); / 右移方塊void OnRight() BLOCKINFO tmp = g_CurBlock; tmp.x+; if (CheckBlock(tmp) DrawBlock(g_CurBlock, HIDE); g_CurBlock.x+; DrawBlock(g_CurBlock); / 下移方塊void OnDown() BLOCKINFO tmp = g_CurBlock; tmp.y-; if (CheckBlock(tmp) DrawBlock(g_CurBlock, HIDE); g_CurBlock.y-; DrawBlock(g_CurBlock); else OnSink(); / 不可下移時(shí),執(zhí)行“沉底方塊”操作/ 沉底方塊void OnSink() int i, x, y;/ 連續(xù)下移方塊 DrawBlock(g_CurBlock, HIDE); BLOCKINFO tmp = g_CurBlock; tmp.y-; while (CheckBlock(tmp) g_CurBlock.y-; tmp.y-; DrawBlock(g_CurBlock, FIX);/ 固定方塊在游戲區(qū) WORD b = g_Blocksg_CurBlock.id.dirg_CurBlock.dir; for(i = 0; i < 16; i+) if (b & 0x8000) if (g_CurBlock.y - i / 4 >= HEIGHT) / 如果方塊的固定位置超出高度,結(jié)束游戲 GameOver(); return; else g_Worldg_CurBlock.x + i % 4g_CurBlock.y - i / 4 = 1; b <<= 1; / 檢查是否需要消掉行,并標(biāo)記 int row4 = 0; bool bRow = false; for(y = g_CurBlock.y; y >= max(g_CurBlock.y - 3, 0); y-) i = 0; for(x = 0; x < WIDTH; x+) if (g_Worldxy = 1) i+; if (i = WIDTH) bRow = true; rowg_CurBlock.y - y = 1; setfillstyle(WHITE, DIAGCROSS2_FILL); bar(0, (HEIGHT - y - 1) * SIZE + SIZE / 2 - 2, WIDTH * SIZE - 1, (HEIGHT - y - 1) * SIZE + SIZE / 2 + 2); if (bRow) / 延時(shí) 200 毫秒 Sleep(200);/ 擦掉剛才標(biāo)記的行 IMAGE img; for(i = 0; i < 4; i+) if (rowi) for(y = g_CurBlock.y - i + 1; y < HEIGHT; y+) for(x = 0; x < WIDTH; x+) g_Worldxy - 1 = g_Worldxy; g_Worldxy = 0; getimage(&img, 0, 0, WIDTH * SIZE, (HEIGHT - (g_CurBlock.y - i + 1) * SIZE); putimage(0, SIZE, &img); / 產(chǎn)生新方塊 NewBlock();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

注意事項(xiàng)

本文(《軟件工程課程設(shè)計(jì)》報(bào)告俄羅斯方塊游戲)為本站會(huì)員(仙***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!