畢業(yè)設(shè)計(jì)--多人分組對戰(zhàn)俄羅斯方塊的研究與實(shí)現(xiàn)(含外文翻譯)_第1頁
已閱讀1頁,還剩57頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科生畢業(yè)設(shè)計(jì)</b></p><p>  學(xué) 院: 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  設(shè)計(jì)題目: 多人分組對戰(zhàn)俄羅斯方塊的研究與實(shí)現(xiàn) </p&g

2、t;<p>  專 題: </p><p>  指導(dǎo)教師: 職 稱: 講師 </p><p>  2008 年 6 月 徐州</p><p><b>  畢業(yè)設(shè)計(jì)任務(wù)書</b></p>

3、<p>  任務(wù)下達(dá)日期: 2008 年 1 月 15 日</p><p>  畢業(yè)設(shè)計(jì)日期: 2008 年 2 月 25 日至 2008 年 6 月 20 日</p><p>  畢業(yè)設(shè)計(jì)題目: 多人分組對戰(zhàn)俄羅斯方塊的研究與實(shí)現(xiàn)</p><p><b>  畢業(yè)設(shè)計(jì)專題題目:</b></p><p

4、>  畢業(yè)設(shè)計(jì)主要內(nèi)容和要求:</p><p>  軟件系統(tǒng)應(yīng)提供一個(gè)方便實(shí)用的用戶界面。</p><p><b>  實(shí)現(xiàn)多人網(wǎng)絡(luò)對戰(zhàn)。</b></p><p>  根據(jù)消層情況獲得道具,并能夠使用道具進(jìn)行攻擊。</p><p><b>  可以進(jìn)行分組對戰(zhàn)</b></p>&

5、lt;p>  認(rèn)真工作,依照任務(wù)進(jìn)度表按時(shí)完成任務(wù)</p><p>  6. 論文要闡述系統(tǒng)開發(fā)所用到的理論,介紹整個(gè)軟件開發(fā)的過程。</p><p>  7. 進(jìn)行系統(tǒng)需求分析,系統(tǒng)分析,系統(tǒng)設(shè)計(jì)。</p><p>  8. 介紹開發(fā)過程中用到的關(guān)鍵技術(shù)以及遇到的困難和解決的方法。</p><p>  9. 論文要求內(nèi)容規(guī)范。

6、</p><p>  畢業(yè)設(shè)計(jì)要求采用的技術(shù)有:一種程序開發(fā)語言及相關(guān)開發(fā)工具,Scoket編程技術(shù),軟件工程知識。</p><p>  院長簽字: 指導(dǎo)教師簽字:</p><p><b>  摘 要</b></p><p>  俄羅斯方塊游戲是一種比較經(jīng)典的游戲,研究它具有一定的價(jià)

7、值和意義。但目前的俄羅斯方塊多以單機(jī)版為主,游戲交互性弱、可玩性差,存在很大的弊端。利用網(wǎng)絡(luò)通信技術(shù)、圖形界面、多媒體等技術(shù)可以支持多人分組對戰(zhàn),提高游戲的可玩性,彌補(bǔ)傳統(tǒng)俄羅斯方塊的不足。</p><p>  本文在分析研究傳統(tǒng)俄羅斯方塊的基礎(chǔ)上,借助C/S軟件模型,將CSocket套接字技術(shù)移植到俄羅斯方塊中實(shí)現(xiàn)了多人分組對戰(zhàn)模式。將傳統(tǒng)的人機(jī)對戰(zhàn)變成人與人對戰(zhàn),增強(qiáng)了游戲的交互性。利用GDI圖形界面繪制技術(shù)

8、和多媒體技術(shù)使游戲畫面變得更加生動(dòng),并且動(dòng)態(tài)顯示各游戲玩家的游戲進(jìn)展情況,改善了玩家的視覺、聽覺感受。游戲中的各個(gè)玩家通過自定義消息來進(jìn)行交互,他們可以組隊(duì)進(jìn)行游戲,可分為自由人、藍(lán)隊(duì)、橙隊(duì)和紅隊(duì)。各玩家之間除了可以相互聊天外,還可以相互攻擊和援助。</p><p>  實(shí)驗(yàn)表明,經(jīng)過擴(kuò)展后的俄羅斯方塊游戲畫面更加活潑,游戲方式更加靈活,游戲的交互性更強(qiáng),游戲可玩性大大提高。</p><p&g

9、t;  關(guān)鍵詞:多人分組對戰(zhàn)俄羅斯方塊;CSocket技術(shù);GDI圖形繪制;多媒體技術(shù) </p><p><b>  ABSTRACT</b></p><p>  Tetris game is a classic game .It is valuable to research. But current games are mainly single plane ve

10、rsion, lack of interaction, and can not be played easily. By using network communication technology, graphical interface, multimedia and other technology, the game introduced in this paper can support group antagonizing,

11、 be more easily played and make up the shortcomings of traditional versions.</p><p>  Based on the analysis of traditional versions, CSocket is transplanted to the game to achieve groups antagonizing mode, w

12、hich changes the traditional man-machine model into man-man model and enhance the interaction in the game. GDI and multimedia technologies make the game more lively, display the progress of every player dynamically and i

13、mprove the visual and auditory experience. The various players interact by customizing the information in the game. They can team up for the game. There are fr</p><p>  The experiments show that the expansio

14、n can make the game more lively, make it more flexible in playing the game, make the game more interactive and enable the game to be played more easily.</p><p>  Keywords: Tetris of more groups antagonizing;

15、 CSocket; GDI graphics rendering; Multimedia technology</p><p><b>  目 錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 俄羅斯方塊游戲簡介1</p><p>  1.2 多人分組

16、對戰(zhàn)俄羅斯方塊與傳統(tǒng)俄羅斯方塊的異同2</p><p>  1.3 本論文的主要內(nèi)容與組織結(jié)構(gòu)3</p><p>  2 多人分組對戰(zhàn)俄羅斯方塊的分析與設(shè)計(jì)4</p><p>  2.1 多人分組對戰(zhàn)俄羅斯方塊的設(shè)計(jì)原理4</p><p>  2.2 需求分析8</p><p>  2.2.1 數(shù)據(jù)流圖9&

17、lt;/p><p>  2.2.2 數(shù)據(jù)字典11</p><p>  2.3 概要設(shè)計(jì)12</p><p>  2.3.1 功能定義12</p><p>  2.3.2 游戲框架設(shè)計(jì)14</p><p>  2.3.3 技術(shù)、風(fēng)險(xiǎn)預(yù)測15</p><p><b>  3 詳細(xì)設(shè)計(jì)

18、17</b></p><p>  3.1 系統(tǒng)組成及功能描述17</p><p>  3.2 系統(tǒng)登錄模塊設(shè)計(jì)17</p><p>  3.3 游戲算法實(shí)現(xiàn)模塊19</p><p>  3.4 網(wǎng)絡(luò)通信模塊23</p><p>  3.5 游戲界面繪制模塊25</p><p&

19、gt;  3.5.1 游戲初始界面25</p><p>  3.5.2 游戲準(zhǔn)備界面27</p><p>  3.5.3 游戲開始界面28</p><p>  3.5.4 游戲結(jié)束界面32</p><p>  4 多人分組對戰(zhàn)俄羅斯方塊的實(shí)現(xiàn)36</p><p>  4.1 多人分組對戰(zhàn)俄羅斯方塊的實(shí)現(xiàn)原理

20、36</p><p>  4.2 多人分組對戰(zhàn)俄羅斯方塊核心功能實(shí)現(xiàn)37</p><p>  5 系統(tǒng)測試與維護(hù)40</p><p>  5.1 軟件測試概述40</p><p>  5.2 多人分組對戰(zhàn)俄羅斯方塊測試40</p><p>  5.2.1 登錄階段測試40</p><p&g

21、t;  5.2.2 游戲開始前的準(zhǔn)備階段測試41</p><p>  5.2.3 游戲進(jìn)行階段測試42</p><p>  5.2.4 游戲結(jié)束階段測試42</p><p><b>  結(jié)論43</b></p><p><b>  參考文獻(xiàn)44</b></p><p&g

22、t;<b>  英文原文45</b></p><p><b>  中文譯文50</b></p><p><b>  致 謝53</b></p><p><b>  1 緒論</b></p><p>  1.1 俄羅斯方塊游戲簡介 </p>

