

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> (20 屆)</b></p><p> 網絡對戰(zhàn)游戲平臺的設計與實現</p><p><b> 摘要</b></p><p> 電腦游戲行業(yè)經過二十年的發(fā)展,已經成為與影視、音樂等并駕齊驅的
2、全球最重要的娛樂產業(yè)產業(yè)之一,其年銷售額超過好萊塢的全年收入。近年來,隨著互聯網在全球范圍內的發(fā)展和普及,聯網游戲作為一種娛樂手段,正以獨特的魅力吸引著越來越多的玩家?;ヂ摼W的出現為電腦游戲行業(yè)發(fā)展注入的新的活力,憑借信息雙向交流、速度快、不受空間限制等優(yōu)勢,讓真人參與游戲,提高游戲的互動性、仿真性和競技性,使玩家在虛擬世界里可以發(fā)揮顯示世界無法展現的潛能,改變的單機版游戲固定、代辦、與機器對話的狀況。</p><p
3、> 本文介紹了該系統(tǒng)的開發(fā)背景、意義及國內外現狀,然后重點闡述利用C++、MFC、MySql開發(fā)網絡游戲平臺系統(tǒng)的過程。包括設計與實現環(huán)節(jié),并且通過測試分析總結出該系統(tǒng)的功能特點。</p><p> 本系統(tǒng)主要完成以下幾個方面的功能,1.用戶管理:包括對用戶注冊、登錄和游戲信息的管理。2.游戲大廳:包括游戲房間和聊天的控制。3.五子棋游戲:游戲房間內進行的網絡對戰(zhàn)游戲。</p><p
4、> 關鍵字:網絡游戲平臺、五子棋、C++、MFC、MySql </p><p><b> Abstract</b></p><p> After two decades of development, the computer game industry has become one of the film, music and other enterta
5、inment industry to keep pace with the world's most important industry, with annual sales of more than Hollywood's annual income. The emergence of the Internet as a new vitality into the development of the compute
6、r game industry, with two-way exchange of information, speed, not restricted by space and other advantages, so that the real person involved in the game, to improve interactive</p><p> This article describe
7、s the development of the system background, significance and status quo at home and abroad, and then focuses on the use of C + +, MFC, MySql development of online games platform system process. Design and Implementation
8、of links, and summed up by test and analysis features of the system.</p><p> This system is mainly complete the following aspects,1.user management: including user registration, login and game information m
9、anagement. 2.game lobby: control include a games room and chat.3.Backgammon game: game room online play game.</p><p> Keywords: Online game platform, Backgammon C++, MFC, MySql</p><p><b>
10、 目錄</b></p><p><b> 摘要2</b></p><p> Abstract1</p><p><b> 目錄1</b></p><p><b> 1.緒論1</b></p><p> 1.1研究背景與意義
11、1</p><p> 1.2國內外研究現狀1</p><p> 1.3 研究內容與目標1</p><p> 2.理論技術基礎2</p><p><b> 2.1理論基礎2</b></p><p><b> 2.2技術基礎2</b></p>
12、<p> 2.2.1 C++語言簡介2</p><p> 2.2.2 MFC類庫簡介3</p><p> 2.2.3 MySQL數據庫 3</p><p> 2.2.4 面向對象程序設計簡介3</p><p> 2.2.5 TCP與UDP協議簡介3</p><p> 2.2.6
13、 SOCKET通信機制簡介4</p><p> 3.系統(tǒng)的分析與設計4</p><p><b> 3.1需求分析4</b></p><p> 3.1.1可行性分析4</p><p> 3.1.2系統(tǒng)功能分析4</p><p><b> 3.2總體設計5</b&
14、gt;</p><p> 3.2.1網絡游戲平臺功能設計5</p><p> 3.2.2登錄注冊模塊設計5</p><p> 3.2.3游戲大廳模塊設計6</p><p> 3.2.4.五子棋游戲模塊設計6</p><p> 3.2.5.服務器模塊設計6</p><p>
15、3.2.6.數據庫模塊設計6</p><p> 3.3系統(tǒng)詳細設計6</p><p> 3.3.1注冊登錄模塊詳細設計6</p><p> 3.3.2游戲大廳模塊詳細設計7</p><p> 3.3.3五子棋模塊詳細設計8</p><p> 3.3.4服務器模塊詳細設計9</p>&
16、lt;p> 3.3.5數據字典10</p><p> 3.3.6表結構說明11</p><p> 4.系統(tǒng)的實現11</p><p> 4.1用戶的注冊與登錄11</p><p> 4.1.1用戶登錄11</p><p> 4.1.2用戶注冊11</p><p>
17、 4.2游戲大廳模塊12</p><p> 4.2.1更新游戲房間信息12</p><p> 4.2.2大廳內玩家聊天12</p><p> 4.2.3顯示所有玩家信息13</p><p> 4.3五子棋游戲模塊13</p><p> 4.3.1繪制五子棋棋盤13</p><p
18、> 4.3.2繪制棋子14</p><p> 4.3.3判斷勝負14</p><p> 4.3.4悔棋15</p><p> 4.3.5求和15</p><p> 4.4服務器模塊16</p><p> 4.4.1接收客戶端連接16</p><p> 4.4.2驗
19、證客戶端注冊和登錄信息17</p><p> 4.4.3 轉發(fā)聊天信息17</p><p> 4.4.4 轉發(fā)和處理游戲信息18</p><p> 4.4.5 通知更新房間信息和用戶信息18</p><p><b> 5.總結19</b></p><p><b> 致
20、謝20</b></p><p><b> 參考文獻21</b></p><p><b> 1.緒論</b></p><p> 1.1研究背景與意義</p><p> 在互聯網迅速發(fā)展的今天,互聯網應用到了各行各業(yè)之中。網絡游戲與以往的游戲發(fā)展演變之路不同,他不再單單的表現為游
21、戲設備的差異,進而體現了游戲傳輸載體以及游戲參與方式的變革??v觀目前全球的游戲產業(yè),網絡游戲正走向成熟和深化,技術融合帶來游戲跨平臺發(fā)展,通過網絡、個人電腦、手持終端設備等都可以進行互動游戲,不同的設備可以通過網絡運行相同的游戲。</p><p> 隨著互聯網的擴張和基于互聯網應用的發(fā)展,聯網游戲正以一種獨特的魅力吸引著越來越多的玩家,尤其是五子棋游戲更是得到廣大玩家的青睞。因此,開發(fā)基于C/S模式的網絡五子棋
22、游戲具有重要的顯示意義。</p><p> 1.2國內外研究現狀</p><p> 電腦游戲自1972年由威爾?克勞舍(Will?Crowther)編寫的一段簡單的FORTRAN程序開始。由于網絡游戲需要較大量運算以及網絡傳輸容量,因此早期網絡游戲通常以純文字訊息作為呈現方式,重視玩家與玩家間的互動,而非聲光效果。 隨著電腦硬件及軟件技術的進步,網絡游戲服務器逐漸出現在小型的工作站服務
23、器,并且受到學生族群的歡迎,其中尤以MUD最具代表性。與此同時,傳統(tǒng)的單機游戲也開始出現利用局域網路進行小規(guī)模連線(2-8人)的形式,但多數以射擊或即時戰(zhàn)略游戲為主,這類型網絡游戲進行時,需要交換數量驚人的同步訊息,因此通常較適合高速的局域網路,難以實現人數規(guī)模更龐大的網絡游戲。1990年代中期,游戲產業(yè)開始采用類似MUD架構的技術發(fā)展網絡游戲。此類架構不同于依賴高速局域網路連線的射擊或即時戰(zhàn)略游戲,取而代之的是借由最佳化的通訊協定及復
24、雜的預測式算法,來達成網絡游戲所需的資訊同步。這類型的游戲與MUD一樣,需要居中運算的游戲服務器,并且能夠實現萬人以上同時連線進行游戲的規(guī)模。這種類型的游戲后來被統(tǒng)稱為大型多人線上游戲。大型多人線上游戲由于玩家人數和規(guī)模龐大的關系,通常屬于角色扮演游戲類型</p><p> 就國內的發(fā)展來看,最近些年內的游戲公司如雨后春筍般的成立,所開發(fā)或代理的網絡游戲更是不勝枚舉。國內的游戲娛樂產業(yè)正處于起步階段,特點表現為
25、:第一,他是一種文化的傳播。娛樂產業(yè)可以潛移默化地改變人與人的觀念。第二,網絡游戲加強了人與人的溝通。第三,網絡游戲具有一定的教育意義。</p><p> 1.3 研究內容與目標</p><p> 本網絡游戲對戰(zhàn)平臺主要包括用戶管理、平臺管理和五子棋游戲三個部分,本次研究的內容為實現一個網絡對戰(zhàn)平臺系統(tǒng),系統(tǒng)包括有用戶的登錄和注冊,游戲房間的管理和每個房間內進行的游戲。系統(tǒng)分為客戶端和
26、服務器端,客戶端主要是玩家發(fā)送游戲和聊天信息并處理服務器到本地的各種消息,服務器端主要是接收客戶端請求,并對客戶端的請求進行相應的處理。</p><p><b> 2.理論技術基礎</b></p><p><b> 2.1理論基礎</b></p><p> 網絡游戲:英文名稱為Online Game,又稱 “在線游戲
27、”,簡稱“網游”。指以互聯網為傳輸媒介,以游戲運營商服務器和用戶計算機為處理終端,以游戲客戶端軟件為信息交互窗口的旨在實現娛樂、休閑、交流和取得虛擬成就的具有可持續(xù)性的個體性多人在線游戲。網絡游戲區(qū)別與單機游戲而言的,是指玩家必須通過互聯網連接來進行多人游戲。 一般指由多名玩家通過計算機網絡在虛擬的環(huán)境下對人物角色及場景按照一定的規(guī)則進行操作以達到娛樂和互動目的的游戲產品集合。</p><p> 游戲對戰(zhàn)平臺是
28、對Internet用戶提供多人電腦游戲聯機服務,它可以讓在互聯網的游戲玩家輕松的通過Internet進行游戲,就如果在同一個局域網中一樣。平臺通過網絡協議轉換技術,將互聯網上遠隔千里的玩家緊緊的聯系到一起,并且還提供給用戶實時的交流與溝通。</p><p> 五子棋是一種兩人對弈的純策略型棋類游戲,棋具與圍棋通用,是起源于中國古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫生,引人
29、入勝;不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。</p><p><b> 2.2技術基礎</b></p><p> 2.2.1 C++語言簡介</p><p> C++是一種靜態(tài)數據類型檢查的、支持多重編程范式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、泛型程序設計等多種程序設計風格。<
30、/p><p> C++是由C發(fā)展而來的, 與C兼容。用C語言寫的程序基本上可以不加修改地用于C++, 從C++的名字可以看出它是C的超越和集中。C++既可用于面向過程的結構化程序設計, 又可用于面向對象的程序設計, 是一種功能強大的混合型的程序設計語言。</p><p> C++對C的“增強”,表現在六個方面:</p><p> (1) 類型檢查更為嚴格。<
31、/p><p> ?。?) 增加了面向對象的機制。</p><p> ?。?)增加了泛型編程的機制(template)</p><p> ?。?)增加了異常處理</p><p> ?。?)增加了運算符重載</p><p> ?。?)增加了標準模板庫(STL)</p><p> 面向對象程序設計,是針
32、對開發(fā)較大規(guī)模的程序而提出來的,目的是提高軟件開發(fā)的效率。不要把面向對象和面向過程對立起來, 面向對象和面向過程不是矛盾的,而是各有用途、互為補充的。</p><p> 2.2.2 MFC類庫簡介</p><p> MFC(Microsoft Foundation Classes),是一個微軟公司提供的類庫(class libraries),以C++類的形式封裝了Windows的API
33、,并且包含一個應用程序框架,以減少應用程序開發(fā)人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內建控件和組件的封裝類。</p><p> 2.2.3 MySQL數據庫 </p><p> MySQL是最受歡迎的開源SQL數據庫管理系統(tǒng),它由MySQL AB開發(fā)、發(fā)布和支持。MySQL AB是一家基于MySQL開發(fā)人員的商業(yè)公司,它是一家使用了一
34、種成功的商業(yè)模式來結合開源價值和方法論的第二代開源公司。MySQL是MySQL AB的注冊商標。MySQL是一個快速的、多線程、多用戶和健壯的SQL數據庫服務器。MySQL服務器支持關鍵任務、重負載生產系統(tǒng)的使用,也可以將它嵌入到一個大配置(mass-deployed)的軟件中去。</p><p> 2.2.4 面向對象程序設計簡介</p><p> 面向對象程序設計(英語:Objec
35、t-oriented programming,縮寫:OOP),指一種程序設計范型,同時也是一種程序開發(fā)的方法。對象指的是類的集合。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。</p><p> 面向對象程序設計可以看作一種在程序中包含各種獨立而又互相調用的對象的思想,這與傳統(tǒng)的思想剛好相反:傳統(tǒng)的程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令
36、。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據并將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。</p><p> 2.2.5 TCP與UDP協議簡介</p><p> TCP協議是端點與端點之間建立持續(xù)的連接而進行通信。建立連接后,發(fā)送端將發(fā)送的數據以字節(jié)流的方式發(fā)送出去;接收端則按序列順序將數據整理好,數據在需要時可以重新發(fā)送。TCP協議具有可靠
37、性和有序性,并且以字節(jié)流的方式發(fā)送數據,是一種面向連接的協議。</p><p> UDP協議是一種無連接的傳輸協議。利用UDP協議進行數據傳輸時,首先需要將要傳輸的數據定義成數據報(Datagram),在數據報中知名數據所有達到的端點(Socket,主機地址和端口號),然后再將數據報發(fā)送出去。這種傳輸方式是無序的,也不能確保絕對的安全可靠,但他很簡單而且具有比較高的效率。</p><p>
38、; 2.2.6 SOCKET通信機制簡介</p><p> SOCKET是網絡上運行的兩個程序之間雙向通信鏈路的終端點,他是TCP和UDP的基礎。一個SOCKET被綁定到一個端口號上,這樣傳輸層能后識別數據要發(fā)送到那個應用程序。Socket連接可以分成三個基本的類型,這三個類型是:</p><p> ?。?)客戶端連接 客戶端連接是一個本地系統(tǒng)的客戶端socket與一個遠程系統(tǒng)
39、上的服務端Socket連接??蛻舳诉B接由客戶端Socket開始。首先,客戶端 Socket必須描述它想連接到的服務端Socket. 接著客戶端socket查找服務端socket,當找到服務器時,就要求連接。服務端socket可能不能完成正確的連接。服務器sockets維持一個 客戶端請求隊列,在他們有時間時完成連接。當服務端socket接受客戶端連接,服務端socket 將向它想連接的客戶socket發(fā)送一個完整的描述,客戶端的連接完
40、成。</p><p> ?。?)傾聽連接 服務器 socket不會去定位客戶端,代替的,他們形成被動的,"半連接"狀態(tài),傾聽來自客戶端的請求。服務器 sockets形成一個隊列,存放 它們聽到的連接請求。這個隊列記錄著客戶端連接請求就象他們已連接進來一樣。當服務器sockets同意客戶連接請求時,它形成一個新的socket去連 接客戶端,因此這個傾聽連接能保持開放狀態(tài)允許其他客戶端請求
41、。</p><p> (2)服務端連接 當傾聽socket同意一個客戶端請求時,服務器端socket形成一個服務器連接。當服務器端同意連接時,向客戶端發(fā)送一個服務端socket描述以完 成連接,當客戶端socket收到這個描述時這個連接得到確認,連接完成。一但連接到客戶端的Socket完成,服務端連接就不能識別從一個客戶端來的連 接。末端雙方有同樣的能力去接收同樣的事件類型。只有傾聽(listening)
42、連接是根本不同的,它只有一個單一的末端。</p><p> 3.系統(tǒng)的分析與設計</p><p><b> 3.1需求分析</b></p><p> 3.1.1可行性分析</p><p> (1)經濟可行性:經濟可行性包括兩個方面的內容:一是某一備選方案占有和使用經濟資源的可能性,進而實現政策目標的可能性;二是實
43、施某一政策方案所需花費的成本和取得的收益。作為畢業(yè)設計,我們所受到的效益,應該說是受益終生,花費則寥寥無幾。</p><p> ?。?)技術可行性:技術可行性是指決策的技術和決策方案的技術不能突破組織所擁有的或有關人員所掌握的技術資源條件的邊界。整個系統(tǒng)使用微軟官方的MFC標準類庫,遵守面向對象編程規(guī)范。</p><p> ?。?)法律可行性:本系統(tǒng)不以盈利為目的,而且使用的免費的C++語
44、言和MySql數據庫,不存在違反法律問題。</p><p> ?。?)操作可行性:本系統(tǒng)操作簡單,游戲玩法多樣,運行環(huán)境要求低。</p><p> 3.1.2系統(tǒng)功能分析</p><p> 本系統(tǒng)主要包括五子棋游戲、游戲平臺和服務器三個模塊:</p><p> ?。?)五子棋游戲模塊主要實現的功能是可以從游戲大廳啟動。兩個玩家可以進行游戲
45、,其它玩家允許觀看游戲。同一游戲室中的所有玩家可以進行文字聊天,游戲界面中要求顯示所有玩家的相關信息??梢跃哂星蠛汀⒒谄骞δ?。</p><p> ?。?)游戲大廳模塊游戲大廳包括用戶的注冊、登錄等功能。游戲大廳應可以查看當前已登錄用戶的所有信息及其狀態(tài)(空閑、正在游戲、正在觀看游戲),游戲大廳下可設游戲室,每個游戲室進行一盤五子棋游戲??梢圆榭锤鱾€游戲室的狀態(tài)(正在游戲、等待游戲、空閑),可以查看游戲室中的玩家的
46、信息。對于空閑的游戲室玩家可以進入等待其它玩家,等待游戲狀態(tài)的游戲室玩家可以進入開始游戲,正在游戲的游戲室玩家只能進入觀看游戲。</p><p> ?。?)服務器模塊主要實現包括接受客戶端請求和數據,儲存每個用戶的游戲成績,即總游戲局數,勝負平的局數,勝率等。</p><p><b> 3.2總體設計</b></p><p> 3.2.1網
47、絡游戲平臺功能設計</p><p> 網絡游戲平臺系統(tǒng)具有用戶注冊和登錄功能,用戶登錄成功后,可以進行單人游戲和多人游戲。在多人游戲中有玩家和觀看者,平臺具有儲存用戶相關戰(zhàn)績信息的功能。網絡游戲平臺模塊如圖3-1:</p><p> 圖3-2.系統(tǒng)模塊圖</p><p> 3.2.2登錄注冊模塊設計</p><p> 網絡游戲平臺登錄
48、注冊模塊主要包括注冊和登錄功能。注冊用戶時如果用戶名存在則注冊失敗,返回重新注冊,用戶名不存在時則注冊成功,直接進入到游戲平臺界面。用戶登錄時如果用戶名密碼正確則進去到游戲平臺界面,否則重新登錄。</p><p> 3.2.3游戲大廳模塊設計</p><p> 游戲大廳主要包括多人游戲、單人游戲、聊天三個部分。每個游戲房間內有一局多人游戲,多人游戲中包括玩家和觀看者兩種角色,在同一個游
49、戲房間的所有玩家可以進行聊天,一局游戲結束之后相關勝負戰(zhàn)績將儲存到服務器端,在游戲大廳內需要顯示本人和所有在線玩家的信息。</p><p> 3.2.4.五子棋游戲模塊設計</p><p> 五子棋游戲模塊主要是對五子棋游戲的棋盤和棋子進行繪制,在玩家下棋后可以悔棋和求和,游戲具有判斷游戲勝負的功能。五子棋游戲單人模式中,對戰(zhàn)AI的下棋算法為當對方有三連及以上時便阻礙,否則增加自己的布
50、局。判斷勝負算法為在最后一個下棋位置為中心向周圍的方向輻射來計算。</p><p> 3.2.5.服務器模塊設計</p><p> 服務器接收客戶端發(fā)送的聊天信息,公聊信息發(fā)送到所有客戶端,私聊信息發(fā)送到指定客戶端。服務器接收客戶端發(fā)送的游戲信息,對于不同的游戲信息有不同的處理。服務器具有對各客戶端發(fā)送通知的功能。</p><p> 3.2.6.數據庫模塊設計
51、</p><p> 網絡游戲平臺數據庫模塊設計主要是對用戶信息管理數據表。</p><p> user表{用戶名,密碼,勝利局數,失敗局數,平局局數}</p><p> user表的E-R圖如圖3-2:</p><p> 圖3-2.user表E-R圖</p><p><b> 3.3系統(tǒng)詳細設計&l
52、t;/b></p><p> 3.3.1注冊登錄模塊詳細設計</p><p> 注冊登錄界面詳細設計主要包括驗證注冊信息和驗證登錄信息兩個部分。</p><p><b> 驗證注冊信息</b></p><p> 驗證注冊信息主要包括判斷用戶名是否存在、兩次輸入密碼是否相同。驗證注冊信息成功后進入游戲平臺主界
53、面,驗證注冊信息失敗重新注冊。</p><p><b> 驗證登錄信息</b></p><p> 驗證登錄信息主要包括判斷用戶名和密碼是否正確。驗證登錄信息成功后進入游戲平臺主界面,驗證登錄信息失敗后重新登錄。</p><p> 網絡游戲平臺登陸注冊模塊中的主要模塊結構如下圖3-3所示:</p><p> 圖3-
54、3.登錄注冊模塊圖</p><p> 3.3.2游戲大廳模塊詳細設計</p><p> 游戲大廳模塊詳細設計主要包括更新游戲房間信息、大廳內玩家聊天、顯示本人信息、顯示其他玩家信息。</p><p><b> 更新游戲房間信息</b></p><p> 根據服務器端存儲的各個房間的游戲狀態(tài)(空閑、等待游戲、正在游
55、戲)更新本地游戲房間的狀態(tài)。</p><p><b> 大廳內玩家聊天</b></p><p> 所有在大廳里面的玩家可以進行聊天,聊天分為公聊和私聊。</p><p><b> 顯示本人信息</b></p><p> 在游戲大廳顯示本人的信息,包括用戶名、勝場數、負場數、平局數、勝率。&l
56、t;/p><p><b> 顯示其他玩家信息</b></p><p> 在游戲大廳界面顯示其他玩家的信息,包括用戶名、勝場數、負場數、平局數、勝率。</p><p> 網絡游戲平臺游戲大廳模塊設計圖如圖3-4。</p><p> 圖3-4.游戲大廳模塊</p><p> 3.3.3五子棋模塊
57、詳細設計</p><p> 五子棋模塊詳細設計主要包括繪制游戲棋盤、判斷下棋位置、繪制棋子、判斷勝負關系。</p><p><b> 繪制游戲棋盤</b></p><p> 繪制一個15*15大小的棋盤。</p><p><b> 判斷下棋位置</b></p><p>
58、; 根據鼠標點擊的坐標計算下棋的位置,如果坐標不在棋盤內部,則不繪制棋子。</p><p><b> 繪制棋子</b></p><p> 如果鼠標點擊的位置經過判斷之后位于棋盤內,繪制相應顏色的棋子。</p><p><b> 判斷勝負關系</b></p><p> 每下完一個棋子之后根據
59、當前所有棋子的位置判斷是否分出勝負,如果分出勝負,則不在允許下棋,否則繼續(xù)游戲。</p><p> 網絡游戲平臺五子棋游戲模塊設計如圖3-5。</p><p> 圖3-5.五子棋游戲模塊設計</p><p> 3.3.4服務器模塊詳細設計</p><p> 服務器模塊詳細設計主要包括接收客戶端連接、驗證客戶端注冊和登錄信息、轉發(fā)聊天信
60、息、轉發(fā)游戲信息、通知更新房間信息、通知更新用戶信息、用戶退出平臺管理、用戶進入和退出游戲房間管理、玩家戰(zhàn)績管理。</p><p><b> 接收客戶端連接</b></p><p> 服務器端可以一直接收不同客戶端的連接請求。</p><p> 驗證客戶端注冊和登錄信息</p><p> 對客戶端發(fā)送的注冊和登錄
61、信息進行分別處理。</p><p><b> 轉發(fā)聊天信息</b></p><p> 對客戶端發(fā)送的公聊和私聊信息進行相應的轉發(fā)。對游戲房間內的公聊和私聊信息進行相應的轉發(fā)。</p><p><b> 轉發(fā)和處理游戲信息</b></p><p> 客戶端發(fā)送的游戲信息對位于游戲房間內的其他玩
62、家轉發(fā),并對游戲信息進行處理。</p><p> 通知更新房間信息和用戶信息</p><p> 服務器端定時通知所有在線客戶端更新房間信息和所有玩家信息。</p><p> 用戶進入和退出游戲房間管理</p><p> 用戶進入和退出游戲房間后服務器端要對所有相應游戲房間內的其他玩家進行通知,并且根據游戲房間內的游戲狀態(tài)更新每個客戶端
63、的游戲房間信息。</p><p> 網絡游戲平臺服務器模塊設計如圖3-6。</p><p> 圖3-6.服務器模塊圖</p><p><b> 3.3.5數據字典</b></p><p> 本系統(tǒng)的數據字典如下: </p><p> 數據文件:用戶信息表</p><p
64、> 文件組成:id、用戶名、密碼、勝場數、負場數、平局數</p><p><b> 數據項:id</b></p><p><b> 數據類型:整型數據</b></p><p><b> 長度:10</b></p><p><b> 數據項:用戶名<
65、;/b></p><p><b> 數據類型:可變字符</b></p><p><b> 長度:10</b></p><p><b> 數據項:密碼</b></p><p><b> 數據類型:可變字符</b></p><
66、p><b> 長度:16</b></p><p><b> 數據項:勝利局數</b></p><p><b> 數據類型:整型數據</b></p><p><b> 長度:10</b></p><p><b> 數據項:失敗局數&
67、lt;/b></p><p><b> 數據類型:整型數據</b></p><p><b> 長度:10</b></p><p><b> 數據項:平局局數</b></p><p><b> 數據類型:整型數據</b></p>
68、<p><b> 長度:10</b></p><p> 3.3.6表結構說明</p><p> 根據邏輯關系模型可直接設計基于某種數據庫管理系統(tǒng)支持的物理結構,我們知道關系數據庫是由表構成的,依據用戶信息在數據庫中建立相應的表。表結構如表1所示。</p><p> 表1.學生信息數據表</p><p>
69、<b> 4.系統(tǒng)的實現</b></p><p> 4.1用戶的注冊與登錄</p><p><b> 4.1.1用戶登錄</b></p><p> 本系統(tǒng)在登錄界面可以輸入主機地址、用戶名、密碼。點擊登錄按鈕進行登錄,成功后進去游戲平臺界面,點擊取消按鈕取消登錄操作,點擊注冊按鈕彈出注冊界面。登陸界面如下圖4-1所
70、示:</p><p><b> 圖4-1.登陸界面</b></p><p><b> 4.1.2用戶注冊</b></p><p> 如果用戶沒有登陸賬號密碼,點擊登錄界面的注冊按鈕彈出注冊界面。注冊界面中可以輸入服務器IP、昵稱、密碼、密碼確認。兩次密碼輸入必須相同才可以進行注冊,注冊成功后跳轉到游戲平臺界面。注冊界
71、面如下圖4-2:</p><p><b> 圖4-2.用戶注冊</b></p><p><b> 4.2游戲大廳模塊</b></p><p> 4.2.1更新游戲房間信息</p><p> 客戶端要接收服務器定時發(fā)送的房間更新信息對所有房間信息進行更新,游戲平臺內所有房間有三種狀態(tài):房間空閑
72、、正在等待、正在游戲。沒有玩家在游戲房間時,房間狀態(tài)為空閑,有一名玩家進入后房間狀態(tài)為正在等待。兩名玩家以上進入房間后房間狀態(tài)為正在游戲。更新房間狀態(tài)如下圖4-3:</p><p> 圖4-3.房間更新狀態(tài)</p><p> 4.2.2大廳內玩家聊天</p><p> 游戲平臺提供了聊天功能,可以選擇“所有人”進行公聊,也可以選擇特定玩家進行私聊。聊天界面如圖
73、4-4。</p><p> 圖4-4.管理員查詢學生</p><p> 4.2.3顯示所有玩家信息</p><p> 游戲大廳內可以顯示本人和其他在線玩家的信息。玩家信息包括:用戶名、狀態(tài)、勝場、負場、平場、勝率。玩家狀態(tài)包括:游戲和大廳。顯示在線玩家信息界面如下圖4-5:</p><p> 圖4-5.在線玩家信息界面</p&g
74、t;<p> 顯示本人信息界面如下圖4-6:</p><p> 圖4-6.本人信息界面</p><p> 4.3五子棋游戲模塊</p><p> 4.3.1繪制五子棋棋盤</p><p> 繪制一個15*15的棋盤,背景顏色為RGB(175,255,180)到RGB(115,220,200)的漸變顏色,繪制了天元等點。
75、棋盤界面如圖4-7。</p><p><b> 圖4-7.棋盤界面</b></p><p><b> 4.3.2繪制棋子</b></p><p> 根據鼠標點擊位置判斷位置是否在棋盤內,如果判斷結果在棋盤內,則在指定位置繪制指定顏色的棋子,否則不進行處理。下棋界面如圖4-8。</p><p>
76、<b> 圖4-8.下棋界面</b></p><p><b> 4.3.3判斷勝負</b></p><p> 每次下一個棋子之后判斷勝負,以當前棋子為中心判斷它的所有方向內是否有五個相同顏色棋子連成一線,如果存在五個相同顏色棋子連成一線則分出勝負,客戶端發(fā)送勝負關系到服務器,否則繼續(xù)下棋直到分出勝負。判斷勝負界面如圖4-9。</p&g
77、t;<p> 圖4-9.判斷勝負界面</p><p><b> 4.3.4悔棋</b></p><p> 在下棋之后可以點擊悔棋按鈕悔棋一步,輪到本人下棋之后不能進行悔棋??蛻舳嘶谄搴笙蚍掌靼l(fā)送悔棋消息代碼如下:</p><p> Message msObj;</p><p> memset(&
78、amp;msObj,0,sizeof(Message));</p><p> msObj.iType = INGAME;</p><p> msObj.iSubType = REGRET;</p><p> CString strTemp = theApp.m_skMainSocket.GetUserName();</p><p>
79、int iLen = strTemp.GetLength();</p><p> lstrcpy(msObj.strName,strTemp.GetBuffer(iLen));</p><p> CString piecePos;</p><p> piecePos.Format(_T("%ld|%ld"),lastChess.x,last
80、Chess.y);</p><p> lstrcpy(msObj.strContent ,piecePos.GetBuffer(iLen));</p><p> theApp.m_skMainSocket.Send(&msObj,sizeof(Message));</p><p> m_isTurn = ISTURN;</p><p
81、> m_isCanRegret = DONOTREGRET;</p><p><b> 4.3.5求和</b></p><p> 玩家可以點擊求和按鈕進行求和,對方同意后本局游戲結束,客戶端發(fā)送游戲平局消息到服務器,下一局游戲重新開始,否則繼續(xù)進行本局游戲。求和界面如圖4-10。</p><p> 圖4-10.求和界面</p
82、><p><b> 4.4服務器模塊</b></p><p> 4.4.1接收客戶端連接</p><p> 服務器端創(chuàng)建SOCKET能夠隨時接收客戶端的連接請求。服務端程序需要判斷指定端口是否可用,如果可用創(chuàng)建SOCKET。服務器端創(chuàng)建SOCKET并監(jiān)聽相應的端口的代碼如下:</p><p> if (m_port
83、< 1024){</p><p> AfxMessageBox("請輸入用戶端口號");</p><p><b> return;</b></p><p><b> }</b></p><p> else if (m_port > 66000){</p&
84、gt;<p> AfxMessageBox("此端口不提供使用");</p><p><b> return;</b></p><p><b> }</b></p><p><b> else{</b></p><p> if(m_p
85、ort > 1024 && m_port <= 66000){</p><p> if(!m_ServerSocket.Create(m_port)){</p><p> AfxMessageBox("創(chuàng)建端口失敗!");</p><p><b> return;</b></p>
86、<p><b> }</b></p><p> if(!m_ServerSocket.Listen()){</p><p> AfxMessageBox("監(jiān)聽失敗!");</p><p><b> return;</b></p><p><b>
87、 }</b></p><p><b> }</b></p><p><b> }</b></p><p> 4.4.2驗證客戶端注冊和登錄信息</p><p> 玩家從客戶端的登錄和注冊信息由服務器端完成驗證,登錄信息驗證成功后登錄到游戲大廳,失敗退出登錄。注冊信息驗證成功后登
88、錄到游戲平臺界面,失敗重新注冊。服務器端登錄信息驗證程序主要代碼如下:</p><p> CString cmdStr;</p><p> cmdStr.Format("SELECT count(*) as COUNT_NAME FROM `user` WHERE name = '%s' AND password = '%s';",s
89、trUserName,strClientName);</p><p> if(!mysql_query(&theApp.mysql,cmdStr))</p><p><b> {</b></p><p> MYSQL_RES *result;</p><p> MYSQL_ROW row;</p&g
90、t;<p> result=mysql_use_result(&theApp.mysql)</p><p> row=mysql_fetch_row(result);</p><p> count = row[0];</p><p> mysql_free_result(result);</p><p><
91、b> }</b></p><p> 4.4.3 轉發(fā)聊天信息</p><p> 服務器端對客戶端發(fā)送的消息進行分析,將游戲相關信息和聊天信息進行區(qū)分,提取相關聊天消息。服務器端對于客戶端發(fā)送的公聊轉發(fā)給所有在線用戶,私聊信息發(fā)送給消息中指定的用戶。公聊信息轉發(fā)的主要代碼如下:</p><p> CPtrList * m_pClientLis
92、t = theApp.m_pClientSocketList;</p><p> int iCount = m_pClientList->GetCount();</p><p> POSITION pos = m_pClientList ->GetHeadPosition();</p><p><b> if(pos)</b>
93、</p><p> {for(int i = 0; i < m_pClientList ->GetCount(); i++)</p><p><b> {</b></p><p> CClientSocket *m_pClientSocket = static_cast < CClientSocket *>(m_
94、pClientList->GetNext(pos));</p><p> CString strName = m_pClientSocket ->GetUserName();</p><p> if(strName != strUserName )</p><p><b> {</b></p><p>
95、 m_pClientSocket->Send(&m_Message,sizeof(Message));</p><p><b> }</b></p><p><b> }</b></p><p> 4.4.4 轉發(fā)和處理游戲信息</p><p> 服務器端對客戶端發(fā)送的消息進
96、行分析,將游戲相關信息和聊天信息進行區(qū)分,提取相關游戲消息。服務器將客戶端發(fā)送的游戲信息轉發(fā)給同房間內所有玩家,并對游戲的勝負信息進行記錄。服務器轉發(fā)游戲信息的主要代碼如下:</p><p> Message msObj1;</p><p> memset(&msObj1,0,sizeof(Message));</p><p> msObj1.iTyp
97、e = INGAME;</p><p> msObj1.iSubType = GETCHESS;</p><p> CString strTemp= m_Message.strContent; </p><p> int len = strTemp.GetLength();</p><p> lstrcpy(msObj1.strCon
98、tent,strTemp.GetBuffer(len));</p><p> m_gClientSocket->Send(&msObj1,sizeof(Message));</p><p> 4.4.5 通知更新房間信息和用戶信息</p><p> 服務器端接收所有房間信息和用戶信息的變化,每隔特定時間向客戶端發(fā)送更新消息,使客戶端進行房間信息和
99、用戶信息的更新。通知客戶端進行用戶信息更新的主要代碼如下:</p><p> Message m_Message;</p><p> memset(&m_Message,0,sizeof(Message));</p><p> m_Message.iType = INFOREFRESH;</p><p> m_Message.
100、iSubType = PLAYERSINFO;</p><p> userInfoStr = userInfoStr.Left(userInfoStr.GetLength() - 1);</p><p> int len2 = userInfoStr.GetLength();</p><p> lstrcpy(m_Message.strContent,user
101、InfoStr.GetBuffer(len2));</p><p> CPtrList * m_pClientList = theApp.m_pClientSocketList;</p><p> pos = m_pClientList ->GetHeadPosition();</p><p><b> if(pos)</b><
102、;/p><p> {for(int i = 0; i < m_pClientList ->GetCount(); i++)</p><p><b> {</b></p><p> CClientSocket *m_pClientSocket = static_cast < CClientSocket *>(m_pCl
103、ientList->GetNext(pos));</p><p> CString strName = m_pClientSocket ->GetUserName();</p><p> CString info;</p><p> theApp.m_UserInfoMap.Lookup(strName,info);</p><
104、p> m_pClientSocket->Send(&m_Message,sizeof(Message));</p><p><b> }</b></p><p><b> }</b></p><p><b> 5.總結</b></p><p> 在
105、整個軟件開發(fā)過程中,網絡給了我很大的幫助。圖書讓我對C++形成了系統(tǒng)的認識,網絡則讓我得以針對性地解決問題。碰到具體的技術問題,翻閱文獻太慢,便只能從網絡尋求解決辦法。</p><p> 雖然這個軟件能正常運行,但是我認為代碼優(yōu)化方面還很不足,程序的整體框架不夠好,用戶需求也沒能充分滿足,整個網絡游戲平臺系統(tǒng)沒有使用相關的游戲引擎導致一些畫面不是特別流暢,這些問題還需今后逐一解決。</p><
106、;p> 可以說,這次畢業(yè)設計是我第一次獨立開發(fā)一個完整的應用程序。由于基礎的薄弱和經驗的匱乏,我只能摸著石頭過河,尋找各種途徑學習C++的MFC開發(fā)。沒有頭緒的時候會惶恐不安,會焦慮,但我沒懷疑過走出舒適區(qū)域的選擇。我覺得這個過程中,我學到的最重要的不是C++知識本身,而是在茫然無措時尋求答案和應對壓力的能力。學無止境,希望在未來的學習工作中,我能有更大的突破。</p><p><b> 致謝
107、</b></p><p> 經過幾個月的努力,本次畢業(yè)設計已經接近尾聲,在課題選取、論文撰寫和系統(tǒng)規(guī)劃等過程中,我的指導老師給予我細心周到的指導,拓展了我的思路,使我能順利完成任務,在此我表示衷心的感謝。感謝老師們的教誨、指導與幫助,我將銘記于心。老師們淵博的專業(yè)知識,嚴謹的治學態(tài)度,精益求精的工作作風,誨人不倦的高尚師德,嚴以律己、寬以待人的崇高風范,樸實無華、平易近人的人格魅力對我影響深遠。在此
108、,謹向各位老師表示崇高的敬意和衷心的感謝!</p><p><b> 參考文獻</b></p><p> [1].謝希仁.計算機網絡(第5版)。電子工業(yè)出版社。2008年2月第2次印刷。</p><p> [2]李達 現在游戲開發(fā)技術[J].計算機學報.2003,14(3):33~40</p><p> [3].
109、王曉春.PC游戲編程(人機博弈)[M]北京:清華大學出版社,2001</p><p> [4].Nils J Nillsson 人工智能[M].北京:人民郵電出版社,2001</p><p> [5] Erich Gamma,Richard Helm ,Ralph Johnson,等 可復用面向對象軟件的基礎[M]。北京:機械工業(yè)出版社</p><p> [6
110、] 楊世清.基于網絡環(huán)境的游戲開發(fā)技術[J]武漢科技報.2004,18(10):10~13</p><p> [7](美)Stanley B. Lippman Barbara E. Moo Josée LaJoie 著,李師賢 等譯 《C++ Primer中文版 第4版》 人民郵電出版社 2006.6</p><p> [8](美)施密特,(美)休斯頓 編著,葉斌 譯 《C+
111、+網絡編程》 科學出版社 2012.1</p><p> [9](美)加迪斯 著,周靖 譯. 《C++圖形與游戲編程基礎》 清華大學出版社 2010.9</p><p> [10]葛垚 主編,雷超然 等編著.《Visual C++ MFC棋牌類游戲編程實例》 人民郵電出版社 2008.7</p><p> [11]辛長安,王顏國 編著.《Visual C++
112、權威剖析——MFC原理、機制與開發(fā)實例》 清華大學出版社 2008.5</p><p> [12]丁寶康、董健全 數據庫實用教程[M]. 清華大學出版社2003.6</p><p> [13] 簡朝陽《MySQL性能調優(yōu)與架構設計》 電子工業(yè)出版社2009.6 </p><p> [14] 戴爾《MySQL核心技術》 機械工業(yè)出版社2009.9 </p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件工程畢業(yè)論文-五子棋對戰(zhàn)游戲平臺的設計與實現
- 軟件工程畢業(yè)論文-網絡對戰(zhàn)五子棋平臺的設計與實現
- 跨平臺網絡對戰(zhàn)游戲的設計與實現-電子信息工程畢業(yè)論文
- 軟件工程畢業(yè)論文eka教學平臺的設計與實現
- 軟件工程畢業(yè)論文-貪吃蛇小游戲的設計與實現
- 基于android平臺的計步器的設計與實現-軟件工程畢業(yè)論文
- 軟件工程畢業(yè)論文-交通誘導信息服務平臺的設計與實現
- 畢業(yè)論文---網絡棋牌游戲平臺的設計與實現
- 畢業(yè)論文---網絡棋牌游戲平臺的設計與實現
- 軟件工程畢業(yè)論文-網絡相冊管理系統(tǒng)的設計與實現
- 軟件工程畢業(yè)論文-社交網站的設計與實現
- 軟件工程畢業(yè)論文-水上智能平臺監(jiān)控系統(tǒng)的設計與實現
- 軟件工程畢業(yè)論文-網絡圖書管理系統(tǒng)的設計與實現
- 軟件工程畢業(yè)論文-網絡五子棋的設計與實現
- 軟件工程畢業(yè)論文-連連看小游戲設計
- 軟件工程畢業(yè)論文-超級瑪麗小游戲設計
- 軟件工程畢業(yè)論文-網絡教學系統(tǒng)的設計與實現——后臺管理
- 軟件工程畢業(yè)論文-黨務cms系統(tǒng)設計與實現
- 軟件工程畢業(yè)論文-網絡教學系統(tǒng)的設計與實現--前臺管理
- 軟件工程畢業(yè)論文-庫存管理系統(tǒng)的設計與實現
評論
0/150
提交評論