java五子棋畢業(yè)設(shè)計整套_第1頁
java五子棋畢業(yè)設(shè)計整套_第2頁
java五子棋畢業(yè)設(shè)計整套_第3頁
java五子棋畢業(yè)設(shè)計整套_第4頁
java五子棋畢業(yè)設(shè)計整套_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1前言跟著計算機技術(shù)的不停發(fā)展,網(wǎng)絡(luò)技術(shù)的普及范圍愈來愈廣,網(wǎng)絡(luò)能夠供給的服務(wù)多樣、便利,已經(jīng)成為人們生產(chǎn)生活中不行缺乏的重要構(gòu)成部分。此刻網(wǎng)絡(luò)休閑游戲發(fā)展快速,它依靠健康、方便、互動性強、益智等諸多長處,成為大多半現(xiàn)代人休閑娛樂的首選。網(wǎng)絡(luò)五子棋游戲是使用Java語言開發(fā)的一款游戲。它使用SOCKET成立連結(jié),多線程辦理數(shù)據(jù),以及可嵌入網(wǎng)絡(luò)閱讀器的APPLET作為客戶端,這些特色使這款游戲不論是服務(wù)器仍是客戶端的實現(xiàn)都相對簡單。經(jīng)過對該軟件的編寫,還能夠穩(wěn)固學生對以上各樣知識的掌握和理解。2JAVA語言概括2.1JAVA簡介JAVA是SunMicrosystem企業(yè)開發(fā)的編程語言,是一個簡單

2、,面向?qū)ο?,散布式,解說性,強健,安全,與系統(tǒng)沒關(guān),可移植,高性能,多線程和動向的語言。的基本特色簡單性Java與C+語言特別鄰近,但Java比C+簡單,它扔掉了C+中的一些不是絕對必需的功能,如頭文件、預(yù)辦理文件、指針、結(jié)構(gòu)、運算符重載、多重繼承以及自動逼迫同型。Java實現(xiàn)了自動的垃圾采集,簡化了內(nèi)存管理的工作。面向?qū)ο驤ava供給了簡單的類體制和動向的構(gòu)架模型。對象中封裝了它的狀態(tài)變量和方法,很好地實現(xiàn)了模塊化和信息隱蔽;而類則供給了一類對象的原型,經(jīng)過繼承和重載體制,子類能夠使用或從頭定繼父類或超類所供給的方法,進而既實現(xiàn)了代碼的復用,又供給了一種動向的解決方案。多線程多線程使應(yīng)用程序

3、能夠同時進行不一樣的操作,辦理不一樣的事件。在多線程體制中,不一樣的線程辦理不一樣的任務(wù),他們之間互不干預(yù),不會因為一處等候影響其余部分,這樣簡單實現(xiàn)網(wǎng)絡(luò)上的及時交互操作。散布性Java是面向網(wǎng)絡(luò)的語言。經(jīng)過它供給的類庫能夠辦理TCP/IP協(xié)議,用戶能夠經(jīng)過URL地點在網(wǎng)絡(luò)上很方便的接見其余對象。系統(tǒng)結(jié)構(gòu)中立Java是一種網(wǎng)絡(luò)語言,為使Java程序能在網(wǎng)絡(luò)的任何地方運轉(zhuǎn),Java解說器生成與系統(tǒng)結(jié)構(gòu)沒關(guān)的字節(jié)碼結(jié)構(gòu)的文件格式。為了使Java的應(yīng)用程序能不依靠于詳細的系統(tǒng),Java語言環(huán)境還供給了用于接見基層操作系統(tǒng)功能的類構(gòu)成的包,當程序使用這些包時,能夠保證它能運轉(zhuǎn)在各樣支持Java的平臺上

