版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本科畢業(yè)論文(設(shè)計(jì))題目:網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋學(xué)院:專業(yè)班級(jí):學(xué)號(hào):學(xué)生姓名:指導(dǎo)教師姓名:指導(dǎo)教師職稱:年月日摘要五子棋游戲以其優(yōu)秀的人工智能深受廣大玩家的喜愛,而對(duì)于初步探究網(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ì)算,得出玩家是否獲得勝利.,因此玩家就能反復(fù)的進(jìn)行聯(lián)機(jī)游戲。本文論述了采用聯(lián)機(jī)對(duì)戰(zhàn)的方式體現(xiàn)出五子棋程序的分析與設(shè)計(jì),并采用面向?qū)ο蟮拈_發(fā)工具C#來具體實(shí)現(xiàn)。關(guān)鍵字:Socket
;C/S;五子棋;網(wǎng)絡(luò)對(duì)弈;C#AbstractGobanggamewithexcellentartificialintelligencebythevastnumberofplayerswho,fortheinitialresearchnetworkorganizationprogrammingenthusiasts,Gobangproceduresforthepreparationoftherulessimpleandpopular,butitrequiresprogrammertoGobanggamehasadeepunderstandingoftherules.OtherthoughtfulconsiderationtheytreattheirGobanggameproceduresmorewisdom.Gobanggamesoftwaredesignisthemaincontent:AccordingGobangbasicrulestoknoweachother'scustomers-inviolationoftheWest,wemustunderPermiansituation,andtheboardpawnre-mappingmapping,thatisupdatingthepointposition,andthenthroughthemonitoringnetworknewsuntilthenewlocationontheboardwhatposition,Followingchanges,andthroughthecalculation,resultinginplayersisvictory.,theon-linegameplayerscanrepeatedly.Thisarticlediscussestheuseofon-linewayreflectthoseGobangproceduresanalysisanddesign,object-orienteddevelopmenttoolsandtheadoptionofspecificC#toachieve.KeyWords:Socket;
C/S;
Gobang;
play
chess
on
network,C#目錄TOC\o"1-3"\h\u79261緒論 594111.1選題背景和意義 5105311.2國內(nèi)外研究現(xiàn)狀和發(fā)展趨勢(shì) 539941.3研究?jī)?nèi)容與目標(biāo) 688662相關(guān)理論與技術(shù) 7293632.1五子棋簡(jiǎn)介 745272.2相關(guān)技術(shù)簡(jiǎn)介 7182062.2.1C/S體系結(jié)構(gòu) 7286342.2.2SOCKET簡(jiǎn)介 8223572.2.3面向?qū)ο蟮睦碚撝R(shí) 10223572.2.4C#.NET相關(guān)知識(shí)介紹 10229203系統(tǒng)的分析與設(shè)計(jì) 11203453.1需求分析 11296213.2功能分析 11168383.3運(yùn)行環(huán)境 121184系統(tǒng)的實(shí)現(xiàn) 12323024.1概要設(shè)計(jì) 12162894.2流程圖 13232324.3程序詳細(xì)設(shè)計(jì) 1456555總結(jié) 3121058致謝 316635參考文獻(xiàn) 321緒論1.1選題背景和意義五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一。現(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(FiveinaRow的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。
五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂見,又有深?yuàn)W的技巧和高水平的國際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。
五子棋起源于古代中國,發(fā)展于日本,風(fēng)靡于歐洲。對(duì)于它與圍棋的關(guān)系有兩種說法,一說早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個(gè)分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同,縱橫各十七道。五子棋大約隨圍棋一起在我國南北朝時(shí)先后傳入朝鮮、日本等地。據(jù)日本史料文獻(xiàn)介紹,中國古代的五子棋是經(jīng)由高麗(朝鮮),于1688年至1704年的日本元祿時(shí)代傳到日本的。到日本明治32年(公元1899年),經(jīng)過公開征名,“連珠”這一名稱才被正式確定下來,取意于“日月如合壁,五星如連珠”。從此,連珠活動(dòng)經(jīng)過了不斷的改良,主要是規(guī)則的變化(即對(duì)執(zhí)黑棋一方的限制),例如,1899年規(guī)定,禁止黑白雙方走“雙三”;1903年規(guī)定,只禁止黑方走“雙三”;1912年規(guī)定,黑方被迫走“雙三”亦算輸;1916年規(guī)定,黑方不許走“長(zhǎng)連”;1918年規(guī)定,黑方不許走“四、三、三”;1931年規(guī)定,黑方不許走“雙四”,并規(guī)定將19×19的圍棋盤改為15×15的連珠專用棋盤。本世紀(jì)初五子棋傳入歐洲并迅速風(fēng)靡全歐。通過一系列的變化,使五子棋這一簡(jiǎn)單的游戲復(fù)雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋,同時(shí)也成為一種國際比賽棋。1.2國內(nèi)外研究現(xiàn)狀和發(fā)展趨勢(shì)電腦游戲行業(yè)經(jīng)過二十年的發(fā)展,已經(jīng)成為與影視、音樂等并駕齊驅(qū)的全球最重要的娛樂產(chǎn)業(yè)之一,其年銷售額超過好萊塢的全年收入?;ヂ?lián)網(wǎng)的出現(xiàn)為電腦游戲行業(yè)發(fā)展注入了新的活力,憑借信息雙向交流、速度快、不受空間限制等優(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)域之一。網(wǎng)絡(luò)作為一種新興的傳播方式,主要包括三大內(nèi)容:娛樂、資訊、通訊。提到網(wǎng)絡(luò)娛樂,過去主要指的是單機(jī)版游戲,沒有引入網(wǎng)絡(luò)的概念[2]但隨著科技的發(fā)展,游戲娛樂產(chǎn)業(yè)也在成長(zhǎng)[3]目前,國內(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ù)。網(wǎng)絡(luò)無國界,游戲在網(wǎng)絡(luò)文化產(chǎn)業(yè)世界的發(fā)展中地位會(huì)越來越高。目前在國外,休閑游戲如棋類等,玩家的年齡跨度非常大,這和我國目前網(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)的積累,完全可以通過融入娛樂的成分把教條的東西深入淺出地展現(xiàn)給消費(fèi)者。就國內(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è)重要的指標(biāo)之一。去年在美國洛杉磯所舉行的E3(ElectronicEntertainmentExposition)展中,已經(jīng)有幾家的韓國廠商擠入世界第一線的游戲開發(fā)廠商之列。
近幾年來,由于3D硬體繪圖技術(shù)的突破,使得即時(shí)描繪的書面越來越精致,而且3D遊戲性更多元化更逼近真實(shí)世界,因此在遊戲產(chǎn)業(yè)中,3D游戲已經(jīng)逐漸取代2D游戲?yàn)橛螒蚴袌?chǎng)的主流,即使是網(wǎng)絡(luò)游戲,也慢慢趨向3D化。然而游戲3D化將會(huì)帶來的游戲開發(fā)上的困難等問題,這些問題以后都需要逐步解決。1.3研究?jī)?nèi)容與目標(biāo)實(shí)驗(yàn)要求如下:(1)玩家能通過局域網(wǎng)進(jìn)行局域網(wǎng)對(duì)戰(zhàn)。(2)實(shí)現(xiàn)游戲員的網(wǎng)絡(luò)對(duì)話。(3)游戲規(guī)則:在棋盤上的行、列、對(duì)角線上連續(xù)放五個(gè)旗子的一方獲勝。本程序旨在用C#語言實(shí)現(xiàn)一個(gè)基于.NET架構(gòu)的C/S模式的五子棋局域網(wǎng)對(duì)戰(zhàn)游戲,玩家作為客戶端通過服務(wù)器端與其它玩家進(jìn)行對(duì)戰(zhàn),聊天等功能。界面使用VS2008WindowForm窗體實(shí)現(xiàn),界面美觀,操作簡(jiǎn)單,可行性強(qiáng)。2.相關(guān)理論與技術(shù)2.1五子棋簡(jiǎn)介(1)棋盤,棋子:1、棋盤為十五路,正中一點(diǎn)為“天元”,周圍四點(diǎn)為小星。2、棋子分黑白兩色,黑子113枚,白子112枚,共225枚。(2)比賽規(guī)則:1、黑先白后,從棋盤任意位置開始落子。然后執(zhí)白棋的一方在黑棋周圍的交叉點(diǎn)上落子。以此類推,黑白交替落子。2、最先在橫向,豎向,斜向形成連續(xù)的相同色五個(gè)棋子的一方為勝。本文所論述的聯(lián)機(jī)五子棋系統(tǒng)就是依照這種方式進(jìn)行的。2.2相關(guān)技術(shù)簡(jiǎn)介2.2.1C/S體系結(jié)構(gòu)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)的通訊開銷。(Client/Server或客戶/服務(wù)器模式):Client和Server常常分別處在相距很遠(yuǎn)的兩臺(tái)計(jì)算機(jī)上,Client程序的任務(wù)是將用戶的要求提交給Server程序,再將Server程序返回的結(jié)果以特定的形式顯示給用戶;Server程序的任務(wù)是接收客戶程序提出的服務(wù)請(qǐng)求,進(jìn)行相應(yīng)的處理,再將結(jié)果返回給客戶程序。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ù)的處理方式是一種新型的計(jì)算機(jī)應(yīng)用模式。C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。C/S編程模式概括如下:服務(wù)器端:打開通信道路,告訴本地機(jī)器,愿意在該通道上接受客戶請(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))。客戶端:打開通訊道路,鏈接服務(wù)器——數(shù)據(jù)交互“-關(guān)閉信道。2.2.2SOCKET簡(jiǎn)介Socket代表了一種文件描述符;這個(gè)描述符則是用于網(wǎng)絡(luò)訪問的。其實(shí),Socket可以象流Stream一樣被視為一個(gè)數(shù)據(jù)通道,這個(gè)通道架設(shè)在應(yīng)用程序端(客戶端)和遠(yuǎn)程服務(wù)器端之間,而后,數(shù)據(jù)的讀取(接受)和寫入(發(fā)送)均針對(duì)這個(gè)通道來進(jìn)行。在應(yīng)用程序端或者服務(wù)器端創(chuàng)建了Socket對(duì)象之后,就可以使用Send/SendTo方法將數(shù)據(jù)發(fā)送到連接的Socket,或者使用Receive/ReceiveFrom方法接受來自連接Socket的數(shù)據(jù)。Socket通訊方式:同步:客戶端在發(fā)送請(qǐng)求之后必須等到服務(wù)器回應(yīng)之后才可以發(fā)送系一條請(qǐng)求。串行運(yùn)行。異步:客戶端請(qǐng)求之后,不必等到服務(wù)器回應(yīng)之后就可以發(fā)送下一條請(qǐng)求。并行運(yùn)行。用Socket訪問網(wǎng)絡(luò)的基本步驟:a.建立一個(gè)套接字b.綁定本機(jī)的IP和端口c.如果是TCP,因?yàn)槭敲嫦蜻B接的,所以要利用ListenO()方法來監(jiān)聽網(wǎng)絡(luò)上是否有人給自己發(fā)東西;如果是UDP,因?yàn)槭菬o連接的,所以來這不拒。d.TCP情況下,如果監(jiān)聽到一個(gè)連接,就可以使用accept來接受這個(gè)連接,然后就可以利用Send/Receive來執(zhí)行操作了。而UDP,則不需要accept,直接用SendTo/ReceiveFrom來執(zhí)行操作。e.如果你不想繼續(xù)發(fā)送和接受了,就可以使用close來關(guān)閉連接在TCP/IP網(wǎng)絡(luò)中,IP網(wǎng)絡(luò)交互分類兩大類:面向連接的交互和面向唔連接的交互。Socket面向兩種連接的通訊圖如下:Socket()建立流式套接字,返回套接字號(hào)s服務(wù)器方Socket()建立流式套接字,返回套接字號(hào)sBind(),將套接字s與本地地址相連Bind(),將套接字s與本地地址相連Socket(),建立流式套接字,返回套接字號(hào)sListen(),通知TCP,服務(wù)器準(zhǔn)備好接受連接Socket(),建立流式套接字,返回套接字號(hào)sListen(),通知TCP,服務(wù)器準(zhǔn)備好接受連接accept(),接受連接,它等待客戶的連接accept(),接受連接,它等待客戶的連接Connect(),將套接字s與遠(yuǎn)地主機(jī)連接連接建立,accept()返回,得到新的數(shù)據(jù)套接字,如nsConnect(),將套接字s與遠(yuǎn)地主機(jī)連接連接建立,accept()返回,得到新的數(shù)據(jù)套接字,如ns建立連接Send()/recv(),在套接字s上寫/讀數(shù)據(jù),直到數(shù)據(jù)交換完Recv()/send(),在套接字ns上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完服務(wù)請(qǐng)求Send()/recv(),在套接字s上寫/讀數(shù)據(jù),直到數(shù)據(jù)交換完Recv()/send(),在套接字ns上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完/應(yīng)答Closesocket(),關(guān)閉套接字s,結(jié)束TCP對(duì)話Closesocket(),關(guān)閉套接字nsClosesocket(),關(guān)閉套接字s,結(jié)束TCP對(duì)話Closesocket(),關(guān)閉套接字nsClosesocket(),關(guān)閉最初套接字s,服務(wù)結(jié)束Closesocket(),關(guān)閉最初套接字s,服務(wù)結(jié)束面向連接的套接字系統(tǒng)調(diào)用時(shí)序服務(wù)器/客戶方服務(wù)器/客戶方Socket()建立流式套接字,返回套接字sSocket()建立流式套接字,返回套接字sSocket()建立流式套接字,返回套接字sSocket()建立流式套接字,返回套接字sBind()將套接字s與本地地址綁定Bind()將套接字s與本地地址綁定Bind()將套接字s與本地地址綁定Bind()將套接字s與本地地址綁定ReceiveFrom/SendTo(),通過套接字s收發(fā)報(bào)文ReceiveFrom/SendTo(),通過套接字s收發(fā)報(bào)文ReceiveFrom/SendTo(),通過套接字s收發(fā)報(bào)文ReceiveFrom/SendTo(),通過套接字s收發(fā)報(bào)文數(shù)據(jù)報(bào)文Closescoket(),關(guān)閉最初套接字,服務(wù)結(jié)束Closesocket(),關(guān)閉最初套接字s,服務(wù)結(jié)束Closescoket(),關(guān)閉最初套接字,服務(wù)結(jié)束Closesocket(),關(guān)閉最初套接字s,服務(wù)結(jié)束無連接的套接字系統(tǒng)調(diào)用時(shí)序2.2.3面向?qū)ο蟮睦碚撝R(shí)面向?qū)ο蠓椒ㄊ且环N運(yùn)用對(duì)象,類,封裝,繼承,多態(tài)和消息等概念來構(gòu)造,測(cè)試,重構(gòu)軟件的方法。面向?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ā)展出對(duì)象,類,消息,繼承等概念。面向?qū)ο蟮闹饕獌?yōu)點(diǎn)是:符合人們通常的思維方式;從分析到設(shè)計(jì)再到編碼采用一致的模型表示具有高度連續(xù)性;軟件重用性好。2.2.4C#.NET相關(guān)知識(shí)介紹C#是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\(yùn)行于.NETFramework之上的高級(jí)程序設(shè)計(jì)語言。C#是一種安全的、穩(wěn)定的、簡(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ā)的首選語言。本次設(shè)計(jì)是用C#.NET完成的,采用的是windows窗體應(yīng)用程序來實(shí)現(xiàn)圖形界面功能的,本設(shè)計(jì)主要用到的,一些控件有:ImageList,MenuStrip,button,textbox,label,等一些簡(jiǎn)單的控件。用到的主要技術(shù)就是Socket通訊,以及多線程編程。下面簡(jiǎn)單的介紹一下這些知識(shí)。ImageList控件包含ListImage對(duì)象的集合,該集合中的每個(gè)對(duì)象都可以通過其索引或關(guān)鍵字被引用。ImageList控件不能獨(dú)立使用,只是作為一個(gè)便于向其它控件提供圖象的資料中心。ImageList控件的作用象圖像的儲(chǔ)藏室,同時(shí),它需要第二個(gè)控件顯示所儲(chǔ)存的圖像。第二個(gè)控件可以是任何能顯示圖像Picture對(duì)象的控件,也可以是特別設(shè)計(jì)的、用于綁定ImageList控件的Windows通用控件之一。本程序中在Label,PictureBox中調(diào)用了ImageList中的圖像。MenuStrip控件是VisualStudio和.NETFramework中的功能。使用該控件,可以輕松創(chuàng)建MicrosoftOffice中那樣的菜單。MenuStrip控件支持多文檔界面(MDI)和菜單合并、工具提示和溢出。您可以通過添加訪問鍵、快捷鍵、選中標(biāo)記、圖像和分隔條,來增強(qiáng)菜單的可用性和可讀性。MenuStrip控件取代了MainMenu控件并向其中添加了功能;但是也可選擇保留MainMenu控件以備向后兼容和將來使用。3.系統(tǒng)的分析與設(shè)計(jì)3.1需求分析(1)滿足游戲雙方記錄的游戲動(dòng)作的基本要求。(2)滿足對(duì)戰(zhàn)雙方及時(shí)通訊的基本要求。(3)滿足游戲雙方及時(shí)顯示游戲狀態(tài)的基本要求。(4)在服務(wù)器端分析雙方是否勝利。3.2功能分析基于系統(tǒng)需求分析,該系統(tǒng)需要實(shí)現(xiàn)以下基本功能:(1)棋盤繪制:在游戲加載時(shí),即時(shí)顯示棋盤(2)對(duì)連接到客戶端數(shù)據(jù)的基本要求:能夠?qū)⒁l(fā)送的聊天記錄發(fā)送至對(duì)方手上,能夠完成即時(shí)通訊。(3)實(shí)時(shí)顯示:當(dāng)從游戲一方將數(shù)據(jù)傳入另一方系統(tǒng)中,將五子棋的表格進(jìn)行重新的刷新,和更改。(4)通過控制鼠標(biāo)點(diǎn)擊五子棋表格:觸發(fā)事件,把該動(dòng)作發(fā)送到游戲另一方,并判斷是否勝利。3.3運(yùn)行環(huán)境系統(tǒng)運(yùn)行環(huán)境:WindowsXP及以后版本開發(fā)環(huán)境:VS20084.系統(tǒng)的實(shí)現(xiàn)4.1概要設(shè)計(jì)本次畢業(yè)設(shè)計(jì)的內(nèi)容主要是利用Socket實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋,首先先要繪制出棋盤,然后實(shí)現(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è)方向來尋找看看有沒有五子連在一起的情況,如果有的話,那么黑棋勝,游戲結(jié)束;如果剛落下的是白棋的話,用同樣的方法判斷。對(duì)戰(zhàn)方1對(duì)戰(zhàn)方2加載主界面(棋盤,對(duì)話窗口等)加載主界面(棋盤,對(duì)話窗口等)加載主界面(棋盤,對(duì)話窗口等)加載主界面(棋盤,對(duì)話窗口等)輸入對(duì)方IP進(jìn)行連接輸入對(duì)方IP進(jìn)行連接輸入對(duì)方IP進(jìn)行連接輸入對(duì)方IP進(jìn)行連接開始游戲開始游戲通訊對(duì)話開始游戲開始游戲通訊對(duì)話分出勝負(fù)游戲結(jié)束分出勝負(fù)游戲結(jié)束分出勝負(fù)游戲結(jié)束分出勝負(fù)游戲結(jié)束4.2流程圖下面用我們用數(shù)據(jù)流圖(DFD,DataFlowDiagram),也就是從數(shù)據(jù)傳遞和加工的角度,以圖形的方式刻畫數(shù)據(jù)流從輸入到輸出的移動(dòng)變換過程。如下圖所示:準(zhǔn)備(啟動(dòng)服務(wù))開始監(jiān)聽準(zhǔn)備(啟動(dòng)服務(wù))開始監(jiān)聽等待連接開始(建立連接)開始(建立連接)連接至對(duì)方的服務(wù)端等待對(duì)方鏈接自己的服務(wù)端等待對(duì)方鏈接自己的服務(wù)端收到對(duì)方鏈接請(qǐng)求,建立連接收到對(duì)方鏈接請(qǐng)求,建立連接可以進(jìn)行及時(shí)通訊判斷誰先下棋判斷誰先下棋等待輪到自己下棋下棋下棋將信息傳遞到對(duì)方的棋盤上更新,實(shí)現(xiàn)雙方顯示同步更新,實(shí)現(xiàn)雙方顯示同步判斷勝負(fù)判斷勝負(fù)更新勝負(fù)記錄斷開連接重新開始斷開連接重新開始4.3程序詳細(xì)設(shè)計(jì)4.3.1期盼的繪制代碼和圖解usingSystem;usingSystem.Collections.Generic;namespaceWindowsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}publicintBBow=0;int[]a=newint[225];intBCount=0;intBwinCount=0;intWwinCount=0;intk,g,x=15;boolOut=false;publicboolCanAgin,CanAgins,CanDown,WhoFisrtDown;privateSocketlistener;privateThreadmainThread;publicvoidForm1_Load(objectsender,EventArgse){for(inti=0;i<15;i++)//棋盤{for(intj=0;j<15;j++){PictureBoxpictureBox1=newPictureBox();pictureBox1.Location=newSystem.Drawing.Point(i*29+30,j*29+30);pictureBox1.Name="pictureBox"+(i+j*15).ToString();pictureBox1.Size=newSystem.Drawing.Size(30,30);pictureBox1.TabIndex=0;pictureBox1.Image=imageList1.Images[2];pictureBox1.TabStop=false;a[i+j*15]=3;pictureBox1.Click+=newEventHandler(asd);this.Controls.Add(pictureBox1);}}button3.Enabled=false;button6.Visible=false;button1.Enabled=false;label7.Visible=true;label8.Visible=false;CanDown=false;}4.3.2連接服務(wù)器模塊namespaceWindowsApplication1{publicclassClient{//1、連接服務(wù)器//2、發(fā)送消息//3、接收數(shù)據(jù)包privateSocket_client;//跟服務(wù)器連接的socketprivatebool_connected;//socket連接狀態(tài),表示斷開或已經(jīng)連接兩種情況//連接服務(wù)器publicvoidConnectServer(stringip,intport)//指定地址和端口{_client=newSocket(//Socket類構(gòu)造函數(shù)AddressFamily.InterNetwork,//Socket使用的尋址方案IP版本為SocketType.Stream,//連接是基于流套接字的ProtocolType.Tcp);//連接協(xié)議是使用TCP協(xié)議IPEndPointep=newIPEndPoint(IPAddress.Parse(ip),port);//初始化制定的地址和端口_client.Connect(ep);_connected=true;//返回值true}//返回連接狀態(tài)publicboolConnected{get{return_connected;}}//關(guān)閉連接publicvoidCloseConnection(){if(_connected){_client.Close();_connected=false;}}//發(fā)送消息publicvoidSendMessage(stringmessage){byte[]buffer=Encoding.Default.GetBytes(message+"\r\n\r\n");_client.Send(buffer);}}4.3.3判斷先行,先行者添加棋子(程序代碼和圖)publicvoidFirst(){if(WhoFisrtDown==true){MessageBox.Show("先行");}else{MessageBox.Show("后行");}}publicvoidFiDnMessage(objectsender,FiDnMessageEventArgse)//誰先下棋的判斷{if(this.InvokeRequired){this.Invoke(newEventHandler<FiDnMessageEventArgs>(this.FiDnMessage),newobject[]{sender,e});}else{WhoFisrtDown=true;}First();} 4.3.4添加后行者下棋模塊(程序代碼和圖)publicvoidAddChess(objectsender,AddChessEventArgse){if(this.InvokeRequired){this.Invoke(newEventHandler<AddChessEventArgs>(this.AddChess),newobject[]{sender,e});}else{stringname="pictureBox"+e.Number;intnum=Int32.Parse(e.Im);BBow=Int32.Parse(e.Bow);PictureBoxbb=(PictureBox)this.Controls[name];bb.Image=imageList1.Images[num];if(num==0){label7.Visible=false;label8.Visible=true;}elseif(num==1){label7.Visible=true;label8.Visible=false;}bb.Enabled=false;ints=Int32.Parse(e.Number);a[s]=Int32.Parse(e.Im);ChessJudge();}WhoFisrtDown=true;}4.3.5判斷黑白棋輸贏的模塊(程序代碼和圖)//判斷黑棋是否贏publicvoidBwin(){for(g=0;g<225;g++){stringname="pictureBox"+g.ToString();PictureBoxaa=(PictureBox)this.Controls.Find(name,false)[0];aa.Enabled=false;}MessageBox.Show("黑子贏了!!請(qǐng)按重新開始!");BwinCount++;label1.Text="黑勝:"+BwinCount;button3.Visible=false;button6.Visible=true;button6.Enabled=true;CanAgins=false;CanAgin=false;}//判斷白棋是否贏publicvoidWwin(){for(g=0;g<225;g++){stringname="pictureBox"+g.ToString();PictureBoxaa=(PictureBox)this.Controls.Find(name,false)[0];aa.Enabled=false;}MessageBox.Show("白子贏了!!請(qǐng)按重新開始!");WwinCount++;label2.Text="白勝:"+WwinCount;button3.Visible=false;button6.Visible=true;button6.Enabled=true;CanAgins=false;CanAgin=false;}publicvoidChessJudge()//算法{for(k=0;k<225;k++){if(a[k]==0){BCount++;for(intp=1;p<5;p++)//從左往右判斷橫著的黑子是否有5個(gè)相同的棋子想連{if(k+p<((k/15)+1)*x){if(a[k+p]==0){BCount++;}elseif(a[k+p]==1){BCount=0;}}}if(BCount==5){Bwin();return;}else{BCount=0;}}}for(k=0;k<225;k++)//從右往左判斷橫著的黑子是否有5個(gè)相同的棋子想連{if(a[k]==0){BCount++;for(intp=1;p<5;p++){if(k-p>(k/15)*x){if(a[k-p]==0){BCount++;}elseif(a[k-p]==1){BCount=0;}}}if(BCount==5){Bwin();return;}else{BCount=0;}}}for(k=0;k<225;k++)//判斷"豎"著的黑子是否有5個(gè)相同的棋子想連{if(a[k]==0){BCount++;for(intp=1;p<5;p++){if(k+p*15<225){if(a[k+p*15]==0){BCount++;}elseif(a[k+p*15]==1){BCount=0;}}}if(BCount==5){Bwin();return;}else{BCount=0;}}}for(k=0;k<225;k++)//判斷右"斜"上方的黑子是否有5個(gè)相同的棋子想連{if(a[k]==0){BCount++;for(intp=1;p<5;p++){if(k-p*14>0){if(a[k-p*14]==0){BCount++;}elseif(a[k-p*14]==1){BCount=0;}}}if(BCount==5){Bwin();return;}else{BCount=0;}}}for(k=0;k<225;k++)//判斷左"斜"下方的黑子是否有5個(gè)相同的棋子想連{if(a[k]==0){BCount++;for(intp=1;p<5;p++){if(k+p*14<225){if(a[k+p*14]==0){BCount++;}elseif(a[k+p*14]==1){BCount=0;}}}if(BCount==5){Bwin();return;}else{BCount=0;}}}for(k=0;k<225;k++)//判斷左"斜"上方的黑子是否有5個(gè)相同的棋子想連{if(a[k]==0){BCount++;for(intp=1;p<5;p++){if(k-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. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年股權(quán)轉(zhuǎn)讓合同股權(quán)比例與轉(zhuǎn)讓價(jià)格
- 2024建筑水電工程合同書
- 2024年銷售中介服務(wù)條款正式版協(xié)議版B版
- 2025年度新能源發(fā)電項(xiàng)目投資與運(yùn)營管理合同3篇
- 2024年項(xiàng)目股份轉(zhuǎn)移及合作意向合同一
- 2024年舞臺(tái)燈光維修保養(yǎng)協(xié)議版B版
- 2025年倉儲(chǔ)物流安全管理規(guī)范執(zhí)行合同3篇
- 2024年高效農(nóng)業(yè)設(shè)備定制與供應(yīng)合同
- 2025年度食品鋪貨與餐飲行業(yè)合作合同3篇
- 職業(yè)學(xué)院學(xué)生外出活動(dòng)管理規(guī)定
- 《民用爆炸物品安全管理?xiàng)l例》課件
- 移動(dòng)通信室內(nèi)覆蓋工程施工技術(shù)
- 生產(chǎn)組織供應(yīng)能力說明
- DL-T 1476-2023 電力安全工器具預(yù)防性試驗(yàn)規(guī)程
- 通信安全員ABC證報(bào)名考試題庫及答案
- 開放系統(tǒng)10861《理工英語(4)》期末機(jī)考真題及答案(第103套)
- 思想道德與法治測(cè)試三考試附有答案
- 《中華民族大團(tuán)結(jié)》(初中)-第7課-共同創(chuàng)造科學(xué)成就-教案
- 醫(yī)療耗材銷售工作計(jì)劃
- 《短視頻拍攝與制作》課件-3短視頻拍攝的三大技巧
- (高清版)DZT 0399-2022 礦山資源儲(chǔ)量管理規(guī)范
評(píng)論
0/150
提交評(píng)論