C俄羅斯方塊小游戲論文_第1頁
C俄羅斯方塊小游戲論文_第2頁
C俄羅斯方塊小游戲論文_第3頁
C俄羅斯方塊小游戲論文_第4頁
C俄羅斯方塊小游戲論文_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、x x x x大學(xué)c+語言程序設(shè)計課程設(shè)計(論文)題目:俄羅斯方塊小游戲院(系):專業(yè)班級:學(xué) 號:學(xué)生姓名:指導(dǎo)教師:教師職稱:起止時間:院(系):課程設(shè)計(論文)任務(wù)及評語教研室:學(xué)生姓名專業(yè)班級課程設(shè)計(論文)題目俄羅斯方塊小游戲課程設(shè)計(論文)任務(wù)程序設(shè)計的任務(wù)與要求:(1) 掌握面向?qū)ο蟪绦蛟O(shè)計語言c+的基本語法(2) 掌握c+面向?qū)ο笤O(shè)計的思想(3) 掌握vc+6. 0與dev c+開發(fā)工具的使用(4) 運用標(biāo)準(zhǔn)c+規(guī)范設(shè)計應(yīng)用程序設(shè)計過程屮,要嚴(yán)格遵守設(shè)計的時間安排,聽從指導(dǎo)教師的指導(dǎo)。 正確地完成上述內(nèi)容,規(guī)范完整地撰寫出設(shè)計報告。指導(dǎo)教師評語及成績指導(dǎo)教師簽字:目錄第章課程設(shè)

2、計目的與要求11.1設(shè)計目的11.2實驗環(huán)境11.3預(yù)備知識114設(shè)計要求1第2章課程設(shè)計內(nèi)容22. 1課題描述22. 2系統(tǒng)設(shè)計22. 2. 1功能分析22. 2.2面向?qū)ο笤O(shè)計22. 2.2類成員描述72. 3程序?qū)崿F(xiàn)72. 3. 1源碼分析102. 3.2運行結(jié)果10第3章總結(jié)16參考文獻(xiàn)17第1章課程設(shè)計目的與要求1.1設(shè)計目的將理論教學(xué)中涉及到的知識點貫穿起來,對不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù) 結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計題目進(jìn)行綜合性應(yīng)用,對所學(xué)知識達(dá)到融會貫通的程度。 通過課程設(shè)計,學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:(1) 進(jìn)一步鞏固、加深學(xué)生所學(xué)專業(yè)課程c+語言教程的基本

3、理論知識,理論聯(lián)系 實際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。(2) 全面考核學(xué)生所掌握的基本理論知識及其實際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的 最終目的。(3) 利用所學(xué)知識,開發(fā)小型應(yīng)用系統(tǒng),掌握運用c+語言編寫調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn) 練獨立開發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。(4) 對于給定的設(shè)計題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。(5) 掌握而向?qū)﹀璩绦蛟O(shè)計的方法。(6) 熟練掌握c+語言的基本語法,靈活運用各種數(shù)據(jù)類型。(7) 進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。1.2實驗環(huán)境硬件要求能運行windows操作系統(tǒng)的微機(jī)系統(tǒng)。c+語言應(yīng)用程序開發(fā)軟件使用

4、: vc+系統(tǒng),或其他c+語言應(yīng)用程序開發(fā)軟件。1.3預(yù)備知識熟悉c+語言程序設(shè)計的基本知識及vc+編輯器的使用方法。1.4設(shè)計要求1. 仔細(xì)分析設(shè)計題目,畫出程序流程圖,編寫程序源代碼。2. 積極上機(jī)調(diào)試源程序,增強(qiáng)編程技巧與調(diào)程能力。3. 認(rèn)真書寫課程設(shè)計預(yù)習(xí)報告,課程設(shè)計說明書。4. 遵守課程設(shè)計要求和機(jī)房管理制度,服從指導(dǎo)教師的安排,確保課程設(shè)計的順利完成 課程設(shè)計內(nèi)容。第2章課程設(shè)計內(nèi)容2. 1課題描述本游戲程序玩家人數(shù)應(yīng)為一人,游戲區(qū)域上方不斷地岀現(xiàn)預(yù)定義形狀的方塊,下墜 方塊可以通過旋轉(zhuǎn)改變其顯示形狀,并且不斷地往下墜,直到它接觸到游戲區(qū)域底部或 者其它之前已經(jīng)累疊起的下墜方塊。