4、。安全性用于網(wǎng)絡(luò)、散布環(huán)境下的Java一定要防備病毒的入侵,Java不支持指針,全部對內(nèi)存的接見都一定經(jīng)過對象的實例變量來實現(xiàn),這樣就防備了程序員使用欺詐手段接見對象的私有成員,同時也防止了指針操作中簡單產(chǎn)生的錯誤。中輸入/輸出流觀點過濾流DataInputStream和DataOutputStream除了分別作為FilterInputStream和FilterOutputStream的子類外,還分別實現(xiàn)了接口DataInput和DataOutput。接口DataInput中定義的方法主要包含從流中讀取基本種類的數(shù)據(jù)、讀取一行數(shù)據(jù)、或許讀取指定長度的字節(jié)數(shù),如readBoolean()、rea

5、dInt()、readLine()、readFully()等。接口DataOutput中定義的方法主假如向流中寫入基本種類的數(shù)據(jù)或許寫入必定長度的字節(jié)數(shù)組,如writeChar()、writeDouble()。DataInputStream能夠從所連結(jié)的輸入流中讀取與機器沒關(guān)的基本種類數(shù)據(jù),用以實現(xiàn)一種獨立于詳細平臺的輸入方式;DataOutputStream能夠向所連結(jié)的輸出流寫入基本種類的數(shù)據(jù)。體制Socket是面向客戶/服務(wù)器模型設(shè)計的,網(wǎng)絡(luò)上的兩個程序經(jīng)過一個雙向的通信連結(jié)實現(xiàn)數(shù)據(jù)的互換,這個雙向鏈路的一端稱為一個Socket。Socket往常用來實現(xiàn)客戶方和服務(wù)方的連結(jié)??蛻舫绦蚰軌?/p>

6、向Socket寫懇求,服務(wù)器將辦理此懇求,而后經(jīng)過Socket將結(jié)果返回給用戶。Socket通信體制供給了兩種通信方式:有聯(lián)接和無聯(lián)接方式,分別面向不一樣的應(yīng)用需求。使用有聯(lián)接方式時,通信鏈路供給了靠譜的,全雙工的字節(jié)流服務(wù)。在該方式下,通信兩方一定創(chuàng)立一個聯(lián)接過程并成立一條通信鏈路,此后的網(wǎng)絡(luò)通信操作完整在這一對進度之間進行,通信完成封閉此聯(lián)接過程。使用無聯(lián)接方式時其系統(tǒng)開支比無聯(lián)接方式小,但通信鏈路供給了不行靠的數(shù)據(jù)報服務(wù),不可以保證信源所傳輸?shù)臄?shù)據(jù)必定能夠抵達信宿。在該方式下,通信兩方不用創(chuàng)立一個聯(lián)接過程和成立一條通信鏈路,網(wǎng)絡(luò)通信操作在不一樣的主機和進度之間轉(zhuǎn)發(fā)進行。應(yīng)用程序相對簡單。

7、JAVA支持流套接字(streamsocket)和數(shù)據(jù)報套接字(datagramsocket)。流套接字使用TCP(TransmissionControlProtocol,傳輸控制協(xié)議)進行數(shù)據(jù)傳輸,而數(shù)據(jù)報套接字使用UDP(UserDatagramProtocol,用戶數(shù)據(jù)報協(xié)議)。在Socket層實現(xiàn)的Java網(wǎng)絡(luò)程序是嚴格同步的。從一臺機器發(fā)送數(shù)據(jù)的操作要求對應(yīng)一個從其余機器接受數(shù)據(jù)的操作。2.2JAVA工具JDK1)Java編譯器Java編譯器將Java源代碼文件編譯成可履行的Java字節(jié)碼。Java源代碼文件的擴展名為.java,Java編譯器把這類擴展名的文件編譯成擴展名為.cla

