[論文]基于MFC的09年游戲畢業(yè)論文.doc_第1頁(yè)
[論文]基于MFC的09年游戲畢業(yè)論文.doc_第2頁(yè)
[論文]基于MFC的09年游戲畢業(yè)論文.doc_第3頁(yè)
[論文]基于MFC的09年游戲畢業(yè)論文.doc_第4頁(yè)
[論文]基于MFC的09年游戲畢業(yè)論文.doc_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

英格洛斯接龍畢業(yè)論文graduation paper following english word系 別: 班 級(jí): 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)老師: 完成日期: 摘要畢業(yè)設(shè)計(jì),要求作品更好的要到有創(chuàng)新性和實(shí)用性,能運(yùn)用以前學(xué)過(guò)的知識(shí)來(lái)完成設(shè)計(jì),經(jīng)充分的調(diào)查與分析后,得出目前大部分的小學(xué)生對(duì)英語(yǔ)學(xué)習(xí)不怎感到興趣,特別是對(duì)強(qiáng)記硬背的記住單詞更感到枯燥無(wú)味,而對(duì)游戲游玩卻非常感興趣,最后決定選擇目前還沒(méi)有人做過(guò)的休閑娛樂(lè)游戲“英格洛斯接龍”游戲開(kāi)發(fā)作為畢業(yè)設(shè)計(jì)項(xiàng)目,希望通過(guò)游戲能提高對(duì)小學(xué)生的學(xué)習(xí)英語(yǔ)興趣?!坝⒏衤逅菇育垺庇螒蛞杂⒄Z(yǔ)詞匯接龍游戲?yàn)樵?,游戲?guī)則簡(jiǎn)單明了,將課堂上的英語(yǔ)詞匯練習(xí)游戲與現(xiàn)代的動(dòng)畫(huà)技術(shù)、網(wǎng)絡(luò)技術(shù)及算法相結(jié)合,做到界面動(dòng)感美觀,算法精確,在視覺(jué)、聽(tīng)覺(jué)享受同時(shí)鞏固和學(xué)習(xí)英語(yǔ)詞匯,提高英語(yǔ)能力和反應(yīng)能力。游戲以卡通人物為主,主要體現(xiàn)出游戲的活力和游戲的娛樂(lè)性。游戲開(kāi)始我們便仿佛進(jìn)入一個(gè)廣闊的大草原上,一輛載滿小精靈的火車(chē)拌著美妙的音樂(lè)開(kāi)進(jìn)草原這里所創(chuàng)建的人物生動(dòng)、有趣,景物生機(jī)勃勃,非常有新意,整體界面設(shè)計(jì)活潑、新鮮,有趣。游戲音樂(lè),游戲圖片和算法都是自創(chuàng),卡通人物隨機(jī)產(chǎn)生,音樂(lè)一直伴隨著游戲。英語(yǔ)詞匯量豐富,最高可達(dá)六級(jí)詞匯量。 功能方面,單人網(wǎng)絡(luò)版,多人網(wǎng)絡(luò)對(duì)戰(zhàn)和多組同時(shí)在網(wǎng)絡(luò)對(duì)戰(zhàn)功能,另外還實(shí)現(xiàn)了計(jì)分、計(jì)時(shí)和單步計(jì)時(shí)功能。網(wǎng)絡(luò)功能的實(shí)現(xiàn),使得游戲更富吸引力,也讓游戲玩家更具競(jìng)爭(zhēng)性,計(jì)時(shí)計(jì)分功能的實(shí)現(xiàn)增加了游戲趣味性、刺激性和吸引力。在這游戲環(huán)境中學(xué)習(xí)英語(yǔ),趣味無(wú)窮,完全可達(dá)到娛樂(lè)學(xué)習(xí)一體的目的。關(guān)鍵字:英 格 洛 斯 接 龍目 錄一、引 言1(一)游戲開(kāi)發(fā)目的1(二)游戲功能1(三)游戲特點(diǎn)1(四)開(kāi)發(fā)工具與運(yùn)行環(huán)境以及安裝要求2二、需 求 分 析3(一)背景及需求分析3(二)界面設(shè)計(jì)分析3(三)游戲功能分析4(四)技術(shù)的分析4(五)詞匯量分析6(六)游戲行業(yè)市場(chǎng)需求信息分析6三、游 戲 的 安 裝7(一)安裝directx(june2008)7(二)安裝游戲的服務(wù)端與客戶端8(三)成功安裝游戲9四、界面設(shè)計(jì)和需求分析10(一) 游戲設(shè)計(jì)界面和功能分析10(二)功能分析及設(shè)計(jì)15五、 算法設(shè)計(jì)與實(shí)現(xiàn)17(一)游戲規(guī)則說(shuō)明17(二)游戲的算法17(三)uml設(shè)計(jì)與模塊功能241 服務(wù)器端252. 客戶端28六、 總結(jié)31七、 參考文獻(xiàn)33一、 引 言(一)游戲開(kāi)發(fā)目的隨著我國(guó)動(dòng)畫(huà)游戲開(kāi)發(fā)水平的不斷提高,許多游戲軟件不斷涌現(xiàn)。隨著電腦的普及,家庭和學(xué)校教育對(duì)游戲軟件提出了新的要求,那就是游戲軟件要同時(shí)兼?zhèn)浣逃蛫蕵?lè)兩種功能,使學(xué)生在游戲中開(kāi)發(fā)思維,學(xué)習(xí)知識(shí)。結(jié)合我們身邊很多小學(xué)生對(duì)英語(yǔ)學(xué)習(xí)不感興趣,而對(duì)游戲游玩卻非常感興趣,所以希望所開(kāi)發(fā)的“英語(yǔ)接龍”游戲能提高他們的英語(yǔ)學(xué)習(xí)興趣,將記英語(yǔ)單詞這無(wú)趣的事情轉(zhuǎn)到游戲中來(lái),讓學(xué)習(xí)者能在學(xué)習(xí)中體會(huì)游戲帶來(lái)的快樂(lè),在游戲中學(xué)習(xí)英語(yǔ),即可以學(xué)到知識(shí)又可以體會(huì)快樂(lè),這是我開(kāi)發(fā)這款這款游戲開(kāi)發(fā)的主要目的。(二)游戲功能游戲同時(shí)結(jié)合游戲者的詞匯量和反應(yīng)速度來(lái)挑戰(zhàn)游戲,不但極具娛樂(lè)性,還能提高記憶單詞能力和思維反應(yīng)能力。游戲的主要功能有: 游戲的登錄 房間的創(chuàng)建 單人網(wǎng)絡(luò)游戲 多人網(wǎng)絡(luò)游戲 聊天室 計(jì)時(shí)。 計(jì)分。(三)游戲特點(diǎn) 目前還沒(méi)有類似的游戲,因此該項(xiàng)目具有創(chuàng)新性。 多人游戲是非常刺激,并具有挑戰(zhàn)性的。因?yàn)槿祟惖氖钟?jì)算機(jī)的ai聰明多。(ai的意思就是人工智能artificial intelligence) 界面動(dòng)感美觀:考慮到讓玩家在輕松愉快的游戲環(huán)境中游玩,游戲中的所有圖片、場(chǎng)景都讓人有輕快明朗的感覺(jué),讓人聯(lián)想在廣闊的大草原上奔跑游玩,在這游戲氛圍中,開(kāi)開(kāi)心心學(xué)習(xí)到英語(yǔ)詞匯。而且圖片也是經(jīng)過(guò)加工設(shè)計(jì)的。 音樂(lè)獨(dú)創(chuàng):本游戲中的所有背景音樂(lè)是原創(chuàng)(叫一位搞音樂(lè)朋友花了幾天的時(shí)間搞出來(lái)的),能讓人在輕松的背景音樂(lè)中進(jìn)入游戲。 游戲算法創(chuàng)新:算法是一個(gè)游戲的靈魂,它覺(jué)得一個(gè)游戲本質(zhì)上的好與壞,在算法也有獨(dú)特的創(chuàng)新。 適合對(duì)象:所有人群,不過(guò)偏向幼兒園還有上小學(xué)的學(xué)生。 可以在游戲的過(guò)程中聊天,學(xué)會(huì)如果更好的溝通,所謂溝通從心開(kāi)始,溝通更應(yīng)該從小開(kāi)始。 適合對(duì)象:所有人群,不過(guò)偏向幼兒園還有上小學(xué)的學(xué)生。(四)開(kāi)發(fā)工具與運(yùn)行環(huán)境以及安裝要求 圖像開(kāi)發(fā)工具:采用flashmx、photoshop、ulead gif animator等為制作游戲界面和背景圖的工具。 frustrated family:為制作音樂(lè)的軟件。 軟件開(kāi)發(fā)工具:用microsoft visual studio 2008(profseeion edition)全新級(jí)的重量級(jí)的開(kāi)發(fā)環(huán)境 ,managed directx sdk2008支持c#的開(kāi)發(fā)包,采用c # 語(yǔ)言作為程序開(kāi)發(fā)語(yǔ)言。 運(yùn)行平臺(tái):windows xp / vista /window 2000 /window 2003 。 安裝要求:該游戲需要 .net framework 框架和directx插件支持。.net framework 框架已包含在安裝包中( 如果原本機(jī)子上有已經(jīng)比.net framework 2.0更新的版本可以選擇不安裝), directx 插件須自行安裝(如果是電腦上裝了vista系統(tǒng)的可以省略這一步)。二、 需 求 分 析(一)背景及需求分析考慮到作為畢業(yè)設(shè)計(jì),要有創(chuàng)新性和實(shí)用性,也要有一定的技術(shù)難度。所以本人對(duì)網(wǎng)上的游戲產(chǎn)品作了廣泛的調(diào)查,總結(jié)了開(kāi)發(fā)休閑游戲一定要有下面的特點(diǎn):l 要有吸引力,界面美觀l 有一定的技術(shù)難度和科學(xué)性l 在游戲過(guò)程中能夠鍛煉出邏輯思維能力、勉捷的反應(yīng)能力、超強(qiáng)的記憶力、耐力、意志力。l 具有一定的文化內(nèi)涵,將一些基礎(chǔ)知識(shí)融入其中,達(dá)到寓教于樂(lè)的效果。結(jié)合我們的學(xué)習(xí)情況,學(xué)生從小學(xué)到大學(xué),英語(yǔ)都是必考的課程,而很多同學(xué)面對(duì)英語(yǔ)束手無(wú)策,毫無(wú)興趣,而小朋友也應(yīng)該從小開(kāi)始培養(yǎng)對(duì)學(xué)習(xí)英語(yǔ)的興趣,從小學(xué)起,因此決定將休閑游戲跟英語(yǔ)學(xué)習(xí)結(jié)合起來(lái),使游戲過(guò)程同時(shí)也是英語(yǔ)復(fù)習(xí)和學(xué)習(xí)的過(guò)程。以往的英語(yǔ)接龍游戲都只是幾個(gè)同學(xué)間的口頭比賽,很難進(jìn)行計(jì)時(shí)計(jì)分,且必須要有幾個(gè)同學(xué)一起玩才會(huì)玩得開(kāi)心,現(xiàn)在我們把這種傳統(tǒng)的口頭游戲變成軟件游戲,讓游戲者隨時(shí)都可以玩,可以一個(gè)人玩、跟電腦玩或上網(wǎng)跟網(wǎng)友玩,并且實(shí)現(xiàn)計(jì)時(shí)計(jì)分功能,讓游戲更刺激、更好玩、更有魅力。基于上述原因,經(jīng)充分的調(diào)查與分析后而選定英語(yǔ)學(xué)習(xí)的游戲作為畢業(yè)設(shè)計(jì),基于時(shí)間問(wèn)題,暫時(shí)先做英格洛斯接龍游戲的大部分功能,在后續(xù)時(shí)間,有時(shí)間將游戲繼續(xù)的完善,希望廣大小朋友們能從游戲中開(kāi)心學(xué)習(xí)和鞏固英語(yǔ)詞匯,增加自己的英語(yǔ)詞匯量而且提高自己的記憶力。(二)界面設(shè)計(jì)分析游戲主要針對(duì)小學(xué)生而開(kāi)發(fā)的,也可適用于各階層人士游玩。因此界面設(shè)計(jì)時(shí)主要考慮適合少齡玩家的視觀感覺(jué),根據(jù)他們追求趣味性和動(dòng)感性,發(fā)自于一顆憐憫而好奇的稚氣之心,小動(dòng)物更能吸引他們的注意和關(guān)心,具有趣味的動(dòng)畫(huà)更是他們的最愛(ài),因此界面設(shè)計(jì)以草原為游戲界面的整體背景,以一些精靈和小動(dòng)物和飛去的蜻蜓作為動(dòng)態(tài)背景,色調(diào)方面采用讓人輕松愉快的暖色調(diào),對(duì)于一些時(shí)間、分?jǐn)?shù)、結(jié)果等的顯示通俗易懂,軟件具有很強(qiáng)的美感。(三)游戲功能分析將幾個(gè)同學(xué)間的口頭詞匯游戲比賽,轉(zhuǎn)換成網(wǎng)絡(luò)中的游戲,提高游戲的娛樂(lè)性和趣味性,對(duì)游戲的功能分析后,主要設(shè)計(jì)如下功能: 自己一個(gè)人玩:在規(guī)定的時(shí)間內(nèi)輸入一個(gè)單詞,單詞的開(kāi)頭必須跟上一個(gè)單詞最末字母相同,并且要在規(guī)定時(shí)間內(nèi)接下一個(gè)單詞,不能與前面的詞匯重復(fù),電腦自動(dòng)統(tǒng)計(jì)所接單詞的數(shù)量,通過(guò)最高記錄板記錄你的歷史最高記錄??梢赃_(dá)到鍛煉自己的反應(yīng)能力和輸入能力,最重要的是擴(kuò)充你的英語(yǔ)詞匯量。 多人網(wǎng)絡(luò)游戲:要求參加者的電腦能連接到互聯(lián)網(wǎng),游戲中玩家可以自己開(kāi)一個(gè)游戲房間,跟朋友一起競(jìng)賽,也可能加入到其它的房間。游戲的規(guī)則是誰(shuí)接的單詞最多為贏家,在超過(guò)單步時(shí)間時(shí),系統(tǒng)將自動(dòng)幫你輸入,如果這同個(gè)游戲中輸入同樣的單詞,不扣分也不加分,所以從中可以看出,為了游戲能夠獲得勝利,玩家必須對(duì)輸入過(guò)得英語(yǔ)單詞要再腦子里有個(gè)印象,不然就會(huì)輸?shù)煤軕K哦。 網(wǎng)絡(luò)游戲還支持文字聊天,這樣既可以達(dá)到朋友間彼此互相交流,在娛樂(lè)學(xué)習(xí)中相互成長(zhǎng)。 計(jì)時(shí):通過(guò)計(jì)時(shí)檢驗(yàn)對(duì)詞匯的熟練程度。 計(jì)分:通過(guò)計(jì)分達(dá)到競(jìng)賽的目的,也可以檢驗(yàn)對(duì)詞匯的掌握量。(四)技術(shù)的分析 游戲中用了directx的sdk,managed directx是對(duì)directx大部分功能的托管封裝,可以用任何支持.net的語(yǔ)言開(kāi)發(fā)。 mdx的性能是不用擔(dān)心的,因?yàn)樗€是像com directx一樣提供對(duì)硬件層次的訪問(wèn),大部分功能都是在你的顯卡/網(wǎng)卡/聲卡上起作用的,托管部分只是他的接口。所以如果不是大型游戲,效率可以忽略。 托管代碼的對(duì)象模型。 通常不用操心資源釋放的問(wèn)題。 委托是一種引用方法的類型。一旦委托了分配的了方法,委托將與該方法具有相同類型的行為。委托方法的使用可以其他方法一樣,具有參數(shù)和返回值。(另一種說(shuō)法:委托是函數(shù)的封裝,它代表一“類“函數(shù)。他們有符合一定的簽名:擁有相同的參數(shù)列表,返回值類型,同時(shí),委托也可以看成是對(duì)函數(shù)的抽象,是函數(shù)的”類“。此時(shí),委托的實(shí)例將代表一個(gè)具體的函數(shù)。) 異步回調(diào)。由于實(shí)例化委托是一個(gè)對(duì)象,所以可以將其作為一個(gè)參數(shù)進(jìn)行傳遞,也可以將其賦值給屬性。這樣,方法便可以將一個(gè)委托作為參數(shù)來(lái)接受,并且以后可以調(diào)用該委托。這成為異步回調(diào),是在較長(zhǎng)的進(jìn)程完成后用來(lái)通知調(diào)用方法的常用方法。以這種方式使用委托時(shí),使用委托的代碼無(wú)需了解有關(guān)所用方法的實(shí)現(xiàn)方面的任何信息?;卣{(diào)的另外一個(gè)常用的用法是自定義的比較方法并將該委托傳遞給排序方法。 與現(xiàn)在技術(shù)結(jié)合得更好。 游戲設(shè)計(jì)過(guò)程中需要考慮到實(shí)時(shí)的并發(fā)時(shí)間交互。(1)能夠在同時(shí)執(zhí)行多行指令。 (2 ) 通常,只有一個(gè)cpu來(lái)處理所有的事件,所有的事件共享一個(gè)cpu,為每個(gè)事件分配一小段的cpu的時(shí)間,玩家就認(rèn)為所有的事件都是同時(shí)發(fā)生并處理的。 延遲 計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)進(jìn)行通訊可能會(huì)有延遲影響游戲的可玩性,如何保持多臺(tái)pc的時(shí)鐘同步時(shí)一個(gè)非常大的挑戰(zhàn)。 數(shù)據(jù)丟失 在傳輸過(guò)程中,數(shù)據(jù)不可避免的會(huì)有所丟失。 可靠性 計(jì)算機(jī)間的通訊有可能是間斷的。 技術(shù)的要點(diǎn)就是要讓游戲盡可能的更加順暢,玩家?guī)缀醺杏X(jué)不到計(jì)算機(jī)在和其他計(jì)算機(jī)進(jìn)行通信。 網(wǎng)絡(luò)模型用了:client / server模型,這種模型也被稱為星型模型,有一個(gè)服務(wù)器(server),所有玩家通過(guò)連接server來(lái)進(jìn)行游戲。服務(wù)端接收所有客戶端發(fā)送來(lái)的消息,在處理后再將信息發(fā)送到客戶端。 技術(shù)的要點(diǎn)就是要讓游戲盡可能的更加順暢,玩家?guī)缀醺杏X(jué)不到計(jì)算機(jī)在和其他計(jì)算機(jī)進(jìn)行通信。(五)詞匯量分析 詞匯量是從小學(xué)英語(yǔ)到六級(jí)英語(yǔ)詞匯,詞匯來(lái)源于金山詞霸,存儲(chǔ)在文本文件中。因此詞匯的更新和擴(kuò)展均非常容易,也非常方便增加新的分類,如增加雅思英語(yǔ)、托福英語(yǔ)等等選項(xiàng),算法方面做簡(jiǎn)單的修改便可。(六)游戲行業(yè)市場(chǎng)需求信息分析2008年娛樂(lè)軟件協(xié)會(huì)(entertainment software association)公布的數(shù)據(jù)表明:1. 視頻游戲帶動(dòng)的硬件以及軟件的總銷(xiāo)售額超過(guò)90億美元。 在線游戲(網(wǎng)絡(luò)游戲)的銷(xiāo)售額也突破了50億美元。 便攜游戲突破10億美元。2. 對(duì)游戲的平均年齡在18歲左右。 大約60%以上的游戲超過(guò)16歲。 39%的玩家是女性。 網(wǎng)絡(luò)游戲的比例 - 其他(40%),青少年(44%),成年人(12%)。 受歡迎的3類游戲 - 動(dòng)作類(30%),體育類(18%),競(jìng)賽類(10%)。 嘴受歡迎的3類計(jì)算機(jī)游戲 - 戰(zhàn)略(27%),家庭/兒童娛樂(lè)類(20%),射擊類(16%)。 三、 游 戲 的 安 裝(一) 安裝directx(june2008) 安裝directx(june2008)如下圖1-1: 圖1-1安裝成功如下圖1-2:圖1-2(二) 安裝游戲的服務(wù)端與客戶端1 游戲服務(wù)端安裝如下圖1-3:圖1-32游戲客戶端安裝如下圖1-4:圖1-4 (三) 成功安裝游戲成功安裝完游戲后在電腦桌面會(huì)出現(xiàn)下圖 1-5 :(gameserver為游戲服務(wù)端,gameclient為游戲客戶端)圖1-5四、 界面設(shè)計(jì)和需求分析(一) 游戲設(shè)計(jì)界面和功能分析1. 打開(kāi)服務(wù)端并啟動(dòng)服務(wù)器 如下圖2-1圖2-12. 服務(wù)器的功能包括處理客戶端發(fā)送過(guò)來(lái)的所有信息然后再分發(fā)回客戶端。在工作中的服務(wù)器如下圖2-2圖2-23. 打開(kāi)游戲客戶端,登陸網(wǎng)絡(luò)服務(wù)器,界面如圖2-3所示,在界面中輸入服務(wù)器ip地址和用戶名密碼,登錄服務(wù)器后,轉(zhuǎn)入下一步驟。圖 2-34. 進(jìn)入游戲客戶端的平臺(tái),點(diǎn)擊英語(yǔ)接龍進(jìn)入房間管理界面, 在房間管理界面雙擊房間可以進(jìn)入房間,如果想自己創(chuàng)建房間游戲可以在房間管理的空白位置右擊鼠標(biāo)選中新建來(lái)創(chuàng)建自己想要?jiǎng)?chuàng)建的房間(玩家可新建并自行命名房間,并選擇二人玩、三人玩、四人玩等房間類型)。 如下圖 2-4 ,2-5 與 2-6:圖2-4圖2-5 圖2-6 5. 進(jìn)入房間,等待其他玩家加入游戲,當(dāng)進(jìn)入的人數(shù)達(dá)到房間規(guī)定的人數(shù)時(shí),開(kāi)始的按鈕會(huì)變成可點(diǎn)擊的,點(diǎn)擊“開(kāi)始”按鈕便可以進(jìn)入游戲。游戲過(guò)程中玩家可以在聊天窗口發(fā)送信息互相交流。界面如圖2-7所示和圖2-8圖2-9所示。 圖2-7 圖2-8 圖2-9 6.如果游戲中出現(xiàn)重復(fù)的輸入則出現(xiàn)如下圖的提示, 界面如圖2-10:圖2 -107.游戲結(jié)束時(shí),會(huì)顯示勝負(fù)與玩家的分?jǐn)?shù)。界面如圖2-11: 圖 2-11每個(gè)窗體都栩栩如生,游戲中的細(xì)節(jié)更是咄咄逼人,只有在游戲中體會(huì)了。(二)功能分析及設(shè)計(jì)根據(jù)的需求調(diào)查與分析和大多數(shù)開(kāi)發(fā)者的實(shí)際工作,將“英格洛斯接龍”游戲功能設(shè)計(jì)為網(wǎng)絡(luò)多人游戲,并附加計(jì)時(shí)計(jì)分功能。多人游戲是聯(lián)機(jī)競(jìng)賽功能(局域網(wǎng)或外網(wǎng)都可以設(shè)置)。多人網(wǎng)絡(luò)游戲功能設(shè)計(jì)如下:l 用戶登陸服務(wù)器:游戲采用用戶名、密碼和服務(wù)器ip地址方式登陸。l 創(chuàng)建或進(jìn)入房間:可以根據(jù)自己的選擇,創(chuàng)建自己的房間和加入已有的房間,房間分為:?jiǎn)稳司毩?xí),2人房間,3人房間,4人房間。l 詞匯默認(rèn)為全部詞匯量。l 游戲設(shè)置的單詞個(gè)數(shù)由游戲設(shè)計(jì)者設(shè)定。l 單詞回答的限時(shí)時(shí)間由游戲設(shè)計(jì)者設(shè)置。33五、 算法設(shè)計(jì)與實(shí)現(xiàn)(一)游戲規(guī)則說(shuō)明l 多人網(wǎng)絡(luò)游戲規(guī)則:該網(wǎng)絡(luò)游戲有玩家登錄服務(wù)器、游戲管理、房間管理等功能,玩家在登錄進(jìn)入游戲平臺(tái)后,可以選擇進(jìn)入英語(yǔ)接龍游戲,獲取系統(tǒng)支持的游戲房間列表,游戲房間定義了允許同時(shí)進(jìn)行同一游戲的玩家數(shù)量,在滿足游戲開(kāi)始條件時(shí),同一房間的玩家可以開(kāi)始游戲。游戲采用多回合搶答模式,先答對(duì)者得分,每回合設(shè)置答題時(shí)間限制,超過(guò)限制時(shí)間時(shí),系統(tǒng)將自行產(chǎn)生一個(gè)答案,所有玩家均不得分,游戲繼續(xù)。在游戲結(jié)束時(shí)得分多者獲勝。l 游戲設(shè)置的單詞的總個(gè)數(shù)到達(dá)時(shí)是你本輪游戲的總時(shí)間,在這規(guī)定的時(shí)間里你能輸入多少單詞直接決定你的勝負(fù);游戲單步時(shí)間是你在輸入一個(gè)單詞到接下來(lái)輸入下一個(gè)單詞的間隔時(shí)間。單單詞到達(dá)設(shè)置的個(gè)數(shù)時(shí),游戲結(jié)束。(二)游戲的算法1加載單詞把單詞從文本文件中加載進(jìn)一個(gè)變量數(shù)組中,根據(jù)單詞的開(kāi)頭字母進(jìn)行排序并存儲(chǔ)在相應(yīng)的數(shù)組中,算法如下:public static void readword() for (int i = 0; i 26; i+) arrtexti = new arraylist(); streamreader sr = new streamreader(type(); string sline = ; while (sline != null) sline = sr.readline(); if (sline != null) int n = -1; if (sline0 = 0 & n arrtext.length) arrtextn.add(sline); sr.close(); for (int integer = 0; integer 26; integer+) arrtextinteger.sort(); 2隨機(jī)產(chǎn)生開(kāi)始的單詞產(chǎn)生單詞分成兩部分,首先隨機(jī)產(chǎn)生26個(gè)字母中的一個(gè),然后以所產(chǎn)生的字母為首字母,再?gòu)脑撟帜搁_(kāi)頭的單詞列表中隨機(jī)產(chǎn)生一個(gè)單詞。算法如下:public static string word() system.random r1 = new random(); int num1 = r1.next(0, 25); int length = arrtextnum1.count; system.random r2 = new random(); int num2 = r2.next(0, length); return arrtextnum1num2.tostring();1. 判斷輸入的單詞是否在所選的詞匯列表中采用折半查找算法,該算法大大提高了游戲的速率,主要算法如下:public static bool binarysearch(string search_content,byte tage) arraylist arrlist = new arraylist(); if(tage=1) arrlist=arrtextsearch_content0 - a; else if (tage = 2) inword.sort(); arrlist = inword; int small = 0; int big = arrlist.count - 1; int mid; while (small 0) small = mid + 1; else big = mid - 1; if (small = big & string.compare(search_content, arrlistsmall.tostring() = 0) return true; return false; 2. 自動(dòng)產(chǎn)生和填充單詞如果在規(guī)定的時(shí)間沒(méi)有輸入正確的單詞,服務(wù)器根據(jù)玩家輸入的最后一個(gè)單詞隨機(jī)產(chǎn)生出來(lái)一個(gè)合乎游戲規(guī)則的單詞,算法如下public static string computertxt(string front) int index = frontfront.length - 1 - a; int length = arrtextindex.count; string tempword; while (true) system.random r3 = new random(); int num3 = r3.next(0, length); tempword = arrtextindexnum3.tostring(); boolean repetitionword =binarysearch(tempword, 2); if (!repetitionword) inword.add(tempword); return tempword; 3. 游戲引擎采用引擎來(lái)統(tǒng)領(lǐng)整個(gè)游戲,使游戲在擴(kuò)充和更新的時(shí)候更加容易和方便。下面是游戲引擎的精靈類算法: public class sprite: icloneable public sprite() m_id = m_counter+; protected sprite(sprite sprite):this() foreach (animation animation in sprite.m_animations) /設(shè)置精靈循環(huán)出現(xiàn) m_animations.add(animation)animation.clone(); m_currentanimationindex = sprite.m_currentanimationindex; m_name = sprite.m_name; m_collisionrectangle = sprite.m_collisionrectangle; m_velocity = sprite.m_velocity; m_position = sprite.m_position; m_scale = sprite.m_scale; m_rotation = sprite.m_rotation; m_visible = sprite.m_visible; m_active = sprite.m_active; m_showallpixels = sprite.m_showallpixels; m_opacity = sprite.m_opacity; m_zorder = sprite.m_zorder; m_localmatrix = sprite.m_localmatrix; public void add(animation animation) /添加精靈 m_animations.add(animation); public int count get return m_animations.count; public int animationindex /設(shè)置并獲取精靈索引值 set if (value = m_animations.count) value = m_animations.count - 1; else if (animationindex 0) value = 0; m_currentanimationindex = value; get return m_currentanimationindex; public animation animation /當(dāng)前精靈 get return m_animationsm_currentanimationindex; public bool visible get return m_visible; set m_visible = value; public bool active set m_active = value; get return m_active; public pointf position set m_position = value; / updatecollisionrectangle(); get return m_position; public vector2 velocity set m_velocity = value; get return m_velocity; public float scalex /坐標(biāo)設(shè)置 set m_scale.x = value; get return m_scale.x; public float scaley /坐標(biāo)設(shè)置 set m_scale.y = value; get return m_scale.y; public float rotation /旋轉(zhuǎn) set m_rotation = value; get return m_rotation; public void internalupdate() /界面的重定位 if(!m_active) return; if (m_animations.count != 0) m_animationsm_currentanimationindex.update(); m_position.x += m_velocity.x; m_position.y += m_velocity.y; matrix trans = matrix.translation(m_position.x, m_position.y, 0); /平移 matrix rot = matrix.rotationz(m_rotation); /旋轉(zhuǎn) matrix scaling = matrix.scaling(m_scale.x, m_scale.y, 0); /縮放 int picturewidth = m_animationsm_currentanimationindex.currentpicture.width; int pictureheight = m_animationsm_currentanimationindex.currentpicture.height; float newpicwidth = math.abs(scaling.m11 * picturewidth); float newpicheight = math.abs(scaling.m22 * pictureheight); float ltx = scaling.m11 0 ? newpicwidth : 0; float lty = scaling.m22 0 ? newpicheight : 0; ltx -= newpicwidth / 2; lty -= newpicheight / 2; matrix loctrans = matrix.translation(ltx, lty, 0); m_localmatrix = scaling * loctrans * rot * trans; updatecollisionrectangle(); private void updatecollisionrectangle() /圖片定位 int picturewidth = m_animationsm_currentanimationindex.currentpicture.width; int pictureheight = m_animationsm_currentanimationindex.currentpicture.height; m_collisionrectangle.x = 0; m_collisionrectangle.y = 0; m_collisionrectangle.width = picturewidth; m_collisionrectangle.height = pictureheight; m_collisionrectangle.offset(int)(-picturewidth / 2 + m_position.x), (int)(-pictureheight / 2 + m_position.y); public virtual void update() public void render() if (!m_visible | !m_active | m_opacity = 100) game.d3dsprite.begin(spriteflags.none); else game.d3dsprite.begin(spriteflags.alphablend); int alpha = (m_opacity * 255) / 100;game.d3dsprite.draw2d(m_animationsm_currentanimationindex.currentpicture.texture, new point(0, 0), 0, new point(0, 0), color.fromargb(alpha, 255, 255, 255); game.device.transform.world = m_localmatrix; game.d3dsprite.end(); public int zorder set m_zorder = value; get return m_zorder; public int opacity set m_opacity = value; get return m_opacity; public bool showallpixels set m_showallpixels = value; get return m_showallpixels; public bool collideswith(sprite sprite) return m_collisionrectangle.intersectswith(sprite.m_collisionrectangle); public static int comparisonzorder(sprite sprite1, sprite sprite2) int r = sprite2.m_zorder - sprite1.m_zorder; if (r = 0) return sprite2.m_id - sprite1.m_id; else return r; public virtual object clone() return new sprite(this); #region privatedata list m_animations = new list(); int m_currentanimationindex; string m_name = ; rectangle m_collisionrectangle; vector2 m_velocity; pointf m_position; vector2 m_scale = new vector2(1, 1); float m_rotation = 0; bool m_visible = true; bool m_active = true; bool m_showallpixels = false; int m_opacity = 99; /author:winner int m_zorder = 0; matrix m_localmatrix = matrix.identity; int m_id; static int m_counter; #endregion privatedata (三) uml設(shè)計(jì)與模塊功能系統(tǒng)采用dotnet framework2.0以上版本為開(kāi)發(fā)平臺(tái),客戶端游戲界面采用directx技術(shù)實(shí)現(xiàn)。服務(wù)器與客戶端之間的通信采用tcp/ip協(xié)議實(shí)現(xiàn)。系統(tǒng)框架圖如圖4-2所示。圖4-2系統(tǒng)框架圖本節(jié)分別描述服務(wù)端和客戶端的實(shí)現(xiàn)算法,最后描述游戲平臺(tái)間的協(xié)議定義。1 服務(wù)器端服務(wù)器由以下子系統(tǒng)組成l 通信子系統(tǒng)l 游戲管理子系統(tǒng)l 英語(yǔ)接龍游戲組件(1). 通信子系統(tǒng)系統(tǒng)采用異步的tcp socket技術(shù)實(shí)現(xiàn),信息流圖如圖4-3所示。圖4-3信息流圖 1)gameserver類gameserver是服務(wù)器的入口類,該類負(fù)責(zé)創(chuàng)建一個(gè)tcp socket來(lái)偵聽(tīng)客戶端的接入請(qǐng)求,并將已接入的客戶端分配給messagedispatcher管理。2) messagedispatcher類messagedispatcher類用來(lái)管理消息的接收和發(fā)送,messagedispatcher為每個(gè)客戶端創(chuàng)建一個(gè)gamecontext對(duì)象來(lái)保持系統(tǒng)相關(guān)的信息。接收到客戶端的消息后,messagedispatcher解析消息結(jié)構(gòu)并創(chuàng)建一個(gè)message對(duì)象來(lái)保存消息,對(duì)于游戲平臺(tái)的控制消息,messagedispatcher將創(chuàng)建一個(gè)command實(shí)例并交由controlcommandhandler類處理。3) controlcommandhandler類controlcommandhandler類負(fù)責(zé)處理游戲平臺(tái)的控制消息,包括以下功能:l 玩家登錄玩家由

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論