版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p><b> 1 前言4</b></p><p><b> 2 需求分析4</b></p><p><b> 2.1系統(tǒng)概述4</b></p><p><b> 2.1.1
2、概述4</b></p><p> 2.2系統(tǒng)運(yùn)行環(huán)境4</p><p> 2.2.1運(yùn)行環(huán)境4</p><p> 2.3功能需求描述5</p><p> 2.3.1功能需求5</p><p><b> 3 總體設(shè)計(jì)5</b></p><p>
3、; 3.1開(kāi)發(fā)與設(shè)計(jì)的總體思想5</p><p> 3.1.1屏幕的組成5</p><p> 3.1.2形狀的組成6</p><p> 3.1.3形狀的統(tǒng)一6</p><p> 3.1.4移動(dòng)與旋轉(zhuǎn)的統(tǒng)一7</p><p><b> 4 概要設(shè)計(jì)11</b></p&g
4、t;<p> 4.1數(shù)據(jù)流圖11</p><p> 4.2系統(tǒng)功能模塊11</p><p> 4.3 系統(tǒng)流程圖12</p><p><b> 5 詳細(xì)設(shè)計(jì)12</b></p><p> 5.1.界面的設(shè)計(jì)12</p><p> 5.1.1背景色的選擇模塊13
5、</p><p> 5.2游戲隨機(jī)選擇方塊模塊14</p><p> 5.3游戲預(yù)覽功能模塊17</p><p> 5.4收埋功能模塊20</p><p> 5.5記分功能模塊23</p><p> 5.6鼠標(biāo)控制功能模塊25</p><p><b> 6 測(cè)試分
6、析27</b></p><p><b> 7 心得體會(huì)27</b></p><p><b> 參考文獻(xiàn)28</b></p><p> 致 謝28</p><p><b> 俄羅斯方塊游戲</b></p><p>
7、摘要:該游戲軟件在Windows系統(tǒng)為玩家提供傳統(tǒng)俄羅斯方塊游戲的基本功能,玩家可以通過(guò)鍵盤(pán)控制在游戲區(qū)中堆積軟件隨機(jī)提供的7種類(lèi)型方塊,在游戲區(qū)堆滿(mǎn)一行后,自動(dòng)消除并記分。當(dāng)游戲區(qū)不能再堆積新來(lái)的方塊時(shí),游戲結(jié)束。游戲設(shè)定3個(gè)級(jí)別,初級(jí),中級(jí)跟高級(jí),級(jí)別越高,方塊下降的速度越快、難度越大,玩家可以根據(jù)自己的需要自由設(shè)定初始游戲級(jí)別,達(dá)到最高級(jí)別時(shí)不再增加。游戲以最終玩家獲得的分?jǐn)?shù)來(lái)判斷玩家水平的高低。</p><p
8、><b> 1 前言</b></p><p> 隨著社會(huì)發(fā)展,人類(lèi)的生產(chǎn)、生活越來(lái)越離不開(kāi)信息。誰(shuí)擁有了更多更有效的信息,誰(shuí)就將在競(jìng)爭(zhēng)中處于有利地位。信息產(chǎn)業(yè)正在成為一個(gè)國(guó)家的支柱。只有擁有了先進(jìn)的數(shù)據(jù)庫(kù)技術(shù),才能有效地管理好浩如煙海的數(shù)據(jù),并從中提取出對(duì)自己有用的信息來(lái)加以利用。</p><p> 作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)信息進(jìn)行管理,具有手
9、工管理所無(wú)法比擬的優(yōu)點(diǎn).例如:檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低等。這些優(yōu)點(diǎn)能夠極大地提高管理的效率,也是正規(guī)化管理,與世界接軌的重要條件。 </p><p> 在下面的各章中我們將以開(kāi)發(fā)一個(gè)俄羅斯方塊游戲?yàn)槔?談?wù)勂溟_(kāi)發(fā)過(guò)程和所涉及到的問(wèn)題及解決方法。</p><p><b> 2 需求分析</b></p><p
10、><b> 2.1系統(tǒng)概述</b></p><p><b> 2.1.1概述</b></p><p> 該游戲軟件在Windows系統(tǒng)為玩家提供傳統(tǒng)俄羅斯方塊游戲的基本功能,玩家可以通過(guò)鍵盤(pán)控制在游戲區(qū)中堆積軟件隨機(jī)提供的由四個(gè)小方塊不同組合的7種類(lèi)型不同顏色的方塊,每個(gè)小方格的顏色也是隨機(jī)的,并且在整個(gè)下落的過(guò)程中,其顏色也呈動(dòng)態(tài)變
11、化。游戲過(guò)程中,每在游戲區(qū)堆滿(mǎn)一行后,自動(dòng)消除并記分。同時(shí)消去的行數(shù)越多,那一次性所加的分?jǐn)?shù)也就越多。一行是100,兩行是300,三行是600,四行是1000分。為了得到更多的分,那么我們游戲者就要想辦法一次盡可能多的消去方塊。當(dāng)游戲區(qū)不能再堆積新來(lái)的方塊時(shí),游戲結(jié)束。游戲設(shè)定3個(gè)級(jí)別,初級(jí),中級(jí)和高級(jí),級(jí)別越高,方塊下降的速度越快、難度越大,玩家可以根據(jù)自己的需要自由設(shè)定初始游戲級(jí)別,達(dá)到最高級(jí)別時(shí)不再增加。游戲以最終玩家獲得的分?jǐn)?shù)來(lái)
12、判斷玩家水平的高低。游戲?yàn)閷?duì)戰(zhàn)型俄羅斯方塊,玩家依靠自己消層和使用道具來(lái)打擊對(duì)手。當(dāng)玩家游戲池中的磚塊累積到頂端時(shí)游戲失敗。</p><p><b> 2.2系統(tǒng)運(yùn)行環(huán)境</b></p><p><b> 2.2.1運(yùn)行環(huán)境</b></p><p> (1)硬件環(huán)境。本系統(tǒng)適用于那種Inter386以上計(jì)算機(jī),內(nèi)存容
13、量為128M,應(yīng)配備,鍵盤(pán),鼠標(biāo),顯示器等外部設(shè)備。</p><p> (2)軟件環(huán)境。本系統(tǒng)的設(shè)計(jì)采用Visual C++6.0編寫(xiě)。在Windows XP SP2環(huán)境下測(cè)試通過(guò)</p><p> (3)本游戲軟件在Windows平臺(tái)下都可以運(yùn)行。</p><p><b> 2.3功能需求描述</b></p><p&
14、gt;<b> 2.3.1功能需求</b></p><p> 這是一次嘗試,一個(gè)比較成功的設(shè)計(jì),其精彩的算法與漂亮的程序結(jié)構(gòu)足以讓人興奮了。</p><p> 這個(gè)游戲,不僅可以滿(mǎn)足游戲愛(ài)好者對(duì)游戲的要求,同時(shí)我們?cè)黾恿嗣烙^因素,讓游戲有一個(gè)比較美觀的界面,滿(mǎn)足我們游戲愛(ài)好者的視覺(jué)要求。</p><p> 這有別于常規(guī)的俄羅斯方塊算法,
15、游戲中,玩家依靠自己消層來(lái)得分。當(dāng)玩家游戲池中的磚塊累積到頂端時(shí)游戲失敗。</p><p><b> 3 總體設(shè)計(jì)</b></p><p> 3.1開(kāi)發(fā)與設(shè)計(jì)的總體思想</p><p> 3.1.1屏幕的組成</p><p> 一個(gè)游戲一定要有一個(gè)界面供游戲者對(duì)游戲控制。</p><p>
16、 這個(gè)界面中要包含讓游戲者更加清楚游戲狀態(tài)的信息,比如,一個(gè)方塊在下落過(guò)程中,它的位置如何,形狀是怎么樣的,要如何放置這個(gè)方塊,以及下一個(gè)方塊是什么形狀,這樣關(guān)系著游戲者要如何放置方塊,讓整體有個(gè)更加的布局,有利于游戲的進(jìn)行。屏幕由20行13列的網(wǎng)格組成;其中0~2行:初始的形狀將在這里形成然后下落,這三行用戶(hù)不可見(jiàn);3~19區(qū)域;20,其標(biāo)記已到屏幕底部。在界面的右邊就是相關(guān)的游戲信息,級(jí)別控制,開(kāi)始游戲控制,背景色的選擇,當(dāng)前方塊
17、的坐標(biāo),組型,顏色及類(lèi)型(ZZ表示)以及目前的得分情況,下一個(gè)預(yù)覽方塊,鼠標(biāo)控制信息(變形,左移,右移和加速下落),</p><p> 收埋信息(分別向上,下,左和右收埋,及結(jié)束游戲收埋,這時(shí)將顯示版權(quán)信息)。</p><p> 3.1.2形狀的組成</p><p> 每一種形狀都是由四個(gè)方塊組成,比如■■■■由四個(gè)方塊橫向排列而成</p>&l
18、t;p> 3.1.3形狀的統(tǒng)一</p><p> ■■■■等共19種形狀(旋轉(zhuǎn)前后的形狀歸為不同的形狀),雖然在玩游戲時(shí)我們會(huì)去將各種不同的形狀有個(gè)不同的命名(比如“條子”,“方塊”等),但在設(shè)計(jì)游戲是它們卻是統(tǒng)一的,它們都是“形狀”。這一點(diǎn)是游戲成功的基礎(chǔ)。</p><p> 為了使各種不同的形狀達(dá)到統(tǒng)一的設(shè)計(jì),我設(shè)計(jì)了如下解決方案:將形狀始終放在4×4的格子中,以
19、該4×4格子的第一個(gè)格子為“基礎(chǔ)點(diǎn)”,只要給出組成形狀的四個(gè)塊相對(duì)于該基礎(chǔ)點(diǎn)的相對(duì)坐標(biāo)。</p><p> ★□□□ ★為基礎(chǔ)點(diǎn),形狀各塊的相對(duì)坐標(biāo)是相對(duì)于這個(gè)基礎(chǔ)點(diǎn)的</p><p><b> □□□□</b></p><p><b> □□□□</b></p><p><
20、;b> □□□□</b></p><p> 那么■■■■在其中就如圖:其四個(gè)方塊相對(duì)于基礎(chǔ)點(diǎn)的網(wǎng)格坐標(biāo)就為</p><p> ?。?,2)(1,2)(2,2)(3,2)</p><p><b> □□□□ </b></p><p><b> □□□□</b></p&g
21、t;<p> ■■■■ 02122232</p><p><b> □□□□ </b></p><p> 我們將用一個(gè)int[8]記錄下這四個(gè)相對(duì)坐標(biāo)值</p><p><b> 同理:</b></p><p><b> □□□□</b></p
22、><p><b> □□□□</b></p><p><b> ■■□□</b></p><p> ■■□□ 02120313</p><p> 這樣,我們只要知道某個(gè)形狀的相對(duì)坐標(biāo)值數(shù)組,就可以輕松地求出它的各方塊的排列方式,也就是其形狀(樣子)。</p><p>
23、 3.1.4移動(dòng)與旋轉(zhuǎn)的統(tǒng)一</p><p> 從上面我們可以看出形狀的移動(dòng)可以這樣來(lái)實(shí)現(xiàn): 移動(dòng)基礎(chǔ)點(diǎn)的網(wǎng)格坐標(biāo),然后組成形狀的四個(gè)方塊按照其與基礎(chǔ)點(diǎn)坐標(biāo)的相對(duì)值而改變網(wǎng)格坐標(biāo),則表現(xiàn)為移動(dòng)。</p><p> 旋轉(zhuǎn)與移動(dòng)的原理一樣:設(shè)旋轉(zhuǎn)前的形狀為ZZ = 0,旋轉(zhuǎn)后的形狀為ZZ=1,組成形狀A(yù)的四個(gè)方塊按照B(而不是按照A)的相對(duì)于基礎(chǔ)點(diǎn)坐標(biāo)的相對(duì)值而改變網(wǎng)格坐標(biāo),則表現(xiàn)為旋轉(zhuǎn)。
24、</p><p><b> 比如,</b></p><p><b> □□□□ </b></p><p><b> □□□□</b></p><p> ■■■■ 02122232</p><p><b> □□□□ </b&
25、gt;</p><p> 移動(dòng): 設(shè)其基礎(chǔ)點(diǎn)網(wǎng)格坐標(biāo)為(gX,gY),其各方塊當(dāng)前坐標(biāo)(gX+0,gY+2), (gX+1,gY+2), (gX+3,gY+2), (gX+3,gY+2)。如果其向左移動(dòng)一格,那么它的基礎(chǔ)了坐標(biāo)gX-=1; gY=gY; 其各方塊移動(dòng)后坐標(biāo) (gX+0,gY+2), (gX+1,gY+2), (gX+3,gY+2), (gX+3,gY+2)。</p><p&g
26、t; 旋轉(zhuǎn):設(shè)其基礎(chǔ)點(diǎn)網(wǎng)格坐標(biāo)為(gX,gY),其各方塊當(dāng)前坐標(biāo)(gX+0,gY+2), (gX+1,gY+2), (gX+3,gY+2), (gX+3,gY+2)。如果其旋轉(zhuǎn)一次,旋轉(zhuǎn)后的形狀如圖</p><p><b> □■□□ </b></p><p> □■□□ 10111213</p><p><b> □■□□
27、</b></p><p><b> □■□□</b></p><p> 那么其旋轉(zhuǎn)后的各方塊坐標(biāo) (gX+1,gY+0), (gX+1,gY+1), (gX+1,gY+2), (gX+1,gY+3)</p><p> 如果我們將各形狀編號(hào),比如■■■■編號(hào)0,其旋轉(zhuǎn)90度以后的形狀為編號(hào)1</p><p&g
28、t; 那么0旋轉(zhuǎn)目標(biāo)為1,1的旋轉(zhuǎn)目標(biāo)為0</p><p> 所以所有形狀便得到了統(tǒng)一,如圖形狀</p><p><b> □□□□</b></p><p><b> □□□□</b></p><p><b> ■■■■</b></p><p>
29、;<b> □□□□</b></p><p><b> □■□□</b></p><p><b> □■□□</b></p><p><b> □■□□</b></p><p><b> □■□□</b></p>
30、<p><b> □□□□</b></p><p><b> ■□□□</b></p><p><b> ■□□□</b></p><p><b> ■■□□</b></p><p><b> □□□□</b>
31、</p><p><b> □□□□</b></p><p><b> ■■■□</b></p><p><b> ■□□□</b></p><p><b> □□□□</b></p><p><b> ■■□□
32、</b></p><p><b> □■□□</b></p><p><b> □■□□</b></p><p><b> □□□□</b></p><p><b> □□■□</b></p><p><b
33、> ■■■□</b></p><p><b> □□□□</b></p><p><b> □□□□</b></p><p><b> □□□□</b></p><p><b> ■■□□</b></p><
34、p><b> ■■□□</b></p><p><b> □□□□</b></p><p><b> □■□□</b></p><p><b> ■■□□</b></p><p><b> ■□□□</b></p
35、><p><b> □□□□</b></p><p><b> ■■□□</b></p><p><b> □■■□</b></p><p><b> □□□□</b></p><p><b> □□□□</b
36、></p><p><b> □■□□</b></p><p><b> □■□□</b></p><p><b> ■■□□</b></p><p><b> □□□□</b></p><p><b>
37、■□□□</b></p><p><b> ■■■□</b></p><p><b> □□□□ </b></p><p><b> □□□□</b></p><p><b> □■■□</b></p><p>
38、<b> □■□□</b></p><p><b> □■□□</b></p><p><b> □□□□</b></p><p><b> □□□□</b></p><p><b> ■■■□ </b></p>
39、;<p><b> □□■□</b></p><p><b> □□□□</b></p><p><b> ■□□□</b></p><p><b> ■■□□</b></p><p><b> □■□□</b>
40、;</p><p><b> □□□□</b></p><p><b> □■■□ </b></p><p><b> ■■□□</b></p><p><b> □□□□</b></p><p><b> □
41、□□□</b></p><p><b> □■□□</b></p><p><b> ■■■□ </b></p><p><b> □□□□</b></p><p><b> □□□□</b></p><p>
42、<b> □■□□</b></p><p><b> □■■□ </b></p><p><b> □■□□ </b></p><p><b> □□□□</b></p><p><b> □□□□</b></p&g
43、t;<p><b> ■■■□ </b></p><p> □■□□ &l
44、t;/p><p><b> □□□□</b></p><p><b> ■□□□</b></p><p><b> ■■□□ </b></p><p><b> □■□□</b></p><p><b> 4 概要
45、設(shè)計(jì)</b></p><p><b> 4.1數(shù)據(jù)流圖</b></p><p> 數(shù)據(jù)流圖是對(duì)系統(tǒng)數(shù)據(jù)流向的一種描述,并從本質(zhì)上讓程序的使用者,大致了解系統(tǒng)的使用方法。本俄羅斯游戲的大致流程圖如下:</p><p> 圖 4-1 數(shù)據(jù)流圖</p><p><b> 4.2系統(tǒng)功能模塊&l
46、t;/b></p><p> 圖4-2 功能模塊</p><p><b> 4.3 系統(tǒng)流程圖</b></p><p> 系統(tǒng)流程圖是對(duì)系統(tǒng)的大致流程進(jìn)行描述,本游戲的系統(tǒng)流程圖如下:</p><p> 圖4-3 系統(tǒng)流程圖</p><p><b> 5 詳細(xì)設(shè)計(jì)&l
47、t;/b></p><p> 根據(jù)上面所介紹的本系統(tǒng)的各個(gè)模塊及其需要實(shí)現(xiàn)的功能,下面詳細(xì)設(shè)計(jì)如下:</p><p><b> 5.1.界面的設(shè)計(jì)</b></p><p> 程序界面程序在啟動(dòng)運(yùn)行時(shí),系統(tǒng)會(huì)通過(guò)調(diào)用視圖類(lèi)中的重繪圖函數(shù)對(duì)界面進(jìn)行界面的初始化。使程序界面更加友好,在使用上給用戶(hù)一種清新怡然的感覺(jué)。其界面如圖所示:<
48、;/p><p> 5.1.1背景色的選擇模塊</p><p> 實(shí)現(xiàn)此功能代碼如下:</p><p> void CGameDlg::OnBackcolor()//背景色</p><p><b> {</b></p><p> CColorDialog dlg(BackColor)
49、;//</p><p> if(dlg.DoModal()==IDOK)</p><p> BackColor=dlg.GetColor();</p><p><b> Back=1;</b></p><p><b> }</b></p><p> 5.2
50、游戲隨機(jī)選擇方塊模塊</p><p> 在游戲中,每一個(gè)下落的方塊都是隨機(jī)的,包括顏色,形狀。</p><p> 實(shí)現(xiàn)此功能相關(guān)代碼如下:</p><p> void CGameDlg::Shape()//外部框架</p><p><b> {</b></p><p> in
51、t line=18;</p><p> int rr=4; </p><p> CDC *pDC=GetDC();</p><p> ASSERT(pDC!=NULL);</p><p><b> CPen pen;</b></p><p> pen.CreatePen (PS_SOL
52、ID,1,RGB(0,0,0));</p><p> CBrush brush1,brush2,brush3;</p><p> brush1.CreateSolidBrush(RGB(60,60,60));</p><p> brush3.CreateSolidBrush(RGB(0,170,0));</p><p> brush
53、2.CreateSolidBrush(BackColor);</p><p> pDC->SelectObject (pen);</p><p> pDC->SelectObject (brush1);</p><p> pDC->Rectangle(X-line,Y-line,X+M*r+line,Y+N*r+line);</p>
54、;<p> int b=line*2/3,c=b-rr; </p><p> pDC->SelectObject (brush3);</p><p> pDC->Rectangle(X-b,Y-b,X+M*r+b,Y+N*r+b);</p><p> pDC->SelectObject (brush1);</p>
55、<p> pDC->Rectangle(X-c,Y-c,X+M*r+c,Y+N*r+c);</p><p> pDC->SelectObject (brush2);</p><p> pDC->Rectangle(X-2,Y-2,X+M*r+2,Y+N*r+2);</p><p> DeleteObject(pen);Delet
56、eObject(brush1);</p><p> DeleteObject(brush2);DeleteObject(brush3);</p><p> ReleaseDC(pDC);</p><p><b> }</b></p><p> void CGameDlg::one(int Type, int i,
57、 int j) //某元格顏色 位置</p><p><b> {</b></p><p> if(Runing==0)</p><p><b> {</b></p><p> OnDestroy();</p><p><b> return;<
58、/b></p><p><b> }</b></p><p> CDC *pDC=GetDC(); </p><p> ASSERT(pDC!=NULL);</p><p> COLORREF color,L_color=RGB(0,0,0);</p><p> switch(
59、Type)</p><p><b> {</b></p><p> case 0: color=L_color=BackColor;break;</p><p> case 1: color=RGB(131,129,222); break;</p><p> case 2: color=RGB(250,90,1
60、30); break;</p><p> case 3: color=RGB(40,220,250); break;</p><p> case 4: color=RGB(40,120,50); break;</p><p> case 5: color=RGB(0,250,0); break;</p><p> ca
61、se 6: color=RGB(131,19,222); break;</p><p> case 7: color=RGB(120,190,30); break;</p><p> case 8: color=RGB(140,20,150); break;</p><p> case 9: color=RGB(40,120,150); break;&
62、lt;/p><p> case 10: color=RGB(23,62,180); break;</p><p> case 11: color=RGB(131,129,22); break;</p><p> case 12: color=RGB(20,190,130); break;</p><p> case 13: color=
63、RGB(40,234,220); break;</p><p> case 14: color=RGB(140,70,150); break;</p><p> case 15: color=RGB(30,150,40); break;</p><p> case 16: color=RGB(78,203,30);break;</p><
64、;p> case 17: color=RGB(120,100,30); break;</p><p> case 18: color=RGB(240,70,20); break;</p><p> case 19: color=RGB(40,180,90); break;</p><p> case 20: color=RGB(123,62,180
65、); break;</p><p> case 21: color=RGB(120,0,20);break;</p><p> case 22: color=RGB(0,0,250);break;</p><p> case 23: color=RGB(0,250,0);break;</p><p> case 24: colo
66、r=RGB(0,250,250);break;</p><p> case 25: color=RGB(250,0,0);break;</p><p> case 26: color=RGB(250,0,250); break;</p><p> case 27: color=RGB(250,250,0);break;</p><p
67、> case 28: color=RGB(250,250,250);break;</p><p> case 29: color=RGB(rand()%250,rand()%250,rand()%250); break;</p><p> case 30: color=RGB(rand()%250,rand()%250,rand()%250); break;<
68、/p><p> case 31: color=RGB(rand()%250,rand()%250,rand()%250); break;</p><p> case 32: color=RGB(rand()%250,rand()%250,rand()%250); break;</p><p> case 33: color=RGB(rand()%250
69、,rand()%250,rand()%250); break;</p><p> case 34: color=RGB(rand()%250,rand()%250,rand()%250); break;</p><p><b> }</b></p><p><b> CPen pen;</b></p
70、><p> CBrush brush;</p><p> pen.CreatePen(PS_SOLID,1,L_color);</p><p> brush.CreateSolidBrush (color);</p><p> pDC->SelectObject(pen);</p><p> pDC-&
71、gt;SelectObject(brush);</p><p> pDC->Rectangle(X+i*r,Y+j*r,X+(i+1)*r,Y+(j+1)*r);</p><p> DeleteObject(pen);</p><p> DeleteObject(brush);</p><p> ReleaseDC(pDC);&
72、lt;/p><p><b> }</b></p><p> 5.3游戲預(yù)覽功能模塊</p><p> 此模塊用來(lái)為游戲愛(ài)好者提供下一個(gè)方塊的信息,</p><p> 實(shí)現(xiàn)此功能相關(guān)代碼如下:</p><p> void CGameDlg::PreView()//預(yù)先顯示組</
73、p><p><b> {</b></p><p> if(Runing==0)</p><p><b> {</b></p><p> OnDestroy();</p><p><b> return;</b></p><p&
74、gt;<b> }</b></p><p> CTime tm=CTime::GetCurrentTime(); </p><p> object2.Type=(rand()+tm.GetMinute()+tm.GetSecond())%V+1;</p><p> object2.x=M/2;object2.y=0;</p
75、><p> object2.group=(tm.GetMinute()*tm.GetSecond()+rand())%7+1;</p><p> ZZ2=(rand()+tm.GetDay()*tm.GetHour())%97;</p><p> b0=b1=b2=b3=b4=b5=b6=b7=0;</p><p> switch(obj
76、ect2.group)</p><p><b> {</b></p><p> case 1: b2=0;b3=1;b4=1;b5=0;b6=1;b7=1; break;</p><p> case 2: b2=0;b3=1;b4=0;b5=-1;b6=1;b7=-1;break;</p><p> c
77、ase 3: b2=0;b3=1;b4=0;b5=-1;b6=1;b7=1; break;</p><p> case 4: b2=0;b3=1;b4=0;b5=2;b6=0;b7=-1; break;</p><p> case 5: b2=0;b3=-1;b4=1;b5=0;b6=1;b7=1; break;</p><p> case 6:
78、 b2=0;b3=1;b4=1;b5=0;b6=1;b7=-1; break;</p><p> case 7: b2=0;b3=1;b4=0;b5=2;b6=1;b7=1; break;</p><p><b> } </b></p><p> for(int i=0;i<ZZ2;i++) </p>
79、<p> ChangeShape(object2);</p><p> if(object2.y+b3<0||object2.y+b5<0||object2.y+b7<0||object2.y<0) </p><p> object2.y=object2.y+1;</p><p> if(object2.y+b3>
80、0&&object2.y+b5>0&&object2.y+b7>0&&object2.y>0) </p><p> object2.y=0;</p><p><b> }</b></p><p> void CGameDlg::OnButton1() </p>
81、<p><b> {</b></p><p> CDC *pDC = GetDC(); </p><p> ASSERT(pDC != NULL);</p><p> OnDraw(pDC);</p><p> ReleaseDC(pDC);</p><p><b&
82、gt; }</b></p><p> void CGameDlg::OnDown() </p><p><b> {</b></p><p> if(!Runing)</p><p><b> return;</b></p><p> MoveOn(
83、3);</p><p> ObjectGroup(object);</p><p> KillTimer(11);</p><p> SetTimer(11, 10, NULL); </p><p><b> }</b></p><p> void CGameDlg::OnLeft(
84、) </p><p><b> {</b></p><p> if(!Runing)</p><p><b> return;</b></p><p> MoveOn(4);</p><p><b> }</b></p><
85、;p> void CGameDlg::OnRight() </p><p><b> {</b></p><p> if(!Runing)</p><p><b> return;</b></p><p> MoveOn(2);</p><p><b&g
86、t; }</b></p><p> void CGameDlg::OnUp() </p><p><b> {</b></p><p> if(!Runing)</p><p><b> return;</b></p><p> MoveOn(1);&
87、lt;/p><p><b> }</b></p><p> void CGameDlg::MoveOn(int n)</p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call defau
88、lt</p><p> CDC *pDC=GetDC(); ASSERT(pDC!=NULL);</p><p> DeleteGroup(object);int b_x=object.x,b_y=object.y; </p><p><b> switch(n)</b></p><p><b> {
89、</b></p><p><b> case 1: </b></p><p> ChangeShape(object); </p><p> ObjectGroup(object); </p><p><b> break;</b></p>&l
90、t;p><b> case 2: </b></p><p> object.x = object.x < M-1 ? object.x+1 : M-1; </p><p> if(check1())</p><p> object.x=b_x; </p><p> ObjectGroup(obj
91、ect); </p><p><b> break;</b></p><p><b> case 3: </b></p><p> object.y=object.y<N-1?object.y+1:N-1; </p><p> if(check2())object.y=b_y;
92、</p><p> ObjectGroup(object); </p><p><b> break;</b></p><p><b> case 4: </b></p><p> object.x=object.x>1?object.x-1:0; </p><
93、;p> if(check1())object.x=b_x; ObjectGroup(object); </p><p><b> break;</b></p><p><b> case 5: </b></p><p> object.y=object.y>1?object.y-1:0;</p&
94、gt;<p> if(check2())object.y=b_y;</p><p> ObjectGroup(object); </p><p><b> break;</b></p><p><b> }</b></p><p> Show(object);</
95、p><p> ReleaseDC(pDC); </p><p><b> }</b></p><p> void CGameDlg::ClearUp()//清空預(yù)備顯示 地方</p><p><b> {</b></p><p> CDC *pDC=GetDC
96、(); </p><p> ASSERT(pDC!=NULL);</p><p> COLORREF color=RGB(233,230,214);</p><p><b> CPen pen;</b></p><p> CBrush brush;</p><p> pen.Creat
97、ePen(PS_SOLID,1,color);</p><p> brush.CreateSolidBrush (color);</p><p> pDC->SelectObject(pen);</p><p> pDC->SelectObject(brush);</p><p> pDC->Rectangle(J_
98、x,J_y,J_x+118,J_y+155);</p><p> DeleteObject(brush);</p><p> DeleteObject(pen);</p><p> ReleaseDC(pDC);</p><p><b> }</b></p><p><b>
99、5.4收埋功能模塊</b></p><p> 此模塊用來(lái)收藏游戲界面。</p><p> 實(shí)現(xiàn)此功能相關(guān)代碼如下:</p><p> void CGameDlg::OnTimer(UINT nIDEvent) //處理往下運(yùn)動(dòng)過(guò)程</p><p><b> {</b></p><p
100、> //===========================2往右收埋</p><p> if(nIDEvent==2)</p><p><b> {</b></p><p> MoveWindow(p1.x,p1.y,m_W,m_H);</p><p><b> p1.x+=10;</
101、b></p><p> if(p1.x>desktopRect.Width())</p><p><b> {</b></p><p> KillTimer(2); </p><p><b> Set=2;</b></p><p> Si.left
102、=LW-T; </p><p> Si.top=Sj.top;</p><p> Si.right=LW; </p><p> Si.bottom=Sj.bottom;</p><p><b> }</b></p><p><b> }</b><
103、;/p><p> if(nIDEvent==6)</p><p><b> {</b></p><p> MoveWindow(p1.x,p1.y,m_W,m_H);</p><p><b> p1.x-=10;</b></p><p> if(p1.x<=pp.
104、x) </p><p> KillTimer(6);</p><p><b> }</b></p><p> //=============================3往上收埋</p><p> if(nIDEvent==3)</p><p><b> {</b
105、></p><p> MoveWindow(p1.x,p1.y,m_W,m_H);</p><p><b> p1.y+=10;</b></p><p> if(p1.y>desktopRect.Height())</p><p><b> {</b></p>&l
106、t;p> KillTimer(3); </p><p><b> Set=3;</b></p><p> Si.left=Sj.left; </p><p> Si.top=LH-T;</p><p> Si.right=Sj.right; </p><p> Si.bot
107、tom=LH;</p><p><b> }</b></p><p><b> }</b></p><p> if(nIDEvent==7)</p><p><b> {</b></p><p> MoveWindow(p1.x,p1.y,m_
108、W,m_H);</p><p><b> p1.y-=10;</b></p><p> if(p1.y<=pp.y) </p><p> KillTimer(7);</p><p><b> }</b></p><p> //=================
109、========1往下收埋</p><p> if(nIDEvent==1) </p><p><b> {</b></p><p> MoveWindow(p1.x,p1.y,m_W,m_H);</p><p><b> p1.y-=10;</b></p><p&g
110、t; if(p1.y+m_H+10<0) </p><p><b> {</b></p><p> KillTimer(1); </p><p><b> Set=1;</b></p><p> Si.left=Sj.left; </p><p>
111、<b> Si.top=0;</b></p><p> Si.right=Sj.right; </p><p> Si.bottom=T;</p><p><b> }</b></p><p><b> }</b></p><p> if(n
112、IDEvent==5)</p><p><b> {</b></p><p> MoveWindow(p1.x,p1.y,m_W,m_H);</p><p><b> p1.y+=10;</b></p><p> if(p1.y>=30)</p><p> K
113、illTimer(5);</p><p><b> }</b></p><p> //=======================4往左收埋</p><p> if(nIDEvent==4)</p><p><b> {</b></p><p> MoveWin
114、dow(p1.x,p1.y,m_W,m_H);</p><p><b> p1.x-=10;</b></p><p> if(p1.x+m_W+10<0)</p><p><b> {</b></p><p> KillTimer(4); </p><p&g
115、t;<b> Set=4;</b></p><p> Si.left=0; </p><p> Si.top=Sj.top;</p><p> Si.right=T; </p><p> Si.bottom=Sj.bottom;</p><p><b>
116、 }</b></p><p><b> }</b></p><p> if(nIDEvent==8)</p><p><b> {</b></p><p> MoveWindow(p1.x,p1.y,m_W,m_H);</p><p><b>
117、 p1.x+=10;</b></p><p> if(p1.x>=30) </p><p> KillTimer(8);</p><p><b> }</b></p><p><b> 5.5記分功能模塊</b></p><p> 此模塊用來(lái)記錄在
118、游戲過(guò)程中,玩家所得的分?jǐn)?shù)。并且一次性消去的方塊行數(shù)越多,那么得到的分?jǐn)?shù)也就越多。</p><p> 實(shí)現(xiàn)此功能相關(guān)代碼如下:</p><p> void CGameDlg::KeepData()//保存放好所在位置</p><p><b> {</b></p><p> G[object.x+a0][o
119、bject.y+a1]=object.Type;</p><p> G[object.x+a2][object.y+a3]=object.Type;</p><p> G[object.x+a4][object.y+a5]=object.Type;</p><p> G[object.x+a6][object.y+a7]=object.Type;</p&
120、gt;<p> int i,j,k,p,q,o=0;</p><p> for(i=0;i<M;i++) </p><p> if(G[i][1]>0||G[i][0]>0)</p><p><b> {</b></p><p><b> Runing=0;</b
121、></p><p> AfxMessageBox("游戲結(jié)束!");</p><p> CGameDlg dlg; </p><p> dlg.DoModal();</p><p><b> return;</b></p><p><b> }<
122、/b></p><p> for( j = N-1; j >= 0; j--)</p><p><b> {</b></p><p> for(i=0,k=0;i<M;i++) </p><p> if(G[i][j]>0) </p><p><b>
123、 k++;</b></p><p><b> if(k==M)</b></p><p><b> {</b></p><p><b> o++;</b></p><p> for(p=j;p>=1;p--)</p><p>
124、 for(q=0;q<M;q++)</p><p><b> {</b></p><p> G[q][p]=G[q][p-1];</p><p> one(G[q][p],q,p);</p><p><b> }</b></p><p> for(q=0;q&
125、lt;M;q++) </p><p><b> {</b></p><p> G[q][0]=0;</p><p> one(G[q][p],q,p);</p><p><b> }</b></p><p><b> j++;</b></
126、p><p> Score+=100*o;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 5.6鼠標(biāo)控制功能模塊</p><p> 此模塊
127、也是本游戲的重點(diǎn),玩家通過(guò)鼠標(biāo)控制進(jìn)行游戲。向上是變換圖形,向下是很方塊快速下落,向左是使方塊向左移動(dòng),向右是很方塊向右移動(dòng)。</p><p> 程序的具體實(shí)現(xiàn)部分如程序清單如下所示。</p><p> void CGameDlg::ChangeShape(OBJECT object)//轉(zhuǎn)組</p><p><b> {</b><
128、;/p><p> int z[4][2] = {0};</p><p> int i,j,k;</p><p> if(Runing==0)</p><p><b> {</b></p><p> OnDestroy();</p><p><b> ret
129、urn;</b></p><p><b> }</b></p><p><b> do{</b></p><p> switch(object.group)</p><p><b> {</b></p><p> case1:ZZ=
130、0;z[1][0]=1;z[1][1]=0;z[2][0]=0;z[2][1]=1;z[3][0]=1;z[3][1]=1;break;</p><p> case 2:ZZ++; ZZ%=4;switch(ZZ)</p><p><b> {</b></p><p> case 0:z[1][0]=-1;z[1][1]=0; z[2]
131、[0]=1;z[2][1]=0;z[3][0]=-1;z[3][1]=-1;break;</p><p> case 1:z[1][0]=0;z[1][1]=1; z[2][0]=0;z[2][1]=-1;z[3][0]=1;z[3][1]=-1;break;</p><p> case 2:z[1][0]=-1;z[1][1]=0; z[2][0]=1;z[2][1]=0;z[3][
132、0]=1;z[3][1]=1;break;</p><p> case 3:z[1][0]=0;z[1][1]=-1; z[2][0]=0;z[2][1]=1;z[3][0]=-1;z[3][1]=1;break;</p><p><b> }</b></p><p><b> break;</b></p>
133、;<p> case 3:ZZ++; ZZ%=4;</p><p> switch(ZZ)</p><p><b> {</b></p><p> case 0:z[1][0]=-1;z[1][1]=0; z[2][0]=1;z[2][1]=0;z[3][0]=1;z[3][1]=-1;break;</p>
134、<p> case 1:z[1][0]=0;z[1][1]=1; z[2][0]=0;z[2][1]=-1;z[3][0]=1;z[3][1]=1;break;</p><p> case 2:z[1][0]=-1;z[1][1]=0; z[2][0]=1;z[2][1]=0;z[3][0]=-1;z[3][1]=1;break;</p><p> case 3:z[1]
135、[0]=0;z[1][1]=-1; z[2][0]=0;z[2][1]=1;z[3][0]=-1;z[3][1]=-1;break;</p><p><b> }</b></p><p><b> break;</b></p><p> case 4: ZZ++; ZZ%=2;</p><p&g
136、t; switch(ZZ)</p><p><b> {</b></p><p> case 1:z[1][0]=0;z[1][1]=-1; z[2][0]=0;z[2][1]=2;z[3][0]=0;z[3][1]=1;break;</p><p> case 0:z[1][0]=1;z[1][1]=0; z[2][0]=2;z[2
137、][1]=0;z[3][0]=-1;z[3][1]=0;break;</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 5: </b></p><p> ZZ++; ZZ%=2;</p>
138、;<p> switch(ZZ)</p><p><b> {</b></p><p> case 1:z[1][0]=0;z[1][1]=-1; z[2][0]=1;z[2][1]=0;z[3][0]=1;z[3][1]=1;break;</p><p><b> case 0:</b></
139、p><p> z[1][0]=0;z[1][1]=1; z[2][0]=-1;z[2][1]=1;z[3][0]=1;z[3][1]=0;break;</p><p><b> }</b></p><p><b> break;</b></p><p> case 6:ZZ++; ZZ%=2;&
140、lt;/p><p> switch(ZZ)</p><p><b> {</b></p><p><b> case 1:</b></p><p> z[1][0]=0;z[1][1]=1; z[2][0]=1;z[2][1]=0;z[3][0]=1;z[3][1]=-1;break;<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《c++俄羅斯方塊》課程設(shè)計(jì)--俄羅斯方塊
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 課程設(shè)計(jì)---俄羅斯方塊
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊課程設(shè)計(jì)
- c課程設(shè)計(jì)--俄羅斯方塊
- 俄羅斯方塊課程設(shè)計(jì)報(bào)告
- 俄羅斯方塊課程設(shè)計(jì)報(bào)告
- 簡(jiǎn)單俄羅斯方塊課程設(shè)計(jì)
- java俄羅斯方塊課程設(shè)計(jì)
- arm課程設(shè)計(jì)俄羅斯方塊
- 課程設(shè)計(jì)--俄羅斯方塊設(shè)計(jì)報(bào)告
- c_課程設(shè)計(jì)-俄羅斯方塊
- c++俄羅斯方塊課程設(shè)計(jì)
- 俄羅斯方塊游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--俄羅斯方塊游戲
評(píng)論
0/150
提交評(píng)論