8、ss的文件。源文件中的每個類在編譯后都將產(chǎn)生一個class文件,這意味一個Java源代碼文件可能編譯生成多個class文件。2)Java解說器Java解說器對編譯生成的字節(jié)碼格式的可履行程序的運轉(zhuǎn)供給支持,它是運轉(zhuǎn)非圖形Java程序的命令行工具。程序的設(shè)計思路和算法3.1人機博弈的重點人機棋戰(zhàn)的程序,起碼應(yīng)具備以下5個部分:某種在機器中表示棋局的方法,能夠讓程序知道博弈的狀態(tài)。產(chǎn)生合法走法的規(guī)則,以使博弈公正地進行,并可判斷人類敵手能否亂走。從全部合法的走法中選擇最正確的走法技術(shù)。一種評估場面好壞的方法,用以同上邊的技術(shù)配合做出智能的選擇。一個界面,有了他,這個程序才能用。2五子棋特色及規(guī)則五

9、子棋的娛樂性強、規(guī)則簡單、易學、流行性廣。一般人不需長時間特意訓練即可自如行棋。所以極受大眾歡迎。五子棋的規(guī)則為:棋盤采納像圍棋盤相同的15路或19路線的棋盤,在此采納19路的棋盤。下法兩人分別執(zhí)黑白兩色棋子。輪番在棋盤上選擇一個無子的交錯點落子,無子的交錯點又被稱為空點。勝敗判斷黑、白兩方有一方的五個棋子在橫、豎或斜方向上連結(jié)成一線即為該方贏。3.3算法設(shè)計博弈樹的搜尋過程在以下議論中,命名2個博弈者MAX和MIN。下邊的任務(wù)是為MAX找最正確的挪動。假設(shè)MAX先挪動,而后2個博弈者輪番挪動。所以,深度為偶數(shù)的節(jié)點,對應(yīng)于MAX下一步挪動的地點,稱為MAX節(jié)點;深度為奇數(shù)的節(jié)點對應(yīng)于MIN下

10、一步挪動的地點,稱為MIN節(jié)點(博弈樹的頂節(jié)點深度為0)。k層包含深度為2k和2k1的節(jié)點。往常用層數(shù)表示博弈樹的搜尋深度,他能夠表示出向前展望的一定認識到搜尋到終點是不行能的(除了在博弈快結(jié)束時),所以,常采納在有限范圍搜尋方法。這里使用啟迪式搜尋。在啟迪式搜尋的過程中,重點的一步是怎樣確立下一個要觀察的節(jié)點,在確立節(jié)點時只需能充分利用與問題有關(guān)的信息,預(yù)計出節(jié)點的重要性,就能在搜尋時選擇重要性較高的節(jié)點,以利于博弈者以較快的速度求出最正確的棋步。3.32采納靜態(tài)評估函數(shù)這里用評估函數(shù)h(i)權(quán)衡每一個葉節(jié)點地點的“值”。一個最正確首步能夠由一個最小最大化過程產(chǎn)生。假定輪到MAX從搜尋樹的葉

11、節(jié)點中選用,他必定選擇擁有最大值的節(jié)點。所以,MIN葉節(jié)點的一個MAX節(jié)點雙親的倒推值就等于葉節(jié)點的靜態(tài)評估值中的最大值。另一方面,MIN從葉結(jié)點中選用時,一定選用最小的節(jié)點(即最負的值)。既然這樣,MAX葉節(jié)點的MIN雙親節(jié)點被分派一個倒推值,他等于葉節(jié)點靜態(tài)評估值的最小值。在全部葉節(jié)點的父節(jié)點被給予倒推值后,開始倒推另一層,假定MAX將選擇有最大倒推值的MIN的后繼節(jié)點,而MIN會選擇有最小倒推值的MAX后繼節(jié)點。持續(xù)逐層對節(jié)評論估,直到最后開始節(jié)點的后繼者被給予倒推值。MAX將選擇有最大倒推值的節(jié)點作為他的首步。整個過程的有效性鑒于這樣的假定。用整個棋盤估值的函數(shù)h(n)為靜態(tài)估值函數(shù)。

