網(wǎng)絡對戰(zhàn)五子棋_第1頁
網(wǎng)絡對戰(zhàn)五子棋_第2頁
網(wǎng)絡對戰(zhàn)五子棋_第3頁
網(wǎng)絡對戰(zhàn)五子棋_第4頁
網(wǎng)絡對戰(zhàn)五子棋_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

本科畢業(yè)論文(設計)題目:網(wǎng)絡對戰(zhàn)五子棋學院:專業(yè)班級:學號:學生姓名:指導教師姓名:指導教師職稱:年月日摘要五子棋游戲以其優(yōu)秀的人工智能深受廣大玩家的喜愛,而對于初步探究網(wǎng)絡編成的編程愛好者來說,編制五子棋程序因其規(guī)則簡單而大受歡迎,然而它卻要求程序員對五子棋規(guī)則有相當深入的了解。程序員考慮得越周到,其五子棋程序就越智能。

五子棋游戲軟件設計的主要內(nèi)容是:根據(jù)五子棋的基本規(guī)則,要讓對方客戶端知道該在哪一點下子,就要根據(jù)盤面的形勢,并把棋盤棋子的重新繪制繪制,也就是更新該點的位置,然后再通過監(jiān)聽網(wǎng)絡傳遞的消息,直到新的位置放在棋盤的什么位置上,在進行修改,并通過計算,得出玩家是否獲得勝利.,因此玩家就能反復的進行聯(lián)機游戲。本文論述了采用聯(lián)機對戰(zhàn)的方式體現(xiàn)出五子棋程序的分析與設計,并采用面向對象的開發(fā)工具C#來具體實現(xiàn)。關鍵字:Socket

;C/S;五子棋;網(wǎng)絡對弈;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ā)展趨勢 539941.3研究內(nèi)容與目標 688662相關理論與技術 7293632.1五子棋簡介 745272.2相關技術簡介 7182062.2.1C/S體系結構 7286342.2.2SOCKET簡介 8223572.2.3面向對象的理論知識 10223572.2.4C#.NET相關知識介紹 10229203系統(tǒng)的分析與設計 11203453.1需求分析 11296213.2功能分析 11168383.3運行環(huán)境 121184系統(tǒng)的實現(xiàn) 12323024.1概要設計 12162894.2流程圖 13232324.3程序詳細設計 1456555總結 3121058致謝 316635參考文獻 321緒論1.1選題背景和意義五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(FiveinaRow的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。

五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學的高深學問“陰陽易理”;它既有簡單易學的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結晶。

