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

正文內(nèi)容

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

2025-06-15 03:47 上一頁面

下一頁面
 

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