12、假想目前棋局S為輪到計算機方下棋(用表示),任選一空點作為計算機方的下棋地點(可有若干種選擇),接著考慮在此狀況下游戲者一方下棋的棋局(用O表示);從某一“O”棋局出發(fā),任選一空點作為游戲者一方的落子處(又有若干種選擇),再次形成計算機方下棋的“”棋局;依此類推,這樣可形成一棵以S為根結(jié)點的博弈樹,該樹以O(shè)棋局為第2層子結(jié)點,以棋局為第3層子結(jié)點等等。假如持續(xù)向前搜尋,可形成多層子結(jié)點,此刻以向前搜尋3層子結(jié)點為例來說明極大極小值的過程。對第3層子結(jié)點的某一棋局n,求出其預(yù)計值h(n),假定有一博弈樹已形成,如圖1所示,h(n)的值由各結(jié)點旁的數(shù)值給出。依據(jù)極小極大化剖析法,先計算第3層子結(jié)點

13、h(n)值,而后第2層子結(jié)點的預(yù)計值取他的各后繼子結(jié)點的極小值,根結(jié)點的預(yù)計值取他的各子結(jié)點的極大值。這個獲得最大預(yù)計值的子結(jié)點即為從S出發(fā)的計算機方的最正確落子方案。棋盤上某一行、某一列或某一對角線為一路,這里使用的棋盤為19行19列,所以,行和列方向上共有191938路;從左下到右上方向的對角線有37路,相同,從左上到右下方向的對角線也有37路。但關(guān)于五子棋來說一定在一條直線上有連續(xù)五個棋子才能贏。所以,在對角線上就能夠減少8路。所以,整個棋盤路的總數(shù)為:對某一棋局n,第i路得分:h(i)hc(i)hm(i)。此中:hc(i)為計算機方在第i路預(yù)計值得分,hm(i)為游戲者一方在第i路得分

14、。對的得分規(guī)則作以下說明。規(guī)則中代表一空點;o代表對方棋子;代表有計算機方棋子;表示連續(xù)2點為空點;表示連續(xù)3個空點接一個計算機方棋子,再接兩空點。某一規(guī)則表示如在i路上有棋子構(gòu)成形如則hc(i)30。其余規(guī)則表示相同。在系統(tǒng)中使用的主要估值規(guī)則以下:由對稱性可知和的估值相同,同理可得其余擁有這樣對稱性的估值都以為是相等的。在連續(xù)兩路上出現(xiàn)(3)的情況=hc(i)=5000,一路出現(xiàn),此外一路出現(xiàn)(4)=hc(i)=5000。所以在整個棋盤上的總估值為:為了增添系統(tǒng)的智能化也能夠增添其余的一些規(guī)則。33遺傳算法優(yōu)化估值函數(shù)在博弈程序的幾大主要部分里,估值函數(shù)是與詳細的棋類知識密切聯(lián)合的一部分。

15、能夠說估值函數(shù)在很大程度上決定了博弈程序的棋力高低。上邊給出的估值是依據(jù)實質(zhì)經(jīng)驗給出的。怎樣對上述的估值進行優(yōu)化呢?下邊采納遺傳算法來改良靜態(tài)估值。遺傳算法的預(yù)計值在很大的程度上也依靠于實行者的經(jīng)驗??墒悄軌蚶靡恍└咚矫制遄V或同其余博弈程序棋戰(zhàn),看使用某一組參數(shù)時取勝的機率有多大來進行較驗。經(jīng)過幾次的試驗一般就能夠獲得較好的靜態(tài)估值。傳統(tǒng)的算法一般只好保護一組較好的參數(shù)。遺傳算法同傳統(tǒng)的算法對比能夠同時保護幾組較好的參數(shù),經(jīng)過向此中增添一組新參數(shù),往常是將幾組老參數(shù)中選出的值組合在一同做一點變化。而后同幾組老的參數(shù)比較孰優(yōu)孰劣,將最差的一組從中去除。這里面較重要的操作是交錯和變異操作。交