五子棋起源于古代中國,發(fā)展于日本,風靡于歐洲。對于它與圍棋的關系有兩種說法,一說早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同,縱橫各十七道。五子棋大約隨圍棋一起在我國南北朝時先后傳入朝鮮、日本等地。據(jù)日本史料文獻介紹,中國古代的五子棋是經(jīng)由高麗(朝鮮),于1688年至1704年的日本元祿時代傳到日本的。到日本明治32年(公元1899年),經(jīng)過公開征名,“連珠”這一名稱才被正式確定下來,取意于“日月如合壁,五星如連珠”。從此,連珠活動經(jīng)過了不斷的改良,主要是規(guī)則的變化(即對執(zhí)黑棋一方的限制),例如,1899年規(guī)定,禁止黑白雙方走“雙三”;1903年規(guī)定,只禁止黑方走“雙三”;1912年規(guī)定,黑方被迫走“雙三”亦算輸;1916年規(guī)定,黑方不許走“長連”;1918年規(guī)定,黑方不許走“四、三、三”;1931年規(guī)定,黑方不許走“雙四”,并規(guī)定將19×19的圍棋盤改為15×15的連珠專用棋盤。本世紀初五子棋傳入歐洲并迅速風靡全歐。通過一系列的變化,使五子棋這一簡單的游戲復雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋,同時也成為一種國際比賽棋。1.2國內(nèi)外研究現(xiàn)狀和發(fā)展趨勢電腦游戲行業(yè)經(jīng)過二十年的發(fā)展,已經(jīng)成為與影視、音樂等并駕齊驅的全球最重要的娛樂產(chǎn)業(yè)之一,其年銷售額超過好萊塢的全年收入?;ヂ?lián)網(wǎng)的出現(xiàn)為電腦游戲行業(yè)發(fā)展注入了新的活力,憑借信息雙向交流、速度快、不受空間限制等優(yōu)勢,讓真人參與游戲,提高了游戲的互動性、仿真性和競技性,使玩家在虛擬世界里可以發(fā)揮現(xiàn)實世界無法展現(xiàn)的潛能,改變了單機版游戲固定、呆板、與機器對話的狀況。網(wǎng)絡游戲的這些優(yōu)勢不僅使其在電腦游戲行業(yè)中異軍突起并在某種程度上取代了單機版游戲,而且成為網(wǎng)絡業(yè)三大(網(wǎng)上金融、網(wǎng)上教育和網(wǎng)絡游戲)贏利且利潤優(yōu)厚的領域之一。網(wǎng)絡作為一種新興的傳播方式,主要包括三大內(nèi)容:娛樂、資訊、通訊。提到網(wǎng)絡娛樂,過去主要指的是單機版游戲,沒有引入網(wǎng)絡的概念[2]但隨著科技的發(fā)展,游戲娛樂產(chǎn)業(yè)也在成長[3]目前,國內(nèi)的游戲娛樂產(chǎn)業(yè)正處于起步階段,特點表現(xiàn)為:第一,它是一種文化的傳播。娛樂產(chǎn)業(yè)可以潛移默化地改變?nèi)说挠^念,當前,很多多媒體的播放已被電腦網(wǎng)絡所取代[4]。第二,網(wǎng)絡游戲加強了人與人的溝通。第三,網(wǎng)絡游戲具有一定的教育意義[5]。網(wǎng)絡游戲所具有的角色扮演的功能,使得玩家能通過互助更好地完成游戲中的各項任務。網(wǎng)絡無國界,游戲在網(wǎng)絡文化產(chǎn)業(yè)世界的發(fā)展中地位會越來越高。目前在國外,休閑游戲如棋類等,玩家的年齡跨度非常大,這和我國目前網(wǎng)游市場以青少年為主要消費人群的狀況截然不同[7]。其實,網(wǎng)絡可以解決空間的問題,網(wǎng)絡和生活越來越息息相關,因此,開辟適合各個年齡層的游戲產(chǎn)品迫在眉睫。同時,這也涉及到一個企業(yè)開發(fā)的能力。娛樂產(chǎn)業(yè)發(fā)展到一定程度,通過不斷鍛煉和經(jīng)驗的積累,完全可以通過融入娛樂的成分把教條的東西深入淺出地展現(xiàn)給消費者。就國內(nèi)的發(fā)展來看,最近這兩三年內(nèi)國內(nèi)的游戲公司如雨后春筍般的成立,所開發(fā)或代理的網(wǎng)絡游戲更是不勝枚舉。以全球游戲業(yè)界的發(fā)展來看,這幾年韓國的表現(xiàn)最為突出,特別是在網(wǎng)絡游戲的技術研發(fā)興游戲制作,其所發(fā)行的網(wǎng)絡游戲更成為全球游戲產(chǎn)業(yè)重要的指標之一。去年在美國洛杉磯所舉行的E3(ElectronicEntertainmentExposition)展中,已經(jīng)有幾家的韓國廠商擠入世界第一線的游戲開發(fā)廠商之列。

