版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> (20 屆)</b></p><p> 網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 摘要</b></p><p> 五子棋游戲以其優(yōu)秀的人工智能深受廣大玩家的喜愛,而對(duì)于初步探
2、究網(wǎng)絡(luò)編成的編程愛好者來說,編制五子棋程序因其規(guī)則簡(jiǎn)單而大受歡迎,然而它卻要求程序員對(duì)五子棋規(guī)則有相當(dāng)深入的了解。程序員考慮得越周到,其五子棋程序就越智能。 五子棋游戲軟件設(shè)計(jì)的主要內(nèi)容是:根據(jù)五子棋的基本規(guī)則,要讓對(duì)方客戶端知道該在哪一點(diǎn)下子,就要根據(jù)盤面的形勢(shì),并把棋盤棋子的重新繪制繪制,也就是更新該點(diǎn)的位置,然后再通過監(jiān)聽網(wǎng)絡(luò)傳遞的消息,直到新的位置放在棋盤的什么位置上,在進(jìn)行修改,并通過計(jì)算,得出玩家是否獲得勝利.,因此
3、玩家就能反復(fù)的進(jìn)行聯(lián)機(jī)游戲。</p><p> 本文論述了采用聯(lián)機(jī)對(duì)戰(zhàn)的方式體現(xiàn)出五子棋程序的分析與設(shè)計(jì),并采用面向?qū)ο蟮拈_發(fā)工具C#來具體實(shí)現(xiàn)。</p><p> 關(guān)鍵字:Socket ;C/S;五子棋;網(wǎng)絡(luò)對(duì)弈;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國(guó)內(nèi)外研究現(xiàn)狀和發(fā)展趨勢(shì)5</p><p> 1.3 研究?jī)?nèi)容與目標(biāo)6</p><p> 2相關(guān)理論與技術(shù)7</p><p> 2.1五子棋簡(jiǎn)介7</p><p> 2.2相關(guān)技術(shù)簡(jiǎn)介7</p><p> 2.2.1 C/S體系結(jié)構(gòu)7</p>
11、<p> 2.2.2 SOCKET簡(jiǎn)介8</p><p> 2.2.3 面向?qū)ο蟮睦碚撝R(shí)10</p><p> 2.2.4 C#.NET 相關(guān)知識(shí)介紹10</p><p> 3系統(tǒng)的分析與設(shè)計(jì)11</p><p> 3.1需求分析11</p><p> 3.2 功能分析11<
12、/p><p> 3.3運(yùn)行環(huán)境12</p><p><b> 4系統(tǒng)的實(shí)現(xiàn)12</b></p><p> 4.1概要設(shè)計(jì)12</p><p><b> 4.2流程圖13</b></p><p> 4.3程序詳細(xì)設(shè)計(jì)14</p><p>
13、<b> 5總結(jié)31</b></p><p><b> 致謝31</b></p><p><b> 參考文獻(xiàn)32</b></p><p><b> 1緒論</b></p><p> 1.1選題背景和意義</p><p&g
14、t; 五子棋是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Five in a Row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。 五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它
15、既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂見,又有深?yuàn)W的技巧和高水平的國(guó)際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。 五子棋起源于古代中國(guó),發(fā)展于日本,風(fēng)靡于歐洲。對(duì)于它與圍棋的關(guān)系有兩種說法,一說早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個(gè)分支。在中國(guó)的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相
16、同,縱橫各十七道。五子棋大約隨圍棋一起在我國(guó)南北朝時(shí)先后傳入朝鮮、日本等地。據(jù)日本史料文獻(xiàn)介紹,中國(guó)古代的五子棋是經(jīng)由高麗(朝鮮),于1688年至1</p><p> 1.2國(guó)內(nèi)外研究現(xiàn)狀和發(fā)展趨勢(shì)</p><p> 電腦游戲行業(yè)經(jīng)過二十年的發(fā)展,已經(jīng)成為與影視、音樂等并駕齊驅(qū)的全球最重要的娛樂產(chǎn)業(yè)之一,其年銷售額超過好萊塢的全年收入。互聯(lián)網(wǎng)的出現(xiàn)為電腦游戲行業(yè)發(fā)展注入了新的活力,憑借
17、信息雙向交流、速度快、不受空間限制等優(yōu)勢(shì),讓真人參與游戲,提高了游戲的互動(dòng)性、仿真性和競(jìng)技性,使玩家在虛擬世界里可以發(fā)揮現(xiàn)實(shí)世界無法展現(xiàn)的潛能,改變了單機(jī)版游戲固定、呆板、與機(jī)器對(duì)話的狀況。網(wǎng)絡(luò)游戲的這些優(yōu)勢(shì)不僅使其在電腦游戲行業(yè)中異軍突起并在某種程度上取代了單機(jī)版游戲,而且成為網(wǎng)絡(luò)業(yè)三大(網(wǎng)上金融、網(wǎng)上教育和網(wǎng)絡(luò)游戲)贏利且利潤(rùn)優(yōu)厚的領(lǐng)域之一。</p><p> 網(wǎng)絡(luò)作為一種新興的傳播方式,主要包括三大內(nèi)容:
18、娛樂、資訊、通訊。提到網(wǎng)絡(luò)娛樂,過去主要指的是單機(jī)版游戲,沒有引入網(wǎng)絡(luò)的概念[2]但隨著科技的發(fā)展,游戲娛樂產(chǎn)業(yè)也在成長(zhǎng)[3]目前,國(guó)內(nèi)的游戲娛樂產(chǎn)業(yè)正處于起步階段,特點(diǎn)表現(xiàn)為:第一,它是一種文化的傳播。娛樂產(chǎn)業(yè)可以潛移默化地改變?nèi)说挠^念,當(dāng)前,很多多媒體的播放已被電腦網(wǎng)絡(luò)所取代[4]。第二,網(wǎng)絡(luò)游戲加強(qiáng)了人與人的溝通。第三,網(wǎng)絡(luò)游戲具有一定的教育意義[5]。網(wǎng)絡(luò)游戲所具有的角色扮演的功能,使得玩家能通過互助更好地完成游戲中的各項(xiàng)任務(wù)。
19、網(wǎng)絡(luò)無國(guó)界,游戲在網(wǎng)絡(luò)文化產(chǎn)業(yè)世界的發(fā)展中地位會(huì)越來越高。</p><p> 目前在國(guó)外,休閑游戲如棋類等,玩家的年齡跨度非常大,這和我國(guó)目前網(wǎng)游市場(chǎng)以青少年為主要消費(fèi)人群的狀況截然不同[7]。其實(shí),網(wǎng)絡(luò)可以解決空間的問題,網(wǎng)絡(luò)和生活越來越息息相關(guān),因此,開辟適合各個(gè)年齡層的游戲產(chǎn)品迫在眉睫。同時(shí),這也涉及到一個(gè)企業(yè)開發(fā)的能力。娛樂產(chǎn)業(yè)發(fā)展到一定程度,通過不斷鍛煉和經(jīng)驗(yàn)的積累,完全可以通過融入娛樂的成分把教條的
20、東西深入淺出地展現(xiàn)給消費(fèi)者 。</p><p> 就國(guó)內(nèi)的發(fā)展來看,最近這兩三年內(nèi)國(guó)內(nèi)的游戲公司如雨后春筍般的成立,所開發(fā)或代理的網(wǎng)絡(luò)游戲更是不勝枚舉。以全球游戲業(yè)界的發(fā)展來看,這幾年韓國(guó)的表現(xiàn)最為突出,特別是在網(wǎng)絡(luò)游戲的技術(shù)研發(fā)興游戲制作,其所發(fā)行的網(wǎng)絡(luò)游戲更成為全球游戲產(chǎn)業(yè)重要的指標(biāo)之一。去年在美國(guó)洛杉磯所舉行的 E3(Electronic Entertainment Exposition)展中,已經(jīng)有幾家
21、的韓國(guó)廠商擠入世界第一線的游戲開發(fā)廠商之列。</p><p> 近幾年來,由于 3D 硬體繪圖技術(shù)的突破,使得即時(shí)描繪的書面越來越精致,而且3D遊戲性更多元化更逼近真實(shí)世界,因此在遊戲產(chǎn)業(yè)中,3D 游戲已經(jīng)逐漸取代2D游戲?yàn)橛螒蚴袌?chǎng)的主流,即使是網(wǎng)絡(luò)游戲,也慢慢趨向3D化。然而游戲3D化將會(huì)帶來的游戲開發(fā)上的困難等問題,這些問題以后都需要逐步解決。 </p><p> 1.3 研究?jī)?nèi)容
22、與目標(biāo)</p><p><b> 實(shí)驗(yàn)要求如下:</b></p><p> (1) 玩家能通過局域網(wǎng)進(jìn)行局域網(wǎng)對(duì)戰(zhàn)。</p><p> (2) 實(shí)現(xiàn)游戲員的網(wǎng)絡(luò)對(duì)話。</p><p> (3) 游戲規(guī)則:在棋盤上的行、列、對(duì)角線上連續(xù)放五個(gè)旗子的一方獲勝。</p><p> 本程序旨在用
23、C#語言實(shí)現(xiàn)一個(gè)基于.NET架構(gòu)的C/S模式的五子棋局域網(wǎng)對(duì)戰(zhàn)游戲,玩家作為客戶端通過服務(wù)器端與其它玩家進(jìn)行對(duì)戰(zhàn),聊天等功能。界面使用VS2008 WindowForm窗體實(shí)現(xiàn),界面美觀,操作簡(jiǎn)單,可行性強(qiáng)。</p><p><b> 2.相關(guān)理論與技術(shù)</b></p><p><b> 2.1五子棋簡(jiǎn)介</b></p><
24、;p><b> (1)棋盤,棋子:</b></p><p> 1、棋盤為十五路,正中一點(diǎn)為“天元”,周圍四點(diǎn)為小星。</p><p> 2、棋子分黑白兩色,黑子113枚,白子112枚,共225枚。</p><p><b> (2)比賽規(guī)則:</b></p><p> 1、黑先白后,從
25、棋盤任意位置開始落子。然后執(zhí)白棋的一方在黑棋周圍的交叉點(diǎn)上落子。以此類推,黑白交替落子。</p><p> 2、最先在橫向,豎向,斜向形成連續(xù)的相同色五個(gè)棋子的一方為勝。</p><p> 本文所論述的聯(lián)機(jī)五子棋系統(tǒng)就是依照這種方式進(jìn)行的。</p><p><b> 2.2相關(guān)技術(shù)簡(jiǎn)介</b></p><p>
26、2.2.1 C/S體系結(jié)構(gòu)</p><p> C/S 結(jié)構(gòu),即大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。</p><p> ?。–lient/Server或客戶/服務(wù)器模式):Client和Server常常分別處在相距很遠(yuǎn)的兩臺(tái)計(jì)算機(jī)上,Client程序的任務(wù)是將用
27、戶的要求提交給Server程序,再將Server程序返回的結(jié)果以特定的形式顯示給用戶;Server程序的任務(wù)是接收客戶程序提出的服務(wù)請(qǐng)求,進(jìn)行相應(yīng)的處理,再將結(jié)果返回給客戶程序。</p><p> C/S 結(jié)構(gòu)的基本原則是將計(jì)算機(jī)應(yīng)用任務(wù)分解成多個(gè)子任務(wù),由多臺(tái)計(jì)算機(jī)分工完成,即采用“功能分布”原則。客戶端完成數(shù)據(jù)處理,數(shù)據(jù)表示以及用戶接口功能;服務(wù)器端完成DBMS的核心功能。這種客戶請(qǐng)求服務(wù)、服務(wù)器提供服務(wù)的
28、處理方式是一種新型的計(jì)算機(jī)應(yīng)用模式。</p><p> C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。</p><p> C/S編程模式概括如下:</p><p><b> 服務(wù)器端:</b></p><p> 打開通信道路,告訴本地機(jī)
29、器,愿意在該通道上接受客戶請(qǐng)求——監(jiān)聽,等待客戶請(qǐng)求——接受請(qǐng)求,創(chuàng)建專用鏈接進(jìn)行讀寫——處理完畢,關(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簡(jiǎn)介<
30、;/p><p> Socket 代表了一種文件描述符;這個(gè)描述符則是用于網(wǎng)絡(luò)訪問的。其實(shí),Socket可以象流Stream一樣被視為一個(gè)數(shù)據(jù)通道,這個(gè)通道架設(shè)在應(yīng)用程序端(客戶端)和遠(yuǎn)程服務(wù)器端之間,而后,數(shù)據(jù)的讀?。ń邮埽┖蛯懭耄òl(fā)送)均針對(duì)這個(gè)通道來進(jìn)行。在應(yīng)用程序端或者服務(wù)器端創(chuàng)建了Socket對(duì)象之后,就可以使用Send/SendTo方法將數(shù)據(jù)發(fā)送到連接的Socket,或者使用Receive/Receive
31、 From方法接受來自連接Socket的數(shù)據(jù)。</p><p> Socket通訊方式:</p><p> 同步:客戶端在發(fā)送請(qǐng)求之后必須等到服務(wù)器回應(yīng)之后才可以發(fā)送系一條請(qǐng)求。串行運(yùn)行。</p><p> 異步:客戶端請(qǐng)求之后,不必等到服務(wù)器回應(yīng)之后就可以發(fā)送下一條請(qǐng)求。并行運(yùn)行。</p><p> 用Socket訪問網(wǎng)絡(luò)的基本步驟
32、:</p><p><b> a.建立一個(gè)套接字</b></p><p> b.綁定本機(jī)的IP和端口</p><p> c.如果是TCP,因?yàn)槭敲嫦蜻B接的,所以要利用ListenO()方法來監(jiān)聽網(wǎng)絡(luò)上是否有人給自己發(fā)東西;如果是UDP,因?yàn)槭菬o連接的,所以來這不拒。</p><p> d.TCP情況下,如果監(jiān)聽到
33、一個(gè)連接,就可以使用accept來接受這個(gè)連接,然后就可以利用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ù)請(qǐng)求</b></p><p><b> /應(yīng)答</b></p><p> 面向連接的套接字系統(tǒng)調(diào)
35、用時(shí)序</p><p> 服務(wù)器/客戶方 服務(wù)器/客戶方</p><p><b> 數(shù)據(jù)報(bào)文</b></p><p> 無連接的套接字系統(tǒng)調(diào)用時(shí)序</p><p> 2.2.3 面向?qū)ο蟮睦碚撝R(shí)</p><p> 面向?qū)ο?/p>
36、方法是一種運(yùn)用對(duì)象,類,封裝,繼承,多態(tài)和消息等概念來構(gòu)造,測(cè)試,重構(gòu)軟件的方法。</p><p> 面向?qū)ο蠓椒ㄊ且环N以知識(shí)為基礎(chǔ),用對(duì)象來理解和分析問題空間,并設(shè)計(jì)和開發(fā)出由對(duì)象構(gòu)成的軟件系統(tǒng)(解空間)的方法。由于問題空間和解空間都是由對(duì)象組成的,這樣可以消除由于問題空間和加空間結(jié)構(gòu)上的不一致帶來的問題。簡(jiǎn)言之,面向?qū)ο缶褪敲嫦蚴挛锉旧?,面向?qū)ο蟮姆治龉懦蔷褪钦J(rèn)識(shí)客觀世界的過程。面向?qū)ο蠓椒◤膹膶?duì)象出發(fā),發(fā)
37、展出對(duì)象,類,消息,繼承等概念。</p><p> 面向?qū)ο蟮闹饕獌?yōu)點(diǎn)是:符合人們通常的思維方式;從分析到設(shè)計(jì)再到編碼采用一致的模型表示具有高度連續(xù)性;軟件重用性好。</p><p> 2.2.4 C#.NET 相關(guān)知識(shí)介紹</p><p> C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.NET Framework之上的高級(jí)程序設(shè)計(jì)語言。C#是一種安全的、穩(wěn)定的
38、、簡(jiǎn)單的、優(yōu)雅的,由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言。它在繼承C和C++強(qiáng)大功能的同時(shí)去掉了一些它們的復(fù)雜特性(例如沒有宏以及不允許多重繼承)。C#綜合了VB簡(jiǎn)單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。</p><p> 本次設(shè)計(jì)是用C#.NET完成的,采用的是windows窗體應(yīng)用程序來實(shí)現(xiàn)圖形界面功能的,
39、本設(shè)計(jì)主要用到的,一些控件有:ImageList,MenuStrip,button,textbox,label,等一些簡(jiǎn)單的控件。用到的主要技術(shù)就是Socket通訊,以及多線程編程。下面簡(jiǎn)單的介紹一下這些知識(shí)。</p><p> ImageList 控件包含ListImage對(duì)象的集合,該集合中的每個(gè)對(duì)象都可以通過其索引或關(guān)鍵字被引用。ImageList控件不能獨(dú)立使用,只是作為一個(gè)便于向其它控件提供圖象的資料
40、中心。ImageList控件的作用象圖像的儲(chǔ)藏室,同時(shí),它需要第二個(gè)控件顯示所儲(chǔ)存的圖像。第二個(gè)控件可以是任何能顯示圖像 Picture 對(duì)象的控件,也可以是特別設(shè)計(jì)的、用于綁定 ImageList 控件的 Windows 通用控件之一。本程序中在Label,PictureBox中調(diào)用了ImageList中的圖像。</p><p> MenuStrip 控件是 Visual Studio
41、 和 .NET Framework 中的功能。使用該控件,可以輕松創(chuàng)建 Microsoft Office 中那樣的菜單。MenuStrip 控件支持多文檔界面 (MDI)和菜單合并、工具提示和溢出。您可以通過添加訪問鍵、快捷鍵、選中標(biāo)記、圖像和分隔條,來增強(qiáng)菜單的可用性和可讀性。MenuStrip 控件取代了 MainMenu 控件并向其中添加了功能;但是也可選擇保留 MainMenu 控件以備向后兼容和將來使用。</p>
42、<p> 3.系統(tǒng)的分析與設(shè)計(jì)</p><p><b> 3.1需求分析</b></p><p> ?。?)滿足游戲雙方記錄的游戲動(dòng)作的基本要求。</p><p> ?。?)滿足對(duì)戰(zhàn)雙方及時(shí)通訊的基本要求。</p><p> ?。?)滿足游戲雙方及時(shí)顯示游戲狀態(tài)的基本要求。</p><
43、p> ?。?)在服務(wù)器端分析雙方是否勝利。</p><p><b> 3.2 功能分析</b></p><p> 基于系統(tǒng)需求分析,該系統(tǒng)需要實(shí)現(xiàn)以下基本功能:</p><p> ?。?)棋盤繪制:在游戲加載時(shí),即時(shí)顯示棋盤</p><p> ?。?)對(duì)連接到客戶端數(shù)據(jù)的基本要求:能夠?qū)⒁l(fā)送的聊天記錄發(fā)送至對(duì)
44、方手上,能夠完成即時(shí)通訊。</p><p> (3)實(shí)時(shí)顯示:當(dāng)從游戲一方將數(shù)據(jù)傳入另一方系統(tǒng)中,將五子棋的表格進(jìn)行重新的刷新,和更改。</p><p> (4)通過控制鼠標(biāo)點(diǎn)擊五子棋表格:觸發(fā)事件,把該動(dòng)作發(fā)送到游戲另一方,并判斷是否勝利。</p><p><b> 3.3運(yùn)行環(huán)境</b></p><p> 系
45、統(tǒng)運(yùn)行環(huán)境:WindowsXP及以后版本</p><p> 開發(fā)環(huán)境:VS2008</p><p><b> 4.系統(tǒng)的實(shí)現(xiàn)</b></p><p><b> 4.1概要設(shè)計(jì)</b></p><p> 本次畢業(yè)設(shè)計(jì)的內(nèi)容主要是利用Socket實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋,首先先要繪制出棋盤,然后實(shí)
46、現(xiàn)Socket通訊(連接,聊天等功能),然后實(shí)現(xiàn)下棋功能,下棋這部分功能的實(shí)現(xiàn)根據(jù)Socket通訊傳遞的信息流控制雙方該誰下棋;再通過傳遞過來的消息觸發(fā)事件從而實(shí)現(xiàn)對(duì)戰(zhàn)雙方的同步顯示;每走一步棋子,都要利用一個(gè)算法來判斷一下有沒有出現(xiàn)五個(gè)相同棋子連到一起的情況,及是否有人贏棋,這個(gè)算法要分兩種情況,一種是黑棋,另一種是白棋,如果剛落下的棋子是黑棋,那么就要在整個(gè)棋盤上通過上下,左右,以及斜上,斜下,這幾個(gè)方向來尋找看看有沒有五子連在一起
47、的情況,如果有的話,那么黑棋勝,游戲結(jié)束;如果剛落下的是白棋的話,用同樣的方法判斷。</p><p> 對(duì)戰(zhàn)方1 對(duì)戰(zhàn)方2</p><p><b> 4.2流程圖</b></p><p> 下面用我們用數(shù)據(jù)流圖(DFD, Data Flow Diagram),也就是從數(shù)
48、據(jù)傳遞和加工的角度,以圖形的方式刻畫數(shù)據(jù)流從輸入到輸出的移動(dòng)變換過程。如下圖所示:</p><p><b> 等待連接</b></p><p><b> 連接至對(duì)方的服務(wù)端</b></p><p><b> 可以進(jìn)行及時(shí)通訊</b></p><p><b>
49、等待輪到自己下棋</b></p><p> 將信息傳遞到對(duì)方的棋盤上</p><p><b> 更新勝負(fù)記錄</b></p><p><b> 4.3程序詳細(xì)設(shè)計(jì)</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("黑子贏了!!請(qǐng)按重新開始!");</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("白子贏了!!請(qǐng)按重新開始!");</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個(gè)相同的棋子想連</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個(gè)相同的棋子想連</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個(gè)相同的棋子想連</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個(gè)相同的棋子想連</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個(gè)相同的棋子想
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個(gè)相同的棋子想連</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個(gè)相同的棋子想連</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è)計(jì)過程中,出現(xiàn)過不同的問題,開始的時(shí)候解決起來有一些困難,經(jīng)過兩個(gè)月的不斷學(xué)習(xí)和實(shí)踐,基本上都已經(jīng)解決,而且通過解決問題的過程,自己的知識(shí)在一天天增長(zhǎng),對(duì)無網(wǎng)絡(luò)編程了解的越來越多,基本掌握了Socket通信機(jī)制。通過這個(gè)網(wǎng)絡(luò)游
136、戲的開發(fā)過程,我深深的體會(huì)到一個(gè)軟件的完成需要注意的東西很多,并不像想象中的那么簡(jiǎn)單,我們要有充分的知識(shí)儲(chǔ)備才可以完成一款完美軟件,即便是再小的程序、游戲,都需要很多的知識(shí),一切都離不開基礎(chǔ)。</p><p> 這次對(duì)局域網(wǎng)五子棋對(duì)戰(zhàn)游戲的開發(fā)讓我用到了之前學(xué)過的大部分知識(shí),如C#可視化程序、操作系統(tǒng)、還有計(jì)算機(jī)網(wǎng)絡(luò)等知識(shí)。更進(jìn)一步加深了我對(duì)這些知識(shí)的了解,以及在實(shí)踐中熟練運(yùn)用。</p><
137、p><b> 致謝</b></p><p> 最后,我要感謝在這段時(shí)間內(nèi)對(duì)我的工作進(jìn)行指導(dǎo)的王超老師,王老師不辭辛苦地指導(dǎo),使我得以順利完成畢業(yè)設(shè)計(jì);使我對(duì)網(wǎng)絡(luò)游戲和計(jì)算機(jī)網(wǎng)絡(luò)編程的認(rèn)識(shí)更加深刻。在程序的設(shè)計(jì)過程中遇到困難的時(shí)候,王老師及時(shí)的給了我建議與支持,使得我能夠不斷地克服困難,并在規(guī)定的時(shí)間內(nèi)完成各項(xiàng)任務(wù)。</p><p> 本論文也是在王老師的悉
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件工程畢業(yè)論文-五子棋對(duì)戰(zhàn)游戲平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-網(wǎng)絡(luò)五子棋的設(shè)計(jì)與實(shí)現(xiàn)
- 網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋
- 網(wǎng)絡(luò)五子棋的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文
- 網(wǎng)絡(luò)五子棋五子棋設(shè)計(jì)與實(shí)現(xiàn).doc
- qt網(wǎng)絡(luò)五子棋五子棋設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-基于vc++的五子棋程序設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文---網(wǎng)絡(luò)五子棋游戲設(shè)計(jì)
- 五子棋畢業(yè)論文-html開發(fā)五子棋的原型設(shè)計(jì)
- 五子棋對(duì)戰(zhàn)游戲
- 五子棋畢業(yè)論文
- 畢業(yè)設(shè)計(jì)-- 用java實(shí)現(xiàn)五子棋網(wǎng)絡(luò)對(duì)戰(zhàn)系統(tǒng)
- 五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)論文】
- 五子棋游戲設(shè)計(jì)畢業(yè)論文
- 軟件工程畢業(yè)設(shè)計(jì)(論文)-基于android的五子棋游戲設(shè)計(jì)
- 畢業(yè)論文——五子棋游戲設(shè)計(jì)
- 五子棋游戲軟件工程課程設(shè)計(jì)
- java課程設(shè)計(jì)--對(duì)戰(zhàn)五子棋
- 五子棋人機(jī)對(duì)戰(zhàn)系統(tǒng)設(shè)計(jì).pdf
- 五子棋手機(jī)網(wǎng)絡(luò)對(duì)戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)——畢業(yè)論文
評(píng)論
0/150
提交評(píng)論