![基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/cc6295ba9cfd93097ee0965b2786ebc6/cc6295ba9cfd93097ee0965b2786ebc61.gif)
![基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/cc6295ba9cfd93097ee0965b2786ebc6/cc6295ba9cfd93097ee0965b2786ebc62.gif)
![基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/cc6295ba9cfd93097ee0965b2786ebc6/cc6295ba9cfd93097ee0965b2786ebc63.gif)
![基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/cc6295ba9cfd93097ee0965b2786ebc6/cc6295ba9cfd93097ee0965b2786ebc64.gif)
![基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/cc6295ba9cfd93097ee0965b2786ebc6/cc6295ba9cfd93097ee0965b2786ebc65.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)PAGEPAGEII基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)目錄TOC\o"1-3"\h\u前言 1第1章概述 21.1系統(tǒng)開(kāi)發(fā)背景 21.2設(shè)計(jì)的目的 31.3設(shè)計(jì)的意義 3第2章開(kāi)發(fā)環(huán)境及相關(guān)技術(shù)介紹 42.1開(kāi)發(fā)環(huán)境介紹 42.1.1Unity3D簡(jiǎn)介 42.1.2VisualStdio2010和MonoDevelop 52.1.3Xcode簡(jiǎn)介 52.2C#語(yǔ)言和Javascript腳本 62.2.1C#語(yǔ)言 62.2.2Javascript語(yǔ)言 62.3IOCP框架簡(jiǎn)介 72.3.1IOCP內(nèi)部工作隊(duì)列圖 72.3.2程序?qū)崿F(xiàn)IOCP模型的基本步驟 82.3.3使用IOCP模型和不使用IOCP模型通訊的對(duì)比 82.4本章小結(jié) 10第3章系統(tǒng)需求分析 103.1用戶(hù)功能需求分析 103.2系統(tǒng)性能要求 103.3可行性分析 10第4章總體方案設(shè)計(jì) 114.1紙牌設(shè)計(jì) 11基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第1頁(yè)。4.1.1牌型設(shè)計(jì) 11基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第1頁(yè)。4.1.2出牌類(lèi)型(游戲規(guī)則)設(shè)計(jì) 124.2C/S模式 124.2.1基于C/S模式的服務(wù)器端設(shè)計(jì)流程圖 124.2.2基于C/S模式的客戶(hù)端設(shè)計(jì)流程圖 124.3游戲邏輯程序結(jié)構(gòu) 134.3.1數(shù)據(jù)層 134.3.2控制層 134.3.3顯示層 144.4游戲設(shè)計(jì)流程圖 144.5數(shù)學(xué)建模 15第5章詳細(xì)設(shè)計(jì)與系統(tǒng)實(shí)現(xiàn) 165.1斗地主洗牌算法 165.2斗地主之“排序”算法 165.3基于IOCP的Socket通訊 185.4User對(duì)象的設(shè)計(jì) 195.4.1玩家狀態(tài)設(shè)計(jì) 195.4.2玩家的屬性以及手牌的操作方法 205.5Table對(duì)象的設(shè)計(jì) 215.5.1桌子狀態(tài)設(shè)計(jì) 215.5.2Table的屬性及方法 215.6粘包問(wèn)題 235.6.1TCP和UDP的介紹以及區(qū)別 235.6.2粘包介紹及處理 23第6章發(fā)布和測(cè)試 256.1服務(wù)器端性能檢測(cè) 256.2打包發(fā)布Android應(yīng)用 276.2.1導(dǎo)出Android設(shè)置 276.2.2真機(jī)效果圖 286.3打包發(fā)布IOS應(yīng)用 29基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第2頁(yè)。6.3.1導(dǎo)出IOS設(shè)置 29基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第2頁(yè)。6.3.2真機(jī)效果圖 316.4打包發(fā)布Web應(yīng)用 326.4.1關(guān)于UnityWebPlayer的SandBoxSecurity(安全沙盒機(jī)制) 326.4.2導(dǎo)出Web設(shè)置 326.4.3運(yùn)行結(jié)果 336.5打包發(fā)布PC/Linux應(yīng)用 346.6整體測(cè)試效果 34結(jié)束語(yǔ) 40致謝 42參考文獻(xiàn) 43附錄A網(wǎng)絡(luò)斗地主的游戲規(guī)則 44附錄B部分程序代碼 47基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第3頁(yè)。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第3頁(yè)。第56頁(yè)共13頁(yè)前言近年來(lái),隨著科技和互聯(lián)網(wǎng)的飛速發(fā)展、智能手機(jī)的迅速普以及性能的不斷提升,游戲行業(yè)也突飛猛進(jìn),游戲已經(jīng)逐漸成為人們公認(rèn)的第九種藝術(shù)?,F(xiàn)在各個(gè)平臺(tái)上的游戲逐漸涌現(xiàn),從最初的紅白機(jī),到PC機(jī)再到XBox平臺(tái)發(fā)展到如今的手機(jī)移動(dòng)平臺(tái),從端游到頁(yè)游再到手游甚至是體感游戲等表現(xiàn)形式也逐漸豐富,當(dāng)然成功的也數(shù)不勝數(shù)。比較大型的游戲有:反恐精英、星際爭(zhēng)霸、使命召喚,生化危機(jī)等。當(dāng)然也涌現(xiàn)了諸多經(jīng)典的網(wǎng)絡(luò)小游戲,比如麻將、拖拉機(jī)、中國(guó)象棋等。此外手機(jī)游戲,如憤怒的小鳥(niǎo)、保衛(wèi)蘿卜、FlappyBird、切水果、捕魚(yú)達(dá)人等也贏得許多人的青睞。這些各種各樣形式的游戲給如今生活在網(wǎng)絡(luò)時(shí)代的人們帶來(lái)了無(wú)限的生活樂(lè)趣。斗地主是一款相當(dāng)經(jīng)典的游戲,當(dāng)然前人也做了不少版本,有移動(dòng)端,pc端甚至是Web端的。可能他們?cè)谠O(shè)計(jì)的過(guò)程中只是正對(duì)某一平臺(tái)然后使用特性的開(kāi)發(fā)技術(shù)來(lái)開(kāi)發(fā),這樣的話如果想要實(shí)現(xiàn)多平臺(tái)的設(shè)計(jì)就需要極大的時(shí)間成本和勞力成本。而Unity3D引擎的問(wèn)世,最大的解決了這一問(wèn)題,它能夠?qū)崿F(xiàn)一次開(kāi)發(fā)多平臺(tái)發(fā)布的特點(diǎn),這也是為什么Unity3D引擎在短暫的時(shí)間里能夠發(fā)展的如此迅速的原因。將斗地主游戲從單機(jī)版到網(wǎng)絡(luò)化,使得現(xiàn)實(shí)中的多個(gè)玩家能夠在同一個(gè)虛擬房間里面進(jìn)行對(duì)局,并且能夠?qū)崟r(shí)的聊天,同時(shí)還不會(huì)受到平臺(tái)的限制,你可以選擇pc,web或者是移動(dòng)端,從而能更好的體驗(yàn)游戲,娛樂(lè)生活?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第4頁(yè)。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第4頁(yè)。第1章概述1.1系統(tǒng)開(kāi)發(fā)背景隨著Unity3D引擎的橫空出世,游戲開(kāi)發(fā)技術(shù)也變得越來(lái)越成熟,這款引擎也逐漸改變了整個(gè)游戲圈的開(kāi)發(fā)格局,之前火遍了全球的神廟逃亡就是基于Unity引擎開(kāi)發(fā)的一款比較成功的手游大作,這也更很好的證明了Unity作為一款游戲引擎還是值得開(kāi)發(fā)者的信賴(lài)。Unity相比較之前大家都熟悉的Unreal虛幻引擎,我認(rèn)為Unity做的更好,它最值得人稱(chēng)贊的就是它的跨平臺(tái)性是其他游戲引擎無(wú)法匹敵的,Unity能夠做到一次編寫(xiě)多平臺(tái)發(fā)布,能夠大大節(jié)省了項(xiàng)目開(kāi)發(fā)周期以及開(kāi)發(fā)成本,并且還得夠達(dá)到Unreal虛幻引擎開(kāi)發(fā)出的那種游戲體驗(yàn)效果。Unity開(kāi)發(fā)也算是基于.NET平臺(tái)上的一個(gè)拓展,它的內(nèi)核是Mono框架,而Mono是基于.NET的一個(gè)跨平臺(tái)的繼承開(kāi)發(fā)環(huán)境,它能夠很好的移植到各個(gè)平臺(tái),所以Mono的問(wèn)世也給廣大.NET平臺(tái)開(kāi)發(fā)者帶來(lái)了福音,終于不會(huì)在收到微軟的約束,開(kāi)發(fā)出來(lái)的東西只能運(yùn)行在windows平臺(tái)。正因?yàn)檫@樣,Unity也是一致收到廣大.NET開(kāi)發(fā)者的喜愛(ài)。發(fā)展至今Unity已經(jīng)支持了基本國(guó)內(nèi)外所有的主流平臺(tái)。也正是因?yàn)檫@一特性,才使得更多的公司更多的開(kāi)發(fā)者對(duì)它拋出了橄欖枝,達(dá)到了開(kāi)發(fā)出來(lái)的游戲,不要受平臺(tái)的限制,能夠給玩家更多不同的平臺(tái)體驗(yàn),它的這一特性也推動(dòng)了Unity引擎的飛速發(fā)展。結(jié)合自身的優(yōu)勢(shì),由于我大學(xué)期間一直自學(xué)的.NET開(kāi)發(fā),所以還是有一定的.NET開(kāi)發(fā)基礎(chǔ)和經(jīng)驗(yàn),加上喜歡鉆研,學(xué)習(xí)了其他Android、IOS等移動(dòng)平臺(tái)開(kāi)發(fā),所以了解的技術(shù)范圍還比較廣泛,感覺(jué)做Unity開(kāi)發(fā)能將我所了解的這些多平臺(tái)開(kāi)發(fā)的知識(shí)能夠很好的融會(huì)起來(lái),所以當(dāng)?shù)谝粫r(shí)間了解到Unity之后,我就對(duì)它產(chǎn)生了濃厚的興趣。之所以選擇做斗地主游戲,因?yàn)槭紫任矣X(jué)得它是一款比較經(jīng)典的游戲,經(jīng)典的往往能夠是永恒的,在日常生活中,斗地主也常常是人們娛樂(lè)的一個(gè)項(xiàng)目之一,當(dāng)然想完成它還是有一定的難度,設(shè)計(jì)都不少的算法,并且我將其網(wǎng)絡(luò)化,開(kāi)發(fā)起來(lái)對(duì)我而言還是有一定的挑戰(zhàn)性,但又不是力所不能及,只要努力一下還是能實(shí)現(xiàn)的。因此就確定了這個(gè)多平臺(tái)的多人網(wǎng)絡(luò)斗地主的課題?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第5頁(yè)。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第5頁(yè)。1.2設(shè)計(jì)的目的從玩家的角度,這種網(wǎng)絡(luò)小游戲滿足了玩家休閑的需求,讓玩家換一種方式重溫經(jīng)典,能夠在不同的平臺(tái),不同的的地區(qū),還能夠在同一個(gè)“房間”進(jìn)行對(duì)局,也可以實(shí)時(shí)交流,也能結(jié)識(shí)更多的朋友,增加了游戲體驗(yàn)的樂(lè)趣,從而豐富了人們的業(yè)余生活,在緊張的工作之余帶給人們最大程度的放松。從自身的角度,將大學(xué)所學(xué)的理論知識(shí)應(yīng)用于真實(shí)的項(xiàng)目開(kāi)發(fā),做到了理論與相結(jié)合,理論知識(shí)指導(dǎo)實(shí)際操作,實(shí)際操作反過(guò)來(lái)也鞏固了理論知識(shí),從而更好的提升了自己的能力和項(xiàng)目經(jīng)驗(yàn)。1.3設(shè)計(jì)的意義通過(guò)親自實(shí)踐,驗(yàn)證了Unity3D引擎的跨平臺(tái)性,也系統(tǒng)的了解到一個(gè)游戲項(xiàng)目設(shè)計(jì)的整個(gè)流程,從最初的規(guī)劃到最后的實(shí)現(xiàn),為今后走上工作崗位打下基礎(chǔ)。最后能夠圓滿實(shí)現(xiàn),鍛煉了自己的能力,同時(shí)做出來(lái)的游戲也增加了人們業(yè)余生活的樂(lè)趣?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第6頁(yè)。
基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第6頁(yè)。第2章開(kāi)發(fā)環(huán)境及相關(guān)技術(shù)介紹2.1開(kāi)發(fā)環(huán)境介紹所謂工欲善其事,必先利其器。要做一個(gè)項(xiàng)目的開(kāi)發(fā),首先得選擇好合適的開(kāi)發(fā)工具,市場(chǎng)上行行色色的開(kāi)發(fā)工具很多,這就需要要對(duì)比選擇,根據(jù)項(xiàng)目需求選擇最佳的搭配工具。本設(shè)計(jì)采用的開(kāi)發(fā)環(huán)境是Windows7旗艦版操作系統(tǒng),搭載Unity3D4.2.0f1專(zhuān)業(yè)版引擎。采用VisualStdio2010IDE編輯C#腳本。2.1.1Unity3D簡(jiǎn)介Unity是由UnityTechnologies開(kāi)發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫(huà)等類(lèi)型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開(kāi)發(fā)工具,是一個(gè)全面整合的專(zhuān)業(yè)游戲引擎。Unity能夠運(yùn)行在Windows和MacOSX系統(tǒng)下,可發(fā)布游戲至Windows、Mac、Wii、iPhone、Windowsphone8和Android等平臺(tái)。也可以利用Unitywebplayer插件發(fā)布網(wǎng)頁(yè)游戲。Unity具有強(qiáng)大的腳本系統(tǒng),它的核心思想是面向?qū)ο?,把游戲?chǎng)景中有所的物體都抽象成可編程的對(duì)象,從而將游戲編程轉(zhuǎn)化為游戲?qū)ο蟮目刂坪驼{(diào)度,而控制游戲?qū)ο蠛蛯?duì)象調(diào)度的就是我們所說(shuō)的腳本系統(tǒng),關(guān)系圖如下(圖2-1):基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第7頁(yè)。圖2-1Unity腳本系統(tǒng)基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第7頁(yè)。 2.1.2VisualStdio2010和MonoDevelopVisualStdio作為微軟最引以為傲的集成開(kāi)發(fā)環(huán)境,敏捷的智能提示、排版以及穩(wěn)定的性能,是任何語(yǔ)言的IDE都無(wú)法比擬的。因此C#語(yǔ)言開(kāi)發(fā),當(dāng)然首選VisualStdio。但是VisualStdio不支持Unity的Debug(調(diào)試),必須要到AssetStore(Unity的插件商量)去購(gòu)買(mǎi)一個(gè)UnityVS插件才能夠?qū)崿F(xiàn)斷點(diǎn)調(diào)試功能。而MonoDevelop是基于.NET的一個(gè)跨平臺(tái)的集成開(kāi)發(fā)環(huán)境,主要支持的語(yǔ)言也是C#。Mono作為.NET向跨平臺(tái)和開(kāi)源的先驅(qū),它打破了微軟一慣封閉的風(fēng)格,因此Mono也得到了業(yè)界的廣大好評(píng)和重視。MonoDevelop是Unity自帶的集成開(kāi)發(fā)環(huán)境,相比較VS的優(yōu)勢(shì)就是能夠不依賴(lài)插件從而實(shí)現(xiàn)斷點(diǎn)調(diào)試,還有就是能夠在其他平臺(tái)上運(yùn)行,但是它也有弊端,沒(méi)有VS那么強(qiáng)大的提示功能,對(duì)中文支持也不夠友好,可以說(shuō)這兩個(gè)IDE來(lái)編輯Unity腳本個(gè)有利弊,看如何取舍,一般都是選擇前者。2.1.3Xcode簡(jiǎn)介Xcode是蘋(píng)果公司向開(kāi)發(fā)人員提供的集成開(kāi)發(fā)環(huán)境,用于開(kāi)發(fā)MacOSX,iOS的應(yīng)用程序,Xcode具有較強(qiáng)的編譯速度。Unity導(dǎo)出IOS程序的時(shí)候需要導(dǎo)出Xcode工程,然后由Xcode編譯導(dǎo)出發(fā)布,當(dāng)然還需要申請(qǐng)安裝蘋(píng)果開(kāi)發(fā)官方的開(kāi)發(fā)者證書(shū)。文章最后在介紹Unity工程導(dǎo)出成IOS版本安裝到ios移動(dòng)設(shè)備上會(huì)詳細(xì)介紹流程以及注意事項(xiàng)。2.2C#語(yǔ)言和Javascript腳本這兩者都是Unity開(kāi)發(fā)支持的語(yǔ)言,當(dāng)然還包括boo腳本,但一般不怎么用boo腳本作為開(kāi)發(fā)語(yǔ)言,前兩者語(yǔ)言,C#國(guó)內(nèi)人用的比較多,Javascript國(guó)外開(kāi)發(fā)者用的比較多,接下來(lái)我們就做一個(gè)對(duì)比,這兩種語(yǔ)言開(kāi)發(fā)Unity有什么異同。在這里,因?yàn)閁nity是基于.NET平臺(tái),而C#是.NET平臺(tái)主推的語(yǔ)言,因此我就選擇了C#,能夠更好的兼容.NET的一些庫(kù)文件。2.2.1C#語(yǔ)言基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第8頁(yè)。C#是微軟公司再2000年6月發(fā)布的一種全新的且簡(jiǎn)單、安全、面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是專(zhuān)門(mén)為.NET應(yīng)用開(kāi)發(fā)而誕生的一種新的計(jì)算機(jī)語(yǔ)言。它吸收了C++、VisualBasic、java等語(yǔ)言面向?qū)ο蟮奶匦?,又繼承了C語(yǔ)言的語(yǔ)法簡(jiǎn)約的風(fēng)格,體現(xiàn)了當(dāng)今最新的程序設(shè)計(jì)技術(shù)的功能和精華。不同的是,C#面向?qū)ο竽P鸵呀?jīng)面向了Internet進(jìn)行了重新設(shè)計(jì),它使用的是.NET框架的類(lèi)庫(kù),為了安全起見(jiàn)不再主張指針類(lèi)型的使用,當(dāng)然也是可以使用指針,在程序中要做特殊申明。對(duì)指針使用的弱化,避免了程序異常訪問(wèn)系統(tǒng)內(nèi)存地址而帶來(lái)的隱患,從而更體現(xiàn)了它的健壯性的特點(diǎn)。C#不支持多繼承,避免了以往類(lèi)層次結(jié)構(gòu)中由于多重繼承帶來(lái)的難以控制的特點(diǎn),C#主張用接口來(lái)實(shí)現(xiàn)而不是多繼承,主要的目的就是減少程序的復(fù)雜性,減少出錯(cuò)的可能性,使運(yùn)行效率更高。.NET框架為C#提供了一個(gè)強(qiáng)大的、易用的、邏輯結(jié)構(gòu)一直的設(shè)計(jì)環(huán)境。同時(shí),公共運(yùn)行時(shí)(CommonLanguageRuntime)為C#語(yǔ)言提供了一個(gè)托管的運(yùn)行環(huán)境,使程序比以往更加穩(wěn)定、安全。C#語(yǔ)言的特點(diǎn)有:基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第8頁(yè)。.語(yǔ)言簡(jiǎn)潔優(yōu)雅、安全穩(wěn)定.保留了C++面向?qū)ο蟮奶匦?能夠快速開(kāi)發(fā)應(yīng)用.強(qiáng)大的開(kāi)發(fā)控件.支持跨平臺(tái)2.2.2Javascript語(yǔ)言Javascript是一種直譯式、動(dòng)態(tài)、弱類(lèi)型、基于原型的腳本語(yǔ)言,內(nèi)置支持類(lèi)。它的直譯器被稱(chēng)為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶(hù)端的腳本語(yǔ)言,最早是在HTML網(wǎng)頁(yè)上使用,用來(lái)給HTML網(wǎng)頁(yè)增加動(dòng)態(tài)功能。Javascript語(yǔ)言的特點(diǎn):.簡(jiǎn)單性.動(dòng)態(tài)性.跨平臺(tái)性.安全性2.3IOCP框架簡(jiǎn)介基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第9頁(yè)。IOCP全稱(chēng)I/OCompletion基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第9頁(yè)。2.3.1IOCP內(nèi)部工作隊(duì)列圖如下圖2-2(源于IOCP本質(zhì)論),簡(jiǎn)節(jié)明了的看出IOCP本質(zhì)其實(shí)就是創(chuàng)建一個(gè)線程池然后內(nèi)部是以隊(duì)列和棧的方式來(lái)處理客戶(hù)端交互請(qǐng)求。圖2-2IOCP內(nèi)部工作隊(duì)列圖2.3.2程序?qū)崿F(xiàn)IOCP模型的基本步驟基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第10頁(yè)。如下圖(2-3),最重要的步驟還是創(chuàng)建了線程池來(lái)管理大量線程的切換處理從而提高了服務(wù)器端的性能?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第10頁(yè)。圖2-3程序?qū)崿F(xiàn)IOCP模型步驟2.3.3使用IOCP模型和不使用IOCP模型通訊的對(duì)比基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第11頁(yè)。對(duì)比圖如下(圖2-4),很明顯能看出不一樣的地方,不適用IOCP,用普通的socket連接,我做過(guò)測(cè)試,對(duì)服務(wù)器內(nèi)存資源消耗比較大,貌似上百多個(gè)客戶(hù)端連接之后服務(wù)器端就容易崩潰,內(nèi)存發(fā)出警報(bào),健壯性是服務(wù)器端程序首當(dāng)要考慮的,而測(cè)試使用IOCP模型的客戶(hù)端能夠達(dá)到2K-3K左右的穩(wěn)定連接,并且內(nèi)存資源消耗還比較小,下文測(cè)試章節(jié)會(huì)有具體的截圖?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第11頁(yè)。圖2-4使用IOCP和不使用IOCP框架通訊對(duì)比基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第12頁(yè)。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第12頁(yè)。2.4本章小結(jié)本章主要介紹了開(kāi)發(fā)Unity游戲所需要的腳本語(yǔ)言以及開(kāi)發(fā)環(huán)境。之所以選擇C#而非js是因?yàn)镃#語(yǔ)言更面向?qū)ο蠛途邆湟恍└呒?jí)的特性(封裝,繼承,多態(tài),反射和泛型等),它也是國(guó)內(nèi)的主流開(kāi)發(fā)語(yǔ)言之一,而Javascript相對(duì)比較容易入門(mén),語(yǔ)言本身是弱類(lèi)型不需要那么嚴(yán)謹(jǐn),在實(shí)際商業(yè)項(xiàng)目開(kāi)發(fā)中不是太收推崇。因此本次設(shè)計(jì)以C#語(yǔ)言編寫(xiě),同時(shí)采用MonoDevelop4.0調(diào)試和VisualStdio2010集成開(kāi)發(fā)環(huán)境。服務(wù)器端基于IOCP模型搭建的比較穩(wěn)定、高效、健壯的服務(wù)器應(yīng)用程序。第3章系統(tǒng)需求分析3.1用戶(hù)功能需求分析系統(tǒng)是由登錄,叫地主,出牌,壓牌,判斷勝負(fù),用戶(hù)獎(jiǎng)懲機(jī)制,實(shí)時(shí)聊天,退出等功能組成。該斗地主是根據(jù)民間盛行的撲克牌游戲演變而來(lái),融入了現(xiàn)代電子游戲快捷便利,能更好的滿足玩家的游戲體驗(yàn)以及提升業(yè)余生活的樂(lè)趣,達(dá)到緩解壓力的效果。3.2系統(tǒng)性能要求系統(tǒng)必須穩(wěn)定安全,對(duì)異常處理要做的比較完善,首先確保的是服務(wù)器端的穩(wěn)定高效的運(yùn)行,服務(wù)器采用的收費(fèi)阿里云服務(wù)器,里面承載的是經(jīng)典的windowsserver2003服務(wù)器系統(tǒng),然后服務(wù)器端采用的是IOCP框架用Winform應(yīng)用形式呈現(xiàn)出來(lái)。3.3可行性分析我將從以下幾點(diǎn)分析該設(shè)計(jì)的可行性:(1)經(jīng)濟(jì)上的可行性基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第13頁(yè)。考慮到是多人在線網(wǎng)絡(luò)斗地主,而非僅局限于局域網(wǎng)的范圍,因此就必須有一個(gè)穩(wěn)定的外網(wǎng)服務(wù)器,目前我在公司管理著公司用的阿里云服務(wù)器,因此我決定臨時(shí)可以租用一下公司的云服務(wù)器,經(jīng)濟(jì)上是可行的。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第13頁(yè)。(2)技術(shù)上的可行性本系統(tǒng)不需要差大規(guī)模的計(jì)算和非常高的性能要求,可能需要處理一些中級(jí)一點(diǎn)的并發(fā)處理問(wèn)題,對(duì)服務(wù)器端的性能還需要有一定考究,但不至于力所不能及,還有一些關(guān)于牌類(lèi)的算法,例如洗牌算法,發(fā)牌算法,壓牌算法等,但通過(guò)自己的思考相信也應(yīng)該是可行的。(3)資源可行性雖然沒(méi)有美工做配合,但網(wǎng)上搜集一些簡(jiǎn)單的免費(fèi)的圖片還是能夠找到,可能效果不是非常的理想,但從程序?qū)崿F(xiàn)的角度,基本能達(dá)到預(yù)期的要求,如果以后想要完善,可以找專(zhuān)門(mén)的美工做好圖片然后進(jìn)行替代即可。(4)游戲可玩性玩家可以通過(guò)設(shè)置用戶(hù)名進(jìn)行登錄進(jìn)游戲大廳進(jìn)行多人對(duì)戰(zhàn),如果還想要做的完善一些可以專(zhuān)門(mén)接入騰訊或者新浪微博的sdk,用專(zhuān)用的賬號(hào)登錄或者是普通注冊(cè)即可,用戶(hù)也可對(duì)其個(gè)人信息進(jìn)行修改。第4章總體方案設(shè)計(jì)4.1紙牌設(shè)計(jì)4.1.1牌型設(shè)計(jì)總所周知,一張紙牌是由數(shù)字、花色、背面所組成,在設(shè)計(jì)游戲之前先設(shè)計(jì)出一副牌的所有模板,這里列舉一些部分牌的截圖(圖4-1):基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第14頁(yè)。圖4-1牌型基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第14頁(yè)。搜集出一整副牌的圖片,然后程序里就可以通過(guò)代碼來(lái)調(diào)用顯示到界面。4.1.2出牌類(lèi)型(游戲規(guī)則)設(shè)計(jì)出牌類(lèi)型有很多種,包括:?jiǎn)闻啤⒁粚?duì)、三張、三帶一對(duì)、四張一樣(炸彈)、王炸(大小王)、三連對(duì)、飛機(jī)等,詳細(xì)游戲規(guī)則可以參考附錄A。4.2C/S模式C/S(Client/Server,客戶(hù)機(jī)/服務(wù)器)結(jié)構(gòu),是大家熟知的客戶(hù)機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu)的一種。主要是由客戶(hù)端應(yīng)用程序(Client)和服務(wù)器端程序(Server)以及中間件(middle)三個(gè)部件組成。客戶(hù)端應(yīng)用程序是是系統(tǒng)中用戶(hù)跟服務(wù)器進(jìn)行數(shù)據(jù)的交互的部件。服務(wù)器端程序負(fù)責(zé)有效個(gè)管理系統(tǒng)資源,處理多個(gè)客戶(hù)端連接請(qǐng)求以及跟多個(gè)客戶(hù)端進(jìn)行數(shù)據(jù)交互。4.2.1基于C/S模式的服務(wù)器端設(shè)計(jì)流程圖服務(wù)器端處理客戶(hù)端連接流程,參見(jiàn)下圖(圖4-2)圖4-2服務(wù)器端處理流程基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第15頁(yè)。4.2.2基于C/S模式的客戶(hù)端設(shè)計(jì)流程圖基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第15頁(yè)。客戶(hù)端連接服務(wù)器流程,參見(jiàn)下圖(圖4-3)圖4-3客戶(hù)端連接流程4.3游戲邏輯程序結(jié)構(gòu)本設(shè)計(jì)的程序結(jié)構(gòu)包括三個(gè)層次(數(shù)據(jù)層,控制層,顯示層),也就是常用的MVC模式。MVC的可移植性,代碼邏輯比較清晰,耦合度也比較低,在代碼重構(gòu)和結(jié)構(gòu)方面比較有優(yōu)勢(shì)。4.3.1數(shù)據(jù)層(1)通過(guò)socket獲取byte[]流數(shù)據(jù)并解析成對(duì)應(yīng)的Model實(shí)體。(2)創(chuàng)建存儲(chǔ)Model實(shí)體數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(全局單列類(lèi),靜態(tài)類(lèi))。(3)通過(guò)數(shù)據(jù)構(gòu)造byte[]流并通過(guò)socket發(fā)送到遠(yuǎn)端。通過(guò)socket從遠(yuǎn)端獲取其他玩家的狀態(tài)(包括在線狀態(tài)、出牌狀態(tài)、手牌狀態(tài)等)。4.3.2控制層(1)通過(guò)事件機(jī)制獲取到現(xiàn)在需要進(jìn)行的操作?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第16頁(yè)。(2)通過(guò)數(shù)據(jù)層提供的方法或者接口獲取相關(guān)數(shù)據(jù)并進(jìn)行相應(yīng)處理。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第16頁(yè)。(3)處理結(jié)果返回給事件發(fā)起者或存入游戲狀態(tài)管理機(jī)。主表表現(xiàn)在對(duì)牌的控制,例如叫地主,出牌,壓牌,以及游戲的狀態(tài)控制等邏輯操作。4.3.3顯示層(1)通過(guò)數(shù)據(jù)計(jì)算出游戲物體在游戲世界中的位置(2)播放聲音這類(lèi)的元素(3)獲取游戲?qū)ο笾饕褪强刂朴螒驁?chǎng)景顯示。4.4游戲設(shè)計(jì)流程圖游戲設(shè)計(jì)思路大概流程圖,參見(jiàn)下圖(圖4-4)基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第17頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第17頁(yè)。圖4-4客戶(hù)端連接流程4.5數(shù)學(xué)建模數(shù)學(xué)建模是一種數(shù)學(xué)的思考方法,是運(yùn)用數(shù)學(xué)的語(yǔ)言和方法,通過(guò)抽象、簡(jiǎn)化簡(jiǎn)歷能近似刻畫(huà)并“解決”實(shí)際問(wèn)題的一種強(qiáng)有力的數(shù)學(xué)手段。斗地主游戲是屬于經(jīng)典的棋牌類(lèi)游戲中的一種,在進(jìn)行這個(gè)游戲開(kāi)發(fā)的之前,就需要對(duì)其進(jìn)行一個(gè)建模,將抽象的游戲?qū)⑵湫蜗蠡瘮?shù)字化的表現(xiàn)出來(lái)。撲克牌類(lèi)的游戲,每一張紙牌都有一些非常重要的屬性值,那就是牌面上數(shù)值的大小以及它的花色類(lèi)型。總所周知,一副撲克牌有54張(包含大小王)。那我們可以將其抽象成0-53與之一一對(duì)應(yīng)的54個(gè)數(shù)值,這樣就將抽象的牌類(lèi)比較形象的轉(zhuǎn)化成數(shù)值的比較。我們規(guī)定一一對(duì)應(yīng)的數(shù)值關(guān)系:方塊A、方塊2...方塊K——0,1...12黑桃A、黑桃2...黑桃K——13,14...25紅桃A、紅桃2...紅桃K——26,27...38梅花A、梅花2...梅花K——39,40...51小王、大王——52,53單張牌大小關(guān)系:大王>小王>2>A>K>Q...>4>3假設(shè)我們要進(jìn)行兩張單拍的大小比較的時(shí)候,其實(shí)就是在比較兩個(gè)整形數(shù)字的“大小”,例如:黑桃3VS方塊4,就是比較15和3的“大小”,但并非就是兩個(gè)整形數(shù)字的直接大小比較,因?yàn)槲覀冎蓝返刂饔螒蛑信频拇笮”容^不需要考慮花色,只需要關(guān)心牌面上的數(shù)值大小即可。所以設(shè)計(jì)中對(duì)紙牌的一系列操作,形象簡(jiǎn)單點(diǎn)點(diǎn)說(shuō)就是對(duì)一個(gè)整型數(shù)組的操作。上面的兩個(gè)牌面大小比較方法是15%13=2,2<4,所以還是“4>15”,也就是方塊4>黑桃3,這里注意一點(diǎn)的是牌型為A、2、大小王他們對(duì)應(yīng)的數(shù)字要做特殊處理。具體算法參見(jiàn)5.1。我就是用這種數(shù)學(xué)建模的方法來(lái)達(dá)到化抽象為形象,將實(shí)際問(wèn)題轉(zhuǎn)化成數(shù)學(xué)問(wèn)題來(lái)處理?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第18頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第18頁(yè)。第5章詳細(xì)設(shè)計(jì)與系統(tǒng)實(shí)現(xiàn)5.1斗地主洗牌算法做斗地主項(xiàng)目,洗牌算法是最基礎(chǔ)也是最關(guān)鍵的一步,怎樣“洗”的均勻,“洗”的隨機(jī),這是非常有考究的,算法的優(yōu)劣直接會(huì)影響游戲效果的好壞,在平時(shí)生活真實(shí)的斗地主過(guò)程中,我們?yōu)榱艘_保牌洗的隨機(jī),我們就多洗幾次,那么在程序設(shè)計(jì)中,我們可以用一個(gè)算法來(lái)模擬真實(shí)洗牌的過(guò)程。我的做法是將0-53這54個(gè)數(shù)字直接先依次輸入到數(shù)組中,然后不斷的進(jìn)行兩個(gè)“牌”之間的位置對(duì)調(diào),當(dāng)然平時(shí)生活中洗牌跟折半插入算法非常接近,但我還是用相比較折半插入更隨機(jī)的算法來(lái)實(shí)現(xiàn)洗牌效果。大體算法思路,詳細(xì)代碼請(qǐng)參照附錄B的1算法(斗地主洗牌算法): for(inti=0;i<MAX;i++) { data[Random(0,54)]與data[Random(0,54)]兩位置上的值進(jìn)行互換 }效果圖(圖5-1):圖5-1洗牌算法效果圖MAX如果選擇的越大,則說(shuō)明交換的次數(shù)越多,隨機(jī)性就越明顯,這里我是選擇的是MAX=54進(jìn)行測(cè)試,看起來(lái)數(shù)值排列還是比較隨機(jī)的,基本能達(dá)到預(yù)期效果。5.2斗地主之“排序”算法基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第19頁(yè)。制作斗地主的時(shí)候,發(fā)完牌還有基礎(chǔ)的又比較重要的步驟就是牌的排序,這里的排序并非指一般的整形數(shù)字通常的排序,撲克牌中每種花色的牌有13張,那我們就以13為基準(zhǔn),將0-53的數(shù)字先對(duì)其取13的余數(shù),得到的數(shù)加1即是當(dāng)前紙牌的數(shù)值,參照上面的定義0-12分別對(duì)應(yīng)方塊A-K,13-25對(duì)應(yīng)的是黑桃A-K,26-38對(duì)應(yīng)的是紅桃A-K,9-51對(duì)應(yīng)的是梅花A-K,然后由服務(wù)器端分配三份牌分別發(fā)給同一桌的三個(gè)玩家,但分完每一份17張牌必須進(jìn)行一個(gè)排序,排序之后的手牌也方便玩家看牌,提高了游戲的可玩性。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第19頁(yè)。大體算法思路,詳細(xì)代碼請(qǐng)參照附錄B的2算法(斗地主排序算法):先封裝一個(gè)數(shù)字對(duì)應(yīng)牌值的算法,主要就是通過(guò)整除和求余來(lái)判斷是什么花色然后是什么花色和什么牌值,對(duì)大小王和A、J、Q、K要做特殊判斷處理。程序運(yùn)行效果圖:效果圖(5-2): 圖5-2"排序"算法效果圖基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第20頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第20頁(yè)。5.3基于IOCP的Socket通訊既然是網(wǎng)絡(luò)游戲,那么就不得不談一談Socket通訊,C#版的Socket是Microsoft.NetFramework為應(yīng)用程序訪問(wèn)Internet提供的網(wǎng)絡(luò)通訊類(lèi)庫(kù)。通訊的原理是服務(wù)器端打開(kāi)本地ip上的某個(gè)特定端口,然后不斷的進(jìn)行監(jiān)聽(tīng)客戶(hù)端的連接請(qǐng)求,然后做出響應(yīng)的處理,簡(jiǎn)單的流程如下圖(5-3),代碼請(qǐng)參見(jiàn)附錄B的3:圖5-3Socket通訊流程圖其中SocketAsyncEventArgs是.NET提供的關(guān)于異步socket類(lèi),封裝了IOCP的使用,可以方便實(shí)現(xiàn)NIO(non-blockingIO),NIO對(duì)于某些場(chǎng)景下Server性能和吞吐量有很大好處。在應(yīng)用中證明C#編寫(xiě)基于.NETIOCP的高性能服務(wù)器可以支持10000個(gè)以上的TCP長(zhǎng)連接,SocketAsyncEventArgs是.NETFramework升級(jí)到2.0之后,.NETSocket提高的一種更高效的方法,對(duì)底層IOCP的實(shí)現(xiàn)在性能做了不少改進(jìn)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第21頁(yè)。我之前一開(kāi)始做Socket服務(wù)器沒(méi)有采取IOCP框架,就是單純的通過(guò)多線程和Socket配搭建的服務(wù)器,因?yàn)橐话惚O(jiān)聽(tīng)Socket在監(jiān)聽(tīng)的時(shí)候會(huì)發(fā)生IO堵塞,這就必須要在單獨(dú)開(kāi)辟另外一個(gè)線程來(lái)監(jiān)聽(tīng),原先的我曾做過(guò)就是以簡(jiǎn)單的多線程來(lái)搭建的服務(wù)器,但后來(lái)意識(shí)到當(dāng)客戶(hù)端連接多了服務(wù)器端就很不穩(wěn)定,資源消耗比較大,性能比較差,只能做Socket通訊學(xué)習(xí)之用,真真商業(yè)應(yīng)用就差很遠(yuǎn)了。后來(lái)基于IOCP框架搭建的服務(wù)器,無(wú)論是從服務(wù)器性能,還是從系統(tǒng)穩(wěn)定性考慮都非常好?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第21頁(yè)。連接效果圖如下(圖5-4):圖5-4Socket通訊效果圖當(dāng)客戶(hù)端輸入用戶(hù)名之后,點(diǎn)擊登陸服務(wù)器會(huì)發(fā)現(xiàn)服務(wù)器端接收到了用戶(hù)連接,并且顯示出接收到的字符串為:dengl*1*,這里有我自己自定義的協(xié)議,兩個(gè)*號(hào)之間才是真真有效的數(shù)據(jù),其他的都是協(xié)助服務(wù)器端判斷用戶(hù)發(fā)送的信息是要進(jìn)行一個(gè)什么樣的操作。5.4User對(duì)象的設(shè)計(jì)5.4.1玩家狀態(tài)設(shè)計(jì)這里玩家的狀態(tài)通過(guò)枚舉的方法來(lái)列出,主要包括:enumState{none,//空著read,//已經(jīng)有個(gè)連接isonline,//正在玩游戲中iszhunbei//準(zhǔn)備進(jìn)入游戲}分別對(duì)應(yīng)的主要狀態(tài)切換的方法有:publicvoidZhunbei(){state=STATE.iszhunbei;}//準(zhǔn)備中,可以發(fā)牌基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第22頁(yè)。publicvoidOnLine(){state=STATE.isonline;}//在線的方法基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第22頁(yè)。publicvoidOffLine(){state=STATE.none;username=””;connstringid=””;}//離線5.4.2玩家的屬性以及手牌的操作方法屬性1.手牌publicList<int>cards2.用戶(hù)名publicstringusername;3.玩家狀態(tài)publicSTATEstate=STATE.none;4.所在桌子publicTabletable=null;5.tokenpublicAsyncUserTokentoken;方法函數(shù)默認(rèn)構(gòu)造函數(shù)publicUser(stringconnected,AsyncUserTokentoken){this.connstringid=connected;state=STATE.none;this.token=token;}刪除手牌publicvoidRemoveCards(List<int>cards1){foreach(inttempincards1){Cards.Remove(temp);}}添加手牌PublicvoidAddCard(list<int>cards1){foreach(inttempincards1)基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第23頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第23頁(yè)。Cards.Add(temp);}}判斷斷開(kāi)的是否是當(dāng)前玩家publicboolisequal(stringid){returnconnstringid==id;}對(duì)于服務(wù)器而言,每一個(gè)游戲玩家就是一個(gè)User對(duì)象,因此定義一個(gè)User對(duì)象便于管理。5.5Table對(duì)象的設(shè)計(jì)5.5.1桌子狀態(tài)設(shè)計(jì)桌子的狀態(tài)也是同樣用枚舉表現(xiàn)出來(lái),共有兩種狀態(tài):publicenumTableState{wait,//準(zhǔn)備中g(shù)ame//游戲中}在構(gòu)造函數(shù)中將TableState設(shè)置為wait。5.5.2Table的屬性及方法屬性1.用于定期檢測(cè)的定時(shí)器publicTimertimer;2.桌子的狀態(tài)publicTableStatestate;3.桌子的IDpublicintid;4.三個(gè)玩家列表publicList<User>users;5.三張底牌publicint[]dipai;基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第24頁(yè)。6.判斷房間是否有人斷線publicboolisok=false;基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第24頁(yè)。7.記錄幾個(gè)人叫了地主publicintcount=0;8.當(dāng)前的分?jǐn)?shù)publicintscore=0;9.記錄當(dāng)前房間應(yīng)該誰(shuí)發(fā)牌intcurrentindex=-1;10.當(dāng)前存在的人數(shù)publicintonlinetable=0;11.當(dāng)前收到的牌publicstringcarddata1=””;12.記錄目前最的牌最大publicindex=-1;13.計(jì)算該輪到誰(shuí)發(fā)牌了publicintNextIndex;方法1.構(gòu)造函數(shù)publicTable(){for(inti=0;i<3;i++){users.Add(newUser(“”,null));}timer.Elapsed+=newTimers.ElapsedEventHandler(Check);//添加timer.Interval=Confige.sleeptime;//間隔時(shí)間TABLESTATE=TableState.wait;//桌面狀態(tài)}2.添加用戶(hù)publicAddUser(stringconnected,AsyncUserToken);3.判斷當(dāng)前桌子所有玩家是否都準(zhǔn)備publicboolisallzhunbei();4.發(fā)牌(發(fā)牌方法上面已經(jīng)有詳細(xì)說(shuō)名)publicvoidShuffle();5.排牌算法(排序算法上面有詳細(xì)說(shuō)明)privatestaticvoidBubbleSortFunction(int[]array);6.叫地主方法publicvoidjiaodizhu(intindex,intscore);7.獲取當(dāng)前誰(shuí)發(fā)牌publicintGetFaPaiIndex();8.接受玩家發(fā)牌消息基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第25頁(yè)。publicvoidProcessTableMessage(stringmessage);基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第25頁(yè)。9.設(shè)置輪到誰(shuí)發(fā)牌publicvoidSetFaPaiIndex(intindex,stringcarddata);10.檢測(cè)指定時(shí)間有沒(méi)有發(fā)牌如果指定時(shí)間內(nèi),沒(méi)有收到客戶(hù)的消息,那么認(rèn)為它掉線,發(fā)送不出牌publicvoidCheck(objectsender,EventArgse);5.6粘包問(wèn)題5.6.1TCP和UDP的介紹以及區(qū)別TCP是傳輸控制協(xié)議,它是面向連接的,在通信之前必須要建立與對(duì)方的連接關(guān)系,跟撥打電話方式類(lèi)似,傳輸可靠,用于傳輸大量數(shù)據(jù)(流模式),速度比較慢,只支持一對(duì)一通信。UDP是用戶(hù)數(shù)據(jù)報(bào)協(xié)議,面向非連接的,通信之前不需要與對(duì)方建立連接,跟發(fā)送郵件方式類(lèi)似,傳輸不可靠,用于傳輸少量數(shù)據(jù),傳輸速度快,支持一對(duì)一、一對(duì)多、多對(duì)多通信。5.6.2粘包介紹及處理上面介紹了TCP和UDP通信的區(qū)別,本設(shè)計(jì)是基于TCP協(xié)議完成的,TCP是面向連接流式無(wú)邊界的傳輸方式。當(dāng)傳輸通道建立之后,則數(shù)據(jù)流就像水一樣流過(guò)來(lái),其中沒(méi)有數(shù)據(jù)邊界的概念,包隨便多大,因而會(huì)出現(xiàn)多個(gè)包最后粘成一個(gè)大包。當(dāng)然這個(gè)是TCP的原因,還有一種是緩存機(jī)制的原因,發(fā)送端在默認(rèn)的狀態(tài)下是需要等到緩沖區(qū)滿了才會(huì)發(fā)送出去的。當(dāng)然也可以適當(dāng)使用push刷緩沖區(qū)可以減少粘包的現(xiàn)象,如果緩沖區(qū)處理不及時(shí),沒(méi)有做到來(lái)一個(gè)數(shù)據(jù)包處理一個(gè),那么也會(huì)引發(fā)粘包問(wèn)題。TCP數(shù)據(jù)交互是基于數(shù)據(jù)結(jié)構(gòu)的傳輸。舉例:要發(fā)送兩種數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù):{givemesomedata}{don’tgivemeanything},如果服務(wù)器端不知道怎么斷開(kāi)就會(huì)容易發(fā)生粘包,可能接受到的數(shù)據(jù)會(huì)是{givemesomedatadon’tgivemeanything},這時(shí)服務(wù)器就傻眼了就不知道怎么處理了,沒(méi)見(jiàn)過(guò)這么詭異的數(shù)據(jù),當(dāng)然也就不知道怎么處理。本設(shè)計(jì)中采用的自定義數(shù)據(jù)包結(jié)構(gòu)來(lái)處理粘包問(wèn)題?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第26頁(yè)。在字節(jié)流前面先加上一個(gè)標(biāo)志,標(biāo)志就是數(shù)據(jù)包的字節(jié)長(zhǎng)度,這樣在讀取的時(shí)候可按字節(jié)讀取。這樣可有效控制粘包問(wèn)題。并可以成功避免殘包的問(wèn)題,且不會(huì)發(fā)生連鎖反應(yīng),一個(gè)壞包的出現(xiàn)不會(huì)影響下一個(gè)包的正常讀取。如{*Length*DataStram}。該中解決方案的優(yōu)點(diǎn)是可以保證通信的100%準(zhǔn)確,缺點(diǎn)是影響程序性能,因?yàn)榘醋止?jié)讀取包,必定會(huì)影響程序的效率。結(jié)構(gòu)圖如下(圖5-5):基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第26頁(yè)。圖5-5自定義的數(shù)據(jù)結(jié)構(gòu)(1)發(fā)送數(shù)據(jù):publicvoidSendData(stringtext){if(stream!=null){byte[]data;data=Encoding.UTF8.GetBytes(text);byte[]data1=newbyte[data.Length+1];data1[0]=(byte)data.Length;Array.Copy(data,0,data1,1,data.Length);stream.Write(data1,0,data1.Length);}}(2)接受數(shù)據(jù):privatevoidOnGetData(byte[]data) { try { Array.Copy(data,0,databuffer,end,data.Length);//SourceArray,起始位置,數(shù)據(jù)包,寫(xiě)的位置,長(zhǎng)度end+=data.Length;intdata1=databuffer[offset];//取出第一個(gè)數(shù)基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第27頁(yè)。while(end-offset>=data1+1)基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第27頁(yè)。{stringtext=System.Text.Encoding.UTF8.GetString(databuffer,offset+1,data1); Debug.Log(text+""+System.DateTime.Now.ToString());if(text.Length>0)//如果有字符發(fā)送過(guò)來(lái),就接受{ClientRemote.messagelist.Enqueue(text);offset=offset+data1+1;//游標(biāo)到有效位末尾data1=databuffer[offset];}}if(end==offset){offset=0;end=0;} }catch(Exceptionex) { Debug.Log(ex.ToString()); }}通過(guò)這種自定義數(shù)據(jù)格式,能夠有效的防止粘包的問(wèn)題,讀取的時(shí)候來(lái)一個(gè)完整的包就讀取一個(gè)包,放到隊(duì)列中,然后再按照隊(duì)列先進(jìn)先出的處理方式進(jìn)行處理,確保了數(shù)據(jù)的正確性。第6章發(fā)布和測(cè)試基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第28頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第28頁(yè)。6.1服務(wù)器端性能檢測(cè)在網(wǎng)絡(luò)斗地主,既然是多人聯(lián)網(wǎng)在線游戲,那么就必須要一個(gè)性能比較強(qiáng)的服務(wù)器端,因此服務(wù)器端必須具備以下幾個(gè)必備條件:確保服務(wù)器不會(huì)輕易崩潰,具備很好的健壯性;能夠處理高并發(fā)請(qǐng)求;資源消耗少;響應(yīng)速度快;連接安全穩(wěn)定用專(zhuān)門(mén)的TCP測(cè)試工具來(lái)檢測(cè)服務(wù)器的性能,TCP測(cè)試工具就是模擬一個(gè)高并發(fā)請(qǐng)求的過(guò)程,在短時(shí)間內(nèi)向服務(wù)器發(fā)送3千個(gè)鏈接請(qǐng)求,看服務(wù)器的運(yùn)行狀態(tài)。然后打開(kāi)windows任務(wù)管理器,觀察連接前后資源的消耗情況,如下圖測(cè)試前后資源消耗對(duì)比(圖6-1-1/圖6-1-2):測(cè)試前CPU:0%,資源消耗62%:圖6-1-1TCP測(cè)試之前資源消耗圖測(cè)試后資源消耗:62%,測(cè)試過(guò)程中CPU最高14%:基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第29頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第29頁(yè)。圖6-1-2TCP測(cè)試后資源消耗圖由此可見(jiàn)基本上處理高并發(fā)還算可以,服務(wù)器端不會(huì)奔潰,并且資源消耗也比較低,連接也比較穩(wěn)定,不會(huì)出現(xiàn)連接不上的情況,總體而言還是滿足了服務(wù)器端設(shè)計(jì)的幾個(gè)要求。6.2打包發(fā)布Android應(yīng)用6.2.1導(dǎo)出Android設(shè)置在導(dǎo)出Android應(yīng)用之前,必須要先確保安裝上了Android開(kāi)發(fā)環(huán)境,這里就不詳細(xì)介紹了,網(wǎng)上相關(guān)教程也不少,參照配置即可。然后選擇Unity的File->BuildingSettings->切換到Android平臺(tái)->Switch切換,效果如下圖(圖6-2-1):基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第30頁(yè)。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第30頁(yè)。圖6-2-1切換Android設(shè)置1設(shè)置應(yīng)用ID參數(shù)(如圖6-2-2)圖6-2-2設(shè)置導(dǎo)出應(yīng)用參數(shù)6.2.2真機(jī)效果圖導(dǎo)出成APK應(yīng)用軟件安裝到LG平板和中興手機(jī),這兩臺(tái)Android機(jī)具有不同的分辨率,也正好測(cè)試了一下分辨率的自適應(yīng),效果如下圖(圖6-3-1/圖6-3-2):圖6-3-1Android手機(jī)測(cè)試基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第31頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第31頁(yè)。圖6-3-2Android平板測(cè)試真機(jī)測(cè)試看出來(lái)還是滿足了不同型號(hào)不同分辨率,滿足了應(yīng)用的自適應(yīng)性。6.3打包發(fā)布IOS應(yīng)用6.3.1導(dǎo)出IOS設(shè)置基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第32頁(yè)。操作同上選擇切換IOS平臺(tái),但必須有個(gè)前提就是在MacOS環(huán)境下操作,然后點(diǎn)擊PlayerSettings,設(shè)置ID,選擇適用IPad和IPhone,選擇是否是真機(jī)還是模擬器測(cè)試,選擇iOS版本,效果圖(圖6-4-1):基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第32頁(yè)。圖6-4-1導(dǎo)出IOS設(shè)置基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第33頁(yè)。由于IOS開(kāi)發(fā)需要向蘋(píng)果申請(qǐng)開(kāi)發(fā)者賬號(hào),然后向Xcode安裝證書(shū),然后才能夠?qū)胝鏅C(jī)進(jìn)行測(cè)試,這里導(dǎo)出IOS不像導(dǎo)出Android那樣直接能生成APK可安裝文件,必須先生成Xcode工程,然后通過(guò)Xcode來(lái)生成應(yīng)用進(jìn)行真機(jī)測(cè)試,關(guān)于導(dǎo)入證書(shū),詳細(xì)圖文過(guò)程我寫(xiě)在blog中,地址:基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第33頁(yè)。/dingxiaowei2013/article/details/23312229。Unity設(shè)置完畢后,點(diǎn)擊生成XCode工程,然后連接IOS設(shè)備,在設(shè)備選擇真機(jī)調(diào)試,如圖(圖6-4-2):圖6-4-2選擇真機(jī)設(shè)備設(shè)置完畢后選擇運(yùn)行,即可在真機(jī)中看到效果。6.3.2真機(jī)效果圖真機(jī)效果圖如下(圖6-5),這里機(jī)器是iTouch:基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第34頁(yè)。圖6-5iTouch真機(jī)測(cè)試基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第34頁(yè)。效果基本達(dá)到預(yù)期要求。6.4打包發(fā)布Web應(yīng)用6.4.1關(guān)于UnityWebPlayer的SandBoxSecurity(安全沙盒機(jī)制)關(guān)于Unity的Socket通訊,在其他平臺(tái)都能夠正常跟服務(wù)器端進(jìn)行交互,但一旦切換到Web平臺(tái)就會(huì)報(bào)錯(cuò),這里Unity的Web平臺(tái),基于安全性考慮,官方做了一個(gè)端口權(quán)限的問(wèn)題,服務(wù)器端必須要打開(kāi)843端口的訪問(wèn)權(quán)限,客戶(hù)端瀏覽器才能跟服務(wù)器進(jìn)行正常的socket通訊。打開(kāi)服務(wù)器端口訪問(wèn)權(quán)限:在Unity的安裝目錄下找到一個(gè)sockpol.exe的工具,具體路徑是在“...\Unity\Editor\Data\Tools\SocketPolicyServer”下有一個(gè)sockpol.exe可執(zhí)行工具。然后打開(kāi)cmdDos窗口,輸入命令sockpol.exe--all,看到以下效果(圖6-6)圖6-6打開(kāi)服務(wù)器端口權(quán)限當(dāng)有一個(gè)WebPlayer連接上服務(wù)器之后,cmd窗口就會(huì)給出提示允許連接。6.4.2導(dǎo)出Web設(shè)置基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第35頁(yè)。如圖(圖6-7),在Web平臺(tái)導(dǎo)出設(shè)置里面可以輸入WebPlayer的寬和高,以及是否允許程序在后臺(tái)執(zhí)行,一般我們都選擇允許,這樣即使窗口失去焦點(diǎn),也能夠確保程序照常運(yùn)行?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第35頁(yè)。圖6-7導(dǎo)出web設(shè)置6.4.3運(yùn)行結(jié)果用瀏覽器打開(kāi)剛剛導(dǎo)出的頁(yè)面,原理是通過(guò)WebPlayer插件來(lái)加載生成的.unity3d資源,然后通過(guò)頁(yè)面呈現(xiàn)出來(lái)。效果圖如下(圖6-8)圖6-8瀏覽器端測(cè)試基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第36頁(yè)。打開(kāi)三個(gè)瀏覽器端,然后都登陸成功,服務(wù)器端顯示出三個(gè)登陸玩家,基本達(dá)到預(yù)期效果?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第36頁(yè)。6.5打包發(fā)布PC/Linux應(yīng)用因?yàn)楸旧砭褪怯玫腤indows平臺(tái)下開(kāi)發(fā)Unity,所以導(dǎo)出成PC/Linux是最簡(jiǎn)單的,跟上面一樣導(dǎo)出成可執(zhí)行文件就可以了,也沒(méi)有什么需要特殊注意的地方。直接看效果圖(圖6-7):圖6-9PC端測(cè)試照樣也可以生成Linux應(yīng)用軟件,運(yùn)行在Linux平臺(tái)上。6.6整體測(cè)試效果基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第37頁(yè)。多平臺(tái)網(wǎng)絡(luò)測(cè)試,見(jiàn)下圖(圖6-10-1~圖6-10-3)移動(dòng)版測(cè)試,能夠進(jìn)行不同平臺(tái)同一房間的登陸、發(fā)牌、叫地主、出牌、壓牌等操作?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第37頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第38頁(yè)。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第38頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第39頁(yè)。圖6-10-2叫地主基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第39頁(yè)。圖6-10-3出牌基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第40頁(yè)。非移動(dòng)版測(cè)試,打開(kāi)了一個(gè)web瀏覽器還有兩個(gè)pc窗口,效果圖(圖6-10-4~圖6-10-6):基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第40頁(yè)。圖6-10-4登陸基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第41頁(yè)。圖6-10-5叫地主基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第41頁(yè)。圖6-10-6出牌和壓牌基本導(dǎo)出測(cè)試了一些常用平臺(tái),基本達(dá)到預(yù)期想要的效果,能夠?qū)崿F(xiàn)多平臺(tái)多人實(shí)時(shí)在線斗地主的游戲。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第42頁(yè)。
基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第42頁(yè)。結(jié)束語(yǔ)本次畢業(yè)設(shè)計(jì),歷時(shí)4個(gè)月,到目前為止基本功能已經(jīng)實(shí)現(xiàn),當(dāng)然還有待完善,豐富游戲的玩法和功能。首先做好準(zhǔn)備工作,從搜集資料,到了解玩家目前對(duì)游戲的需求,以及綜合考慮自身的能力,確定了論文題目,具備一定的挑戰(zhàn)性,但又不至于實(shí)現(xiàn)不了的一個(gè)項(xiàng)目。然后就是分析需求文檔做相關(guān)調(diào)研并確定游戲所要實(shí)現(xiàn)的基本功能,接著就是查找資料,思考這些功能的解決方案和方法,包括服務(wù)器端選擇和配置。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第43頁(yè)。最后就到了編程實(shí)現(xiàn)的過(guò)程,從最基本socket通信的簡(jiǎn)單測(cè)試,斗地主洗牌和發(fā)牌的基本算法的研究,從小做起,從基本的做起,然后不斷的添加和完善優(yōu)化整個(gè)游戲項(xiàng)目,在這過(guò)程中,實(shí)現(xiàn)一點(diǎn)小功能,就導(dǎo)出用真機(jī)進(jìn)行測(cè)試,如有問(wèn)題及時(shí)修改和完善。畢業(yè)設(shè)計(jì)是大學(xué)生涯的最后一個(gè)重要的階段,雖然不像是在課堂上,接受著老師傳授知識(shí),但也是一段非常寶貴而重要的學(xué)習(xí)經(jīng)歷。完成畢業(yè)設(shè)計(jì)是培養(yǎng)我們自主學(xué)習(xí)和探索的一種精神,我們或許在這期間會(huì)碰到很多莫名其妙的問(wèn)題,然后只能自己上網(wǎng)查找資料或者偶爾請(qǐng)教他人。在做這個(gè)基于Unity平臺(tái)的網(wǎng)絡(luò)斗地主的過(guò)程中,我看了不少相關(guān)書(shū)籍,也解決了不少問(wèn)題,認(rèn)識(shí)了一些牛人,甚至是一些書(shū)籍的原作者。在跟他們交談的過(guò)程中,不僅僅能學(xué)到解決當(dāng)前問(wèn)題的辦法,更是能了解到他們的學(xué)習(xí)方法,意識(shí)到?jīng)]有天生的天才,那些所謂的大牛也是經(jīng)過(guò)了多少個(gè)加班熬夜付出了常人難以想象的努力才能成為業(yè)內(nèi)知名的牛人。在這做畢設(shè)的幾個(gè)月里,我學(xué)會(huì)了逛論壇,學(xué)會(huì)了寫(xiě)博客,將我遇到的問(wèn)題以及解決方法詳細(xì)的記錄下來(lái),既是對(duì)自己的一個(gè)學(xué)習(xí)小結(jié)又是給他們提供了幫助,不斷堅(jiān)持了幾個(gè)月也得到了CSDN論壇的肯定,授予了我CSDN專(zhuān)家的榮譽(yù)稱(chēng)號(hào),但自知離真真的專(zhuān)家還很遙遠(yuǎn),但我堅(jiān)信只要堅(jiān)持,一直走在不斷學(xué)習(xí)和進(jìn)取的道路上,我相信總會(huì)有一天能得到更多人的認(rèn)可!這次的畢業(yè)設(shè)計(jì),雖然是做的是一個(gè)比較老的游戲,但真真做起來(lái),需要考慮的還很多,也需要解決不少的問(wèn)題,但在做畢設(shè)的過(guò)程中也遇到有人愿出高價(jià)收購(gòu)收斗地主項(xiàng)目,這也讓我更加覺(jué)得做這個(gè)游戲的樂(lè)趣和意義,堅(jiān)持去完成這個(gè)項(xiàng)目也是對(duì)自己能力的一種肯定!其實(shí)Unity3D不僅僅只是一款簡(jiǎn)單游戲引擎,還可以用來(lái)開(kāi)發(fā)其他方向,例如虛擬現(xiàn)實(shí)(VR)、增強(qiáng)現(xiàn)實(shí)(AR)、體感游戲、家用主機(jī)的開(kāi)發(fā),也逐漸涉及到各個(gè)行業(yè),參加了一次Unity官方開(kāi)發(fā)者大會(huì),大會(huì)介紹了Unity已經(jīng)在醫(yī)療、教育、航空、國(guó)防等相關(guān)領(lǐng)域都有緊密聯(lián)系。最新的Unity5引擎也進(jìn)一步做了優(yōu)化,加強(qiáng)了界面渲染優(yōu)化,融合了WebGL技術(shù),將在Web領(lǐng)域更會(huì)有一番作為,我也將一直好好的深入研究Unity這款強(qiáng)大的引擎,希望基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第44頁(yè)。能做出更多更有意思的東西出來(lái)。
基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第43頁(yè)。基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第44頁(yè)。致謝能夠圓滿完成畢設(shè),自己也比較開(kāi)心,對(duì)我而言是一段難忘而寶貴的經(jīng)歷。這期間經(jīng)歷了多少個(gè)漫漫長(zhǎng)夜,遇到了多少個(gè)莫名其妙的問(wèn)題,其中的辛酸與苦楚或許只有自己親身經(jīng)歷了才知道。當(dāng)然能夠按時(shí)完成還離不開(kāi)許多人的幫助。首先感謝指導(dǎo)老師朱教授在這期間對(duì)我們的過(guò)程監(jiān)督和階段性的檢查,以及論文方面的指導(dǎo)??梢哉f(shuō)朱老師對(duì)我大學(xué)對(duì)我?guī)椭蛦⒌献畲蟮睦蠋?,整個(gè)大學(xué)四年,朱老師是教授我們課程最多的老師,每次都兢兢業(yè)業(yè),教授給我們的不僅僅是知識(shí),更大的是為人處世的道理?;貞浾麄€(gè)大學(xué)四年,最有印象的還是和朱老師一起研究課題,一起研究算法的那段時(shí)光,雖然短暫,但很深刻,在那段時(shí)間里,我感受到了從未有過(guò)的專(zhuān)注和樂(lè)趣,也正是從那開(kāi)始,我對(duì)編程有了濃厚的興趣,我認(rèn)為編程也可以是一種藝術(shù),能夠讓你的大腦專(zhuān)注與其中,心無(wú)旁騖,就像CPU一樣的運(yùn)轉(zhuǎn),那一刻仿佛自己就是一臺(tái)計(jì)算機(jī)!那期間,我也時(shí)常往朱老師的辦公室跑,感覺(jué)他的辦公室就是我第二個(gè)宿舍,走進(jìn)去總有一種溫馨的感覺(jué),會(huì)跟朱老師交流很多,他也不僅僅像老師一樣,更像是一個(gè)年輕的父親,教育我們晚輩,沒(méi)有什么難關(guān)我們過(guò)不去,也沒(méi)有什么難題能難得倒我們,Justdoit!自己親自動(dòng)手,只要做了就會(huì)有收獲!其次是感謝這期間幫我一起探討和解決問(wèn)題的同事,她是我最近能最快解決問(wèn)題的幫手之一,然后是網(wǎng)上認(rèn)識(shí)的一些牛人,甚至是一些書(shū)籍的原作者,在看他們書(shū)籍的時(shí)候有遇到什么不解的問(wèn)題也是得到他們的指導(dǎo)。感謝清華大學(xué)出版社和機(jī)械工業(yè)出版社的編輯,是他們給了我鼓勵(lì),讓我感受到堅(jiān)持寫(xiě)博客的樂(lè)趣,希望有一天能出版屬于自己的書(shū)籍,圓我一個(gè)夢(mèng)。最后感謝我的舍友,感激我的朋友、同學(xué)、老師、家人和親戚,有你們的陪伴,讓我度過(guò)一個(gè)圓滿而美好的大學(xué)生活!基于Unity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第45頁(yè)?;赨nity3D多平臺(tái)網(wǎng)絡(luò)斗地主的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)全文共59頁(yè),當(dāng)前為第45頁(yè)。參考文獻(xiàn)[1]張磊精通C#游戲編程清華大學(xué)出版社2012年01月[2]鄭阿奇VisualC#網(wǎng)絡(luò)編程電子工業(yè)出版社2011年10月[3]呂鳳翥C#入門(mén)經(jīng)典(第六版)北京交通大學(xué)出版社2003年07月[4]BillEvjenC#高級(jí)編程(第8版)清華大學(xué)出版社2013年10月[5](美)ScottJacobs游戲編程精粹人民郵電出版社2010年07月[6](美)哈本游戲編程入門(mén)(原書(shū)第3版)機(jī)械工業(yè)出版社2011年1月[7](美)施雷伯等游戲設(shè)計(jì)師修煉秘笈機(jī)械工業(yè)出版社2011年6月[8]游戲架構(gòu)設(shè)計(jì)與策劃基礎(chǔ)出版社:清華大學(xué)出版社2010年1月[9](美)MichelleMenardGameDevelopmentwithUnity清華大學(xué)出版社2012年5月[10]金璽曾Unity3D游戲開(kāi)發(fā)清華大學(xué)出版社2013年6月[11]Unity官方unity4.X從入門(mén)到精通中國(guó)鐵道出版社2013年11月[12]宣雨松Unity3D游戲開(kāi)發(fā)人民郵電出版社2012年6月[13](英)邁耶Android4高級(jí)編程(第3版)清華大學(xué)出版社2013年04月[14]李華明iOS游戲編程之從零開(kāi)始清華大學(xué)出版社2013年02月[15
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中圖版(北京)八年級(jí)地理上冊(cè)2.2《主要的氣候類(lèi)型》聽(tīng)課評(píng)課記錄
- 人教版七年級(jí)地理上冊(cè):1.1《地球和地球儀》聽(tīng)課評(píng)課記錄3
- 2025年高性能鐵氧體一次料合作協(xié)議書(shū)
- 星球版地理八年級(jí)上冊(cè)《第一節(jié) 合理利用土地資源》聽(tīng)課評(píng)課記錄3
- 人教版歷史八年級(jí)下冊(cè)第13課《香港和澳門(mén)的回歸》聽(tīng)課評(píng)課記錄
- 魯教版地理七年級(jí)下冊(cè)9.1《自然特征與農(nóng)業(yè)》聽(tīng)課評(píng)課記錄1
- 五年級(jí)數(shù)學(xué)下冊(cè)聽(tīng)評(píng)課記錄《第4單元 3分?jǐn)?shù)的基本性質(zhì)》人教版
- 粵人版地理八年級(jí)上冊(cè)《第三節(jié) 水資源》聽(tīng)課評(píng)課記錄1
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)1.3《二元一次方程組的應(yīng)用》聽(tīng)評(píng)課記錄1
- 蘇科版九年級(jí)數(shù)學(xué)聽(tīng)評(píng)課記錄:第80講期中期末串講
- 2024年全國(guó)高考真題新課標(biāo)理綜生物試卷(山西、河南、云南、新疆)(解析版)
- 小學(xué)五年級(jí)英語(yǔ)閱讀理解(帶答案)
- 2024二十屆三中全會(huì)知識(shí)競(jìng)賽題庫(kù)及答案
- 成人重癥患者人工氣道濕化護(hù)理專(zhuān)家共識(shí) 解讀
- 2-3-分子生物學(xué)與基因工程
- 2024年全國(guó)統(tǒng)一考試高考新課標(biāo)Ⅱ卷語(yǔ)文+數(shù)學(xué)+英語(yǔ)試題(真題+答案)
- (正式版)YS∕T 5040-2024 有色金屬礦山工程項(xiàng)目可行性研究報(bào)告編制標(biāo)準(zhǔn)
- 2024年全國(guó)甲卷高考化學(xué)真題試題(原卷版+含解析)
- 焦煤集團(tuán)5MW10MWh儲(chǔ)能技術(shù)方案
- JT-T-617.7-2018危險(xiǎn)貨物道路運(yùn)輸規(guī)則第7部分:運(yùn)輸條件及作業(yè)要求
- 樹(shù)木吊裝施工專(zhuān)項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論