16、錯經(jīng)過隨機互換父代個體的信息來繼承已有參數(shù)中的優(yōu)秀內(nèi)容;變異經(jīng)過隨機改變個體中的基因此增添種群的多樣性,防止優(yōu)化的因局部震蕩而失敗。能夠?qū)⑦z傳算法的優(yōu)化估值參數(shù)的過程用圖2表示。遺傳算法的長處:因為搜尋算法是從問題的解開始的,而不是一組參數(shù)。所以被局部震蕩擾亂致使求最優(yōu)解失敗的可能性大大減小。此算法能將搜尋重點集中于性能高的部分,能較快地求出最正確的參數(shù)。在使用中應(yīng)該注意的問題以下:種群數(shù)量這是影響算法性能的重要要素。種群數(shù)量過大,會致使運算時間太長,結(jié)果收斂遲緩;種群數(shù)量太小則可能致使算法精度過低,甚至停止不前。交錯概率這個用于控制交錯操作的頻度。此概率過大會致使種群中的個體更新過快,較優(yōu)的

17、個體不可以穩(wěn)固的保持和傳達信息;此概率過小則會使優(yōu)化的過程遲緩甚至停止不前。變異概率這個概率用于控制產(chǎn)生變異個體的頻度,目的是防備整個種群中隨意參數(shù)的幾個基因保持不變。一般使用一個很小的概率即足以達成此任務(wù);概率太大則遺傳信息沒法穩(wěn)固傳達,進而使優(yōu)化過程變?yōu)殡S機過程,失掉切實的方向而致使失敗。程序?qū)崿F(xiàn)4.1程序設(shè)計思路實現(xiàn)一個用戶能夠Internet上任何地方的不一樣機長進行游戲,使用多線程和網(wǎng)絡(luò)套接字數(shù)據(jù)流的散布式五子棋游戲,依據(jù)要達成的功能,本程序采納多客戶服務(wù)方式。服務(wù)器創(chuàng)立服務(wù)器Socket,一直處于監(jiān)聽等候狀態(tài)??蛻舳耸莿幼鞯某颊?,何時發(fā)出申請由客戶端決定??蛻舳讼蚍?wù)器發(fā)出申請,

18、服務(wù)器賜予響應(yīng),客戶端發(fā)出申請后立刻可從Socket通道去取服務(wù)方的結(jié)果。服務(wù)器接受兩個客戶端連結(jié)后開始一個線程,不停接受客戶端發(fā)來的數(shù)據(jù),并把辦理后的數(shù)據(jù)傳遞給客戶端。服務(wù)器能夠創(chuàng)立隨意多局(圖3-1)。服務(wù)1N客戶端客戶端客戶端客戶端圖3-1系統(tǒng)框架Fig.3-1FrameofSystem在對服務(wù)器與客戶端的設(shè)計開發(fā)以前,為了使開發(fā)方便,將服務(wù)器與客戶端之間用以通信的變量規(guī)定好。經(jīng)過編寫一個接口GameConstant(),在此中定義各個常量的值:publicstaticintPLAYER1=1;publicstaticintPLAYER2=2;publicstaticintPLAYER1

19、_WON=1;publicstaticintPLAYER2_WON=2;publicstaticintDRAW=3;publicstaticintCONTINUE=4;publicstaticintSTOP=100;publicstaticintGAMEPORT=8000;服務(wù)器和客戶端在設(shè)計時繼承接口GameConstant()里面的全部數(shù)據(jù)。4.2服務(wù)器的設(shè)計與實現(xiàn)為了使界面友善,服務(wù)器使用圖形組件,創(chuàng)立成一個能夠顯示游戲信息的框架。在框架中創(chuàng)立一個包含文本區(qū)的轉(zhuǎn)動窗格,并在文本區(qū)顯示游戲信息(圖3-2)。圖3-2服務(wù)器界面Fig.3-2InterfaceofGame-server要成立服

