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

正文內(nèi)容

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

2025-05-21 03:47本頁面
  

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