5、當(dāng)一個下墜方塊到達(dá)游戲區(qū)域底部或者接觸到其他 之前已經(jīng)累疊起的下墜方塊后,其位置則確定下來并占有該空間的位置區(qū)域。當(dāng)游戲區(qū)域的某一行被下墜方塊完全填充,則消除該行的所有下墜方塊,壘在其上 的方塊將按照一定的算法掉下代替改行空間。游戲的結(jié)束是以下墜方塊的頂部到達(dá)游戲 區(qū)域頂部作為判斷依據(jù)。在游戲區(qū)域產(chǎn)生一個新的方塊的一瞬間,立即產(chǎn)生下一個下墜方塊的形狀并在提示 區(qū)域的左上方有預(yù)先提示。同時,在游戲界面的右下方,將顯示玩家所得的分?jǐn)?shù),已經(jīng) 消除的行數(shù)以及游戲的級別。每當(dāng)游戲玩家成功消除一行方塊時,將按照一定的算法計 算岀所得分?jǐn)?shù),并修改游戲狀態(tài)區(qū)域的分?jǐn)?shù)和行數(shù)的數(shù)值。另外,游戲可提供不同的游 戲級

6、別,用戶可根據(jù)自己的興趣選擇相應(yīng)的級別。游戲級別的信息也將顯示在游戲狀態(tài) 區(qū)域。本游戲通過鍵盤方向鍵操作。在游戲過程中,當(dāng)游戲玩家按up鍵時,則改變方塊的 形狀;按right鍵時,則方塊向右移一個單元;按left鍵時,則方向塊左移一個單元; 當(dāng)按down鍵時,加速下落。當(dāng)方塊堆滿方框頂是游戲結(jié)束,游戲提示玩家是否繼續(xù)。2. 2系統(tǒng)設(shè)計本程序由兩個同學(xué)共同完成,具體分工如下:1共同部分:兩個人共同確定整體設(shè)計階段的程序框架和具體實現(xiàn)的功能,確定系 統(tǒng)功能模塊。2.本人任務(wù):完成方塊移動和變形中所做的一些判斷、顯示方塊、圖形更新和其他 等工作。2. 2. 1功能分析本游戲通過鍵盤方向鍵操作。在游戲

7、過程中,當(dāng)游戲玩家按up鍵時,則改變方塊的 形狀;按門ght鍵時,則方塊向右移一個單元;按left鍵吋,則方向塊左移一個單元;當(dāng)按down鍵時,加速下落。從鍵盤輸入的各按鍵的代碼分別為:esc 0x01 lb、up 0x4800、down 0x5000、left0x4b00、 rtght 0x4d00、 space 0x3920、 y0xl579、 n0x316e。2. 2. 2面向?qū)ο笤O(shè)計外部功能模塊圖休閑類小游戲3俄羅斯方塊athechouice1moveshowupdatedchecksoutset選擇速方塊落顯不出刷新,消判斷杲顯示開度并開下,左方塊,游行,記否到底,始畀面,始游戲3移

8、,右移戲速度分,判斷判斷右并顯示及變形3和級別3游戲是邊杲否游戲方否結(jié)束d越界彳法3圖2. 3.2外部功能模塊圖主函數(shù)功能圖圖2. 3.3外部功能模塊圖主函數(shù)流程圖圖2. 3.4主函數(shù)流程圖圖形變換的n-s框圖定義i, j, count,并把count初始i二 19j二 13方塊木身的坐標(biāo)加上動點坐標(biāo)等于背景的坐標(biāo)是否backi j = 1i二 19int flag = 1j <= 13backij != 1flag=01if flag 二二 1進(jìn)行消行操作圖2. 3.5圖形變換功能的n-s框圖2. 2. 2類成員描述uml類圖caaaaview (from aaaa) <>

9、back2115:int <score : longcaaaaviewqgetdocumento«virtual» ondrawo<<virtual>> precreatewindowq 曠*virtual a onprepareprintingo 7«virtual» onbeginprintingq t«virtual» onendprintingoshow。check_changequpdatedcheck_buttomqrnoveo門 into_continueo<<virtual&g

