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

正文內(nèi)容

基于cs模式的網(wǎng)絡(luò)對(duì)戰(zhàn)象棋游戲-文庫(kù)吧資料

2024-12-12 01:30本頁(yè)面
  

【正文】 B o a r dP la y in g T a b le 游 戲 房 間1 棋 盤1 . . 1 棋 盤1 棋 子 集 合 類1 . . 1 圖 32 客戶端各個(gè)類的關(guān)系圖 核心函數(shù)功能介紹: (1) SetEnterUserTips(string uerTypeString, string names, string roomOnLineNames)函數(shù):設(shè)置用戶進(jìn)入房間看到的信息。 游戲房間、棋盤、棋子的關(guān)系 一個(gè)游戲房間對(duì)應(yīng)一個(gè)棋盤,在棋盤上可以添加棋子、刪除棋子、移動(dòng)棋子,這些棋子放在一個(gè)集合中,該集合可以想像成盛放棋子的容器。 (2) Move(int dX, int dY)函數(shù):把棋子在 X 坐標(biāo)上移動(dòng) dX 距離,在 Y 坐標(biāo)上移動(dòng) dY 距離。因此在設(shè)計(jì)棋子時(shí),首先寫了一個(gè)基類,把他們共同的屬性和方法放在里面,然后不同的棋子繼承這個(gè)基類,并擁有自己的屬性和方法。 棋子設(shè)計(jì) 象棋的棋子有七種: 將、士、象、車、馬、炮、 兵。 (8) ResetGrid():初始化棋盤。 (6) AddNewObject()函數(shù):添加新的棋子對(duì)象。 (4) SetChess(int i ,int j,int ChessColor,int ChessID)函數(shù):把 ID號(hào)等于 ChessID 的棋子放置在坐標(biāo) i, j 所在的位置上。 (3) Paint 事件:繪制 graphics 里的棋子對(duì)象。 (1) MouseDown 事件: { if(flag==0) { 判斷鼠標(biāo)按下位置 Point 是否存在棋子對(duì) 象 w 若存在 {選中該對(duì)象 ; flag=1; lastPoint=Point; lastObject=w; } 若不存在 {則返回 ; } } If(flag==1) { 判斷 lastObject 是否滿足移動(dòng)條件 若滿足 河南大學(xué) 本科畢業(yè)生學(xué)士學(xué)位論文 第 15頁(yè) { 判斷鼠標(biāo)按下位置 Point 是否存在棋子對(duì)象 w 若存在 If(!=) { 刪除 w; 把 lastObject 移動(dòng)到該點(diǎn) ; Flag=0; 返回 ; } else{Flag=0; 返回 ; } 若不存在 {直接把 lastObject 移動(dòng)到該點(diǎn) ; flag=0; 返回 ; } } 若不滿足 {令 flag=0; 返回 ; } } } (2) MouseMove 事件:當(dāng)鼠標(biāo)移動(dòng)到棋子上方時(shí)顯示為手型圖標(biāo),表示可以移動(dòng)該棋子。 lastPoint: 表示鼠標(biāo)上一次選中棋子時(shí)的點(diǎn)坐標(biāo) 。因此該控件要響應(yīng) MouseDown、 MouseMove、 MouseUp、 Paint 事件。當(dāng)初始化棋盤時(shí),即在集合graphics 中添加一個(gè)個(gè)棋子對(duì)象,并顯示在棋盤圖片對(duì)應(yīng)的位置上。 客戶端 系統(tǒng) 模塊 設(shè)計(jì) 在這里分析了棋盤設(shè)計(jì) ,棋子設(shè)計(jì)以及游戲房間、棋盤、棋子的關(guān)系。首先對(duì)各模塊 的架構(gòu)進(jìn)行闡述,然后 分別對(duì)各個(gè)模塊的設(shè)計(jì)特別是一些關(guān)鍵技術(shù)進(jìn)行詳細(xì)論述 ,最后介紹客戶端與服務(wù)器的界面設(shè)計(jì) 。 河南大學(xué) 本科畢業(yè)生學(xué)士學(xué)位論文 第 13頁(yè) 接收線程收到此 命令后,只需要將發(fā)言的信息顯示出來(lái)即可。接收線程收到此信息后,結(jié)束當(dāng)前進(jìn)行的游戲。 接收線程根據(jù)此信息,決定是繼續(xù)進(jìn)行游戲還是重新開始新局。 接收線程接收到此信息后,需要顯示對(duì)話框,然后根據(jù)客戶的選擇回復(fù)相應(yīng)的信息。 接收線程收到此信息后,顯示哪一方獲勝的信息。 (13) DeleteChess 格式: DeleteChess, ID 含義:刪除該 ID 的棋子 。 (12) SetChess 格式: SetChess,行,列,顏色, ID 含義:放置棋子位置信息。 (11) Restart 河南大學(xué) 本科畢業(yè)生學(xué)士學(xué)位論文 第 12頁(yè) 格式: Restart 含 義:服務(wù)器指示重新開始新局。 (10) NextChess 格式: NextChess,顏色 含義:服務(wù)器指示應(yīng)該有哪一方放置棋子。 接收線程收到此信息后,需要設(shè)置相應(yīng)的標(biāo)志,表明可以在棋盤上放棋子了。如果是自己,則關(guān)閉棋盤窗體,然后顯示游戲室窗體。 接收線程收到此信息后,可以根據(jù)類別號(hào)判斷是玩家退出房間還是旁觀者退出房間,同時(shí)還要判斷退出的是不是自己。這是應(yīng)為旁觀者進(jìn)入房間時(shí),游戲可能正在進(jìn)行,他必須先看到已經(jīng)進(jìn)行到什么程度 ,然后才能繼續(xù)觀察游戲情況。 (7) Grid 格式: Grid,棋盤上各子位置字符串 含義:棋盤上游戲進(jìn)行的情況 。 接收線程收到此信息后,需要解析字符串,并形象的顯示各桌情況,以便客戶決定旁觀哪一桌或者判斷可以坐在那哪一桌的哪一方 (6) EnterRoom 河南大學(xué) 本科畢業(yè)生學(xué)士學(xué)位論文 第 11頁(yè) 格式: EnterRoom,類別號(hào),用 /分隔的黑白旁觀者名,用 /分隔的該房間所 有人員 含義:客戶進(jìn)入房間 。 接收線程收到此信息后,應(yīng)該根據(jù)接受的信息顯示相應(yīng)的界面,以便客戶決定下一步的操作。 (3) Sorry 格式: Sorry 含義:服務(wù)器游戲室人員已滿,不允許這個(gè)客戶進(jìn)入。 接收線程收到此信息后,需要判斷退出者是不是自己,如果不是自己,則在游戲室顯示此人退出信息。 客戶端接收線程 收到此信息后,不論這個(gè)客戶是不是自己,均需要在游戲室顯示此人進(jìn)入的信息。 事件:?jiǎn)螕糸_ 始按鈕觸發(fā)的事件、單擊求和按鈕觸發(fā)的事件、窗體下載時(shí)觸發(fā)的事件 。 (5) 游戲桌( PlayingTable) 字段: 房間號(hào) tableIndex、進(jìn)入者類別 side、棋盤控件對(duì)象。 (4) 房間控件 屬性: 黑方是否有人、紅方是否有人、黑方玩家昵稱、紅方玩家昵稱、用戶狀態(tài)、旁觀者集合 。 方法: AddNewObject(添加棋子)、 Start(開始游戲)、 SetChess(設(shè)置棋子的位置)、 DeleteChess(刪除棋子)、 UpDateGrid(更新各個(gè)棋子的位置)、 ResetGrid(重新初始化棋盤) 。 方法: Clear (清除所有棋子)、 Draw ( 畫 棋 子 )、GetObjectIncludingPoint(得到包含一點(diǎn)的圖形對(duì)象)、 GetIDObject(得到指定 ID 的對(duì)象)、 SetIDObject (設(shè)置指定 ID 的棋子的位置) 、DeleteIDObject(刪除指定 ID 的對(duì)象)、 Add(添加棋子對(duì)象)、 UnselectAll(所有對(duì)象都不選中) 。 (2) 棋子集合類( GraphicsList) 字段 : ListIChessItem的對(duì)象 _graphicsList。 方法: GetHanle(取 句柄所在點(diǎn))、 DrawTracker(畫句柄)、 Draw(畫河南大學(xué) 本科畢業(yè)生學(xué)士學(xué)位論文 第 9頁(yè) 棋子)、 GetHandleRectangle(取句柄的實(shí)體矩陣)、 PointInObject(判斷點(diǎn) 是 否 在 對(duì) 象 范 圍 內(nèi) )、 IsMoveItem ( 判 斷 棋 子 是 否 移 動(dòng) )、SetChessPosition(設(shè)置棋子位置) 。 客戶端類的組成 客戶端程序包含棋子( IChessItem)、棋子集合類( GraphicsList)、游 戲 桌 ( PlayingTable )、 棋 盤 控 件 ( UserChessBord ) 、 房 間 控 件( ChessUserControl)。 客戶端架構(gòu) 客戶端構(gòu)架從兩個(gè)方面進(jìn)行了介紹,首先是客戶端類的組成,主要介紹了客戶端有哪些類構(gòu)成,以及每個(gè)類應(yīng)具有的屬性和方法。 (11) Win 命令 格式: Win, color 含義:玩家告訴服務(wù)器我已經(jīng)勝利。 (10) Reply 命令 格式: Replay,桌號(hào),座位號(hào), True 或者 False 含義:玩家回復(fù)是否同意和棋信息。 河南大學(xué) 本科畢業(yè)生學(xué)士學(xué)位論文 第 8頁(yè) (9) AskTie 命令 格式: AskTie,桌號(hào),座位號(hào) 含義:玩家請(qǐng)求和棋。這里判斷該不該放置棋子交給了客戶端進(jìn)行判斷,因此服務(wù)器不需要對(duì)棋子位置是否合法進(jìn)行處理。 (7) SetChess 命令 格式: SetChes,桌號(hào),座位號(hào),行,列,顏色,棋子 ID 含義:玩家請(qǐng)求在指定位置放置棋子。 由于只 有玩家才允許單擊開始按鈕,因此服務(wù)器不需要判斷是不是 旁觀者。 (5) Talk 命令 格式: Talk,桌號(hào),對(duì)話內(nèi)容 含義:表明小房間內(nèi)有人說(shuō)話,服務(wù)器需要將說(shuō)話內(nèi)容告訴該房間的所有人。 對(duì)服務(wù)器來(lái)說(shuō),有人退出房間,必須判斷他原來(lái)是旁觀者還是玩家。除此之外,服務(wù)器 還要將該用戶進(jìn)入房間的情況告訴房間內(nèi)的其他人。 服務(wù)器需要將房間內(nèi)的人員情況告訴該用戶,如果該用戶是旁觀者,還需要將當(dāng)前棋盤上的棋子情況發(fā)送給他。 (3) EnterRoom 命令 格式: EnterRoom,桌號(hào),類別號(hào) 含義:用戶進(jìn)入游戲室內(nèi)的小房間。 (2) Logout 命令 格式: Logout 含義:用戶退出游戲室。 如果還能容納用 戶進(jìn)入,再判斷游戲室內(nèi)是否已 經(jīng)有人使用過(guò)這個(gè)昵稱。 客戶端發(fā)送給服務(wù)器的 命令 (1) Login 命令 格式: Login,昵稱 含義:客戶與服務(wù)器建立連接后,希望登錄服務(wù)器進(jìn)入游戲室。 (4) 玩家 屬性: 用戶、是否開始 。 (3) 游戲房間 屬性: 旁觀者、黑方、紅方、棋盤 。 (2) 棋盤 屬性: 黑色棋子、紅色棋子、棋盤數(shù)組、下一步顏色 。 其次, 兩個(gè)用戶之間的通信需要以服務(wù)器為橋梁, 服務(wù)器對(duì)每個(gè)用戶的信息都要進(jìn)行記錄,因此服務(wù)器端系統(tǒng)模塊應(yīng)包含棋盤類、游戲房間類、玩家類、用戶類。然后介紹了客戶端發(fā)送給服務(wù)器的命令 有哪些, 包括命令格式、含義以及服務(wù)器收到該命令后應(yīng)進(jìn)行的動(dòng)作。 3. 循環(huán)監(jiān)聽客戶端連接,每接受一個(gè)客戶端連接,就創(chuàng)建一個(gè)對(duì)應(yīng)的線程循環(huán)接收該客戶端發(fā)來(lái)的信息。 服務(wù)器端編程的步驟: 1. 創(chuàng)建 TcpListener 類的對(duì)象,并與服務(wù)器的 IP 和端口號(hào)綁定。 3. 利用網(wǎng)絡(luò)流創(chuàng)建接收信息流和發(fā)送信息流 。 客戶端編程的步驟 : 1. 利 用服務(wù)器的 IP 和端口號(hào)創(chuàng)建 TcpClient 實(shí)例,與服務(wù)器建立連接,若創(chuàng)建失敗 , 則與服務(wù)器連接失敗 ,否則連接成功。在本設(shè)計(jì)中使用了 TcpClient 和TcpListener 類,這兩個(gè)類封裝了底層的套接字。 服務(wù)器端與客戶端通信的基本原理 S o c k e t ( )B i n d ( )L i s t e n ( )A c c e p t ( )R e c e i v e ( )S e n d ( )C l o s e ( )S o c k e t ( )C o n n e c t ( )S e n d ( )R e c e i v e ( )C l o s e ( )服 務(wù) 器客 戶 端 圖 21 面向連接通信原理圖 河南大學(xué) 本科畢業(yè)生學(xué)士學(xué)位論文 第 5頁(yè) 本設(shè)計(jì)采用面向連接的通信原理,利用同步 TCP 編寫了該游戲。 ( 5)如果一方想求和 , 則可點(diǎn)擊【求和】按鈕 。如果玩家單擊對(duì)方棋子,則表示吃掉該棋子,游戲規(guī)則嚴(yán)格按照中國(guó)象棋走法規(guī)則。 旁觀者可隨時(shí)進(jìn)入游戲房間觀看游戲進(jìn)行情況。 ( 2)允許玩家自由選擇坐在哪一桌的哪一方。
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1