23、;<p>  “俄羅斯方塊”由莫斯科科學(xué)學(xué)院程序員Alexei Pajitnov所設(shè)計(jì)。1985年6月工作于莫斯科科學(xué)計(jì)算機(jī)中心的阿列克謝·帕基特諾夫在玩過一個(gè)拼圖游戲之后受到啟發(fā),從而制作了一個(gè)以Electronica 60(一種計(jì)算機(jī))為平臺的俄羅斯方塊的游戲。后來經(jīng)瓦丁·格拉西莫夫(Vadim Gerasimov)移植到PC上,并且在莫斯科的電腦界傳播。實(shí)際上,在游戲發(fā)明后的數(shù)年間,“俄羅斯方塊”

24、成了無數(shù)場專利官司和法律糾紛的目標(biāo),而許多公司也不遺余力地上陣廝殺,想要將游戲的創(chuàng)意據(jù)為己有。一個(gè)最初的版本是Spectrum Holobyte為IBM兼容機(jī)開發(fā)的游戲。1988年,“俄羅斯方塊”在街機(jī)上也變得非常流行,這都要?dú)w功于Atari,因?yàn)樗麄儼l(fā)布了一個(gè)能讓兩名玩家同時(shí)游戲的版本。 </p><p>  還是在1988年,Tengen為任天堂娛樂系統(tǒng)發(fā)布了“俄羅斯方塊”的一個(gè)優(yōu)秀版本,但它很快便從貨架上撤

25、掉了,因?yàn)槿翁焯弥缚卦摴厩址赴鏅?quán)。后來,任天堂把那個(gè)版本的“俄羅斯方塊”換成了自己的版本,可是新版本卻缺乏Tengen版的雙人對打模式和出色的音樂。到了1989年,任天堂著手將一個(gè)移動(dòng)版本的“俄羅斯方塊”與當(dāng)時(shí)嶄新的GBA系統(tǒng)捆綁出售。GBA后來成為有史以來銷售成績最佳的游戲系統(tǒng),對此,“俄羅斯方塊”作出了不小的貢獻(xiàn)。 這次產(chǎn)權(quán)爭奪,幾家歡喜,幾家哀愁,幾家公司倒閉,幾家公司賺錢,其中的是是非非,一言難盡。</p>

26、<p>  目前“俄羅斯方塊”游戲已經(jīng)有了很大的發(fā)展。國內(nèi)從以前的掌上游戲移</p><p>  植到了電腦、手機(jī)等平臺。游戲的畫面、功能都有了很大的提高。例如有名的QQ游戲中的“火拼俄羅斯方塊”、邊鋒游戲大廳中的“俄羅斯方塊”等。國外“俄羅斯方塊游戲”也有很大發(fā)展。電腦上、手機(jī)上、PSP上、各種網(wǎng)站上都有它的身影?!岸砹_斯方塊”游戲從誕生到現(xiàn)在已經(jīng)幾十年了,它一直伴隨著我們,一直在不斷的成長。沒有人

27、認(rèn)為它會消失,將來它也會不斷的發(fā)展下去。隨著高科技電子產(chǎn)品的不斷涌現(xiàn),“俄羅斯方塊”將以他們?yōu)檩d體繼續(xù)隨時(shí)間洪流傳播到世界的每一個(gè)角落?!岸砹_斯方塊”不僅會擴(kuò)大傳播介質(zhì),同時(shí)自身的功能的多樣化、界面的美化、操作的簡化、特效、魔法等技術(shù)都會在將來得到很大的發(fā)展。例如可以將游戲地圖變成各種各樣的形狀而不再是單一的矩形地圖;還可以改變游戲時(shí)運(yùn)動(dòng)方塊的形狀;也可以增加鍵盤鼠標(biāo)事件并以特殊的功能去響應(yīng)這樣的事件(例如連續(xù)點(diǎn)擊鼠標(biāo)時(shí)可以使運(yùn)動(dòng)方塊發(fā)

28、射子彈等)。</p><p>  “俄羅斯方塊游戲”早在十幾年前它就風(fēng)靡全球,成為大家津津樂道的話題。從掌上游戲機(jī)到PC機(jī),從單調(diào)的黑白畫面到絢麗多彩的QQ游戲畫面?!岸砹_斯方塊”始終跟隨著人們一起發(fā)展、進(jìn)步。許多游戲轟轟烈烈的誕生沒多久就悄然而去,然而“俄羅斯方塊”卻長久不衰,仿佛它已經(jīng)成為了我們的一部分,將永遠(yuǎn)伴隨著我們?nèi)ラ_辟未來,帶給我們更多的歡笑。“俄羅斯方塊”是一款集休閑、娛樂、益智于一體的游戲,適合各

29、種人群。它的實(shí)現(xiàn)方法簡單,但靈活多變,通過研究“俄羅斯方塊”,在原來的技術(shù)上演變出更多、更新的版本也是一件很有意義的事情。同時(shí),由于“俄羅斯方塊”的廣泛傳播也帶來了很大的商業(yè)價(jià)值。怎樣開發(fā)出更新、更吸引人的“俄羅斯方塊”游戲也成為許多游戲公司的首要任務(wù)。</p><p>  1.2 多人分組對戰(zhàn)俄羅斯方塊與傳統(tǒng)俄羅斯方塊的異同</p><p>  多人分組對戰(zhàn)俄羅斯方塊是傳統(tǒng)單機(jī)版俄羅斯方

30、塊的擴(kuò)展,因此,它們具有許多相似之處。同時(shí),多人分組對戰(zhàn)俄羅斯方塊游戲的設(shè)計(jì)原理又有了很大的改變,游戲方式也不再相同,它們也有許多不同的地方。</p><p><b>  (1) 相同點(diǎn):</b></p><p>  1) 游戲算法相同:多人分組對戰(zhàn)俄羅斯方塊與傳統(tǒng)俄羅斯方塊主要的相同點(diǎn)在游戲算法上。經(jīng)過長時(shí)間的發(fā)展,俄羅斯方塊游戲的算法已經(jīng)發(fā)展成熟,因此本文并沒有作

31、多大的改變。游戲算法主要由運(yùn)動(dòng)方塊的隨機(jī)產(chǎn)生、方塊下移、左移、右移、直接下落、變換、方塊觸界檢測、消層等多個(gè)模塊組成。它們的實(shí)現(xiàn)原理基本相同。</p><p>  2) 游戲邏輯相同:游戲從運(yùn)動(dòng)方塊的產(chǎn)生、消層到游戲結(jié)束,整過流程是相同的。</p><p><b>  (2) 異同點(diǎn):</b></p><p>  1) 設(shè)計(jì)模式不同:傳統(tǒng)俄羅斯

32、方塊游戲多是單機(jī)版,只能供一個(gè)人游玩;而多人分組對戰(zhàn)俄羅斯方塊是基于C/S的設(shè)計(jì)模式,支持網(wǎng)絡(luò)互聯(lián),可以多人游玩。</p><p>  2) 對戰(zhàn)模式不同:傳統(tǒng)俄羅斯方塊游戲是人機(jī)對戰(zhàn),缺乏交互性;而多人分組對戰(zhàn)俄羅斯方塊是多人分組對站。即最多六個(gè)玩家可以以自由人、澄隊(duì)、藍(lán)隊(duì)、紅隊(duì)四種身份進(jìn)行游戲。</p><p>  3) 游戲交互程度不同:傳統(tǒng)俄羅斯方塊主要是人機(jī)交互,形式比較單調(diào),且

33、交互較少;而多人分組對戰(zhàn)俄羅斯方塊游戲主要是人與人的交互,且交互形式多樣,比較靈活。例如玩家之間可以相互聊天等。</p><p>  4) 游戲的趣味性不同:傳統(tǒng)俄羅斯方塊游戲游戲方式較單一,趣味性較低;而多人分組對戰(zhàn)俄羅斯方塊中每個(gè)玩家都可以看見其他玩家的游戲進(jìn)行情況,對手較多,且還有敵友之分,游戲中可以獲得道具,并使用道具對敵方進(jìn)行攻擊,對盟友或自己進(jìn)行援助,再加上游戲音效。使游戲玩家始終感覺到他不是一個(gè)人在

34、游戲,而是身處一個(gè)團(tuán)隊(duì)中共同游戲,這樣使游戲趣味性大大增加。</p><p>  5) 游戲結(jié)束方式不同:傳統(tǒng)俄羅斯方塊游戲沒有游戲勝負(fù)之分,以方塊到達(dá)游戲區(qū)域頂端為游戲結(jié)束,以游戲消層數(shù)量來計(jì)算游戲得分;而多人分組對戰(zhàn)俄羅斯方塊以方塊到達(dá)游戲區(qū)域頂端作為本游戲玩家游戲結(jié)束的標(biāo)志,但并不作為游戲勝負(fù)的依據(jù)。游戲以最終存活下來的一個(gè)分組作為游戲的勝利方,其他玩家作為游戲失敗方。且游戲得分不以消層數(shù)量為計(jì)算依據(jù),而是