10、t;> -caaaaviewq v*virtu如 const» assertvalido uuwrtual, const» dumpq 7«afx_msg» ontimerq ?«afx_msg>> oncreateocaaaaapp(from aaaa)caaaaappq«virtual» iriitlnstanceo «a1x msg» onappaboutqcaaaadoc(from aaaa)iscaaaadocq<<virtual» onnewdocume

11、nto«virtual>> serializeo«virtual» -caaaadocqcaboutdig(from sass)caboudigo» dodataexchangeqcmainframeijfrom aas)+p<<typedef>>point(from aaaa)<<typedef»shape(from aaaa)tcmainframeo«virtual» precreatewindowq «virtual» -cmainframeq vir

12、tual. const» assertvalido圖2. 3. 1類的uml圖2. 3程序?qū)崿F(xiàn)在該程序中,把7中方塊的總共19不同變形都用結(jié)構(gòu)體儲存下來了,前面四種為一 種形狀的不同變形,第5種到第六種為一種形狀的不同變形,第七種為正方形方塊,沒 有變形,第八到第九為一種形狀的不同變形,第十到十一也為一種形狀的不同變形,十 二到十五和十六到十九分別為兩種方塊的不同變形。程序中把方塊定義為參數(shù)t,當(dāng)按 上鍵時執(zhí)行t+,即變化為下一種情況,但是會遇到一個問題,就是假如t為四的時候 再做t+就會變成五,但是五不是前面四種形狀中的一種變形,不符合要求,所以我用 一個判斷語句做個判斷,即if(

13、tl二二3) tl二0;,該語句的意思是,假如tl等于3 的時候就把tl賦值為0,不讓它繼續(xù)加導(dǎo)致變成另外一種類型的方塊;下面的依次類推, 如果tl不等于3、5、6、8、10、14、18等就可以直接執(zhí)行t+了。方塊變形的代碼如下:if(tl = 3&&check_chcinge( p, ps0)tl 二 0;else if(tl 二二 5&&check_change( p, ps4) tl 二 4;else if(tl 二二 6)tl = 6else if(tl = 8&&check_change(p, ps7) tl = 7; else if(

14、tl = 10&&check_change( p, ps9) tl = 9; else if(tl 二二 14&&check_change(p, psll) tl 二 11; else if(tl = 18&&check_chcinge( p, ps15) tl = 15; else if(check_change( p, pstl + 1)tl+; break;上面代碼中有函數(shù)check_change( p, pstl+l),該函數(shù)是做一個判斷,在下面講會講到。方塊移動和變形中所做的一些判斷把移動、變形放到一個死循環(huán)中,用_kbhit()判斷是

15、否有鍵盤消息,用舅etch()接 收鍵盤消息,其中0x50、0x4b、0x4d、0x48分別代表下鍵、左鍵、右鍵和上鍵,32代 表按空格。接受到從鍵盤輸入的這些消息后,就做該消息所對應(yīng)的操作。每做一次就會 清屏一次,并顯示出來它做過該操后的效果。其中還需要注意的就是移動的時候要判斷是否到達(dá)邊緣,到達(dá)邊緣z后就不能繼續(xù) 移動了, 上面代碼中判斷到達(dá)邊緣的語句有: backpstl co0+p. i pstl col+p. j -1= 0 && backpstl co2 +p i pstl co3+p. j - 1 = 0 && backpstl. co4+ p.

16、i pstl. co5+p. j 一 1 = 0 && backpstl co + p. i pstl. co7+p. j - 1 等;其他大概都差不多。還有一個問題不容易被察覺,就是方塊貼到方框邊緣后變形的問題,在這兒也要做 一個判斷才行,要判斷該形狀變形后的形狀是否超越過了邊緣,如果沒有做這個判斷的 話,方塊變形后就會掛在方框邊緣上,因為方框的邊緣是賦值為1的,變形后移動的時 候它會判斷背景是否為1,如果為1的話便不會再移動了,所以圖形塊就掛在上面移動 不了了。關(guān)于判斷變形后的圖形是否越界的函數(shù)是:其中傳遞進(jìn)來的一個參數(shù)是tl+1,即當(dāng)前圖形的下一個形狀,if中的條件就是判

17、斷 當(dāng)前圖形的下一個形狀是否挨到邊緣,是的話就返回0,沒有就返回1。接下來便是判斷是否到底,然后再進(jìn)行輸出或刷新。顯示方塊用一個雙循環(huán)來輸出,用si. co0+p. i = i && si. col+p. j = j來判斷,即 用當(dāng)前方塊的坐標(biāo)加上動點的坐標(biāo)的值是否與當(dāng)前的行或列相等,相等的時候就輸出一 個,不相等的時候輸出空格。在外循環(huán)內(nèi)寫兩個內(nèi)循環(huán),一個用于現(xiàn)實當(dāng)前正在下落 的方塊,另一個用來顯示下一個將要顯示的方塊。第二的內(nèi)循環(huán)把jj初始化為-1是為 了不讓其與邊框貼太近導(dǎo)致看不清,而用s2co0+4 = i和s2col+l = jj中間 加了 4和1是為了讓上下左右都有

18、一定的空間讓游戲界面更加美觀,在這個循環(huán)里做一 個判斷然后顯示分?jǐn)?shù)和游戲級別。圖形的更新方塊每移動一個坐標(biāo)的位置,圖形都會更新一次,其中的循環(huán)和顯示方塊中的循環(huán) 一樣,只是執(zhí)行的內(nèi)容改變了,在判斷方塊的坐標(biāo)加上動點的坐標(biāo)是否等于背景的坐標(biāo) 后,就把該坐標(biāo)的值賦值為一,當(dāng)下一個圖形移動到該圖形處由于該圖形的背景坐標(biāo)為 一,所以圖形便會停止移動了。該工作做完后便判斷是否要消行,判斷消行也要用一個 雙循環(huán),在外循環(huán)中定義一個標(biāo)志flag并賦值為1,在內(nèi)循環(huán)屮判斷,看是否有一個坐 標(biāo)處為0,如果有一個為0的話,就把flag的值改為0;該循環(huán)結(jié)束后就進(jìn)行下一個內(nèi) 循環(huán),先判斷flag的值,值為1的話就進(jìn)

19、行消行操作,即把上面一行的值賦給下面一行。 在更新這個函數(shù)的開始定義一個變量,用來記消去的行數(shù),如果一次消去一行,分?jǐn)?shù)就 加上10, 一次消去兩行,分?jǐn)?shù)加上30, 次消去三行,分?jǐn)?shù)加上50,消去四行分?jǐn)?shù)就 加上100o在該函數(shù)屮還要判斷游戲是否結(jié)束,即是檢查第一列的沒行的開始一個坐標(biāo) 是否等于1,如果等于1方塊累積到了頂端,游戲便結(jié)束了,在方框底端輸出“game over!"字樣。該部分代碼如下:其他在程序中的方塊是隨機(jī)產(chǎn)生的,用srand(timc(null)做隨機(jī)種子,然后用rand% 19 隨機(jī)選取十九中圖形的一種。程序中的system( “els”)是用于清屏。在開始還有一個

