【正文】
rver = new ServeOneClient(socket)。 try { while(true) { // Blocks until a connection occurs: Socket socket = ()。 (Server Started at port +PORT+...)。 public static void main(String[] args)throws IOException { ServerSocket s = new ServerSocket(PORT)。 public static ArrayList playerList = new ArrayList()。import 。 }}Server類//Server類用于初始化服務(wù)器端的監(jiān)聽程序import .*。 int board[][]。 int playerColor = 0。 ServeOneClient playerSocket =null。 ServeOneClient selfSocket=null。 int color = 1。 ServeOneClient selfSocket=null。 }}Player類Player類用于初始化一個(gè)玩家信息import 。 public Message(){ setting=true。 // record the coordinate X from 0~14 ,save black or white int coordinateY。 // judge whether it is for receiver39。 // 是否設(shè)置禁手 int color。s name ,game set by * // the one who create game * type = 12// setting information * type = 13// setting player color * type = 14// msg for acceptor B to setting color and setings * type = 15// server update message * type = 16// send messages of control or errors * type = 17// failed in the game * type = 18// server socket close * type = 19// player end a game and refresh * tyep = 20// puter win / people win */public class Message implements Serializable{ byte type。s name * type = 2 // put chessman * type = 3 // request play with another * type = 4 // deny a request for play * type = 5 // agree with request * type = 6 // send victory message * type = 7 // send disconnection * type = 8 // save game but not to disk,it will be lost when next start * type = 9 // add new player to all client39。附錄Message類//Message 類是客戶端與服務(wù)器端傳送的消息對(duì)象import 。我還要感謝同組的同學(xué),在設(shè)計(jì)和調(diào)試遇到困難的時(shí)候,很多都是依賴與他們的交流。有了他們的支持我的畢業(yè)設(shè)計(jì)才能如期完成。在程序的設(shè)計(jì)過程中遇到困難的時(shí)候,她及時(shí)的給了我建議與支持,使得畢業(yè)設(shè)計(jì)能夠順利進(jìn)行,并在規(guī)定的時(shí)間內(nèi)完成各項(xiàng)任務(wù)。參考文獻(xiàn)[1] (人機(jī)博弈)[M].北京:清華大學(xué)出版社,2001[2] [M].北京:清華大學(xué)出版社,2001[3] [M].北京:清華大學(xué)出版社,2001[4] [M].北京:人民郵電出版社,2001[5] Nils [M].美:機(jī)械工業(yè)出版社,2000[6] [M] .北京:清華大學(xué)出版社 ,2001[7] [M].北京:機(jī)械工業(yè)出版社, 2001[8] 那威,[M]. 北京:北京體育大學(xué)出版社,1998[9] Erich Gamma, Richard Helm, Ralph Johnson, John [M].北京:機(jī)械工業(yè)出版社,2000[10] Donald E. Knuth. The Art of Computer Programming[M]. AddisonWesley,1998[11] 雷超陽(yáng),徐正權(quán),[J].,24(1):4~7[12] 趙子義, Socket 編程詳解[J].,20(2):11~12[13] 曾亞純,[J].,15(5):15~17[14] [J].,18(10):10~13[15] [J].,14(3):33~40[16] 薩師煊,[J].,19(1):30~39[17] [J].,20(2):5~9[18] Wiki Discussiion,Cost of Design carry.,1999[19] 許正熙,.,2001致謝最后,我要感謝在這段時(shí)間內(nèi)對(duì)我的工作進(jìn)行指導(dǎo)的孫建平老師。可見網(wǎng)絡(luò)游戲的開發(fā)還存在著巨大的潛力,如何開發(fā)出更好的網(wǎng)絡(luò)游戲?qū)⑹俏覀兝^續(xù)努力的目標(biāo)。2002年,國(guó)內(nèi)網(wǎng)絡(luò)游戲從50多款迅速發(fā)展到了130多款。2003年, 中國(guó)網(wǎng)絡(luò)游戲人數(shù)將超過1500萬(wàn)人。在美國(guó),游戲業(yè)已經(jīng)超越擁有百年歷史的好萊塢電影業(yè)而成為整個(gè)電子娛樂產(chǎn)業(yè)的龍頭。結(jié)束語(yǔ)網(wǎng)絡(luò)游戲正在形成一個(gè)成熟而巨大的產(chǎn)業(yè)。 2.測(cè)試下子過程及勝負(fù)的處理響應(yīng)時(shí)間 在棋盤上下一個(gè)棋子,服務(wù)器端可以接收到下子信息并把信息發(fā)到另外的客戶端,如果此時(shí)有任一方的棋子可以五個(gè)成一線則可以正確判斷勝負(fù),由些可知系統(tǒng)對(duì)下子過程的處理響應(yīng)時(shí)間良好。7.點(diǎn)擊Quit按鈕,游戲可以正常退出并可以正確判斷勝負(fù),退出功能測(cè)試成功。,程序可以依照程序要求在上面下子,并且可以正常處理判斷勝負(fù),下子過程測(cè)試成功。3.在玩家列表中雙擊一個(gè)玩家請(qǐng)求游戲,雙方建立了連接,游戲正常開始,游戲連接測(cè)試成功。 程序主體流程圖()圖 第五章 系統(tǒng)測(cè)試與性能分析 系統(tǒng)功能測(cè)試,按照上面步聚再啟動(dòng)一個(gè)Dos ,按照上面步聚再啟動(dòng)一個(gè)Dos ,至此系統(tǒng)完整界面啟動(dòng),圖 系統(tǒng)界面1.,游戲界面測(cè)試成功。judge(Group gg, int x, int y) boolean判斷勝負(fù)。setting(Message msg, boolean flag)void向?qū)?zhàn)的兩家發(fā)送消息設(shè)置是否禁手。requestAnother(Message msg)void處理一個(gè)玩家請(qǐng)求向另外的玩家游戲請(qǐng)求的消息。playerRefresh(Messageplayer)void刷新玩家列表。getdisconnect(Message msg)void處理正在游戲的兩個(gè)玩家中的斷開連接請(qǐng)求。denyRequest(Messagemsg)voidA玩家拒絕B玩家的游戲請(qǐng)求,服務(wù)器向B玩家發(fā)送拒絕游戲請(qǐng)求消息。 服務(wù)器端程序主要方法說明表4 服務(wù)器端主要方法說明方 法 名 稱類 型功 能 說 明addPlayer(Message player)void添加一個(gè)玩家到玩家列表。PORTInt定義服務(wù)器端需要監(jiān)聽的端口,客戶端一連接到此端口,服務(wù)器端就可以監(jiān)聽到,從而和客戶端建立起通信。playerListArrayList玩家列表。socketSocket定義一個(gè)套接字,用來(lái)與客戶端的連接。inObjectInputStream服務(wù)器端的輸入流,用來(lái)接收來(lái)自客戶端的消息。 五子棋服務(wù)器端設(shè)計(jì) 服務(wù)器端的程序是整個(gè)程序的核心,用來(lái)處理來(lái)自客戶端的請(qǐng)求,傳送消息,服務(wù)器程序的設(shè)計(jì)主要包括:監(jiān)聽端口接收來(lái)自客戶端的連接請(qǐng)求,將相互對(duì)戰(zhàn)的客戶端編組,向?qū)?zhàn)的客戶傳送聊天信息,處理來(lái)自客戶端的消息以及向客戶端發(fā)送消息,勝負(fù)的判斷,一些功能轉(zhuǎn)換函數(shù),處理來(lái)自客戶端的連接及斷開連接請(qǐng)求。updateBoard(int x,int y){void更新棋盤。requestAnother(Message msg)void請(qǐng)求與另外的玩家進(jìn)行游戲。paint(GraphiC/S g)void重畫棋盤。getVictory(Message msg)void當(dāng)玩家輸?shù)粲螒驎r(shí)顯示勝利信息。 客戶端主要方法說明表2 客戶端程序主要方法列表方 法 名 稱類 型功 能acceptToPlay(Message msg)void接受一個(gè)玩家的游戲請(qǐng)求arrayToString(char [] arr)String將字節(jié)流轉(zhuǎn)換為字符串drawChess(int x,int y){void在指定位置畫一顆棋字getDeny(Message msg)void拒絕一個(gè)玩家的游戲請(qǐng)求getDisconnection(Message msg)void正在游戲時(shí),另一玩家退出,收到服務(wù)器發(fā)來(lái)的玩家離開消息。coordinateYInt客戶端向服務(wù)器發(fā)送消息時(shí)記發(fā)的當(dāng)前玩家下棋的縱向位置。xpInt 記錄了玩家按下的點(diǎn)的橫向的像素位置ypInt記錄了玩家按下的點(diǎn)的豎向的像素位置settingBoolean是否設(shè)置禁手。messageMessagebeginFlagBoolean記錄游戲開始/結(jié)束的標(biāo)志,也是游戲開始的標(biāo)志bpanelBoardPanel記錄了棋盤信息。nameString記錄了當(dāng)前玩家的名字。outObjectOutputStream表示客戶端套接字的輸出流,用來(lái)向其它客戶端和服務(wù)器端輸出數(shù)據(jù)。PORTInt 定義服務(wù)器端需要監(jiān)聽的端口,客戶端一連接到此端口,服務(wù)器端就可以監(jiān)聽到,從而和客戶端建立起通信。pColorInt 用來(lái)記錄玩家所選的棋的顏色。聊天窗口:一對(duì)正在游戲的玩家可以互相聊天。圖 系統(tǒng)界面游戲菜單:可以單擊和人對(duì)戰(zhàn),設(shè)定禁手規(guī)則,退出,以及作者信息。 運(yùn)行環(huán)境 硬件配置(推薦):CPU:P4—1GHZ或更高內(nèi)存:128M或更多顯示器分辨率:800x600或更高軟件配置: Jbuilder 9或安裝了JDK ,windowsXP操作系統(tǒng)運(yùn)行本軟件的系統(tǒng)平臺(tái): 由于本程序是采用JAVA開發(fā)的,實(shí)現(xiàn)了與平臺(tái)的無(wú)關(guān)性,具有很強(qiáng)的可移性,一次開發(fā)處處運(yùn)行,所以可以在所有平臺(tái)運(yùn)行。l 棋盤顏色與棋子顏色要對(duì)比分明,便于其他程序識(shí)別。l 游戲中設(shè)有禁守規(guī)則和其他走子限制。下面就這三個(gè)部分的主要功能實(shí)現(xiàn)依次進(jìn)行介紹:l 棋盤采用 1515 棋盤。客戶機(jī)/本文來(lái)源于知名教育網(wǎng),更多文件請(qǐng)見文章最后參考文獻(xiàn)。Socket因?yàn)槭腔趥鬏攲樱运潜容^原始的通訊協(xié)議機(jī)制。Socket是兩個(gè)程序之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通訊端點(diǎn),有一個(gè)地址和一個(gè)端口號(hào)來(lái)標(biāo)識(shí)。一是URL用于訪問Internet網(wǎng)上資源的應(yīng)用;另一種是針對(duì)client/server(客戶端/服務(wù)器)模式的應(yīng)用以及實(shí)現(xiàn)某些特殊的協(xié)議的應(yīng)用,它的通訊過程是基于TCP/IP協(xié)議中傳輸層接口socket實(shí)現(xiàn)的。用JAVA AWT做界面也有利于和JAVA內(nèi)部程序的銜接。、文本區(qū)(TextAreacopy)。、列表框(Listcopy。、畫板(Canvasescopy。、標(biāo)copy?;驹好姘澹≒anelcopy。很難想象用戶為了學(xué)會(huì)使用一個(gè)應(yīng)用程序,去記一大堆命令。 界面開發(fā)工具的選擇對(duì)一個(gè)優(yōu)秀的應(yīng)用程序來(lái)說,良好的圖形用戶接口是必不可少的。當(dāng)然,在實(shí)際的操作中,這是不可能的,多多少少性能都會(huì)受到影響。二者的邊界有點(diǎn)模糊,針對(duì)不同的系統(tǒng)要進(jìn)行正確的選擇,這樣才能設(shè)計(jì)出高性能的系統(tǒng)。C/S模式不適合大型的網(wǎng)絡(luò)系統(tǒng),但對(duì)于局域網(wǎng)系統(tǒng)來(lái)說是個(gè)很好的選擇,換句話說,C/S模式適合10到100用戶的局域網(wǎng)的系統(tǒng)開發(fā),而對(duì)于Internet用戶的系統(tǒng)來(lái)說,這種模式就不適合了。試想一下,如果同一時(shí)間,大量的Client同時(shí)對(duì)Server發(fā)出請(qǐng)求,會(huì)出現(xiàn)什么的樣的情況?可能會(huì)是Server的崩潰,也可能會(huì)是網(wǎng)絡(luò)的停滯,但不管是什么,這一點(diǎn)將會(huì)讓Server變成一個(gè)性能的瓶頸,這也是為什么我說C/S模式對(duì)于一個(gè)應(yīng)用軟件的可量測(cè)性來(lái)說含有一定的限制。在C/S模式中,服務(wù)端通常需要通過獲取和使用一些資源來(lái)處理Client的請(qǐng)求,比如說,連接數(shù)據(jù)庫(kù),獲取數(shù)據(jù)信息等。在前面介紹了可量測(cè)性和性能是分布式結(jié)構(gòu)的二大特點(diǎn)。 C/