freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

五子棋設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(文件)

 

【正文】 建立游戲、加入游戲、放棄游戲等。 if (() == ) { host = = ()。 (true)。需要注意的是,如果發(fā)送消息的過(guò)程中發(fā)生異常,必須將客戶端狀態(tài)還原。 isOnChess = true。 (true)。 isServer = true。 (/creatgame + [inchess] + chessClientName)。 (true)。 ( \n + ec)。 // 如果選定的目標(biāo)為空或正在下棋或?yàn)槠浔旧?,則認(rèn)為目標(biāo)無(wú)效。 // 此外還要對(duì)按鈕作一些處理,將“創(chuàng)建連接”按鈕和“加入游戲按鈕”設(shè)為不可用。 (false)。 } } // 如果已建立連接,省去建立連接的操作。 (false)。 isGameConnected = false。 (true)。代碼如下://////////////////////////////////////////////// // 如果點(diǎn)擊的是“放棄游戲”按鈕,同樣要修改按鈕狀態(tài)。 (true)。 (true)。 } clientThread線程類對(duì)消息的處理在設(shè)計(jì)完5個(gè)面板類后即可設(shè)計(jì)客戶端的主類。讀取和處理都是利用chessClient對(duì)象進(jìn)行的。以/username開(kāi)頭:更新客戶端窗口標(biāo)題。以/ok開(kāi)頭:創(chuàng)建游戲成功,等待別人加入。 int userNumber = 0。 while (()) { String user = (String) ( )。 (user)。 else if ((/yourname )) { //之所以是10因?yàn)椤?yourname ”正好10個(gè)字符,后面的是用戶名。 else if ((/reject)) { try { (不能加入游戲)。 } catch (Exception ef) { ()。 = true。 } } else if ((/youwin)) { = false。 } else if ((/OK)) { (創(chuàng)建游戲成功,等待別人加入...)。 } } 服務(wù)器端程序?qū)崿F(xiàn)服務(wù)器界面很簡(jiǎn)潔,實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單,如圖42所示。3. 轉(zhuǎn)發(fā)由客戶端發(fā)送的通信數(shù)據(jù)至其他客戶端。Hashtable的簡(jiǎn)單用法如下。(three, new Integer(3))。表41 哈希表的說(shuō)明名稱類型說(shuō)明clientSataHsahHashtable為客戶端Soket和用來(lái)發(fā)送消息的輸出流簡(jiǎn)歷哈希映射clientNameHashHashtable為客戶端Socket和其姓名建立哈希映射chessPeerHashHashtable為游戲?qū)?zhàn)雙方建立哈希映射哈希表的維護(hù)方法如下。當(dāng)某個(gè)客戶端斷開(kāi)連接時(shí),調(diào)用一下代碼: (clientSocket)。以上代碼為對(duì)戰(zhàn)雙方建立哈希映射,以便以后轉(zhuǎn)發(fā)消息時(shí)使用。 處理來(lái)自客戶端的連接請(qǐng)求 此功能主要在服務(wù)器端主類chessServer的makeMessageServer方法中實(shí)現(xiàn):首先建立一個(gè)serverSorket對(duì)象,然后進(jìn)入循環(huán)不斷監(jiān)聽(tīng)新的用戶連接,在創(chuàng)建一個(gè)與此連接關(guān)聯(lián)的serverThead線程,負(fù)責(zé)為這個(gè)用戶服務(wù),轉(zhuǎn)發(fā)消息等。 try { // 輸出服務(wù)器的啟動(dòng)信息 serverSocket = new ServerSocket(port)。 DataOutputStream outData = new DataOutputStream(())。 //每連接一個(gè)用戶,創(chuàng)建一個(gè)線程,監(jiān)聽(tīng)服務(wù)。 } } 轉(zhuǎn)發(fā)消息serverThread類負(fù)責(zé)接受客戶端發(fā)來(lái)的消息。 /////////////命令處理/////////////////////////////// // 如果消息以“/”開(kāi)頭,表明是命令消息。處理消息時(shí)要針對(duì)很多情況分別進(jìn)行處理。 ()。 (clientSocket, outData)。 while (true) { clientSocket = ()。 long clientAccessNumber = 1。以上代碼從哈希表中移除相應(yīng)的哈希映射。以上代碼從哈希表中移除相應(yīng)的哈希映射。 (clientSocket,(玩家+clientAccessNumber++))。If (n !=NULL){ (two=+n)。(one, new Integer(1))。 (2)維護(hù)客戶信息列表客戶信息列表動(dòng)態(tài)反映了當(dāng)前連接到服務(wù)器端的所有玩家信息,包括玩家IP、玩家姓名、對(duì)戰(zhàn)玩家狀態(tài)等。 圖42 服務(wù)器界面 服務(wù)器端網(wǎng)絡(luò)功能主要包括以下幾方面:1. 處理來(lái)自客戶端的連接請(qǐng)求。 } else {//普通聊天 (recMessage + \n)。 (對(duì)方退出,請(qǐng)點(diǎn)放棄游戲退出連接)。 } else if () { = 1。 } // 如果如果接收到的信息以/peer開(kāi)頭,則記下對(duì)方的名字,然后進(jìn)入等待狀態(tài) else if ((/peer )) { //同理,因?yàn)?peer 六個(gè)字符,所以是6 = (6)。 (true)。 (五子棋客戶端 + 當(dāng)前用戶名: + )。 } (所有人)。amp。 ()。處理這些消息主要由acceptMessage方法完成,其代碼如下:public void acceptMessage(String recMessage) { if ((/userlist )) { // 如果接收到的信息以/userlist 開(kāi)頭,將其后的用戶名提取出來(lái),添加到 // 輸入信息Panel左邊的用戶列表中。以/peer開(kāi)頭:一方加入游戲,開(kāi)始對(duì)弈。clientThread類負(fù)責(zé)不斷接受并處理來(lái)自服務(wù)器端的消息,它繼承自Thread類,對(duì)于不同的消息clientThread會(huì)做出不同的處理,主要處理的消息如下。該類添加了對(duì)控制面板中相應(yīng)按鈕的事件響應(yīng)和聊天面板中鍵盤(pán)事件的處理。 (請(qǐng)建立游戲或者加入游戲)。 (請(qǐng)建立游戲或者加入游戲)。 (1 * )。 ( \n + ee)。 isClient = false。 //向服務(wù)器發(fā)送用戶加入游戲的消息 (/joingame + () + + chessClientName)。 isClient = true。 (true)。 isOnChess = true。 if (selectedUser == null || ([inchess]) || (chessClientName)) { (必須先選定一個(gè)有效用戶)。同樣當(dāng)加入游戲不成功時(shí)必須將客戶端狀態(tài)還原。 (false)。 isOnChess = false。 (false)。 } } // 建立連接時(shí)的操作。 (false)。 if (() == ) { try { // 未建立連接時(shí)的操作。 } } catch (Exception ei) { //連接失敗 (:無(wú)法連接,建議重新啟動(dòng)程序 \n)。 //連接按鈕設(shè)置為非激活態(tài).. (false)。(1) 連接主機(jī)對(duì)“連接主機(jī)”按鈕進(jìn)行響應(yīng),即從IP窗口讀取服務(wù)器IP,然后連接服務(wù)器并更新按鈕狀態(tài)。 當(dāng)對(duì)戰(zhàn)雙方都成功加入游戲后,每走一步都會(huì)將棋子的位置、顏色等相關(guān)信息發(fā)送到服務(wù)器端,再由服務(wù)器轉(zhuǎn)發(fā)給對(duì)手,從而更新對(duì)手的棋局,使雙方棋局保持相同。/youwin: 表示本方獲勝,收到該消息后對(duì)棋局做出相應(yīng)處理。/userlist: 為當(dāng)前用戶列表信息,客戶端收到該消息后將其后的用戶名提取出來(lái),添加到輸入信息Panel左邊的用戶列表中。 以上功能都在chessClient類中實(shí)現(xiàn)。此規(guī)則主要應(yīng)用游戲面板類chessPad中相應(yīng)字段和方法實(shí)現(xiàn)。 } } }上述代碼中checkWin方法用于判斷在特定點(diǎn)落下特定顏色的棋子是否會(huì)分出勝負(fù)。 (chesspoint_white)。 (chessPoint_a * 20 7, chessPoint_b * 20 7, 16, 16)。 isMouseEnabled) { getLocation(chessPoint_a, chessPoint_b, color)。 chessVictory(1)。 isMouseEnabled = false。 if (isWin == false) { // 如果沒(méi)有獲勝,向?qū)Ψ桨l(fā)送落子信息,并繪制棋子 (/ + chessPeerName + /chess + chessPoint_a + + chessPoint_b + + color)。 if (color == 1 amp。 (217, 217, 6, 6)。 //五個(gè)基準(zhǔn)點(diǎn) (97, 97, 6, 6)。 for (int j = 40。代碼如下: public void paint(Graphics g) { //棋盤(pán)的方格線 for (int i = 40。 } return false。 ()。 //建立聊天socket chatSocket = new Socket(serverIP, serverPort)??蛻舳私缑嫒鐖D41所示,由控制面板、游戲面板、用戶面板、聊天面板以及聊天信息面板5個(gè)部分組成。 服務(wù)端發(fā)送的信息:服務(wù)端接受到客戶端發(fā)送的各種信息,會(huì)做出不同響應(yīng), 并發(fā)送相應(yīng)的信息對(duì)客戶端進(jìn)行響應(yīng)或轉(zhuǎn)發(fā)相應(yīng)的信息給對(duì)手,并對(duì)服務(wù)端上存儲(chǔ)的全局信息進(jìn)行更新,服務(wù)端可能發(fā)送的信息包括:(1)所有用戶列表;(2)服務(wù)端為
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1