35、以游戲名次來計(jì)算。并且游戲結(jié)束后會將游戲結(jié)果寫入數(shù)據(jù)庫,并重新顯示玩家的游戲基礎(chǔ)信息。</p><p>  總之,多人分組對戰(zhàn)俄羅斯方塊游戲和傳統(tǒng)俄羅斯方塊游戲相比有了很大的進(jìn)步,提高了游戲方式的多樣化,增加了游戲的趣味性,使游戲具有了更大的可玩性。</p><p>  1.3 本論文的主要內(nèi)容與組織結(jié)構(gòu)</p><p>  本文主要介紹了利用CSocket、GDI

36、、多媒體技術(shù)對傳統(tǒng)俄羅斯方塊進(jìn)行擴(kuò)展,形成多人分組對戰(zhàn)俄羅斯方塊的具體原理和方法。</p><p>  全文主要分為五部分。第一章為緒論,簡單介紹了俄羅斯方塊的起源及發(fā)展歷程,比較了傳統(tǒng)俄羅斯方塊與多人分組對戰(zhàn)俄羅斯方塊的異同,明確了研究俄羅斯方塊的意義和方向。指出了本文所要做的工作。第二章介紹了多人分組對戰(zhàn)俄羅斯方塊的設(shè)計(jì)原理,包括實(shí)現(xiàn)需要的技術(shù)介紹。在對設(shè)計(jì)原理進(jìn)行分析的基礎(chǔ)上,初步設(shè)計(jì)了多人分組對戰(zhàn)俄羅斯方

37、塊游戲系統(tǒng)需求分析、功能定義、游戲框架等,并對系統(tǒng)開發(fā)中需要的技術(shù)和可能承擔(dān)的風(fēng)險(xiǎn)進(jìn)行預(yù)測。第三章是全文最主要的部分,主要介紹了多人分組對戰(zhàn)俄羅斯方塊游戲的實(shí)現(xiàn)過程。本章分為五個(gè)小節(jié),第一小節(jié)是對整個(gè)系統(tǒng)功能的概述,其余四小節(jié)分別從四個(gè)模塊對游戲的實(shí)現(xiàn)進(jìn)行了分析介紹。全章以模塊化分析的方式系統(tǒng)的闡明了該系統(tǒng)的組成及實(shí)現(xiàn)過程。第四章、第五章是在系統(tǒng)各功能設(shè)計(jì)已經(jīng)完成的基礎(chǔ)上,對游戲系統(tǒng)的集成和測試。介紹了游戲的工作流程和游戲運(yùn)行階段的維護(hù)

38、。最后,總結(jié)了本次畢業(yè)設(shè)計(jì)的主要內(nèi)容和成果。</p><p>  全文從俄羅斯方塊的歷史介紹到多人分組對戰(zhàn)俄羅斯方塊的實(shí)現(xiàn)闡述,從游戲系統(tǒng)的功能設(shè)計(jì)到系統(tǒng)集成測試,由淺入深,循序漸進(jìn)的闡明了整個(gè)系統(tǒng)的設(shè)計(jì)原理和實(shí)現(xiàn)過程。</p><p>  2 多人分組對戰(zhàn)俄羅斯方塊的分析與設(shè)計(jì)</p><p>  2.1 多人分組對戰(zhàn)俄羅斯方塊的設(shè)計(jì)原理</p>&

39、lt;p>  多人對戰(zhàn)俄羅斯方塊游戲的設(shè)計(jì)是單機(jī)版俄羅斯方塊游戲設(shè)計(jì)的擴(kuò)展,在原來的基礎(chǔ)上加入網(wǎng)絡(luò)互聯(lián),使原來的人機(jī)交互模式變成了人人交互模式。也就是說俄羅斯方塊游戲本身的算法沒有多大的變化,只是在其中融入了一些新的技術(shù)和新的游戲理念。如圖形界面、多媒體、多人分組等設(shè)計(jì)思想。</p><p>  多人分組對戰(zhàn)俄羅斯方塊游戲與單機(jī)版俄羅斯方塊游戲有很大的區(qū)別,它們的模型如圖2-1所示。</p>

40、<p>  圖2-1 單機(jī)版俄羅斯方塊游戲模型圖</p><p>  而多人分組對戰(zhàn)俄羅斯方塊游戲模型如圖2-2所示。</p><p>  圖2-2 多人分組對戰(zhàn)俄羅斯方塊游戲模型圖</p><p>  從圖2-1、2-2中可以看出兩種游戲模型有較大的差異,多人對戰(zhàn)俄羅斯方塊更加多樣化。單機(jī)版俄羅斯方塊游戲注重人機(jī)交互,而對人對戰(zhàn)俄羅斯方塊游戲注重人與人的

41、交互。</p><p>  多人分組對戰(zhàn)俄羅斯方塊游戲仍然設(shè)計(jì)為C/S模型【3】。服務(wù)器端主要功能是接受客戶端的連接,接收并處理客戶端發(fā)來的消息,將處理結(jié)果反饋給各客戶端??蛻舳耸怯螒虻闹飨到y(tǒng),玩家首先通過登錄系統(tǒng)進(jìn)入游戲界面,通過各種操作完成游戲開始前的準(zhǔn)備工作。當(dāng)所有玩家都準(zhǔn)備就緒后進(jìn)入游戲,此時(shí)玩家操作鍵盤來完成游戲。</p><p>  游戲游玩的原理如圖2-3所示。</p&

42、gt;<p>  圖2-3 多人分組對戰(zhàn)俄羅斯方塊游戲原理圖</p><p>  游玩游戲需要經(jīng)歷以下步驟:</p><p>  (1) 在游戲服務(wù)器已經(jīng)建立的情況下,運(yùn)行客戶端進(jìn)入游戲登錄直系統(tǒng)。輸入服務(wù)器地址、用戶帳號、用戶密碼,進(jìn)入系統(tǒng)認(rèn)證狀態(tài)。登錄模塊從數(shù)據(jù)庫中提取用戶信息(ID、昵稱、密碼、等級、積分、登錄標(biāo)志等)進(jìn)行驗(yàn)證【2】。驗(yàn)證通過則進(jìn)入游戲主系統(tǒng),否則返回初

43、始登錄界面。</p><p>  需要技術(shù):ADO遠(yuǎn)程連接數(shù)據(jù)庫、身份驗(yàn)證【1】。</p><p>  實(shí)現(xiàn)原理:在SQL2000上裝上SP4的補(bǔ)丁,利用成熟的ADO數(shù)據(jù)庫連接技術(shù),封裝ADO連接類,實(shí)現(xiàn)數(shù)據(jù)庫的連接;封裝CUser類實(shí)現(xiàn)數(shù)據(jù)庫中userinfo數(shù)據(jù)表的讀寫,根據(jù)玩家輸入信息從數(shù)據(jù)庫讀取相應(yīng)內(nèi)容完成身份認(rèn)證。</p><p>  (2) 通過身份認(rèn)證

44、后,進(jìn)入游戲主系統(tǒng),游戲根據(jù)玩家輸入的服務(wù)器地址連接到服務(wù)器。連接成功則初始化游戲界面,進(jìn)入游戲準(zhǔn)備狀態(tài),否則返回到游戲登錄初始界面或退出游戲。</p><p>  需要技術(shù):CSocket套接字技術(shù)【9】。</p><p>  實(shí)現(xiàn)原理:套接字(socket)是一種網(wǎng)絡(luò)編程接口,它是對通信端點(diǎn)的一種抽象,提供了一個(gè)發(fā)送和接收數(shù)據(jù)的機(jī)制。套接字技術(shù)最先應(yīng)用于unix系統(tǒng),后來移植到wind

