版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p> 網(wǎng)絡(luò)對戰(zhàn)五子棋平臺的設(shè)計與實現(xiàn)</p><p><b> 摘要</b></p><p> 五子棋游戲以其優(yōu)秀的人工智能深受廣大玩家的喜愛,而對于初步探
2、究網(wǎng)絡(luò)編成的編程愛好者來說,編制五子棋程序因其規(guī)則簡單而大受歡迎,然而它卻要求程序員對五子棋規(guī)則有相當(dāng)深入的了解。程序員考慮得越周到,其五子棋程序就越智能。 五子棋游戲軟件設(shè)計的主要內(nèi)容是:根據(jù)五子棋的基本規(guī)則,要讓對方客戶端知道該在哪一點下子,就要根據(jù)盤面的形勢,并把棋盤棋子的重新繪制繪制,也就是更新該點的位置,然后再通過監(jiān)聽網(wǎng)絡(luò)傳遞的消息,直到新的位置放在棋盤的什么位置上,在進行修改,并通過計算,得出玩家是否獲得勝利.,因此
3、玩家就能反復(fù)的進行聯(lián)機游戲。</p><p> 本文論述了采用聯(lián)機對戰(zhàn)的方式體現(xiàn)出五子棋程序的分析與設(shè)計,并采用面向?qū)ο蟮拈_發(fā)工具C#來具體實現(xiàn)。</p><p> 關(guān)鍵字:Socket ;C/S;五子棋;網(wǎng)絡(luò)對弈;C#</p><p><b> Abstract</b></p><p> Gobang
4、 game with excellent artificial intelligence by the vast number of players who, for the initial research network organization programming enthusiasts, Gobang procedures for the preparation of the rules simple and popular
5、, but it requires programmer to Gobang game has a deep understanding of the rules. Other thoughtful consideration they treat their Gobang game procedures more wisdom.</p><p> Gobang game software design is
6、the main content: According Gobang basic rules to know each other's customers - in violation of the West, we must under Permian situation, and the board pawn re-mapping mapping, that is updating the point position, a
7、nd then through the monitoring network news until the new location on the board what position, Following changes, and through the calculation, resulting in players is victory. , the on-line game players can repeatedly.&l
8、t;/p><p> This article discusses the use of on-line way reflect those Gobang procedures analysis and design, object-oriented development tools and the adoption of specific C# to achieve.</p><p>
9、Key Words : Socket; C/S; Gobang; play chess on network,C#</p><p><b> 目 錄</b></p><p><b> 1緒論5</b></p><p> 1.1選題背景和意義5</
10、p><p> 1.2國內(nèi)外研究現(xiàn)狀和發(fā)展趨勢5</p><p> 1.3 研究內(nèi)容與目標6</p><p> 2相關(guān)理論與技術(shù)7</p><p> 2.1五子棋簡介7</p><p> 2.2相關(guān)技術(shù)簡介7</p><p> 2.2.1 C/S體系結(jié)構(gòu)7</p>
11、<p> 2.2.2 SOCKET簡介8</p><p> 2.2.3 面向?qū)ο蟮睦碚撝R10</p><p> 2.2.4 C#.NET 相關(guān)知識介紹10</p><p> 3系統(tǒng)的分析與設(shè)計11</p><p> 3.1需求分析11</p><p> 3.2 功能分析11<
12、/p><p> 3.3運行環(huán)境12</p><p><b> 4系統(tǒng)的實現(xiàn)12</b></p><p> 4.1概要設(shè)計12</p><p><b> 4.2流程圖13</b></p><p> 4.3程序詳細設(shè)計14</p><p>
13、<b> 5總結(jié)31</b></p><p><b> 致謝31</b></p><p><b> 參考文獻32</b></p><p><b> 1緒論</b></p><p> 1.1選題背景和意義</p><p&g
14、t; 五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Five in a Row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。 五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它
15、既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結(jié)晶。 五子棋起源于古代中國,發(fā)展于日本,風(fēng)靡于歐洲。對于它與圍棋的關(guān)系有兩種說法,一說早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相
16、同,縱橫各十七道。五子棋大約隨圍棋一起在我國南北朝時先后傳入朝鮮、日本等地。據(jù)日本史料文獻介紹,中國古代的五子棋是經(jīng)由高麗(朝鮮),于1688年至1</p><p> 1.2國內(nèi)外研究現(xiàn)狀和發(fā)展趨勢</p><p> 電腦游戲行業(yè)經(jīng)過二十年的發(fā)展,已經(jīng)成為與影視、音樂等并駕齊驅(qū)的全球最重要的娛樂產(chǎn)業(yè)之一,其年銷售額超過好萊塢的全年收入?;ヂ?lián)網(wǎng)的出現(xiàn)為電腦游戲行業(yè)發(fā)展注入了新的活力,憑借
17、信息雙向交流、速度快、不受空間限制等優(yōu)勢,讓真人參與游戲,提高了游戲的互動性、仿真性和競技性,使玩家在虛擬世界里可以發(fā)揮現(xiàn)實世界無法展現(xiàn)的潛能,改變了單機版游戲固定、呆板、與機器對話的狀況。網(wǎng)絡(luò)游戲的這些優(yōu)勢不僅使其在電腦游戲行業(yè)中異軍突起并在某種程度上取代了單機版游戲,而且成為網(wǎng)絡(luò)業(yè)三大(網(wǎng)上金融、網(wǎng)上教育和網(wǎng)絡(luò)游戲)贏利且利潤優(yōu)厚的領(lǐng)域之一。</p><p> 網(wǎng)絡(luò)作為一種新興的傳播方式,主要包括三大內(nèi)容:
18、娛樂、資訊、通訊。提到網(wǎng)絡(luò)娛樂,過去主要指的是單機版游戲,沒有引入網(wǎng)絡(luò)的概念[2]但隨著科技的發(fā)展,游戲娛樂產(chǎn)業(yè)也在成長[3]目前,國內(nèi)的游戲娛樂產(chǎn)業(yè)正處于起步階段,特點表現(xiàn)為:第一,它是一種文化的傳播。娛樂產(chǎn)業(yè)可以潛移默化地改變?nèi)说挠^念,當(dāng)前,很多多媒體的播放已被電腦網(wǎng)絡(luò)所取代[4]。第二,網(wǎng)絡(luò)游戲加強了人與人的溝通。第三,網(wǎng)絡(luò)游戲具有一定的教育意義[5]。網(wǎng)絡(luò)游戲所具有的角色扮演的功能,使得玩家能通過互助更好地完成游戲中的各項任務(wù)。
19、網(wǎng)絡(luò)無國界,游戲在網(wǎng)絡(luò)文化產(chǎn)業(yè)世界的發(fā)展中地位會越來越高。</p><p> 目前在國外,休閑游戲如棋類等,玩家的年齡跨度非常大,這和我國目前網(wǎng)游市場以青少年為主要消費人群的狀況截然不同[7]。其實,網(wǎng)絡(luò)可以解決空間的問題,網(wǎng)絡(luò)和生活越來越息息相關(guān),因此,開辟適合各個年齡層的游戲產(chǎn)品迫在眉睫。同時,這也涉及到一個企業(yè)開發(fā)的能力。娛樂產(chǎn)業(yè)發(fā)展到一定程度,通過不斷鍛煉和經(jīng)驗的積累,完全可以通過融入娛樂的成分把教條的
20、東西深入淺出地展現(xiàn)給消費者 。</p><p> 就國內(nèi)的發(fā)展來看,最近這兩三年內(nèi)國內(nèi)的游戲公司如雨后春筍般的成立,所開發(fā)或代理的網(wǎng)絡(luò)游戲更是不勝枚舉。以全球游戲業(yè)界的發(fā)展來看,這幾年韓國的表現(xiàn)最為突出,特別是在網(wǎng)絡(luò)游戲的技術(shù)研發(fā)興游戲制作,其所發(fā)行的網(wǎng)絡(luò)游戲更成為全球游戲產(chǎn)業(yè)重要的指標之一。去年在美國洛杉磯所舉行的 E3(Electronic Entertainment Exposition)展中,已經(jīng)有幾家
21、的韓國廠商擠入世界第一線的游戲開發(fā)廠商之列。</p><p> 近幾年來,由于 3D 硬體繪圖技術(shù)的突破,使得即時描繪的書面越來越精致,而且3D遊戲性更多元化更逼近真實世界,因此在遊戲產(chǎn)業(yè)中,3D 游戲已經(jīng)逐漸取代2D游戲為游戲市場的主流,即使是網(wǎng)絡(luò)游戲,也慢慢趨向3D化。然而游戲3D化將會帶來的游戲開發(fā)上的困難等問題,這些問題以后都需要逐步解決。 </p><p> 1.3 研究內(nèi)容
22、與目標</p><p><b> 實驗要求如下:</b></p><p> (1) 玩家能通過局域網(wǎng)進行局域網(wǎng)對戰(zhàn)。</p><p> (2) 實現(xiàn)游戲員的網(wǎng)絡(luò)對話。</p><p> (3) 游戲規(guī)則:在棋盤上的行、列、對角線上連續(xù)放五個旗子的一方獲勝。</p><p> 本程序旨在用
23、C#語言實現(xiàn)一個基于.NET架構(gòu)的C/S模式的五子棋局域網(wǎng)對戰(zhàn)游戲,玩家作為客戶端通過服務(wù)器端與其它玩家進行對戰(zhàn),聊天等功能。界面使用VS2008 WindowForm窗體實現(xiàn),界面美觀,操作簡單,可行性強。</p><p><b> 2.相關(guān)理論與技術(shù)</b></p><p><b> 2.1五子棋簡介</b></p><
24、;p><b> (1)棋盤,棋子:</b></p><p> 1、棋盤為十五路,正中一點為“天元”,周圍四點為小星。</p><p> 2、棋子分黑白兩色,黑子113枚,白子112枚,共225枚。</p><p><b> (2)比賽規(guī)則:</b></p><p> 1、黑先白后,從
25、棋盤任意位置開始落子。然后執(zhí)白棋的一方在黑棋周圍的交叉點上落子。以此類推,黑白交替落子。</p><p> 2、最先在橫向,豎向,斜向形成連續(xù)的相同色五個棋子的一方為勝。</p><p> 本文所論述的聯(lián)機五子棋系統(tǒng)就是依照這種方式進行的。</p><p><b> 2.2相關(guān)技術(shù)簡介</b></p><p>
26、2.2.1 C/S體系結(jié)構(gòu)</p><p> C/S 結(jié)構(gòu),即大家熟知的客戶機和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和Server端來實現(xiàn),降低了系統(tǒng)的通訊開銷。</p><p> ?。–lient/Server或客戶/服務(wù)器模式):Client和Server常常分別處在相距很遠的兩臺計算機上,Client程序的任務(wù)是將用
27、戶的要求提交給Server程序,再將Server程序返回的結(jié)果以特定的形式顯示給用戶;Server程序的任務(wù)是接收客戶程序提出的服務(wù)請求,進行相應(yīng)的處理,再將結(jié)果返回給客戶程序。</p><p> C/S 結(jié)構(gòu)的基本原則是將計算機應(yīng)用任務(wù)分解成多個子任務(wù),由多臺計算機分工完成,即采用“功能分布”原則??蛻舳送瓿蓴?shù)據(jù)處理,數(shù)據(jù)表示以及用戶接口功能;服務(wù)器端完成DBMS的核心功能。這種客戶請求服務(wù)、服務(wù)器提供服務(wù)的
28、處理方式是一種新型的計算機應(yīng)用模式。</p><p> C/S結(jié)構(gòu)的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對應(yīng)的優(yōu)點就是客戶端響應(yīng)速度快。</p><p> C/S編程模式概括如下:</p><p><b> 服務(wù)器端:</b></p><p> 打開通信道路,告訴本地機
29、器,愿意在該通道上接受客戶請求——監(jiān)聽,等待客戶請求——接受請求,創(chuàng)建專用鏈接進行讀寫——處理完畢,關(guān)閉專用鏈接——關(guān)閉通信通道(當(dāng)然其中監(jiān)聽到關(guān)閉專用鏈接可以重復(fù)循環(huán))。</p><p><b> 客戶端:</b></p><p> 打開通訊道路,鏈接服務(wù)器——數(shù)據(jù)交互“-關(guān)閉信道。</p><p> 2.2.2 SOCKET簡介<
30、;/p><p> Socket 代表了一種文件描述符;這個描述符則是用于網(wǎng)絡(luò)訪問的。其實,Socket可以象流Stream一樣被視為一個數(shù)據(jù)通道,這個通道架設(shè)在應(yīng)用程序端(客戶端)和遠程服務(wù)器端之間,而后,數(shù)據(jù)的讀?。ń邮埽┖蛯懭耄òl(fā)送)均針對這個通道來進行。在應(yīng)用程序端或者服務(wù)器端創(chuàng)建了Socket對象之后,就可以使用Send/SendTo方法將數(shù)據(jù)發(fā)送到連接的Socket,或者使用Receive/Receive
31、 From方法接受來自連接Socket的數(shù)據(jù)。</p><p> Socket通訊方式:</p><p> 同步:客戶端在發(fā)送請求之后必須等到服務(wù)器回應(yīng)之后才可以發(fā)送系一條請求。串行運行。</p><p> 異步:客戶端請求之后,不必等到服務(wù)器回應(yīng)之后就可以發(fā)送下一條請求。并行運行。</p><p> 用Socket訪問網(wǎng)絡(luò)的基本步驟
32、:</p><p><b> a.建立一個套接字</b></p><p> b.綁定本機的IP和端口</p><p> c.如果是TCP,因為是面向連接的,所以要利用ListenO()方法來監(jiān)聽網(wǎng)絡(luò)上是否有人給自己發(fā)東西;如果是UDP,因為是無連接的,所以來這不拒。</p><p> d.TCP情況下,如果監(jiān)聽到
33、一個連接,就可以使用accept來接受這個連接,然后就可以利用Send/Receive 來執(zhí)行操作了。而UDP,則不需要accept,直接用SendTo/ReceiveFrom來執(zhí)行操作。</p><p> e.如果你不想繼續(xù)發(fā)送和接受了,就可以使用close來關(guān)閉連接</p><p> 在TCP/IP 網(wǎng)絡(luò)中,IP網(wǎng)絡(luò)交互分類兩大類:面向連接的交互和面向唔連接的交互。Socket面向
34、兩種連接的通訊圖如下:</p><p><b> 服務(wù)器方</b></p><p> ........ 建立連接</p><p><b> 服務(wù)請求</b></p><p><b> /應(yīng)答</b></p><p> 面向連接的套接字系統(tǒng)調(diào)
35、用時序</p><p> 服務(wù)器/客戶方 服務(wù)器/客戶方</p><p><b> 數(shù)據(jù)報文</b></p><p> 無連接的套接字系統(tǒng)調(diào)用時序</p><p> 2.2.3 面向?qū)ο蟮睦碚撝R</p><p> 面向?qū)ο?/p>
36、方法是一種運用對象,類,封裝,繼承,多態(tài)和消息等概念來構(gòu)造,測試,重構(gòu)軟件的方法。</p><p> 面向?qū)ο蠓椒ㄊ且环N以知識為基礎(chǔ),用對象來理解和分析問題空間,并設(shè)計和開發(fā)出由對象構(gòu)成的軟件系統(tǒng)(解空間)的方法。由于問題空間和解空間都是由對象組成的,這樣可以消除由于問題空間和加空間結(jié)構(gòu)上的不一致帶來的問題。簡言之,面向?qū)ο缶褪敲嫦蚴挛锉旧?,面向?qū)ο蟮姆治龉懦蔷褪钦J識客觀世界的過程。面向?qū)ο蠓椒◤膹膶ο蟪霭l(fā),發(fā)
37、展出對象,類,消息,繼承等概念。</p><p> 面向?qū)ο蟮闹饕獌?yōu)點是:符合人們通常的思維方式;從分析到設(shè)計再到編碼采用一致的模型表示具有高度連續(xù)性;軟件重用性好。</p><p> 2.2.4 C#.NET 相關(guān)知識介紹</p><p> C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運行于.NET Framework之上的高級程序設(shè)計語言。C#是一種安全的、穩(wěn)定的
38、、簡單的、優(yōu)雅的,由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言。它在繼承C和C++強大功能的同時去掉了一些它們的復(fù)雜特性(例如沒有宏以及不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。</p><p> 本次設(shè)計是用C#.NET完成的,采用的是windows窗體應(yīng)用程序來實現(xiàn)圖形界面功能的,
39、本設(shè)計主要用到的,一些控件有:ImageList,MenuStrip,button,textbox,label,等一些簡單的控件。用到的主要技術(shù)就是Socket通訊,以及多線程編程。下面簡單的介紹一下這些知識。</p><p> ImageList 控件包含ListImage對象的集合,該集合中的每個對象都可以通過其索引或關(guān)鍵字被引用。ImageList控件不能獨立使用,只是作為一個便于向其它控件提供圖象的資料
40、中心。ImageList控件的作用象圖像的儲藏室,同時,它需要第二個控件顯示所儲存的圖像。第二個控件可以是任何能顯示圖像 Picture 對象的控件,也可以是特別設(shè)計的、用于綁定 ImageList 控件的 Windows 通用控件之一。本程序中在Label,PictureBox中調(diào)用了ImageList中的圖像。</p><p> MenuStrip 控件是 Visual Studio
41、 和 .NET Framework 中的功能。使用該控件,可以輕松創(chuàng)建 Microsoft Office 中那樣的菜單。MenuStrip 控件支持多文檔界面 (MDI)和菜單合并、工具提示和溢出。您可以通過添加訪問鍵、快捷鍵、選中標記、圖像和分隔條,來增強菜單的可用性和可讀性。MenuStrip 控件取代了 MainMenu 控件并向其中添加了功能;但是也可選擇保留 MainMenu 控件以備向后兼容和將來使用。</p>
42、<p> 3.系統(tǒng)的分析與設(shè)計</p><p><b> 3.1需求分析</b></p><p> (1)滿足游戲雙方記錄的游戲動作的基本要求。</p><p> (2)滿足對戰(zhàn)雙方及時通訊的基本要求。</p><p> ?。?)滿足游戲雙方及時顯示游戲狀態(tài)的基本要求。</p><
43、p> ?。?)在服務(wù)器端分析雙方是否勝利。</p><p><b> 3.2 功能分析</b></p><p> 基于系統(tǒng)需求分析,該系統(tǒng)需要實現(xiàn)以下基本功能:</p><p> ?。?)棋盤繪制:在游戲加載時,即時顯示棋盤</p><p> (2)對連接到客戶端數(shù)據(jù)的基本要求:能夠?qū)⒁l(fā)送的聊天記錄發(fā)送至對
44、方手上,能夠完成即時通訊。</p><p> ?。?)實時顯示:當(dāng)從游戲一方將數(shù)據(jù)傳入另一方系統(tǒng)中,將五子棋的表格進行重新的刷新,和更改。</p><p> ?。?)通過控制鼠標點擊五子棋表格:觸發(fā)事件,把該動作發(fā)送到游戲另一方,并判斷是否勝利。</p><p><b> 3.3運行環(huán)境</b></p><p> 系
45、統(tǒng)運行環(huán)境:WindowsXP及以后版本</p><p> 開發(fā)環(huán)境:VS2008</p><p><b> 4.系統(tǒng)的實現(xiàn)</b></p><p><b> 4.1概要設(shè)計</b></p><p> 本次畢業(yè)設(shè)計的內(nèi)容主要是利用Socket實現(xiàn)一個網(wǎng)絡(luò)對戰(zhàn)五子棋,首先先要繪制出棋盤,然后實
46、現(xiàn)Socket通訊(連接,聊天等功能),然后實現(xiàn)下棋功能,下棋這部分功能的實現(xiàn)根據(jù)Socket通訊傳遞的信息流控制雙方該誰下棋;再通過傳遞過來的消息觸發(fā)事件從而實現(xiàn)對戰(zhàn)雙方的同步顯示;每走一步棋子,都要利用一個算法來判斷一下有沒有出現(xiàn)五個相同棋子連到一起的情況,及是否有人贏棋,這個算法要分兩種情況,一種是黑棋,另一種是白棋,如果剛落下的棋子是黑棋,那么就要在整個棋盤上通過上下,左右,以及斜上,斜下,這幾個方向來尋找看看有沒有五子連在一起
47、的情況,如果有的話,那么黑棋勝,游戲結(jié)束;如果剛落下的是白棋的話,用同樣的方法判斷。</p><p> 對戰(zhàn)方1 對戰(zhàn)方2</p><p><b> 4.2流程圖</b></p><p> 下面用我們用數(shù)據(jù)流圖(DFD, Data Flow Diagram),也就是從數(shù)
48、據(jù)傳遞和加工的角度,以圖形的方式刻畫數(shù)據(jù)流從輸入到輸出的移動變換過程。如下圖所示:</p><p><b> 等待連接</b></p><p><b> 連接至對方的服務(wù)端</b></p><p><b> 可以進行及時通訊</b></p><p><b>
49、等待輪到自己下棋</b></p><p> 將信息傳遞到對方的棋盤上</p><p><b> 更新勝負記錄</b></p><p><b> 4.3程序詳細設(shè)計</b></p><p> 4.3.1 期盼的繪制代碼和圖解</p><p> using
50、System;</p><p> using System.Collections.Generic;</p><p> namespace WindowsApplication1</p><p><b> {</b></p><p> public partial class Form1 : Form</p
51、><p><b> {</b></p><p> public Form1()</p><p><b> {</b></p><p> InitializeComponent();</p><p><b> }</b></p><
52、;p> public int BBow=0;</p><p> int[] a=new int[225];</p><p> int BCount = 0;</p><p> int BwinCount = 0;</p><p> int WwinCount = 0;</p><p> int k,g
53、,x = 15;</p><p> bool Out=false;</p><p> public bool CanAgin,CanAgins,CanDown,WhoFisrtDown;</p><p> private Socket listener;</p><p> private Thread mainThread;</
54、p><p> public void Form1_Load(object sender, EventArgs e)</p><p><b> {</b></p><p> for (int i = 0; i <15; i++)//棋盤</p><p><b> {</b></p>
55、;<p> for (int j = 0; j <15; j++)</p><p><b> {</b></p><p> PictureBox pictureBox1 = new PictureBox();</p><p> pictureBox1.Location = new System.Drawing.Poi
56、nt(i * 29+30, j*29+30);</p><p> pictureBox1.Name = "pictureBox"+(i+j*15).ToString();</p><p> pictureBox1.Size = new System.Drawing.Size(30,30);</p><p> pictureBox1.TabI
57、ndex = 0;</p><p> pictureBox1.Image = imageList1.Images[2];</p><p> pictureBox1.TabStop = false;</p><p> a[i + j * 15] = 3;</p><p> pictureBox1.Click+=new EventHand
58、ler(asd);</p><p> this.Controls.Add(pictureBox1);</p><p><b> }</b></p><p><b> }</b></p><p> button3.Enabled = false;</p><p> b
59、utton6.Visible = false;</p><p> button1.Enabled = false;</p><p> label7.Visible = true;</p><p> label8.Visible = false;</p><p> CanDown = false;</p><p>
60、;<b> }</b></p><p> 4.3.2 連接服務(wù)器模塊</p><p> namespace WindowsApplication1</p><p><b> {</b></p><p> public class Client</p><p><
61、;b> {</b></p><p><b> //1、連接服務(wù)器</b></p><p><b> //2、發(fā)送消息</b></p><p><b> //3、接收數(shù)據(jù)包</b></p><p> private Socket _client; //
62、跟服務(wù)器連接的socket</p><p> private bool _connected; //socket連接狀態(tài),表示斷開或已經(jīng)連接兩種情況</p><p><b> //連接服務(wù)器</b></p><p> public void ConnectServer(string ip, int port)
63、 //指定地址和端口</p><p><b> {</b></p><p> _client = new Socket( //Socket類構(gòu)造函數(shù)</p><p> AddressFamily.InterNetwork, //Socket使用的尋址方案 IP版本為</p><p> SocketType
64、.Stream, //連接是基于流套接字的</p><p> ProtocolType.Tcp); //連接協(xié)議是使用TCP協(xié)議</p><p> IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ip),port); //初始化制定的地址和端口</p><p> _client.Connect(
65、ep); </p><p> _connected = true; //返回值true</p><p><b> }</b></p><p><b> //返回連接狀態(tài)</b></p><p> publ
66、ic bool Connected</p><p><b> {</b></p><p> get { return _connected; }</p><p><b> }</b></p><p><b> //關(guān)閉連接</b></p><p>
67、; public void CloseConnection()</p><p><b> {</b></p><p> if (_connected)</p><p><b> {</b></p><p> _client.Close();</p><p> _c
68、onnected = false;</p><p><b> }</b></p><p><b> }</b></p><p><b> //發(fā)送消息</b></p><p> public void SendMessage(string message)</p&
69、gt;<p><b> {</b></p><p> byte[] buffer = Encoding.Default.GetBytes(message + "\r\n\r\n");</p><p> _client.Send(buffer);</p><p><b> }</b>
70、</p><p><b> }</b></p><p> 4.3.3判斷先行,先行者添加棋子(程序代碼和圖)</p><p> public void First()</p><p><b> {</b></p><p> if (WhoFisrtDown == t
71、rue)</p><p><b> {</b></p><p> MessageBox.Show("先行");</p><p><b> }</b></p><p><b> else</b></p><p><b>
72、; {</b></p><p> MessageBox.Show("后行");</p><p><b> }</b></p><p><b> }</b></p><p> public void FiDnMessage(object sender, FiD
73、nMessageEventArgs e)//誰先下棋的判斷</p><p><b> {</b></p><p> if (this.InvokeRequired)</p><p><b> {</b></p><p> this.Invoke(</p><p>
74、new EventHandler<FiDnMessageEventArgs>(this.FiDnMessage),</p><p> new object[] { sender, e });</p><p><b> }</b></p><p><b> else</b></p><p
75、><b> {</b></p><p> WhoFisrtDown = true;</p><p><b> }</b></p><p><b> First();</b></p><p><b> }</b></p><
76、;p> 4.3.4 添加后行者下棋模塊(程序代碼和圖)</p><p> public void AddChess(object sender, AddChessEventArgs e)</p><p><b> {</b></p><p> if (this.InvokeRequired)</p><p>
77、;<b> {</b></p><p> this.Invoke(</p><p> new EventHandler<AddChessEventArgs>(this.AddChess),</p><p> new object[] { sender, e });</p><p><b>
78、 }</b></p><p><b> else</b></p><p><b> {</b></p><p> string name = "pictureBox" + e.Number;</p><p> int num = Int32.Parse(e.I
79、m);</p><p> BBow = Int32.Parse(e.Bow);</p><p> PictureBox bb = (PictureBox)this.Controls[name];</p><p> bb.Image = imageList1.Images[num];</p><p> if (num == 0)<
80、/p><p><b> {</b></p><p> label7.Visible = false;</p><p> label8.Visible = true;</p><p><b> }</b></p><p> else if(num==1)</p>
81、;<p><b> {</b></p><p> label7.Visible = true;</p><p> label8.Visible = false;</p><p><b> }</b></p><p> bb.Enabled = false;</p>
82、<p> int s = Int32.Parse(e.Number);</p><p> a[s] = Int32.Parse(e.Im);</p><p> ChessJudge();</p><p><b> }</b></p><p> WhoFisrtDown = true;</p&
83、gt;<p><b> }</b></p><p> 4.3.5 判斷黑白棋輸贏的模塊(程序代碼和圖)</p><p><b> //判斷黑棋是否贏</b></p><p> public void Bwin()</p><p><b> {</b>&l
84、t;/p><p> for (g = 0; g < 225; g++)</p><p><b> {</b></p><p> string name = "pictureBox" + g.ToString();</p><p> PictureBox aa = (PictureBox)th
85、is.Controls.Find(name, false)[0];</p><p> aa.Enabled = false;</p><p><b> }</b></p><p> MessageBox.Show("黑子贏了!!請按重新開始!");</p><p> BwinCount++;&
86、lt;/p><p> label1.Text = "黑勝:" + BwinCount;</p><p> button3.Visible = false;</p><p> button6.Visible = true;</p><p> button6.Enabled = true;</p><p
87、> CanAgins = false;</p><p> CanAgin = false;</p><p><b> }</b></p><p><b> //判斷白棋是否贏</b></p><p> public void Wwin()</p><p>&l
88、t;b> {</b></p><p> for (g = 0; g < 225; g++)</p><p><b> {</b></p><p> string name = "pictureBox" + g.ToString();</p><p> PictureB
89、ox aa = (PictureBox)this.Controls.Find(name, false)[0];</p><p> aa.Enabled = false;</p><p><b> }</b></p><p> MessageBox.Show("白子贏了!!請按重新開始!");</p>&l
90、t;p> WwinCount++;</p><p> label2.Text = "白勝:" + WwinCount;</p><p> button3.Visible = false;</p><p> button6.Visible = true;</p><p> button6.Enabled =
91、true;</p><p> CanAgins = false;</p><p> CanAgin = false;</p><p><b> }</b></p><p> public void ChessJudge()//算法</p><p><b> {</b>
92、;</p><p> for (k = 0; k < 225; k++)</p><p><b> {</b></p><p> if (a[k] == 0)</p><p><b> {</b></p><p><b> BCount++;<
93、/b></p><p> for (int p = 1; p < 5; p++)//從左往右判斷橫著的黑子是否有5個相同的棋子想連</p><p><b> {</b></p><p> if (k + p < ((k / 15) + 1) * x)</p><p><b> {<
94、;/b></p><p> if (a[k + p] == 0)</p><p><b> {</b></p><p><b> BCount++;</b></p><p><b> }</b></p><p> else if (a[k
95、 + p] == 1)</p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
96、;/p><p> if (BCount == 5)</p><p><b> {</b></p><p><b> Bwin();</b></p><p><b> return;</b></p><p><b> }</b>
97、</p><p><b> else</b></p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p>
98、<p><b> }</b></p><p> for (k = 0; k < 225; k++)//從右往左判斷橫著的黑子是否有5個相同的棋子想連</p><p><b> {</b></p><p> if (a[k] == 0)</p><p><b>
99、{</b></p><p><b> BCount++;</b></p><p> for (int p = 1; p < 5; p++)</p><p><b> {</b></p><p> if (k - p > (k / 15) * x)</p>
100、<p><b> {</b></p><p> if (a[k - p] == 0)</p><p><b> {</b></p><p><b> BCount++;</b></p><p><b> }</b></p>
101、<p> else if (a[k - p] == 1)</p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p>
102、<b> }</b></p><p> if (BCount == 5)</p><p><b> {</b></p><p><b> Bwin();</b></p><p><b> return;</b></p><p&
103、gt;<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b>
104、; }</b></p><p><b> }</b></p><p> for (k = 0; k < 225; k++)//判斷"豎"著的黑子是否有5個相同的棋子想連</p><p><b> {</b></p><p> if (a[k] == 0
105、)</p><p><b> {</b></p><p><b> BCount++;</b></p><p> for (int p = 1; p < 5; p++)</p><p><b> {</b></p><p> if (k
106、+ p * 15 < 225)</p><p><b> {</b></p><p> if (a[k + p * 15] == 0)</p><p><b> {</b></p><p><b> BCount++;</b></p><p&g
107、t;<b> }</b></p><p> else if (a[k + p * 15] == 1)</p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><
108、b> }</b></p><p><b> }</b></p><p> if (BCount == 5)</p><p><b> {</b></p><p><b> Bwin();</b></p><p><b&g
109、t; return;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> BCount = 0;</p><p><b> }
110、</b></p><p><b> }</b></p><p><b> }</b></p><p> for (k = 0; k < 225; k++)//判斷右"斜"上方的黑子是否有5個相同的棋子想連</p><p><b> {</
111、b></p><p> if (a[k] == 0)</p><p><b> {</b></p><p><b> BCount++;</b></p><p> for (int p = 1; p < 5; p++)</p><p><b>
112、 {</b></p><p> if (k - p * 14 > 0)</p><p><b> {</b></p><p> if (a[k - p * 14] == 0)</p><p><b> {</b></p><p><b>
113、 BCount++;</b></p><p><b> }</b></p><p> else if (a[k - p * 14] == 1)</p><p><b> {</b></p><p> BCount = 0;</p><p><b>
114、; }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (BCount == 5)</p><p><b> {</b></p><p><b> Bwin()
115、;</b></p><p><b> return;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> BCoun
116、t = 0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> for (k = 0; k < 225; k++)//判斷左"斜"下方的黑子是否有5個相同的棋子想
117、連</p><p><b> {</b></p><p> if (a[k] == 0)</p><p><b> {</b></p><p><b> BCount++;</b></p><p> for (int p = 1; p <
118、 5; p++)</p><p><b> {</b></p><p> if (k + p * 14 < 225)</p><p><b> {</b></p><p> if (a[k + p * 14] == 0)</p><p><b> {
119、</b></p><p><b> BCount++;</b></p><p><b> }</b></p><p> else if (a[k + p * 14] == 1)</p><p><b> {</b></p><p>
120、 BCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (BCount == 5)</p><p><b> {</b&
121、gt;</p><p><b> Bwin();</b></p><p><b> return;</b></p><p><b> }</b></p><p><b> else</b></p><p><b>
122、 {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> for (k = 0; k < 22
123、5; k++)//判斷左"斜"上方的黑子是否有5個相同的棋子想連</p><p><b> {</b></p><p> if (a[k] == 0)</p><p><b> {</b></p><p><b> BCount++;</b><
124、/p><p> for (int p = 1; p < 5; p++)</p><p><b> {</b></p><p> if (k - p * 16 > 0)</p><p><b> {</b></p><p> if (a[k - p * 16]
125、 == 0)</p><p><b> {</b></p><p><b> BCount++;</b></p><p><b> }</b></p><p> else if (a[k - p * 16] == 1)</p><p><b
126、> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (BCount == 5)&
127、lt;/p><p><b> {</b></p><p><b> Bwin();</b></p><p><b> return;</b></p><p><b> }</b></p><p><b> else&
128、lt;/b></p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></
129、p><p> for (k = 0; k < 225; k++)//判斷右"斜"下方的黑子是否有5個相同的棋子想連</p><p><b> {</b></p><p> if (a[k] == 0)</p><p><b> {</b></p><
130、p><b> BCount++;</b></p><p> for (int p = 1; p < 5; p++)</p><p><b> {</b></p><p> if (k + p * 16 < 225)</p><p><b> {</b>
131、;</p><p> if (a[k + p * 16] == 0)</p><p><b> {</b></p><p><b> BCount++;</b></p><p><b> }</b></p><p> else if (a[k
132、+ p * 16] == 1)</p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
133、;</p><p> if (BCount == 5)</p><p><b> {</b></p><p><b> Bwin();</b></p><p><b> return;</b></p><p><b> }</b
134、></p><p><b> else</b></p><p><b> {</b></p><p> BCount = 0;</p><p><b> }</b></p><p><b> }</b></p&
135、gt;<p><b> }</b></p><p><b> 5.總結(jié)</b></p><p> 在設(shè)計過程中,出現(xiàn)過不同的問題,開始的時候解決起來有一些困難,經(jīng)過兩個月的不斷學(xué)習(xí)和實踐,基本上都已經(jīng)解決,而且通過解決問題的過程,自己的知識在一天天增長,對無網(wǎng)絡(luò)編程了解的越來越多,基本掌握了Socket通信機制。通過這個網(wǎng)絡(luò)游
136、戲的開發(fā)過程,我深深的體會到一個軟件的完成需要注意的東西很多,并不像想象中的那么簡單,我們要有充分的知識儲備才可以完成一款完美軟件,即便是再小的程序、游戲,都需要很多的知識,一切都離不開基礎(chǔ)。</p><p> 這次對局域網(wǎng)五子棋對戰(zhàn)游戲的開發(fā)讓我用到了之前學(xué)過的大部分知識,如C#可視化程序、操作系統(tǒng)、還有計算機網(wǎng)絡(luò)等知識。更進一步加深了我對這些知識的了解,以及在實踐中熟練運用。</p><
137、p><b> 致謝</b></p><p> 最后,我要感謝在這段時間內(nèi)對我的工作進行指導(dǎo)的王超老師,王老師不辭辛苦地指導(dǎo),使我得以順利完成畢業(yè)設(shè)計;使我對網(wǎng)絡(luò)游戲和計算機網(wǎng)絡(luò)編程的認識更加深刻。在程序的設(shè)計過程中遇到困難的時候,王老師及時的給了我建議與支持,使得我能夠不斷地克服困難,并在規(guī)定的時間內(nèi)完成各項任務(wù)。</p><p> 本論文也是在王老師的悉
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件工程畢業(yè)論文-五子棋對戰(zhàn)游戲平臺的設(shè)計與實現(xiàn)
- 軟件工程畢業(yè)論文-網(wǎng)絡(luò)五子棋的設(shè)計與實現(xiàn)
- 網(wǎng)絡(luò)對戰(zhàn)五子棋
- 網(wǎng)絡(luò)五子棋的設(shè)計與實現(xiàn)-畢業(yè)論文
- 網(wǎng)絡(luò)五子棋五子棋設(shè)計與實現(xiàn).doc
- qt網(wǎng)絡(luò)五子棋五子棋設(shè)計與實現(xiàn)
- 軟件工程畢業(yè)論文-基于vc++的五子棋程序設(shè)計與實現(xiàn)
- 畢業(yè)論文---網(wǎng)絡(luò)五子棋游戲設(shè)計
- 五子棋畢業(yè)論文-html開發(fā)五子棋的原型設(shè)計
- 五子棋對戰(zhàn)游戲
- 五子棋畢業(yè)論文
- 畢業(yè)設(shè)計-- 用java實現(xiàn)五子棋網(wǎng)絡(luò)對戰(zhàn)系統(tǒng)
- 五子棋游戲的設(shè)計與實現(xiàn)【畢業(yè)論文】
- 五子棋游戲設(shè)計畢業(yè)論文
- 軟件工程畢業(yè)設(shè)計(論文)-基于android的五子棋游戲設(shè)計
- 畢業(yè)論文——五子棋游戲設(shè)計
- 五子棋游戲軟件工程課程設(shè)計
- java課程設(shè)計--對戰(zhàn)五子棋
- 五子棋人機對戰(zhàn)系統(tǒng)設(shè)計.pdf
- 五子棋手機網(wǎng)絡(luò)對戰(zhàn)游戲的設(shè)計與實現(xiàn)——畢業(yè)論文
評論
0/150
提交評論