近幾年來,由于3D硬體繪圖技術的突破,使得即時描繪的書面越來越精致,而且3D遊戲性更多元化更逼近真實世界,因此在遊戲產(chǎn)業(yè)中,3D游戲已經(jīng)逐漸取代2D游戲為游戲市場的主流,即使是網(wǎng)絡游戲,也慢慢趨向3D化。然而游戲3D化將會帶來的游戲開發(fā)上的困難等問題,這些問題以后都需要逐步解決。1.3研究內(nèi)容與目標實驗要求如下:(1)玩家能通過局域網(wǎng)進行局域網(wǎng)對戰(zhàn)。(2)實現(xiàn)游戲員的網(wǎng)絡對話。(3)游戲規(guī)則:在棋盤上的行、列、對角線上連續(xù)放五個旗子的一方獲勝。本程序旨在用C#語言實現(xiàn)一個基于.NET架構的C/S模式的五子棋局域網(wǎng)對戰(zhàn)游戲,玩家作為客戶端通過服務器端與其它玩家進行對戰(zhàn),聊天等功能。界面使用VS2008WindowForm窗體實現(xiàn),界面美觀,操作簡單,可行性強。2.相關理論與技術2.1五子棋簡介(1)棋盤,棋子:1、棋盤為十五路,正中一點為“天元”,周圍四點為小星。2、棋子分黑白兩色,黑子113枚,白子112枚,共225枚。(2)比賽規(guī)則:1、黑先白后,從棋盤任意位置開始落子。然后執(zhí)白棋的一方在黑棋周圍的交叉點上落子。以此類推,黑白交替落子。2、最先在橫向,豎向,斜向形成連續(xù)的相同色五個棋子的一方為勝。本文所論述的聯(lián)機五子棋系統(tǒng)就是依照這種方式進行的。2.2相關技術簡介2.2.1C/S體系結構C/S結構,即大家熟知的客戶機和服務器結構。它是軟件系統(tǒng)體系結構,通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務合理分配到Client端和Server端來實現(xiàn),降低了系統(tǒng)的通訊開銷。(Client/Server或客戶/服務器模式):Client和Server常常分別處在相距很遠的兩臺計算機上,Client程序的任務是將用戶的要求提交給Server程序,再將Server程序返回的結果以特定的形式顯示給用戶;Server程序的任務是接收客戶程序提出的服務請求,進行相應的處理,再將結果返回給客戶程序。C/S結構的基本原則是將計算機應用任務分解成多個子任務,由多臺計算機分工完成,即采用“功能分布”原則??蛻舳送瓿蓴?shù)據(jù)處理,數(shù)據(jù)表示以及用戶接口功能;服務器端完成DBMS的核心功能。這種客戶請求服務、服務器提供服務的處理方式是一種新型的計算機應用模式。C/S結構的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務器。對應的優(yōu)點就是客戶端響應速度快。C/S編程模式概括如下:服務器端:打開通信道路,告訴本地機器,愿意在該通道上接受客戶請求——監(jiān)聽,等待客戶請求——接受請求,創(chuàng)建專用鏈接進行讀寫——處理完畢,關閉專用鏈接——關閉通信通道(當然其中監(jiān)聽到關閉專用鏈接可以重復循環(huán))。客戶端:打開通訊道路,鏈接服務器——數(shù)據(jù)交互“-關閉信道。2.2.2SOCKET簡介Socket代表了一種文件描述符;這個描述符則是用于網(wǎng)絡訪問的。其實,Socket可以象流Stream一樣被視為一個數(shù)據(jù)通道,這個通道架設在應用程序端(客戶端)和遠程服務器端之間,而后,數(shù)據(jù)的讀?。ń邮埽┖蛯懭耄òl(fā)送)均針對這個通道來進行。在應用程序端或者服務器端創(chuàng)建了Socket對象之后,就可以使用Send/SendTo方法將數(shù)據(jù)發(fā)送到連接的Socket,或者使用Receive/ReceiveFrom方法接受來自連接Socket的數(shù)據(jù)。Socket通訊方式:同步:客戶端在發(fā)送請求之后必須等到服務器回應之后才可以發(fā)送系一條請求。串行運行。異步:客戶端請求之后,不必等到服務器回應之后就可以發(fā)送下一條請求。并行運行。用Socket訪問網(wǎng)絡的基本步驟:a.建立一個套接字b.綁定本機的IP和端口c.如果是TCP,因為是面向連接的,所以要利用ListenO()方法來監(jiān)聽網(wǎng)絡上是否有人給自己發(fā)東西;如果是UDP,因為是無連接的,所以來這不拒。d.TCP情況下,如果監(jiān)聽到一個連接,就可以使用accept來接受這個連接,然后就可以利用Send/Receive來執(zhí)行操作了。而UDP,則不需要accept,直接用SendTo/ReceiveFrom來執(zhí)行操作。e.如果你不想繼續(xù)發(fā)送和接受了,就可以使用close來關閉連接在TCP/IP網(wǎng)絡中,IP網(wǎng)絡交互分類兩大類:面向連接的交互和面向唔連接的交互。Socket面向兩種連接的通訊圖如下:Socket()建立流式套接字,返回套接字號s服務器方Socket()建立流式套接字,返回套接字號sBind(),將套接字s與本地地址相連Bind(),將套接字s與本地地址相連Socket(),建立流式套接字,返回套接字號sListen(),通知TCP,服務器準備好接受連接Socket(),建立流式套接字,返回套接字號sListen(),通知TCP,服務器準備好接受連接accept(),接受連接,它等待客戶的連接accept(),接受連接,它等待客戶的連接Connect(),將套接字s與遠地主機連接連接建立,accept()返回,得到新的數(shù)據(jù)套接字,如nsConnect(),將套接字s與遠地主機連接連接建立,accept()返回,得到新的數(shù)據(jù)套接字,如ns建立連接Send()/recv(),在套接字s上寫/讀數(shù)據(jù),直到數(shù)據(jù)交換完Recv()/send(),在套接字ns上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完服務請求Send()/recv(),在套接字s上寫/讀數(shù)據(jù),直到數(shù)據(jù)交換完Recv()/send(),在套接字ns上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完/應答Closesocket(),關閉套接字s,結束TCP對話Closesocket(),關閉套接字nsClosesocket(),關閉套接字s,結束TCP對話Closesocket(),關閉套接字nsClosesocket(),關閉最初套接字s,服務結束Closesocket(),關閉最初套接字s,服務結束面向連接的套接字系統(tǒng)調(diào)用時序服務器/客戶方服務器/客戶方Socket()建立流式套接字,返回套接字sSocket()建立流式套接字,返回套接字sSocket()建立流式套接字,返回套接字sSocket()建立流式套接字,返回套接字sBind()將套接字s與本地地址綁定Bind()將套接字s與本地地址綁定Bind()將套接字s與本地地址綁定Bind()將套接字s與本地地址綁定ReceiveFrom/SendTo(),通過套接字s收發(fā)報文ReceiveFrom/SendTo(),通過套接字s收發(fā)報文ReceiveFrom/SendTo(),通過套接字s收發(fā)報文ReceiveFrom/SendTo(),通過套接字s收發(fā)報文數(shù)據(jù)報文Closescoket(),關閉最初套接字,服務結束Closesocket(),關閉最初套接字s,服務結束Closescoket(),關閉最初套接字,服務結束Closesocket(),關閉最初套接字s,服務結束無連接的套接字系統(tǒng)調(diào)用時序2.2.3面向對象的理論知識面向對象方法是一種運用對象,類,封裝,繼承,多態(tài)和消息等概念來構造,測試,重構軟件的方法。面向對象方法是一種以知識為基礎,用對象來理解和分析問題空間,并設計和開發(fā)出由對象構成的軟件系統(tǒng)(解空間)的方法。由于問題空間和解空間都是由對象組成的,這樣可以消除由于問題空間和加空間結構上的不一致帶來的問題。簡言之,面向對象就是面向事物本身,面向對象的分析古城就是認識客觀世界的過程。面向對象方法從從對象出發(fā),發(fā)展出對象,類,消息,繼承等概念。面向對象的主要優(yōu)點是:符合人們通常的思維方式;從分析到設計再到編碼采用一致的模型表示具有高度連續(xù)性;軟件重用性好。2.2.4C#.NET相關知識介紹C#是微軟公司發(fā)布的一種面向對象的、運行于.NETFramework之上的高級程序設計語言。C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由C和C++衍生出來的面向對象的編程語言。它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性(例如沒有宏以及不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。本次設計是用C#.NET完成的,采用的是windows窗體應用程序來實現(xiàn)圖形界面功能的,本設計主要用到的,一些控件有:ImageList,MenuStrip,button,textbox,label,等一些簡單的控件。用到的主要技術就是Socket通訊,以及多線程編程。下面簡單的介紹一下這些知識。ImageList控件包含ListImage對象的集合,該集合中的每個對象都可以通過其索引或關鍵字被引用。ImageList控件不能獨立使用,只是作為一個便于向其它控件提供圖象的資料中心。ImageList控件的作用象圖像的儲藏室,同時,它需要第二個控件顯示所儲存的圖像。第二個控件可以是任何能顯示圖像Picture對象的控件,也可以是特別設計的、用于綁定ImageList控件的Windows通用控件之一。本程序中在Label,PictureBox中調(diào)用了ImageList中的圖像。MenuStrip控件是VisualStudio和.NETFramework中的功能。使用該控件,可以輕松創(chuàng)建MicrosoftOffice中那樣的菜單。MenuStrip控件支持多文檔界面(MDI)和菜單合并、工具提示和溢出。您可以通過添加訪問鍵、快捷鍵、選中標記、圖像和分隔條,來增強菜單的可用性和可讀性。MenuStrip控件取代了MainMenu控件并向其中添加了功能;但是也可選擇保留MainMenu控件以備向后兼容和將來使用。3.系統(tǒng)的分析與設計3.1需求分析(1)滿足游戲雙方記錄的游戲動作的基本要求。(2)滿足對戰(zhàn)雙方及時通訊的基本要求。(3)滿足游戲雙方及時顯示游戲狀態(tài)的基本要求。(4)在服務器端分析雙方是否勝利。3.2功能分析基于系統(tǒng)需求分析,該系統(tǒng)需要實現(xiàn)以下基本功能:(1)棋盤繪制:在游戲加載時,即時顯示棋盤(2)對連接到客戶端數(shù)據(jù)的基本要求:能夠將要發(fā)送的聊天記錄發(fā)送至對方手上,能夠完成即時通訊。(3)實時顯示:當從游戲一方將數(shù)據(jù)傳入另一方系統(tǒng)中,將五子棋的表格進行重新的刷新,和更改。(4)通過控制鼠標點擊五子棋表格:觸發(fā)事件,把該動作發(fā)送到游戲另一方,并判斷是否勝利。3.3運行環(huán)境系統(tǒng)運行環(huán)境:WindowsXP及以后版本開發(fā)環(huán)境:VS20084.系統(tǒng)的實現(xiàn)4.1概要設計本次畢業(yè)設計的內(nèi)容主要是利用Socket實現(xiàn)一個網(wǎng)絡對戰(zhàn)五子棋,首先先要繪制出棋盤,然后實現(xiàn)Socket通訊(連接,聊天等功能),然后實現(xiàn)下棋功能,下棋這部分功能的實現(xiàn)根據(jù)Socket通訊傳遞的信息流控制雙方該誰下棋;再通過傳遞過來的消息觸發(fā)事件從而實現(xiàn)對戰(zhàn)雙方的同步顯示;每走一步棋子,都要利用一個算法來判斷一下有沒有出現(xiàn)五個相同棋子連到一起的情況,及是否有人贏棋,這個算法要分兩種情況,一種是黑棋,另一種是白棋,如果剛落下的棋子是黑棋,那么就要在整個棋盤上通過上下,左右,以及斜上,斜下,這幾個方向來尋找看看有沒有五子連在一起的情況,如果有的話,那么黑棋勝,游戲結束;如果剛落下的是白棋的話,用同樣的方法判斷。對戰(zhàn)方1對戰(zhàn)方2加載主界面(棋盤,對話窗口等)加載主界面(棋盤,對話窗口等)加載主界面(棋盤,對話窗口等)加載主界面(棋盤,對話窗口等)輸入對方IP進行連接輸入對方IP進行連接輸入對方IP進行連接輸入對方IP進行連接開始游戲開始游戲通訊對話開始游戲開始游戲通訊對話分出勝負游戲結束分出勝負游戲結束分出勝負游戲結束分出勝負游戲結束4.2流程圖下面用我們用數(shù)據(jù)流圖(DFD,DataFlowDiagram),也就是從數(shù)據(jù)傳遞和加工的角度,以圖形的方式刻畫數(shù)據(jù)流從輸入到輸出的移動變換過程。如下圖所示:準備(啟動服務)開始監(jiān)聽準備(啟動服務)開始監(jiān)聽等待連接開始(建立連接)開始(建立連接)連接至對方的服務端等待對方鏈接自己的服務端等待對方鏈接自己的服務端收到對方鏈接請求,建立連接收到對方鏈接請求,建立連接可以進行及時通訊判斷誰先下棋判斷誰先下棋等待輪到自己下棋下棋下棋將信息傳遞到對方的棋盤上更新,實現(xiàn)雙方顯示同步更新,實現(xiàn)雙方顯示同步判斷勝負判斷勝負更新勝負記錄斷開連接重新開始斷開連接重新開始4.3程序詳細設計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連接服務器模塊namespaceWindowsApplication1{publicclassClient{//1、連接服務器//2、發(fā)送消息//3、接收數(shù)據(jù)包privateSocket_client;//跟服務器連接的socketprivatebool_connected;//socket連接狀態(tài),表示斷開或已經(jīng)連接兩種情況//連接服務器publicvoidConnectServer(stringip,intport)//指定地址和端口{_client=newSocket(//Socket類構造函數(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;}}//關閉連接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("黑子贏了!!請按重新開始!");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("白子贏了!!請按重新開始!");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個相同的棋子想連{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個相同的棋子想連{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個相同的棋子想連{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個相同的棋子想連{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個相同的棋子想連{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個相同的棋子想連{if(a[k]==0){BCount++;for(intp=1;p<5;p++){if(k-p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論