45、ows系統(tǒng),有了Winsock API。經(jīng)過對Winsock API的低層封裝產(chǎn)生了CAsyncSocket類,經(jīng)過高層次的封裝產(chǎn)生了CSocket類。 CSocket進(jìn)行通信的過程很簡單。服務(wù)器首先啟動(dòng),通過調(diào)用socket函數(shù)建立一個(gè)套接口,然后調(diào)用bind函數(shù)將該套接口和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用listen函數(shù)使套接口做好偵聽的準(zhǔn)備,并規(guī)定它的請求隊(duì)列的長度,之后就調(diào)用accept函數(shù)來接收連接??蛻舳嗽诮⑻捉涌谥缶涂烧{(diào)

46、用connect函數(shù)來發(fā)送和接收數(shù)據(jù)。最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close函數(shù)關(guān)閉套接口【7】。</p><p>  它的原理如圖2-4所示。</p><p>  圖2-4 Winsock通信原理圖</p><p>  CSocket通信技術(shù)類似,通過編寫ServerSocket類,并重載了OnAccept()函數(shù)實(shí)現(xiàn)服務(wù)器套接口的監(jiān)聽。編寫ClientSoc

47、ket類,并重載OnReceive()實(shí)現(xiàn)客戶端數(shù)據(jù)的接收【6】。</p><p>  (3) 服務(wù)器連接成功后,將顯示游戲的初始界面。初始界面將根據(jù)玩家在數(shù)據(jù)庫保存的游戲基礎(chǔ)信息來顯示。同時(shí)登錄成功時(shí),客戶端將向服務(wù)器發(fā)送新玩家進(jìn)入游戲的消息,而服務(wù)起得到這個(gè)消息后經(jīng)過處理,再將處理結(jié)果發(fā)給其他的游戲玩家,這樣其他的游戲玩家就能看見有游戲玩家進(jìn)入游戲。此后,玩家可以操作游戲界面元素完成游戲開始前的準(zhǔn)備。例如玩家

48、可以選擇分組、發(fā)送聊天、點(diǎn)擊開始按鈕準(zhǔn)備就緒等。同樣,這些事件都將以消息的方式發(fā)送給服務(wù)器,服務(wù)器經(jīng)過處理后,將結(jié)果發(fā)往目標(biāo)玩家,目標(biāo)玩家就會了解到自己的游戲情況。</p><p>  需要技術(shù):GDI繪圖技術(shù)【5】、多緩沖繪圖技術(shù)、自定義消息。</p><p>  實(shí)現(xiàn)方法:GDI繪圖是Windows系統(tǒng)下較成熟的窗口繪圖技術(shù)。GDI處理來自Windows應(yīng)用程序的圖形函數(shù)調(diào)用,然后把這

49、些調(diào)用傳遞給合適的設(shè)備驅(qū)動(dòng)程序,有設(shè)備驅(qū)動(dòng)程序來執(zhí)行與硬件相關(guān)的函數(shù),并產(chǎn)生最后的輸出結(jié)果。GDI可以看作是一個(gè)應(yīng)用程序與輸出設(shè)備之間的中介,一方面。GDI向應(yīng)用程序提供了一個(gè)設(shè)備無關(guān)的編程環(huán)境,另一方面,它又以設(shè)備相關(guān)的格式和具體的設(shè)備打交道;多緩沖技術(shù)是以犧牲內(nèi)存為代價(jià)來消除屏幕的閃爍。單緩沖只有一個(gè)內(nèi)存DC,繪制完成后將該DC輸出到屏幕。而多緩沖有多個(gè)內(nèi)存DC和多幅位圖【4】,首先將所有的繪制操作在內(nèi)存中完成后,再將最終的位圖繪制

50、到屏幕。CSocket提供了Send()和Receive()函數(shù)用于數(shù)據(jù)的發(fā)送和接收。本游戲系統(tǒng)發(fā)送的消息較多,且消息各不相同。因此定義了消息格式,將各種消息的格式統(tǒng)一起來。</p><p>  例如:新玩家進(jìn)入游戲的消息:“infotype: INTO&group: CYA&”</p><p>  改變分組信息的消息:“infotype: GROU&group:

51、RED&”</p><p>  玩家退出游戲的消息:“infotype: QUIT&”</p><p>  玩家聊天的消息:“infotype: INFO&data: 我進(jìn)來了?!?lt;/p><p>  這樣的消息還有很多。以上的技術(shù)主要通過封裝CGame類來實(shí)現(xiàn)。</p><p>  (4) 當(dāng)所有進(jìn)入游戲的游戲玩家都

52、準(zhǔn)備就緒之后,就開始游戲。游戲中玩家通過左右鍵、向下鍵來移動(dòng)運(yùn)動(dòng)方塊,向上鍵來變換方塊,空格鍵使方塊直接下落。并且根據(jù)玩家的操作不同播發(fā)不同的音樂。游戲中消層時(shí)可以獲得該層的道具,并通過1——6的數(shù)字鍵來使用道具,以達(dá)到相互攻擊和援助的目的。</p><p>  需要技術(shù):GDI繪圖技術(shù)、自定義消息、MCI多媒體技術(shù)【8】、道具技術(shù)。</p><p>  實(shí)現(xiàn)方法:MCI(Media Co

53、ntrol Interface,媒體控制接口)向Windows程序提供了在高層次上控制媒體設(shè)備接口的能力。程序不必關(guān)心具體設(shè)備,就可以對激光唱機(jī)(CD)、視盤機(jī)、波形音頻設(shè)備、視頻播放設(shè)備和MIDI設(shè)備等媒體設(shè)備進(jìn)行控制。對于程序員來說,可以把MCI理解為設(shè)備面板上的一排按鍵,通過選擇不同的按鍵(發(fā)送不同的MCI命令)可以讓設(shè)備完成各種功能,而不必關(guān)心設(shè)備內(nèi)部實(shí)現(xiàn)。比如,對于play【11】,視盤機(jī)和CD機(jī)有不同的反應(yīng)(一個(gè)是播放視頻,

54、一個(gè)播放音頻),而對用戶來說卻只需要按同一按鈕。通過調(diào)用MCI的函數(shù)來實(shí)現(xiàn)音樂的播放;道具技術(shù)主要是利用隨機(jī)加入的方式,玩家每消掉一層方塊時(shí)就會產(chǎn)生隨機(jī)數(shù)量的道具方塊。玩家使用道具時(shí),游戲主要根據(jù)接收的消息,利用繪圖技術(shù)實(shí)現(xiàn)道具的功能。這些都在CGame類【21】中實(shí)現(xiàn)。</p><p>  (5) 當(dāng)只剩下一個(gè)分組每有結(jié)束游戲的時(shí)候,游戲結(jié)束,且該分組取得了游戲的勝利。游戲進(jìn)入結(jié)束清理、還原工作【17】。如計(jì)算

55、各玩家的游戲得分,并將得分寫入數(shù)據(jù)庫,同時(shí)更新玩家界面顯示的游戲基礎(chǔ)信息;繪制游戲結(jié)束界面等。</p><p>  需要技術(shù):半透明窗體、半透明繪圖技術(shù)【12】、MCI技術(shù)、自定義消息【14】。</p><p>  實(shí)現(xiàn)方法:半透明繪制技術(shù)主要是將原圖像素點(diǎn)顏色值與現(xiàn)圖對應(yīng)像素點(diǎn)顏色值進(jìn)行邏輯異或運(yùn)算形成新值來實(shí)現(xiàn)。</p><p>  (6) 一局游戲結(jié)束后,玩家

56、還可以繼續(xù)進(jìn)行游戲,只要加入游戲的人數(shù)不少于兩人。</p><p>  多人分組對戰(zhàn)俄羅斯方塊游戲設(shè)計(jì)原理較簡單,但里面的各種事件的處理較煩瑣,且涉及到的編程技術(shù)、技巧較多,稍不注意就可能出錯(cuò)。且作為游戲,系統(tǒng)運(yùn)行的穩(wěn)定性、異常處理、健壯性等也很重要。</p><p>  2.2 需求分析 </p><p>  俄羅斯方塊是我們耳熟能詳?shù)囊豢钚蓍e益智小游戲,老

57、少皆宜。在各大網(wǎng)站和對戰(zhàn)平臺,以及掌機(jī)上都能見到它的身影。在它給廣大愛好者帶來歡樂的同時(shí),也創(chuàng)造了巨大的商業(yè)價(jià)值。開發(fā)出一款的好的俄羅斯方塊游戲具有極大的意義。同時(shí)俄羅斯方塊游戲產(chǎn)生較早,設(shè)計(jì)較簡單,各方面的技術(shù)已經(jīng)很成熟,要將現(xiàn)有的新技術(shù)加入到其中也是一件很容易的事情。從各方面來看開發(fā)一款別開生面的俄羅斯方塊游戲都是一個(gè)不錯(cuò)的選擇。</p><p>  然而,多人對戰(zhàn)俄羅斯方塊游戲是一種有別于傳統(tǒng)俄羅斯方塊的游

