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

正文內(nèi)容

基于網(wǎng)絡和java語言的網(wǎng)絡五子棋游戲-資料下載頁

2024-12-06 01:14本頁面

【導讀】的知識結(jié)合起來,應用到實際的項目中。本文包括課題設(shè)計的背景、意義、基本。理論,包括TCP/IP通信協(xié)議,Sockets規(guī)范,UltraEdit-32開發(fā)工具等。接下來是本文的重點,闡述了使用。UltraEdit-32開發(fā)工具,進行網(wǎng)絡五子棋軟件開發(fā)的詳細設(shè)計內(nèi)容。計,設(shè)置,畫棋子,判別輸贏,消息封裝等模塊。一步給出了解決的策略和具體的實現(xiàn)。在介紹時,采用了文字、圖片,流程圖等。各種表達方式綜合運用,增強了本文的閱讀性和可理解性。

  

【正文】 落了棋子。在這種情況下,我們當給用戶以悔過的機會,這也是出于用戶的需求,故而在此軟件中我們專門為用戶設(shè)置了悔棋的功能,圖 就是此軟件中悔棋處理過程: 圖 悔棋過程處理流程圖 N N N Y Y Y 給對方發(fā)送一個消息號為‘ h‘的消息 if( !overamp。amp。!turnamp。amp。playamp。amp。(xy0)) 如果所彈出對話框的返回值為‘ IDYES‘ 對方收到該消息后,彈出一個提示“是否同意對方悔棋”的對話框 對方所彈出對話框的返回值為‘ IDYES‘? 對方處理: Turn=FALSE 。 timeinit() 。 并調(diào)用 huiqi()進行處理 發(fā)送一個消息號為‘ A‘的消息 本方收到該消息后: timeinit() 。 turn=true 。 并調(diào)用 huiqi()進行處理 對方處理: 發(fā)送一個消息號為‘ H’的消息 本方收到該消息后,彈出一個提示“對方不同意悔棋“的對話框 本次悔棋處理完畢 悔棋失敗 悔棋失敗 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 18 在圖 中,為你講述了雙方在悔棋時的處理過程,但是并沒有涉及到五子棋游戲中的真正意義上悔棋的具體實現(xiàn)情況。其實,在書中提到的網(wǎng)絡五子棋軟件中,悔棋的具體處理是通過調(diào)用函數(shù) Huiqi()來實現(xiàn)的,圖 所示,就是函數(shù) huiqi()的具體處理過程。 圖 悔棋具體處理流程圖 其 實此處理過程的具體實現(xiàn)也比較簡單,主要是由于我們很早就把所有的棋子的坐標都保存在了一個 pnt 的位置坐標 結(jié)構(gòu)體數(shù)組中,可以很容易的就找到當前棋盤上最后落的一個棋子的坐標。只要把該棋盤上該位置的狀態(tài)置為空就無棋子顯示了,另外再把該棋子所在的記錄五連和多連的組合中的棋子數(shù)目和總的棋子數(shù)目減 1 即可。很顯然我們的這個軟件可以不斷的悔棋直到棋盤上面沒有棋子為止。 獲取所要悔棋棋子的坐標( pnt[xy].x, pnt[xy].y) 將當前位置棋子置為空,即令 board[pnt[xy].x][pnt[xy].y]=2 將該棋子所在的五連獲勝組合中的棋子數(shù)目減 1 for(int j=0。j572。j++) if(table[pnt[xy].x][pnt[xy].y][j]) win[j]=1 。 將該棋子所在的多連組合中的棋子數(shù)目減 1 for(int k=0。k500。k++) if(tab6[pnt[xy].x][pnt[xy].y][k]) fail[k]=1 。 將所下的總棋子數(shù)目減 1,即 xy; 更新棋盤顯示 UpdateData(FALSE) 。 Invalidate(FALSE)。 悔棋結(jié)束 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 19 四 、 和棋處理 網(wǎng)絡對弈時,常常由于肉眼難于看出誰勝誰負而又不愿意再往下對弈的時候就會考慮到采用和局處理,故此軟件也要專門為用戶設(shè)置和局功能,圖 所示就是和局的處理全過程。 圖 和局處理流程圖 N N N Y Y Y 彈出一個詢問是否要和局的對話框 if(!over) 所彈出對話框的返回值為‘ IDYES‘ 給對方發(fā)送一 個消息號為‘ e’的消息 對方收到該消息后,彈出一個提示“是否同意和局”的對話框 對方所彈出對話框的返回值為‘ IDYES‘? 對方回復一個消息號為‘ E’的消息 收到對方回復的這個消息后,彈出一個提示“對方拒絕和局“的對話框 對方處理: 設(shè)置 over=true,表示本局結(jié)束 和局盤數(shù)加 1,即 ++ 更新玩家信息顯示 同時回復一個消息號為‘ a’的消息 收到對方回復的該消息后,彈出一個提示“對方同意和局“的對話框; 設(shè)置 over=true,表示本局結(jié)束 和局盤數(shù)加 1,即 ++ 更新玩家信息顯示 本次和局處理完畢 和局失敗 和局失敗 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 20 五 、 時間設(shè)置 只要是網(wǎng)絡游戲毫無疑問的一般都有時間的限制,對于網(wǎng)絡網(wǎng)絡五子棋更是如此。網(wǎng)絡對弈時,時間的限制一方面可以督促用戶專心的下棋來提高用戶的下棋的效率,另外一方面也是可以防止某一方無限制的等待,圖 所示就是此系統(tǒng)中時間設(shè)置功能實現(xiàn)的處理過程。 圖 時間設(shè)置處理流程圖 Y N Y Y 彈出一個帶有時間輸入框的對話框,輸入允許落子的最大時間值 保存原先所設(shè)置的時間值 此對話框的返回值為‘ IDYES‘? 給對方發(fā)送一個消息號為‘ M’,內(nèi)容為所輸入的時間的消息 對方收到該消息后,讀取該時間值,并彈出一個詢問是否同意該時間值的設(shè)定 此對話框的返回值為‘ IDYES‘? 對方回復一個消息號為‘ y’的消息; 同時把該時間值賦給變量 TimeOut 彈出一個提示“時間設(shè)置失敗 “的對話框 收到對方回復的該消息后,把該時間值賦給變量 TimeOut,并彈出一個提示“時間設(shè)置成功“的對話框 還原時間設(shè)置對話框中原來的時間值 時間設(shè)置過程完畢 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 21 很顯然,時間的設(shè)置是 雙方都要達成共識后方能生效的,在上圖中是通過一請求一應答的方式來達到是同意還是不同意對方所設(shè)置的那個時間的限制。 第四節(jié) 雙人對弈 當兩人坐在同一臺計算機面前時,如果再采用網(wǎng)絡對弈的話,那似乎有些浪費資源,而且也還顯得十分的麻煩,介于這種考慮,我們在本軟件中專門為用戶設(shè)置了雙人直接對弈的五子棋游戲功能,下面就為你具體的分析其實現(xiàn)的全過程 。 一 、 部分變量和方法說明 Chess[] chessList = new Chess[(ROWS+1)*(COLS+1)]。 //初始每個數(shù)組元素為 null ① Chess[]表示棋盤上各子的狀態(tài),數(shù)組中元素為 Chess 類型通過它的成員變量 x,y 可以得到每個棋子的坐標, boolean 型變量 isBlack,為 1 時表示黑子,為 0 時表示白子; ② int xIndex,yIndex 定義為當前棋子的索引,以便于悔棋時的操作 ; ③ int xPos = chessList[i].getX() * GRID_SPAN + MARGIN。用于得到網(wǎng)格交叉點的 x 坐標,以便在繪制棋子時,準確的將棋子落在網(wǎng)格交叉點上,同理通過 int yPos = chessList[i].getY() * GRID_SPAN + MARGIN。得到網(wǎng)格交叉點的 y坐標 ; ④ 通過 (xPos , , , )。語句在最后下的一個棋子周圍標記紅色矩形框 ; ⑤ 用 private boolean findChess(int x, int y)方法判斷鼠標當前位置是否可以落子,因為本次遍歷不需對所遍歷對象做處理,所以選擇采用加強的 for 循環(huán)減少代碼量和增強程序 的可讀性 ; for(Chess c : chessList) { if(c != null amp。amp。 () == x amp。amp。 () == y) return true。 } ⑥ one 用來表示當前落子的是黑方還是白方,為真時表示黑方 . 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 22 二 、 雙人對弈的初始化過程 棋盤初始化 時,首先將棋子數(shù)組中每個元素的值設(shè)為 null,表示還沒有落子;然后將 isBlack變量的值設(shè)為真,表示先下黑子;最后,將整型變量 chessCount的值設(shè)為 0。 Chess[] chessList = new Chess[(ROWS+1)*(COLS+1)]。 //初始每個數(shù)組元素為 null boolean isBlack = true。 boolean gameOver = false。//游戲是否結(jié)束 int chessCount 。 // 當前棋盤的棋子個數(shù) int xIndex, yIndex。 //當前剛下的棋子的索引 。 三 、 落子處理過程 雙人對弈中落子仍然是點擊鼠標的左鍵來實現(xiàn)的,具體過程如下所示: public void mousePressed(MouseEvent e) {// 鼠標按鍵 在組件上按下時調(diào)用。 //游戲已經(jīng)結(jié)束,不能下 if(gameOver) return。 String colorName = isBlack ? 黑棋 : 白棋 。 xIndex = (()MARGIN+GRID_SPAN/2)/GRID_SPAN。 //將鼠標點擊的坐標位置轉(zhuǎn)換成網(wǎng)格索引。 yIndex = (()MARGIN+GRID_SPAN/2)/GRID_SPAN。 //落在棋盤外,不能下 if(xIndex 0 || xIndex ROWS || yIndex 0 || yIndex COLS) return。 //x,y 位置已經(jīng)有棋子存在,不能下 if(findChess(xIndex, yIndex)) return。 Chess ch = new Chess(xIndex, yIndex, isBlack ? : )。 chessList[chessCount++] = ch。 repaint()。 //通知系統(tǒng)重新繪制 if(isWin()) { //給出勝利信息 ,不能再繼續(xù)下棋 String msg = (恭喜, %s 贏了! , colorName)。 (this, msg)。 gameOver = true。 } isBlack = !isBlack。 } 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 23 第五節(jié) 本章小結(jié) 在本章中將系統(tǒng)劃分出幾個相對獨立的模塊,這樣有效的減低了系統(tǒng)的開發(fā)難度。將系統(tǒng)劃分成 相對獨立的模塊,然后分別進行開發(fā)其基本思想類似計算機網(wǎng)絡中 ISO/OSI 模型的分層的思想,這里簡稱為“分層思想”。目前“分層思想”已在軟件開發(fā)過程中得到廣泛的應用。 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 24 第四章 棋盤類 —— chessClient 第一節(jié) 主要成員變量說明 一 、 網(wǎng)絡連接標志 —— isGameConnected 用來表示當前網(wǎng)絡連接的情況,在網(wǎng)絡對弈游戲模式下客戶端連接服務器的時候用來判斷是否連接成功;事實上,它也是是否可以進行網(wǎng)絡對弈的基礎(chǔ)。 二 、 游戲用戶屬性標志 —— isServer 與 isClient 由于當客戶端與服務器 端建立鏈接后還需要判斷玩家的屬性,是游戲建立者還是加入游戲的玩家。所以我們設(shè)置布爾型變量 isServe 與 isClient 并設(shè)置其初始值為 false,將其初始化,表示在建立連接前用戶既不是游戲建立者也不是游戲的參與者。 三、 游戲進行標志 —— isOnChat 與 isOnChess 由于當客戶端與服務器端建立鏈接后還需要判斷玩家的狀態(tài),是正在聊天還是正在進行棋局。所以我們設(shè)置布爾型變量 isOnChat 與 isOnChess 并設(shè)置其初始值為 false。很顯然當游戲創(chuàng)建連接之前客戶端用戶既不能跟別的玩家聊天也不能跟別的玩 家下棋,所以將兩個變量的初始值設(shè)為 false。 第二節(jié) 主要成員函數(shù)說明 一 、 客戶端類的構(gòu)造方法 —— chessClient() 本構(gòu)造方法使用 .*,以及 .*中的一些類和方法,構(gòu)造出客戶端的界面,主框架是一個由 frame 類繼承得到的 chessClient 類,然后加入五個由 Pad 類繼承得到的 pad 供客戶端使用,然后在通過布局管理器,將我個Pad 按照最初的設(shè)計界面放置在相應的位置上。最后在相應組建上添置完成其功能所需要的監(jiān)聽器。 重慶郵電大學本科畢業(yè)設(shè)計 (論文 ) 25 二 、 清空棋盤 —— Clear 在每 一局游戲開始的時候都需要調(diào)用這個函數(shù)將棋盤清空,也就是棋盤的初始化工作。在這個函數(shù)中,主要發(fā)生了這么幾件事情: ① 恢復游戲相關(guān)的變量值,通過一個簡單的循環(huán)操作將 chessList[i] = null ② 把 isblack 變量值設(shè)為 true,表示每一次棋局都是由黑棋先下 ③ 把 gameOver 變量值設(shè)為 false。 ④ 最后把 chessCount 值設(shè)為 0。至此完成復盤操作。 三 、 繪制棋子 —— paintComponent(Graphics g) 這無疑是很重要的一個函數(shù),它根據(jù)參數(shù)給定的坐標和顏色繪制棋子。繪制的詳細 過程如下: ① 將給定的棋盤坐標換算為繪圖的像素坐標。 ② 根據(jù)坐標繪制棋子位圖。 ③ 在剛繪制完成的棋子四周繪制最后落子指示矩形。 四 、 鼠標左鍵操作 —— mousePressed(MouseEvent e) 作為棋盤唯一響應的左鍵消息,也需要做不少的工作: ① 通過判斷 isBlack 的值來判斷下一步下子是黑子還是白子,如果值為真則
點擊復制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1