20、務(wù)器,需要創(chuàng)立一個服務(wù)器Socket,并把它附帶到一個端口上,服務(wù)器通過這個端口監(jiān)聽連結(jié)懇求。端口表記Socket上的TCP服務(wù)。網(wǎng)絡(luò)的類寄存在包中,引入包后經(jīng)過實現(xiàn)一個ServerSocket的實例就能夠創(chuàng)立一個服務(wù)器Socket,并把它附帶到一個端口(GAMEPORT)上:ServerSocketserverSocket=newServerSocket(GAMEPORT);而后,服務(wù)器使用以下語句開始監(jiān)聽連結(jié)懇求:Socketplayer1=serverSocket.accept();Socketplayer2=serverSocket.accept();服務(wù)器開始等候,直到客戶提出連結(jié)懇

21、求。連結(jié)成立后,服務(wù)器經(jīng)過數(shù)據(jù)輸入流從客戶端接收信息,而且經(jīng)過數(shù)據(jù)輸出流把相應(yīng)的標記發(fā)送給客戶端。newDataOutputStream(player1.getOutputStream().writeInt(PLAYER1);newDataOutputStream(player2.getOutputStream().writeInt(PLAYER2);當客戶端知足開局條件時,就開啟一個線程辦理客戶之間數(shù)據(jù),同時持續(xù)監(jiān)聽其余客戶端的連結(jié)懇求。多線程是Java的一個特色,多線程能夠使程序反響更快、交互性更強,并能提升履行效率。創(chuàng)立一個新的線程的生命周期以下狀態(tài):新建,就緒,運轉(zhuǎn),堵塞,死亡。在Ja

22、va中,供給了多種控制線程的方法,在服務(wù)器頂用到的主要以下幾種:publicvoidrun()Java運轉(zhuǎn)系統(tǒng)調(diào)用這個方法來履行線程。在用戶線程類中,一定覆蓋這個方法而且供給線程履行的代碼。publicvoidstart()該方法啟動線程,它惹起對run()方法的調(diào)用??蛻纛愔械目蛇\轉(zhuǎn)對象調(diào)用該方法。服務(wù)器程序采納類HandleGame繼承Thread類來實現(xiàn)對線程的調(diào)用,同時對run()方法覆蓋。以下是HandleGame()類里面主要的數(shù)據(jù)域和方法:privatecharcell:Char種類數(shù)組用來記錄玩家的標記。privateDataInputStreamisFromPlayer1;p

23、rivateDataOutputStreamosToPlayer1;privateDataInputStreamisFromPlayer2;privateDataOutputStreamosToPlayer2;:四個數(shù)據(jù)流用來實現(xiàn)與兩個玩家之間信息的傳達。publicHandleGame(Socketplayer1,Socketplayer2):結(jié)構(gòu)函數(shù),兩個參數(shù)用以接收傳達過來的Socket對象。publicvoidrun():對繼承Thread類中的run()方法進行覆蓋。privatebooleanisFull():判斷能否滿格。privatebooleanisWon(introw,in

24、tcolumn,chartoken):判斷新標記的單元格能否使一方獲勝。游戲局一旦成立起來,服務(wù)器便于工作交替地從客戶端那邊接收數(shù)據(jù)。從客戶端接收到數(shù)據(jù)后,服務(wù)器判斷游戲狀態(tài),并依據(jù)結(jié)果進行有關(guān)操作,直至游戲結(jié)束。4.3客戶端的設(shè)計與實現(xiàn)客戶端負責與玩家的交互。所以要創(chuàng)立一個界面,包含一個20*20的下棋地區(qū),當玩家選定單元格或接收到其余玩家選定的單元格時,用不一樣的標記顯示;兩個顯示游戲名稱和游戲狀態(tài)的標簽和兩個菜單欄上的按鍵用以進行控制,如圖3-3:圖3-3客戶端界面Fig.3-3InterfaceofGame-client翻開這里客戶程序設(shè)計成一個JavaAppletGameClient

25、.html文件時,閱讀器調(diào)用,用戶能夠在Web閱讀器里運轉(zhuǎn)。init()方法對界面進行初始化。點擊當用戶Start時開啟一個線程和服務(wù)器連結(jié),經(jīng)過數(shù)據(jù)流進行數(shù)據(jù)互換。connectToServer=newSocket(localhost,GAMEPORT);isFromServer=newDataInputStream(connectToServer.getInputStream();osToServer=newDataOutputStream(connectToServer.getOutputStream();下邊是類GameClient的主要方法和數(shù)據(jù):publicclassGameCli

26、entextendsJAppletimplementsRunnable,ActionListener,GameConstantsprivatebooleanmyTurn=false;:標記能否輪到自己下棋privatecharmyToken=;:標記自己的棋子privatecharotherToken=;:標記敵手的棋子privateCellcell=newCell2020;:生成20*20privateintrowSelected;:記錄所選單元格的行privateintcolumnSelected;:記錄所選單元格的列個單元格privatebooleancontinueToPlay=tru

27、e;privatebooleanwaiting=true;:記錄游戲進行中的狀態(tài)publicvoidinit():初始化用戶界面,翻開網(wǎng)頁時由閱讀器調(diào)用publicvoidactionPerformed(ActionEvente):覆蓋ActionListener接口里面actionPerformed()方法,用來辦理用戶點擊菜單欄惹起的操作。publicvoidrun()覆蓋Runnable接口里的run()方法,用以對游戲過程中的數(shù)據(jù)傳輸,辦理,控制。在客戶程序的類中,因為它繼承了Applet類,所以不可以再經(jīng)過申明Thread類的擴展來實現(xiàn),只好經(jīng)過實現(xiàn)Java供給的一個Runnable

28、接口,進行線程的創(chuàng)立和運轉(zhuǎn)。Runnable接口的實現(xiàn)是特別簡單的,它只包含run()方法,使用時只需將該方法覆蓋。從游戲設(shè)計來看,單元格是辦理鼠標點擊事件和顯示標記的GUI對象。在這里使用的是面板,設(shè)置單元格Cell為JPanel的子類。將Cell類申明為內(nèi)部類,能夠直接使用GameClient類中定義的變量與方法,使程序簡短了然。Cell類中包含以下主要數(shù)據(jù)和方法:publicclassCellextendsJPanelimplementsMouseListenerprivateintrow;privateintcolumn;privatechartoken=;publicCell(int

29、row,intcolumn):結(jié)構(gòu)函數(shù)publicvoidpaintComponent(Graphicsg):Graphics對象g是由Java運轉(zhuǎn)系統(tǒng)自動創(chuàng)立,這個對象控制信息的繪制方式。能夠使用定義在Graphics類中的多種畫法繪制字符串的幾何圖形。publicvoidmouseClicked(MouseEvente)publicvoidmouseExited(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmouseReleased(MouseEvente)publicvoidmousePressed(MouseEvente):接口MouseListener中的方法。4.4程序的運轉(zhuǎn)第一將編寫好的程序使用Java編譯器編譯,生成以class為擴展名的類文件,而后使用Java解說器分別運轉(zhuǎn)服務(wù)器和客戶端??蛻舳税l(fā)出連結(jié),服務(wù)器接收后開啟線程對游戲進行控制,游戲結(jié)束時封閉線程。詳細流程如圖3-4所示:玩家一服務(wù)器1.初始化用戶界面創(chuàng)立一個服務(wù)器套接字。向服務(wù)器懇求連結(jié)收第一個玩家的連結(jié)懇求,而且接,并從服務(wù)器獲通知玩家他是玩家一,使用標記知所用棋子的標“X”。記。接收第二個玩家的連結(jié)懇求,而且3.從服務(wù)器獲得開始通知玩家他是玩家二,使用標記標記?!癘”。啟動對局線程。4

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論