58、戲。傳統(tǒng)的俄羅斯方塊游戲多在掌機(jī)或街機(jī)上,只能由一個(gè)人游玩。游戲缺少玩家的交互,不免游戲單調(diào)。而多人分組對戰(zhàn)俄羅斯方塊游戲在原來的基礎(chǔ)上加入了網(wǎng)絡(luò)互聯(lián),可以支持多人分組對戰(zhàn)。增加了游戲玩家的交互,這是一種全新的設(shè)計(jì)理念。因此也使程序設(shè)計(jì)的難度大大增加。</p><p>  因此多人分組對戰(zhàn)俄羅斯方塊游戲應(yīng)具有下面的功能:</p><p>  能夠遠(yuǎn)程連接數(shù)據(jù)庫為用戶提供登錄驗(yàn)證及玩家游戲信

59、息保存的功能。</p><p>  正確的俄羅斯方塊游戲算法,使玩家能夠暢快的游玩游戲。</p><p>  實(shí)現(xiàn)網(wǎng)絡(luò)互聯(lián),可以支持多人對戰(zhàn),且多個(gè)玩家可以分組對戰(zhàn)。</p><p>  玩家可以獲得游戲道具,利用道具對對手進(jìn)行攻擊,對自己或盟友進(jìn)行援助。</p><p>  每個(gè)玩家都可以通過自己的游戲界面清楚的了解到其他玩家的游戲情況。&

60、lt;/p><p>  完善的記分系統(tǒng),能通過分組情況、游戲名次等信息計(jì)算出每個(gè)玩家的游戲得分,并將得分情況寫入數(shù)據(jù)庫。</p><p>  游戲玩家中可以相互聊天,以此來增加游戲的交互性和趣味性。</p><p>  游戲要具有友好的人機(jī)界面,如動(dòng)畫光標(biāo)、音效等。</p><p>  游戲應(yīng)具有較強(qiáng)的健壯性,確保游戲正常運(yùn)行。</p>

61、;<p>  多人分組對戰(zhàn)俄羅斯方塊游戲的數(shù)據(jù)流程和遵循一般的C/S軟件模型。游戲分為服務(wù)器和客戶端兩個(gè)軟件。服務(wù)器主要用于接收從客戶端發(fā)來的消息,并對消息進(jìn)行判斷,根據(jù)消息類型作出相應(yīng)的處理,將處理結(jié)果發(fā)送給目標(biāo)客戶端。而客戶端的功能主要是顯示游戲界面,獲取玩家的操作信息,根據(jù)玩家的操作作出相應(yīng)的處理,并將結(jié)果以消息的形式發(fā)送給服務(wù)器,使自己的游戲情況讓其他玩家了解。</p><p>  2.2.

62、1 數(shù)據(jù)流圖</p><p>  進(jìn)入游戲時(shí)首先要進(jìn)行登錄認(rèn)證,游戲以ADO數(shù)據(jù)庫連接技術(shù),遠(yuǎn)程連接到SQL2000數(shù)據(jù)庫。由于本系統(tǒng)不是管理系統(tǒng),只需要記錄游戲玩家的游戲信息,所以數(shù)據(jù)庫中只建立了一張userinfo數(shù)據(jù)表【11】。該表記錄了玩家?guī)ぬ?、密碼、昵稱、游戲等級、游戲積分、玩家性別等信息。該表主要用于玩家登錄時(shí)從中提取帳號、密碼等進(jìn)行驗(yàn)證;當(dāng)游戲結(jié)束時(shí)將游戲得分寫入數(shù)據(jù)表中。</p>&

63、lt;p>  數(shù)據(jù)庫頂層數(shù)據(jù)流如圖2-5所示。</p><p>  圖2-5 數(shù)據(jù)庫頂層數(shù)據(jù)流圖</p><p>  一層數(shù)據(jù)流如圖2-6所示。</p><p>  圖2-6 數(shù)據(jù)一層數(shù)據(jù)流圖</p><p>  二層數(shù)據(jù)流如圖2-7、圖2-8所示。</p><p>  圖2-7 登錄子系統(tǒng)二層數(shù)據(jù)流圖</

64、p><p>  圖2-8 游戲初始化模塊二層數(shù)據(jù)流圖</p><p>  圖2-9 游戲處理模塊二層數(shù)據(jù)流圖</p><p>  2.2.2 數(shù)據(jù)字典</p><p><b>  表2-1 玩家信息</b></p><p><b>  表2-2 登錄信息</b></p>

65、;<p>  表2-3 游戲基礎(chǔ)信息 </p><p>  表2-4 游戲初始化信息</p><p>  表2-5 游戲處理信息</p><p>  表2-6 游戲結(jié)束信息</p><p><b>  2.3 概要設(shè)計(jì)</b></p><p>  2.3.1 功能定義 <

66、;/p><p>  多人對戰(zhàn)俄羅斯方塊游戲主要以網(wǎng)絡(luò)通信為基礎(chǔ)實(shí)現(xiàn)人與人的交互。它主要包含以下幾大功能模塊:</p><p>  (1) 系統(tǒng)登錄模塊</p><p>  該模塊主要提供玩家進(jìn)入游戲時(shí)的認(rèn)證功能。首先建立SQL2000數(shù)據(jù)庫,利用ADO遠(yuǎn)程連接技術(shù)實(shí)現(xiàn)與數(shù)據(jù)庫的連接。讀取數(shù)據(jù)庫中的數(shù)據(jù)與用戶輸入數(shù)據(jù)進(jìn)行比較,如果正確就進(jìn)入游戲主系統(tǒng),否則將返回到登錄界面

67、。</p><p>  層次圖如圖2-9所示。</p><p>  圖2-10 登錄系統(tǒng)層次圖</p><p>  (2) 俄羅斯算法模塊</p><p>  該模塊主要實(shí)現(xiàn)俄羅斯方塊游戲的控制。其中它又包括運(yùn)動(dòng)方塊的隨機(jī)產(chǎn)生、方塊下移、左移、右移、直接下落、變換、方塊觸界檢測、消層等多個(gè)模塊。運(yùn)動(dòng)方塊隨機(jī)產(chǎn)生主要是在一個(gè)運(yùn)動(dòng)方塊到底后,通過

68、Rand()方法產(chǎn)生下一個(gè)將要出現(xiàn)的方塊形狀【13】。下移、左移、右移、直接下落模塊主要是將運(yùn)動(dòng)方塊向下移動(dòng)一格、向左移動(dòng)一格、向右移動(dòng)一格、直接落到游戲池底。變換模塊主要是將當(dāng)前運(yùn)動(dòng)方塊劣時(shí)針方向旋轉(zhuǎn)90度【15】。方塊觸界檢測模塊主要完成運(yùn)動(dòng)方塊是否運(yùn)動(dòng)到了游戲池的底部、左邊界、右邊界的判斷。消層模塊主要是當(dāng)運(yùn)動(dòng)方塊運(yùn)動(dòng)到了游戲池的底部后,檢測游戲池中的每一行,發(fā)現(xiàn)有滿行的層就消掉,并將該層上面的方塊逐層下移一行【19】。</

69、p><p>  模塊層次圖如圖2-10所示。</p><p>  圖2-11 俄羅斯方塊算法實(shí)現(xiàn)層次圖</p><p>  (3) 網(wǎng)絡(luò)通信模塊</p><p>  網(wǎng)絡(luò)通信模塊主要完成服務(wù)器的建立、客戶端的連接以及各玩家的相互通信功能。它又分為服務(wù)器和客戶端兩個(gè)模塊。服務(wù)器完成網(wǎng)絡(luò)俄羅斯方塊服務(wù)器的建立,并等待客戶端的連接。同時(shí)接收客戶端發(fā)送過

70、來的消息,并對接收的消息進(jìn)行處理,將處理結(jié)果發(fā)送給目標(biāo)客戶端??蛻舳四K完成對指定服務(wù)器的連接,連接成功后,將玩家的游戲操作信息發(fā)送給服務(wù)器,通過服務(wù)器將這些消息傳達(dá)給其他的玩家【16】。</p><p>  模塊層次圖如圖2-11所示。</p><p>  圖2-12 網(wǎng)絡(luò)通信層次圖</p><p>  (4) 游戲界面繪制模塊</p><p&

71、gt;  該模塊是游戲?qū)崿F(xiàn)的核心模塊,它本身并不實(shí)現(xiàn)一些游戲控制的功能。但是,它是其他模塊功能的體現(xiàn)。其他模塊都要受它的調(diào)用,從而形成一個(gè)游戲系統(tǒng)。該模塊的子模塊較多,例如初始界面繪制模塊、游戲開始前的準(zhǔn)備界面繪制模塊、游戲準(zhǔn)備就緒界面繪制模塊、游戲開始界面繪制模塊(其中又包括主游戲區(qū)域繪制、從游戲區(qū)域繪制等)、游戲結(jié)束繪制模塊等。該主模塊及其它的子模塊主要完成界面在不同事件響應(yīng)下游戲界面的繪制和音樂的播放功能【18】。</p&g