20、 chioce函數(shù),是用來游戲玩家根據(jù)自己的需要選擇游戲級別的,在選擇中要按照游戲中 提示的來選擇,否則將按默認(rèn)的速度來處理。2. 3. 1源碼分析部分代碼如下:/ mciinfrm. h : interface of the cmciinframe class#if defined(afx mainfrm 11 2d3735c2 3728 4501 ad1f 0f3a8353615b includ ed_)tfdefine afx_mainfrmj1_2d3735c2_3728_45o1_ad1f_of3a8353615b_included_#if _msc_ver > 1000ttp

21、ragma oncesendif / _msc_ver > 1000/#modeiid=495db15c0265class cmainframe : public cframcwndprotected: / crcatc from scrialization only/#modeiid=495db15c0281cmciinframe ();declare_dyncreate(cmainframe)/ attributespublic:/ operationspublic:/ overrides/ classwizard generated virtual function overrid

22、es/ afx_virtual (cmciinframe)/#modeiid=495db15c0282virtual bool prccrcatcwindow(createstruct& cs);/afx_virtual/ implcmcntqtionpublic:#mode 11 d=495db 15c0292virtueil cmainframe ();ttifdef _debug/sttmode 11 d=495db 15c0294rtual void assertvalid() const;/#mode1id=495db15c029fvirtual void dump(cdum

23、pcontext& de) const;#endifprotected: / control beir embedded members/#modeltd=495db15c02bfcstatusbar m wndstatusbar;/#mode1id=495db15c02cfctoolbarm_wndtoolbar;/ genera ted message meip func tionsprotected:/ afx_msg(cmainframe)/#mode1id=495db15c02eeafxmsg int oncreate(lpcreatestruct ipcreatestruc

