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

正文內(nèi)容

五子棋設(shè)計與實(shí)現(xiàn)畢業(yè)設(shè)計-wenkub.com

2025-05-11 03:47 本頁面
   

【正文】 消息轉(zhuǎn)發(fā)主要在serverThread類的messageTransfer方法中實(shí)現(xiàn),部分代碼如下:public void messageTransfer(String message) { String clientName, peerName。 } } catch (IOException ex) { (已經(jīng)有服務(wù)器在運(yùn)行. \n)。 (clientSocket, (玩家 + clientAccessNumber++))。 (用戶連接: + clientSocket + \n)。 = server。(3)消息轉(zhuǎn)發(fā) 在服務(wù)器端為每個客戶端建立的服務(wù)線程對象serverThread中對客戶端發(fā)送來的消息進(jìn)行轉(zhuǎn)發(fā)。當(dāng)有兩個玩家建立對戰(zhàn)游戲成功時,調(diào)用一下代碼: (serverName,selfName)。以上代碼分別建立兩個相應(yīng)的哈希映射,方便發(fā)送消息使用。}哈希表的說明如表41所示。(two, new Integer(2))。列表由Java特定的數(shù)據(jù)結(jié)構(gòu)哈希表Hashtable實(shí)現(xiàn)。2. 維護(hù)客戶信息列表。 (().length())。 = false。 (已加入游戲,等待對方下子...)。 if () {//黑子先行 = 1。 (true)。 } // 如果如果接收到的信息以/reject開頭,在狀態(tài)欄顯示拒絕加入游戲。 } // 如果如果接收到的信息以/yourname 開頭,將用戶名顯示在客戶端對話框標(biāo)題欄。 !([inchess])) { (user)。 (所有人)。 StringTokenizer userToken = new StringTokenizer(recMessage, )。以/youwin開頭:你贏了,處理棋盤等。以/userlist開頭:更新用戶名列表。為了使客戶端正常運(yùn)作,還必須了解客戶端的線程類clientThread,它對chessClient的作用就好像chessThread對chessPad一樣,clientThread的構(gòu)造方法接收一個chessClient對象,然后在線程run方法體內(nèi)監(jiān)聽端口,從服務(wù)器讀取消息后進(jìn)行處理。 } isClient = isServer = false。 } if (!isOnChess) { (true)。 (true)。 } } }(4)放棄游戲當(dāng)用戶單擊“放棄游戲”按鈕時進(jìn)行取消游戲的操作:判斷退出一方為輸并清除棋局,重新開盤。 (true)。 } } catch (Exception ee) {//加入游戲 失敗。 (false)。 //向服務(wù)器發(fā)送用戶加入游戲的消息 (/joingame + () + + chessClientName)。 isClient = true。 } else { try { // 如果未建立與服務(wù)器的連接,創(chuàng)建連接,設(shè)定用戶的當(dāng)前狀態(tài)。加入游戲操作的代碼片段如下://///////////////////////////////////////////////////// // 如果點(diǎn)擊的是“加入游戲”按鈕,則先判斷選定的加入的目標(biāo)是否有效。 ()。 isServer = false。 (true)。 else { isOnChess = true。 (false)。 if (!isGameConnected) { if ((, )) { isGameConnected = true。 } }(2) 建立游戲?qū)Α敖⒂螒颉卑粹o進(jìn)行響應(yīng),即更新客戶端的狀態(tài)后向服務(wù)器發(fā)送創(chuàng)建游戲的消息。 //激活創(chuàng)建,加入游戲按鈕 (true)。代碼片段如下:public void actionPerformed(ActionEvent e) { //////////////////////////////////////////////////// // 如果點(diǎn)擊的是“連接主機(jī)”按鈕,則用獲取的服務(wù)器主機(jī)名連接服務(wù)器。此功能在chessPad類中實(shí)現(xiàn)。/OK: 表示創(chuàng)建游戲成功,等待其他人加入。/yourname: 為用戶名信息,客戶端收到該消息后將用戶名顯示在客戶端對話框的標(biāo)題欄上。clientThread類負(fù)責(zé)不斷接收并處理來自服務(wù)器端的消息,它繼承于Thread類。要實(shí)現(xiàn)雙人游戲就必須實(shí)現(xiàn)以下幾項(xiàng)主要功能:1. 連接主機(jī):客戶端啟動后,首先需要連接到服務(wù)器。 客戶端主類實(shí)現(xiàn)從五子棋的規(guī)則及上述chessPad類的設(shè)計可以看到,游戲的勝負(fù)主要基于對落子坐標(biāo)的判斷,故在本游戲中用數(shù)組記錄每個棋子的坐標(biāo)。 (chessPoint_a * 20 7, chessPoint_b * 20 7, 16, 16)。 (白(第 + chessWhiteCount + 步) + chessPoint_a + + chessPoint_b + ,請黑棋下子)。 isWin = checkWin(chessPoint_a, chessPoint_b, color)。 isMouseEnabled = false。 } else { // 如果獲勝,直接調(diào)用chessVictory完成后續(xù)工作 (/ + chessPeerName + /chess + chessPoint_a + + chessPoint_b + + color)。 (chesspoint_black)。amp。}(3)放置棋子放置棋子就是在Panel上的適當(dāng)位置添加黑色或白色棋子,需要注意的是,每次落子后還要進(jìn)行記錄落子位置和顏色、勝負(fù)判定、向服務(wù)器發(fā)送落子消息、修改相應(yīng)狀態(tài)信息等操作。 (337, 97, 6, 6)。 j = 380。 i = 380。 } 其中的chessthread是chessThread類的對象,內(nèi)部保存有對chessPad的引用,負(fù)責(zé)監(jiān)聽端口,隨時接收服務(wù)器端發(fā)來的消息,并調(diào)用chessPad的相應(yīng)方法進(jìn)行處理。 isOnChat = true。 //由socket得到輸入輸出流. in = new DataInputStream(())。 控制面板 用戶面板 游戲面板 聊天信息面板 聊天面板 圖41 客戶端界面客戶端實(shí)現(xiàn)的難點(diǎn)主要在于棋盤面板類和客戶端主類,棋盤面板類實(shí)現(xiàn)了棋盤的繪制、鼠標(biāo)事件的監(jiān)聽、落子的處理、勝負(fù)的判斷等;客戶端主類統(tǒng)籌全局,用于對連接、創(chuàng)建游戲等事件進(jìn)行處理,同時實(shí)現(xiàn)與服務(wù)器的聊天、命令通信等。 三、客戶端接受的信息:(1)用戶列表信息;(2)游戲加入拒絕信息;(3)對手信息;(4)勝利信息;(5)創(chuàng)建成功信息;(6)錯誤信息;(7)聊天信息。 } 程序總體設(shè)計程序使用Socket 技術(shù)[8]以及java 多線程機(jī)制結(jié)合在進(jìn)行客戶與服務(wù)端之間信息的交互,但一個真正實(shí)用程序必須針對具體應(yīng)用定制一套協(xié)議用于用戶程序之間進(jìn)行交互,而該協(xié)議的定制往往是編寫程序的關(guān)鍵也是核心內(nèi)容,該協(xié)議的完善決定程序是否能夠正常運(yùn)行。 (b * 20 == chessBlack_y[chessCompare])) { chessLink++。 step++) { //下層循環(huán)判斷豎直向上第step個位置是否有黑子 for (chessCompare = 0。 } } } if (chessLink == (chessLinkTest + 1))// 豎直向下還有黑色棋子 chessLinkTest++。 chessCompare++) { // 如果有黑子 if (((a + step) * 20 == chessBlack_x[chessCompare]) amp。cheskWin方法進(jìn)行輸贏的判定,判斷的方法很直接——先判斷棋子顏色,再逐個方向去判斷,在每個方向進(jìn)行判定時又分為正方向和負(fù)方向,對每一方向的判斷都很類似,如以下代碼片段用于判斷黑子豎直方向的連子個數(shù): ////////////////////////////// // 以下兩個大的循環(huán)判斷豎直方向棋子連接總數(shù) ////////////////////////////// // 向下的方向連子個數(shù) for (step = 1。我們就像,肯定是每次當(dāng)點(diǎn)擊鼠標(biāo)的時候就在點(diǎn)擊鼠標(biāo)的地方畫一個棋子,所以我們還得定義一個棋子的類來對我們點(diǎn)擊鼠標(biāo)時把棋子繪制出來。從面向?qū)γ娴慕嵌葋砜?,這也不符合,都放在一起,那些東西都在一個雷里面,他們還可以劃分成其他的類,而這里用的是JAVA對該游戲進(jìn)行開發(fā),所以每一個類都要單一,所以面板分成三個部分:一個是棋盤類,也是主要的類,一個是消息面板的類,還有一個就是控制面板的類。這塊內(nèi)容界面做出來了,但有點(diǎn)問題,有待提高。客戶端可以連接服務(wù)器、創(chuàng)建游戲、加入游戲等。但是為了尊重和處于禮貌,執(zhí)白方通常將盤面的第二棋布在自己河界的一側(cè)。棋盤正中為“天元”,周圍4點(diǎn)位“星位”。 二、運(yùn)行環(huán)境:Windows 98/2000/XP/2003操作系統(tǒng)下,建立游戲服務(wù)器后,根據(jù)提示安裝客戶端程序即可。支持jsp編寫,包括語法著色和語法檢查; (5) MyEclipse:J2EE開發(fā)插件,支持jsp,EJB,數(shù)據(jù)庫操作。Progran Files\java\\lib\ JAVA_HOME:java的安裝路徑 JAVA_HOME:Progran Files\java\\lib\ C:\Progran Files\java\\bin classpath:為java加載類(包括class,lib)的路徑,只有類在classpath中, 8. 動態(tài)性:Java允許下載代碼模塊,因此,當(dāng)程序運(yùn)行時也能動態(tài)升級??梢苑烙诳凸?。Java擁有一個網(wǎng)絡(luò)協(xié)議對象庫(TCP/IP,HTTP,F(xiàn)TP等),可以像訪問當(dāng)?shù)匚募粯釉L問Internet上的對象。與面向過程的語言相比,面向?qū)ο蟮恼Z言更能反映人類對世界的認(rèn)識和處理模式,具有良好的代碼重用性。 Java的特點(diǎn):Java技術(shù)取得今天這樣這樣的成就,依賴于這門技術(shù)的先進(jìn)性,Java技術(shù)具有下列優(yōu)點(diǎn):1. 簡單、健壯:許多高級語言都要由程序員進(jìn)行指針運(yùn)算和存儲器管理。也是按照網(wǎng)上的說法,Java EE提供了統(tǒng)一的編程平臺,但不能調(diào)用操作系統(tǒng)的資源;而Android下直達(dá)操作系統(tǒng)
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1