72、t;<p>  模塊層次圖如圖2-12所示。</p><p>  圖2-13 界面繪制模塊層次圖</p><p>  以上是游戲功能實(shí)現(xiàn)的主要模塊,它們經(jīng)過相互調(diào)用控制,協(xié)作分工最終完成了本游戲系統(tǒng)的設(shè)計(jì)。</p><p>  本系統(tǒng)采用Visual C++6.0開發(fā)環(huán)境,C++為開發(fā)語言,MFC為開發(fā)庫,SQL Server2000+SP4補(bǔ)丁為數(shù)據(jù)

73、庫進(jìn)行開發(fā)【25】。</p><p>  2.3.2 游戲框架設(shè)計(jì) </p><p>  本游戲系統(tǒng)采用C/S軟件開發(fā)模型,主要包括登錄認(rèn)證、游戲算法、網(wǎng)絡(luò)通信、界面繪制四大模塊【21】。</p><p>  系統(tǒng)層次圖如圖2-13所示。</p><p>  圖2-14 多人分組對戰(zhàn)俄羅斯方塊游戲?qū)哟螆D</p><

74、p>  本系統(tǒng)采用C/S軟件模型、單線程、阻塞式網(wǎng)絡(luò)通信的設(shè)計(jì)方式。服務(wù)器系統(tǒng)只有一個(gè)界面。系統(tǒng)調(diào)用網(wǎng)絡(luò)通信模塊中的服務(wù)器端模塊完成服務(wù)器的建立,并等待連接。當(dāng)連接成功客戶端發(fā)送消息過來,系統(tǒng)調(diào)用消息處理模塊處理消息得到結(jié)果。最后調(diào)用消息收發(fā)模塊將消息發(fā)送出去。客戶端系統(tǒng)主要由兩個(gè)界面組成。一個(gè)登錄界面和一個(gè)游戲主界面。登錄界面調(diào)用登錄認(rèn)證模塊,完成身份認(rèn)證。認(rèn)證成功后進(jìn)入游戲主界面。主界面首先調(diào)用網(wǎng)絡(luò)通信模塊完成與服務(wù)器的連接,

75、并向服務(wù)器發(fā)送相應(yīng)的消息。連接成功后,系統(tǒng)調(diào)用界面繪制模塊中的初始界面繪制模塊完成初始界面的繪制。游戲開始前,系統(tǒng)調(diào)用游戲準(zhǔn)備階段界面繪制模塊繪制界面。游戲開始后將在調(diào)用游戲算法模塊控制游戲的同時(shí)調(diào)用游戲開始界面繪制模塊顯示游戲進(jìn)度。游戲結(jié)束后,系統(tǒng)調(diào)用游戲記分模塊計(jì)算各玩家的最終得分,并調(diào)用游戲結(jié)束界面繪制模塊完成游戲結(jié)果畫面的繪制。</p><p>  2.3.3 技術(shù)、風(fēng)險(xiǎn)預(yù)測 </p>

76、<p>  俄羅斯方塊游戲雖然很早就被發(fā)明了,經(jīng)過長時(shí)間的發(fā)展各種技術(shù)相對較成熟。俄羅斯方塊的游戲算法也基本定型。但是,本系統(tǒng)為多人對戰(zhàn)俄羅斯方塊游戲,和傳統(tǒng)的俄羅斯方塊有很大的不同,在原來的基礎(chǔ)上加入了很多新的技術(shù) 新的實(shí)現(xiàn)方法。然而,要將一些新的技術(shù)融入到俄羅斯方塊游戲中并非一件容易的事情。同時(shí),由于本人知識水平有限,對很多技術(shù)沒有掌握或不熟悉,這就使開發(fā)本游戲存在一定的風(fēng)險(xiǎn),從而導(dǎo)致系統(tǒng)開發(fā)的失敗或不完整。&

77、lt;/p><p>  本系統(tǒng)設(shè)計(jì)為四大模塊:系統(tǒng)登錄模塊、游戲算法模塊、網(wǎng)絡(luò)通信模塊、界面繪制模塊。在四個(gè)模塊中都用到了相應(yīng)的開發(fā)技術(shù),也具有一定的開發(fā)風(fēng)險(xiǎn)。</p><p>  (1) 系統(tǒng)登錄模塊:</p><p>  技術(shù):ADO遠(yuǎn)程連接SQL2000技術(shù)。</p><p>  風(fēng)險(xiǎn):實(shí)現(xiàn)登錄信息的安全性較困難。</p>&

78、lt;p>  (2) 游戲算法模塊:</p><p>  技術(shù):數(shù)組等基礎(chǔ)知識的操作。</p><p>  風(fēng)險(xiǎn):怎樣設(shè)計(jì)合理的游戲邏輯、怎樣設(shè)計(jì)各個(gè)子模塊、各個(gè)子模塊應(yīng)該怎樣協(xié)調(diào)工作使游戲正確、怎樣進(jìn)行觸界檢測等。</p><p>  (3) 網(wǎng)絡(luò)通信模塊:</p><p>  技術(shù):CSocket套接字技術(shù)、自定義消息技術(shù)</

79、p><p>  風(fēng)險(xiǎn):怎樣實(shí)現(xiàn)消息收發(fā)的正確性、怎樣將接收的信息正確發(fā)送給邏輯目的玩家、怎樣實(shí)現(xiàn)不同信息的發(fā)送、信息收發(fā)出現(xiàn)異常怎么辦等。</p><p>  (4) 界面繪制模塊:</p><p>  技術(shù):GDI繪圖技術(shù)、多緩沖繪圖技術(shù)、半透明繪圖技術(shù)、MCI多媒體技術(shù)、動(dòng)畫光標(biāo)技術(shù)。</p><p>  風(fēng)險(xiǎn):怎樣根據(jù)服務(wù)器發(fā)送的消息繪制界

80、面、怎樣將自己界面的繪制結(jié)果發(fā)送給其他玩家、怎樣實(shí)現(xiàn)游戲動(dòng)畫特效、怎樣實(shí)現(xiàn)多次繪圖屏幕不閃爍等。</p><p><b>  3 詳細(xì)設(shè)計(jì)</b></p><p>  3.1 系統(tǒng)組成及功能描述</p><p>  本游戲系統(tǒng)是在單機(jī)版俄羅斯方塊游戲的基礎(chǔ)上擴(kuò)展而來的多人分組對戰(zhàn)俄羅斯方塊游戲。它改變了傳統(tǒng)俄羅斯方塊人機(jī)對戰(zhàn)的游戲模式,實(shí)現(xiàn)了多

81、人對打的模式。</p><p>  本系統(tǒng)的主要功能是:多人一起加入游戲進(jìn)行對抗賽,至少兩人,最多六人。玩家可以自由選擇分組,可以分為自由人、澄色、藍(lán)色、紅色四種身份。開始對戰(zhàn)后,各分組可以以獲得的道具相互攻擊,最后存活下來的一組游戲玩家成為最終勝利者,他們將平分其他失敗玩家扣除的分?jǐn)?shù)。游戲中玩家之間可以相互聊天等以此來達(dá)到游戲娛樂的目的。</p><p>  本系統(tǒng)的組成:本系統(tǒng)為C/S

82、軟件模型,主要由登錄模塊、游戲算法模塊、網(wǎng)絡(luò)通信模塊、界面繪制模塊四部分組成。其中每個(gè)模塊又包括各個(gè)小模塊。</p><p>  3.2 系統(tǒng)登錄模塊設(shè)計(jì)</p><p>  系統(tǒng)登錄模塊包括一個(gè)登錄界面用于接受玩家的輸入信息。包括:服務(wù)器IP地址、用戶帳號、用戶密碼。界面設(shè)計(jì)如圖3-1所示。</p><p>  圖3-1 登錄模塊界面設(shè)計(jì)圖</p>

83、<p>  登錄界面由一個(gè)對話框組成。玩家必須在用戶帳號、用戶密碼和服務(wù)地址對應(yīng)編輯框中輸入完整的登錄信息才能進(jìn)行登錄驗(yàn)證,否則將提示錯(cuò)誤信息。進(jìn)入登錄系統(tǒng)前,必須運(yùn)行SQL Server 2000數(shù)據(jù)庫,且保證數(shù)據(jù)庫中的數(shù)據(jù)表正確無誤。</p><p>  該模塊需要的數(shù)據(jù)表如表3-1所示。</p><p>  表3-1 玩家信息表</p><p>  