24、t);/ note - the classwizard will add and remove member functions here./ do not edit what you see in these blocks of generated code!/afx_msgdeclare j1essagej1ap ();/ /afx_insert_location/ microsoft visual c+ will insert additional declarations immediately before the previous line.#endif/ !defined(afx

25、_matnfrm_h_2d3735c2_3728_4501_adlf_0f3a8353615b_tncluded_)/ aaaaviewh : interface of the caaaaview class/ /#if !defined(afx_aaaavtew_h40b67261_c3f3_4cd4_afed_6d287a0blae3tnclu ded_)tfdefine afx_aaaaviewj1_4ob67261_c3f3_4cd4_afed_6d287aob1ae3_included_#if _msc_ver > 1000ttpreignici once#endif / _m

26、sc_ver > 1000/#mode1id=495db15c02fdtypedef struct point/*點的坐標(biāo)*/int i;/縱坐標(biāo)int j;/橫坐標(biāo)point;/sttmode 11 d=495db 15c031ctypedef struct shape/*形狀單一狀態(tài)的記錄*/int co8;shape;/#mode1id=495db15c038aclass caaaaview : public cviewprotected: / create from serialization only/#mode1id=495db15c039acaaaavi ew();decl

27、are.dyncreate (caeiaaview)/ attributespublic:int tl, t2, level, speed, timeflag;/#mode1id=495db15c03aashcipe ps19;/#modeltd=495db15c03b9int back2115;/sttmode 11 d=495db 15d003fpoint p;/sttmode 11 d=495db 15d0043lo ng score;/#modelid=495dbl5d004ecaaaadoc* getdocument ();/ operationspublic:/ overrides

28、/ classwizard generated virtual function overrides/ afx_virtual(caaaaview)public:/#modeltd=495db15d005dvirtual void ondreiw(cdc* pdc) ;/ overridden to dreiw this view#mode 11 d=495db 15d006dvirtual bool precreatewindow(createstruct& cs);protected:/#mode1id=495db15d007dvirtual bool onprepareprint

29、ing(cprintlnfo* plnfo); /#modelid=495dbl5d008cvirtual void onbeginprinting(cdc* pdc, cprintlnfo* plnfo); /#modeltd=495db15d009cvirtual void onendprinting(cdc* pdc, cprintlnfo* plnfo); /afx_virtual/ implementationpublic:/#mode1id=495db15d00bbvoid show(point p,shape si,shape s2);/#modelid=495dbl5d00cb

30、int check_change(point p,shape s);/#modelid=495dbl5d00davoid update(point p, shape s);/更新/#modeltd=495db15d00eaint check_buttom(point p, shape s);/#modelid=495dbl5d00favoid move ();/#mode1id=495db15d00fbvoid nint() ;/畫方框/#modeltd=495db15d0109int _continue();/sttmode 11 d=495db 15d01oavirtual caaaavi

31、ew();sifdef _debug/sttmode 11 d=495db 15d0119virtual void assertvalido const;/sttmode 11 d=495db 15d011bvirtual void dump (cdumpcontext& de) const;#endifprotected:/ genera ted message meip func tionsprotected:/afx_msg(caaaaview)/sttmode 11 d=495db 15d0129afx msg void ontimer(utnt ntdevent);/sttm

32、ode 11 d=495db 15d0139afxmsg int oncreate(lpcreatestruct ipcreatestruct);/#modeltd=495db15d014aafx_msg void onlbuttondown(uint nflags, cpoint point);/sttmode 11 d=495db 15d0167afxmsg void onkeydown(utnt nchar, utnt nrepcnt, utnt nflags); /afx_msgdeclare.message.map();ttifndef _debug / debug version

33、in aaaaview. eppiniine caaaadoc* caaaaview:getdocument() return (caaaadoc*)m_pdocument; #endif/ afx_insert_location/ microsoft visual c+ wi11 insert additional declarations immediately before the previous line.#endif/ !defined (afx aaaavtew h 40b67261 c3f3 4cd4 afed 6d287a0b1ae3 included )2. 3. 2運行結(jié)果第3章總結(jié)通過課程設(shè)計,培養(yǎng)了我的動手能力以及綜合運用所學(xué)的c+

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論