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

正文內(nèi)容

五子棋設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(編輯修改稿)

2025-06-30 03:47 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 的方法很直接——先判斷棋子顏色,再逐個(gè)方向去判斷,在每個(gè)方向進(jìn)行判定時(shí)又分為正方向和負(fù)方向,對(duì)每一方向的判斷都很類似,如以下代碼片段用于判斷黑子豎直方向的連子個(gè)數(shù): ////////////////////////////// // 以下兩個(gè)大的循環(huán)判斷豎直方向棋子連接總數(shù) ////////////////////////////// // 向下的方向連子個(gè)數(shù) for (step = 1。 step = 4。 step++) { // 下層循環(huán)判斷豎直向下第step個(gè)位置是否有白子 for (chessCompare = 0。 chessCompare = chessBlackCount。 chessCompare++) { // 如果有黑子 if (((a + step) * 20 == chessBlack_x[chessCompare]) amp。amp。 ((b * 20) == chessBlack_y[chessCompare])) { chessLink = chessLink + 1。 if (chessLink == 5) { return (true)。 } } } if (chessLink == (chessLinkTest + 1))// 豎直向下還有黑色棋子 chessLinkTest++。 else break。 } //向上的連子個(gè)數(shù) for (step = 1。 step = 4。 step++) { //下層循環(huán)判斷豎直向上第step個(gè)位置是否有黑子 for (chessCompare = 0。 chessCompare = chessBlackCount。 chessCompare++) { //如果有黑子(其實(shí)這里可以break出來(lái)) if (((a step) * 20 == chessBlack_x[chessCompare]) amp。amp。 (b * 20 == chessBlack_y[chessCompare])) { chessLink++。 if (chessLink == 5) { return (true)。 } } } //如果下個(gè)位置還有黑色棋子(可以換用標(biāo)志符判斷) if (chessLink == (chessLinkTest + 1)) chessLinkTest++。 else //如果沒(méi)有,則終止,退出循環(huán) break。 } 程序總體設(shè)計(jì)程序使用Socket 技術(shù)[8]以及java 多線程機(jī)制結(jié)合在進(jìn)行客戶與服務(wù)端之間信息的交互,但一個(gè)真正實(shí)用程序必須針對(duì)具體應(yīng)用定制一套協(xié)議用于用戶程序之間進(jìn)行交互,而該協(xié)議的定制往往是編寫(xiě)程序的關(guān)鍵也是核心內(nèi)容,該協(xié)議的完善決定程序是否能夠正常運(yùn)行。所謂協(xié)議就是程序之間交互的信息的格式規(guī)定, 服務(wù)端和客戶端都遵循該協(xié)議才能夠進(jìn)行對(duì)話, 通俗講是人類之間的語(yǔ)言。 一、服務(wù)端接受的信息:(1)客戶端連接信息,一個(gè)客戶包含兩個(gè)Socket 連接, 一個(gè)為chatSocket,另一個(gè)為chessSocket;(2)客戶端創(chuàng)建游戲信息;(3)客戶端加入游戲信息; (4)下棋信息;(5)放棄游戲信息;(6)公聊和私聊信息;(7)用戶列表信息。 服務(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ù)端為該客戶生成的客戶名; (3)用戶游戲創(chuàng)建成功信息;(4)加入游戲成功后,分別向游戲雙方發(fā)送對(duì)手信息;(5)加入游戲拒絕信息;(6)游戲進(jìn)行信息;(7)游戲勝利信息;(8)公聊和私聊信息。 三、客戶端接受的信息:(1)用戶列表信息;(2)游戲加入拒絕信息;(3)對(duì)手信息;(4)勝利信息;(5)創(chuàng)建成功信息;(6)錯(cuò)誤信息;(7)聊天信息。 四、客戶端發(fā)送的信息:(1)連接服務(wù)器;(2)創(chuàng)建游戲信息;(3)加入游戲信息;(4)放棄游戲;(5)公聊信息或私聊信息。ServerClientClient客戶端服務(wù)器客戶端圖31服務(wù)器新來(lái)客5新來(lái)客6新來(lái)客3新來(lái)客4新來(lái)客1新來(lái)客2聊天,玩游戲圖324 詳細(xì)設(shè)計(jì) 客戶端程序?qū)崿F(xiàn)客戶端(Client)除了實(shí)現(xiàn)網(wǎng)絡(luò)通信以外,還要實(shí)現(xiàn)游戲的一些基本功能,如規(guī)則制定、整個(gè)界面的布局、動(dòng)畫(huà)的實(shí)現(xiàn)等??蛻舳私缑嫒鐖D41所示,由控制面板、游戲面板、用戶面板、聊天面板以及聊天信息面板5個(gè)部分組成。 控制面板 用戶面板 游戲面板 聊天信息面板 聊天面板 圖41 客戶端界面客戶端實(shí)現(xiàn)的難點(diǎn)主要在于棋盤(pán)面板類和客戶端主類,棋盤(pán)面板類實(shí)現(xiàn)了棋盤(pán)的繪制、鼠標(biāo)事件的監(jiān)聽(tīng)、落子的處理、勝負(fù)的判斷等;客戶端主類統(tǒng)籌全局,用于對(duì)連接、創(chuàng)建游戲等事件進(jìn)行處理,同時(shí)實(shí)現(xiàn)與服務(wù)器的聊天、命令通信等。 棋盤(pán)面板類實(shí)現(xiàn)(1) 連接服務(wù)器connectServer方法負(fù)責(zé)連接至指定IP和端口號(hào)的服務(wù)器、初始化Socket、獲取輸入輸出流。connectServer的源代碼如下: public boolean connectServer(String serverIP, int serverPort) throws Exception { try { // (in chessClientconnectServer)。 //建立聊天socket chatSocket = new Socket(serverIP, serverPort)。 //由socket得到輸入輸出流. in = new DataInputStream(())。 out = new DataOutputStream(())。 //創(chuàng)建線程 clientThread clientthread = new clientThread(this)。 ()。 isOnChat = true。 return true。 } catch (IOException ex) {//連接不成功 (chessClient:connectServer:無(wú)法連接,建議重新啟動(dòng)程序 \n)。 } return false。 } 其中的chessthread是chessThread類的對(duì)象,內(nèi)部保存有對(duì)chessPad的引用,負(fù)責(zé)監(jiān)聽(tīng)端口,隨時(shí)接收服務(wù)器端發(fā)來(lái)的消息,并調(diào)用chessPad的相應(yīng)方法進(jìn)行處理。(2)繪制棋盤(pán) Paint方法用于棋盤(pán)的繪制,它可以有效地進(jìn)行重繪,否則當(dāng)棋盤(pán)被遮擋再呈現(xiàn)時(shí)將不能得到重繪而出現(xiàn)殘缺。棋盤(pán)繪制很簡(jiǎn)單,只需在相應(yīng)位置上繪制相應(yīng)數(shù)量的橫線和縱線,最后加上棋盤(pán)的5個(gè)基準(zhǔn)點(diǎn)即可。代碼如下: public void paint(Graphics g) { //棋盤(pán)的方格線 for (int i = 40。 i = 380。 i = i + 20) { (40, i, 400, i)。 } (40, 400, 400, 400)。 for (int j = 40。 j = 380。 j = j + 20) { (j, 40, j, 400)。 } (400, 40, 400, 400)。 //五個(gè)基準(zhǔn)點(diǎn) (97, 97, 6, 6)。 (337, 97, 6, 6)。 (97, 337, 6, 6)。 (337, 337, 6, 6)。 (217, 217, 6, 6)。}(3)放置棋子放置棋子就是在Panel上的適當(dāng)位置添加黑色或白色棋子,需要注意的是,每次落子后還要進(jìn)行記錄落子位置和顏色、勝負(fù)判定、向服務(wù)器發(fā)送落子消息、修改相應(yīng)狀態(tài)信息等操作。chessPaint方法可完成以上功能,其代碼如下: public void chessPaint(int chessPoint_a, int chessPoint_b, int color) { chessPoint_black chesspoint_black = new chessPoint_black(this)。 chessPoint_white chesspoint_white = new chessPoint_white(this)。 if (color == 1 amp。amp。 isMouseEnabled) { // 當(dāng)黑子落子時(shí),記下此子的位置 getLocation(chessPoint_a, chessPoint_b, color)。 // 判斷是否獲勝 isWin = checkWin(chessPoint_a, chessPoint_b, color)。 if (isWin == false) { // 如果沒(méi)有獲勝,向?qū)Ψ桨l(fā)送落子信息,并繪制棋子 (/ + chessPeerName + /chess + chessPoint_a + + chessPoint_b + + color)。 (chesspoint_black)。 (chessPoint_a * 20 7, chessPoint_b * 20 7, 16, 16)。 // 在狀態(tài)文本框顯示行棋信息 (黑(第 + chessBlackCount + 步) + chessPoint_a + + chessPoint_b + ,請(qǐng)白棋下子)。 isMouseEnabled = false。 } else { // 如果獲勝,直接調(diào)用chessVictory完成后續(xù)工作 (/ + chessPeerName + /chess + chessPoint_a + + chessPoint_b + + color)。 (chesspoint_black)。 (chessPoint_a * 20 7, chessPoint_b * 20 7, 16, 16)。 chessVictory(1)。 isMouseEnabled = false。
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1