84、account :用戶帳號;password :用戶密碼;byname :昵稱;grade :游戲等級;integral :游戲積分;sex :用戶性別;flag :該用戶是否已經(jīng)登錄,為0表示還沒有登錄,為1表示已經(jīng)登錄。</p><p>  當(dāng)玩家完成登錄信息的輸入后,點(diǎn)擊登錄按鈕時(shí),系統(tǒng)將調(diào)用ADOConn類遠(yuǎn)程連接到SQL Server2000數(shù)據(jù)庫,此處采用ADO數(shù)據(jù)庫連接技術(shù)實(shí)現(xiàn)。如果連接成功將調(diào)用C

85、Users類根據(jù)玩家輸入的用戶帳號去讀取password 字段和flag字段。如果讀取成功,說明該用戶帳號存在,否則說明帳號有誤。帳號正確時(shí),首先檢查flag字段是否為0。若flag為0,則說明該用戶還沒有登錄游戲,接著將讀取的password 與用戶輸入的用戶密碼進(jìn)行比較,相等則登錄成功,并將flag字段值更新為1寫入數(shù)據(jù)庫。不相等則登錄失敗,重新輸入登錄信息。若flag不為0,說明該用戶已經(jīng)登錄,不能多次登錄,將提示信息錯(cuò)誤。返回登

86、錄初始狀態(tài),要求重新輸入登錄信息。若用戶登錄成功,系統(tǒng)將讀取byname 、grade 、integral 字段的信息并保存起來以便進(jìn)入游戲主模塊時(shí)繪制該玩家的游戲基礎(chǔ)信息。到此,登錄模塊所做的工作就完成了。</p><p>  該模塊的詳細(xì)流程圖如圖3-2所示。</p><p>  圖3-2 登錄模塊詳細(xì)流程圖</p><p>  3.3 游戲算法實(shí)現(xiàn)模塊<

87、/p><p>  算法實(shí)現(xiàn)模塊主要描述俄羅斯方塊游戲的實(shí)現(xiàn)原理。它包括運(yùn)動(dòng)方塊的隨機(jī)產(chǎn)生、方塊下移、左移、右移、直接下落、變換、方塊觸界檢測、消層等多個(gè)模塊。</p><p>  方塊隨機(jī)產(chǎn)生主要由GenerateDiamond()函數(shù)實(shí)現(xiàn)。本系統(tǒng)游戲區(qū)域由一個(gè)21*12的矩陣diamondsA[21][12]組成【22】。隨機(jī)方塊由一個(gè)4*4的矩陣cubeX[4][4]保存。在下一個(gè)方塊產(chǎn)生

88、前須將保存上一個(gè)方塊信息的cubeX[4][4]清零。然后,用Rand()函數(shù)隨機(jī)產(chǎn)生一個(gè)0到8之間的數(shù)字,每一個(gè)數(shù)字都對應(yīng)著一個(gè)不同形狀的方塊。同時(shí)隨機(jī)產(chǎn)生方塊的顏色(1到7,每個(gè)數(shù)字代表一種顏色)。隨機(jī)的數(shù)字產(chǎn)生后,方塊的形狀也就固定了。就用隨機(jī)產(chǎn)生的顏色值(1到7)填充cubeX[4][4]相應(yīng)的元素。這樣cubeX[4][4]就保存了下一個(gè)方塊的形狀、顏色等信息。接著將cubeX[4][4]矩陣隨機(jī)旋轉(zhuǎn),并將旋轉(zhuǎn)后的方塊移動(dòng)到c

89、ubeX[4][4]矩陣的最上方,這樣下一個(gè)方塊就產(chǎn)生了。最后初始化該方塊將第一次出現(xiàn)在游戲區(qū)域中的位置為游戲區(qū)域矩陣的第一行中間。同時(shí)擦除下一個(gè)待出現(xiàn)方塊提示區(qū)域原來的方塊,并將該方塊繪制上去。到此,下一個(gè)待出現(xiàn)的運(yùn)動(dòng)方塊就產(chǎn)生了。</p><p>  算法實(shí)現(xiàn)流程圖如圖3-3所示。</p><p>  圖3-3 方塊隨機(jī)產(chǎn)生接口流程圖</p><p>  方塊下

90、移、左移、右移、直接下落主要由Move()函數(shù)來實(shí)現(xiàn)。左移和右移時(shí),函數(shù)首先調(diào)用MeetBorder()函數(shù)進(jìn)行邊界檢測,如果已經(jīng)到了左邊界或右邊界,就退出。否則就將游戲區(qū)域當(dāng)前顯示的運(yùn)動(dòng)方塊擦除,然后將該運(yùn)動(dòng)方塊的位置向左或向右移動(dòng)一格,最后在新的位置上重新畫出運(yùn)動(dòng)方塊,同時(shí)播放音效。下移時(shí),函數(shù)首先調(diào)用MeetBorder()函數(shù)進(jìn)行邊界檢測,檢測是否已經(jīng)到了下邊界,如果到了下邊界,則調(diào)用LineDelete()進(jìn)行消層,調(diào)用Pro

91、pPaint()記錄獲得的道具,調(diào)用PropExplainPaint()繪制獲得的道具。如果沒有到下邊界,則退出。然后將游戲區(qū)域當(dāng)前顯示的運(yùn)動(dòng)方塊擦除,將該運(yùn)動(dòng)方塊的位置向下移動(dòng)一格,最后在新的位置上重新畫出運(yùn)動(dòng)方塊,同時(shí)播放音效。直接下落時(shí),函數(shù)首先擦除游戲區(qū)域當(dāng)前顯示的運(yùn)動(dòng)方塊,然后進(jìn)行循環(huán)進(jìn)行邊界檢測,沒有到達(dá)下邊界就將運(yùn)動(dòng)方塊的當(dāng)前位置向下移動(dòng)一格,直到到達(dá)下邊界為止。最后在新的位置畫出運(yùn)動(dòng)方塊,進(jìn)行消層、記錄獲得的道具、畫出道

92、具。</p><p>  算法實(shí)現(xiàn)流程圖如圖3-4所示。</p><p>  圖3-4 Move函數(shù)實(shí)現(xiàn)流程圖</p><p>  方塊變換的實(shí)現(xiàn)見上圖,首先擦除游戲區(qū)域當(dāng)前的運(yùn)動(dòng)方塊,然后調(diào)用MeetBorder()進(jìn)行變換,MeetBorder()調(diào)用Rotatable()判斷能否變換。如果能變換,MeetBorder()中將當(dāng)前運(yùn)動(dòng)方塊逆時(shí)針旋轉(zhuǎn)90度角形成新

93、的方塊。最后將新的方塊繪制到游戲區(qū)域運(yùn)動(dòng)方塊原來的位置上。如果不能變換,則Move()函數(shù)中將剛才擦除的運(yùn)動(dòng)方塊重新繪制上去。</p><p>  方塊觸界檢測主要判斷當(dāng)前運(yùn)動(dòng)方塊是否到達(dá)了左邊界、右邊界、下邊界,同時(shí)兼有變換方塊的功能。函數(shù)首先將保存運(yùn)動(dòng)方塊信息的cubeX[4][4]矩陣的值移植到表示游戲區(qū)域的diamondsA[21][12]矩陣的相應(yīng)位置。如果方塊左移,則將cubeX[4][4]矩陣在di

94、amondsA[21][12]中左移一格,然后檢查cubeX[4][4]中所有值不為0的元素與diamondsA[21][12]中重合的元素的值是否為0,只要有一個(gè)不為0,則表示已經(jīng)到了左邊界或被其他方塊擋住了,不能左移。若都為0,說明可以向左移。就將方塊向左移一格,并在新的位置繪制出運(yùn)動(dòng)方塊。向右移、向下移、變換的情況同理【27】。</p><p>  算法實(shí)現(xiàn)流程圖如圖3-5所示。</p>&l

95、t;p>  圖3-5 觸界檢測實(shí)現(xiàn)流程圖</p><p>  消層功能主要由LineDelete()函數(shù)實(shí)現(xiàn)。該函數(shù)實(shí)現(xiàn)的原理是:逐行遍歷diamondsA[21][12]矩陣,發(fā)現(xiàn)某一行為滿行就將該行消去。并逐一檢查該行的每一個(gè)元素,若發(fā)現(xiàn)為道具方塊,則將該道具加入道具數(shù)組中。然后將該行上面的行依次往下移一行,第一行元素的值變?yōu)槿?。并將變化后的diamondsA[21][12]矩陣?yán)L制到游戲區(qū)域。重復(fù)上

96、面的操作,直到檢查到diamondsA[21][12]的最后一行。完成后,將獲得的道具繪制到道具區(qū)域,并將記錄消層數(shù)量的變量的值增加相應(yīng)的值。隨機(jī)產(chǎn)生下一個(gè)方塊,最后檢查方塊是否已經(jīng)到了游戲區(qū)域頂部。若是則將EndFlag置1,表示游戲結(jié)束【26】。</p><p>  算法實(shí)現(xiàn)流程圖如圖3-6所示。</p><p>  圖3-6 消層實(shí)現(xiàn)流程圖</p><p> 

97、 到此,俄羅斯方塊游戲的算法實(shí)現(xiàn)模塊就完成了,游戲系統(tǒng)將通過對上面各個(gè)功能模塊的調(diào)用實(shí)現(xiàn)游戲的運(yùn)行。</p><p>  3.4 網(wǎng)絡(luò)通信模塊</p><p>  網(wǎng)絡(luò)通信模塊是各個(gè)獨(dú)立游戲?qū)嶓w連接的紐帶。它的主要作用是將每個(gè)游戲玩家連接起來,幫助他們傳遞信息,實(shí)現(xiàn)人與人之間的交互。從而提高游戲的趣味性、交互性、可玩性。具體的說網(wǎng)絡(luò)通信模塊主要包括服務(wù)器和客戶端兩個(gè)模塊。服務(wù)器模塊用于建立

98、服務(wù)器為客戶端提供服務(wù),接收客戶端的連接,處理并轉(zhuǎn)發(fā)消息??蛻舳四K主要用于將客戶端連接到服務(wù)器,并將玩家的操作情況以消息的形式發(fā)送給服務(wù)器處理,最后接收服務(wù)器發(fā)送來的消息并處理。</p><p>  服務(wù)器建立:服務(wù)器端封裝CSocket類分別生成了CClientSocket類和CServerSocket類,并在CServerSocket類中重載了OnAccept消息,在CClientSocket類中重載了On

99、Receive消息。服務(wù)器的建立遵循CSocket編程的一般步驟,首先創(chuàng)建監(jiān)聽套接字,調(diào)用Listen()監(jiān)聽客戶端的連接【24】。有客戶端請求連接時(shí),調(diào)用Accept()接受客戶端的連接。連接成功后,就可以調(diào)用ReceiveData()接收已連接客戶端發(fā)送來的消息。服務(wù)器界面設(shè)計(jì)圖如圖3-7所示。</p><p>  圖3-7 服務(wù)器界面圖</p><p>  客戶端連接:客戶端封裝CS

100、ocket類生成了CMysocket類,并重載了OnReceive消息。首先在游戲主系統(tǒng)中創(chuàng)建客戶端套接字,然后調(diào)用Connect()連接到指定的服務(wù)器,連接成功后,調(diào)用Send()將該玩家的游戲基礎(chǔ)信息發(fā)送到服務(wù)器。</p><p>  服務(wù)器端和客戶端消息的收發(fā):服務(wù)器建立成功,客戶端連接到服務(wù)器后,客戶端就可以向服務(wù)器發(fā)送消息。服務(wù)器重載ReceiveData()來接收客戶端發(fā)送的消息,利用Send()來發(fā)

101、送消息??蛻舳艘仓剌d了ReceiveData()來接收服務(wù)器發(fā)送來的消息??蛻舳税l(fā)送來的數(shù)據(jù)較多,且數(shù)據(jù)樣式各不相同。因此,本系統(tǒng)自定義消息格式,統(tǒng)一數(shù)據(jù)的發(fā)送方式。</p><p>  消息格式為:infotype: 消息類型&<標(biāo)志字段: >字段值&……<標(biāo)志字段: >字段值& <>標(biāo)記的內(nèi)容可有可無。</p><p

102、>  例如:當(dāng)玩家發(fā)送聊天信息時(shí),客戶端向服務(wù)器發(fā)送的消息為:"infotype: INFO&data: "+str。Str表示聊天信息字符串。</p><p>  服務(wù)器在ReceiveData()函數(shù)中接收到該消息后,語法分析該消息,讀取infotype字段的值,若為“INFO”,則服務(wù)器就知道發(fā)送過來的是聊天信息。接著就提取聊天信息“str”,將其發(fā)送到每一個(gè)連接到服務(wù)器的

103、客戶端。這樣每個(gè)客戶端都會在ReceiveData()中接收到該消息,客戶端再次對其進(jìn)行語法分析,讀取消息類型字段,若為“INFO”就將聊天信息“str”寫入到Richedit控件。</p><p>  除了聊天消息外還有很多消息,部分消息列舉如下:</p><p>  新玩家進(jìn)入游戲的消息:“infotype: INTO&group: CYA&”</p>&

104、lt;p>  改變分組信息的消息:“infotype: GROU&group: RED&”</p><p>  玩家退出游戲的消息:“infotype: QUIT&”</p><p>  使用道具的消息:"infotype: PROP&addr: "+m_address[p].Mid(0, m_address[p].GetLengt

105、h()-5)+m_proptype</p><p>  從游戲區(qū)域改變的消息:"infotype: DIAM&"</p><p>  游戲一個(gè)玩家結(jié)束的消息:="infotype: MEND&"+strtemp</p><p>  游戲勝利的消息:"infotype: WINN&"+

106、m_fen+"&"</p><p>  整個(gè)游戲結(jié)束的消息:"infotype: OVER&"+strtemp</p><p>  各種消息的收發(fā)和處理情況基本相似,由于內(nèi)容較多,這里就不再累述。</p><p>  網(wǎng)絡(luò)通信模塊的流程圖如圖3-8所示。</p><p>  圖3-8 網(wǎng)

107、絡(luò)通信模塊實(shí)現(xiàn)流程圖</p><p>  3.5 游戲界面繪制模塊</p><p>  游戲的最終目的是能給游戲玩家提供友好的視覺享受。因此,游戲界面的繪制尤為重要。前面各模塊的功能主要集中在游戲邏輯的實(shí)現(xiàn),那么游戲界面繪制模塊就是將看不見的游戲邏輯讓游戲玩家能夠看見,從而幫助玩家正確的完成操作。該模塊貫穿整個(gè)游戲系統(tǒng),從進(jìn)入游戲到最后退出游戲都將用到該模塊來繪制游戲界面,顯示游戲進(jìn)行情況

108、。游戲界面繪制模塊實(shí)現(xiàn)較復(fù)雜,子模塊較多,提供的函數(shù)接口也很煩瑣。從游戲進(jìn)行的階段可以將該模塊大致分為以下幾個(gè)不同部分:游戲初始界面、游戲準(zhǔn)備界面、游戲開始界面、游戲結(jié)束界面等。</p><p>  3.5.1 游戲初始界面</p><p>  該界面是登錄成功后,玩家第一次看見的游戲界面,此時(shí),游戲玩家沒有作出任何操作。界面效果圖如圖3-9所示。</p><p>

109、  圖3-9 游戲初始界面設(shè)計(jì)圖</p><p>  從圖中我們可以看到,效果圖主要由左邊標(biāo)記的2—6五個(gè)從游戲區(qū)域、中間標(biāo)記為1的主游戲區(qū)域、右邊的聊天窗口及分組選擇等按鈕組成。</p><p>  初始界面繪制原理是:當(dāng)玩家登錄成功后,系統(tǒng)顯示游戲主界面。首先創(chuàng)建第一重繪圖DC將一張游戲背景圖繪制到界面上,并初始化參數(shù)設(shè)置、快速幫助、最小化、最大化、關(guān)閉、發(fā)言、A、B、C、自由人、開始

110、、退出等按鈕為INIT狀態(tài),練習(xí)按鈕為INVALID狀態(tài),接著調(diào)用InitPaint()函數(shù)根據(jù)它們的狀態(tài)繪制按鈕圖。聊天信息框中顯示事先準(zhǔn)備好的字符串。接著分別創(chuàng)建6個(gè)第二重繪圖DC,一個(gè)用于主游戲區(qū)域的繪制。當(dāng)玩家登錄時(shí)便從數(shù)據(jù)庫中提取出了該玩家的昵稱、等級、積分等游戲基礎(chǔ)信息,且每個(gè)剛登錄的玩家的默認(rèn)身份都為自由人。此時(shí)直接將綠色背景圖繪制到主游戲區(qū)域的頭部以表明該玩家的分組情況,同時(shí)也將基礎(chǔ)信息繪制上去。主游戲區(qū)域中繪制暗色人物

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論