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

正文內(nèi)容

網(wǎng)絡中國象棋設計-本科畢業(yè)論-資料下載頁

2025-06-07 03:15本頁面
  

【正文】 一是只思考一步,沒有考慮多步,二是評分是死的,不能很好地適應棋局的變化,三是沒有考慮獲勝的條件是吃掉對方的將或帥。這個設計還有很多可以完善的地方 以提高計算機的智能。 音效功能的設計 這個功能實現(xiàn)起來比較簡單。 只需要播放音效對應的音頻文件即可。調(diào)度中心模塊會向音效模塊發(fā)送一個音效編號,音效模塊只需要播放音效編號對應的音頻文件即可。 界面的設計 界面模塊包括棋譜模塊、功能按鈕模塊、棋盤模塊、提示信息模塊和聊天模塊 5 個模塊,相對的,界面上也有這 5 個部分,如圖 326 所示。 圖 326 中國象棋界面 聊天界面在復盤和人機對戰(zhàn)時是禁用狀態(tài),呈現(xiàn)灰色,既無法輸入信息,也無法收到信息。 第四章 詳細設計與編碼實現(xiàn) 23 第四章 詳細設計與編碼實現(xiàn) 象棋信息模塊 這個模塊比較簡單,并且?guī)缀跛心K都要用到這個模塊,因此在模塊圖中并未畫出來。在此就詳細說明一下是怎么實現(xiàn)的。象棋信息( ChessInfo)模塊的類圖如圖 41 所示。 圖 41 ChessInfo 類圖 其中, chessColor 指的是棋子的顏色,是紅色和黑色之間的一個; chessType指的是下棋類型,是服務器類型( ServerType)、客戶端類型( ClientType)、復盤類型( ReplayType)和人機對戰(zhàn)類型( ComputerType)中的一個; chessIP 指的是服務器的 IP 地址; chessPort 指的是服務器監(jiān)聽的端口號,默認值是 8888。 這個模塊中,幾個函數(shù)的實現(xiàn)都比較簡單。以“ get”開頭的函數(shù)只需返回對應的屬性值就可以了,以“ set”開頭的函數(shù)只要修改對應的屬性值就可以了,以電子科技大學學士學位論文 24 “ is”開頭的函數(shù)只用判斷屬性值和所查詢的是否一樣就可以了。這些函數(shù)或多或少的會被其它模塊調(diào)用來獲取相關的信息。 數(shù)據(jù)模塊 數(shù)據(jù)的表示 下棋信息的編碼 中國象棋,紅方先走,黑方后走,紅在下,黑在上。棋盤橫線 10 條,豎線 9條,是一個二維結(jié)構(gòu),因此以左上角為原點,向右為 X 軸正方 向,向下為 Y 軸正方向,這樣就可以用坐標表示棋盤中每個位置了。 X 的取值范圍為{ 0、 8}, Y 的取值范圍為{ 0、 9}。如圖 42所示。 X 坐標和 Y 坐標用二進制表示的話都各需要 4bit,如表 41 所示。 圖 42 棋盤坐標 把 X 坐標的 4bit 放在前面, Y 坐標的 4bit 放在后面,合在一起就是 8bit,故而棋盤上的每一個位置都可以用 8bit 來唯一標志。 對于棋子來說,紅黑雙方各有 16 個棋子,一共有 32 個棋子,用二進制表示的話正好需要 5bit,但是為了表示空棋 子,也就是沒有棋子,就變成 33 個了,用5bit 無法表示,因此用 6bit 唯一編碼每個棋子。如表 42 所示。 無棋子,或空棋子就用“ 100000”表示。這樣每個棋子包括無棋子都有了唯一的 6bit 的編碼。 第四章 詳細設計與編碼實現(xiàn) 25 表 41 棋盤坐標二進制表示表 Y X 0000 0001 0010 0011 0100 0101 0110 0111 1000 0000 (0,0) (1,0) (2,0) (3,0) (4,0) (5,0) (6,0) (7,0) (8,0) 0001 (0,1) (1,1) (2,1) (3,1) (4,1) (5,1) (6,1) (7,1) (8,1) 0010 (0,2) (1,2) (2,2) (3,2) (4,2) (5,2) (6,2) (7,2) (8,2) 0011 (0,3) (1,3) (2,3) (3,3) (4,3) (5,3) (6,3) (7,3) (8,3) 0100 (0,4) (1,4) (2,4) (3,4) (4,4) (5,4) (6,4) (7,4) (8,4) 0101 (0,5) (1,5) (2,5) (3,5) (4,5) (5,5) (6,5) (7,5) (8,5) 0110 (0,6) (1,6) (2,6) (3,6) (4,6) (5,6) (6,6) (7,6) (8,6) 0111 (0,7) (1,7) (2,7) (3,7) (4,7) (5,7) (6,7) (7,7) (8,7) 1000 (0,8) (1,8) (2,8) (3,8) (4,8) (5,8) (6,8) (7,8) (8,8) 1001 (0,9) (1,9) (2,9) (3,9) (4,9) (5,9) (6,9) (7,9) (8,9) 有了對棋盤位置的編碼和棋子的編碼,就可以對一步棋子移動進行編碼。在這里以及后面都規(guī)定,用 from表示起點, to 表示落點, fid 表示起點的棋子, tid表示落點的棋子, fx 表示起點位置的 X 坐標, fy表示起點位置的 Y 坐標, tx表示落點位置的 X 坐標, ty表示落點位置的 Y 坐標。這樣用“ fid+tid+fx+fy+tx+ty”就可以表示一次棋子移動,這一共是 6+6+4+4+4+4=28bit,一方面為了湊夠 32bit,另一方面為了與后面的棋子操作編碼區(qū)別開來,于是就在棋子移動信息編碼前面都加上“ 0011”作為前綴,而 棋子操作指令的前綴都為“ 0000”,這樣就區(qū)別開來了。棋子移動信息編碼格式如表 43 所示。 有了編碼表,就可以表示任意一步棋子移動信息,比如“ 0011 000010 100000 0010 0110 0111 0110”,即 0x30A02676,就表示紅方的車從( 2, 6)位置移動到( 7,6)位置。如果知道了 fid、 tid、 fx、 fy、 tx和 ty,就可以通過移位運算計算出對應的編碼。在源代碼文件里面有兩個文件分別是 文件和 文件,里面的函數(shù)可以用來生 成編碼,也可以解析編碼。因為比較簡單,在此我就不再具體講它的實現(xiàn)了,下面只是列出來它提供的函數(shù)及其功能,如表 44 所示,其中 quint32 指的就是 32bit 無符號整數(shù), QPoint 表示一個點,它含有 X 和 Y 坐標。 電子科技大學學士學位論文 26 表 42 棋子編碼表 編號 二進制 紅方 編號 二進制 黑方 0 000000 帥 16 010000 將 1 000001 車 17 010001 車 2 000010 車 18 010010 車 3 000011 馬 19 010011 馬 4 000100 馬 20 010100 馬 5 000101 炮 21 010101 炮 6 000110 炮 22 010110 炮 7 000111 士 23 010111 仕 8 001000 士 24 011000 仕 9 001001 相 25 011001 象 10 001010 相 26 011010 象 11 001011 兵 27 011011 卒 12 001100 兵 28 011100 卒 13 001101 兵 29 011101 卒 14 001110 兵 30 011110 卒 15 001111 兵 31 011111 卒 表 43 棋子移動信息編碼格式表 值 0 0 1 1 fid tid fx fy tx ty 長度 1 1 1 1 6 6 4 4 4 4 下面對棋子的操作信息進行編碼,編碼格式是: 0010 + 12bit 類型編碼 + 16bit 操作編碼,一共也是 32bit。具體編碼格式如表 45 所示。 由于前綴不同,棋子移動信息和棋子操作信息可以和稱下棋信息,下棋信息也是唯一標志的,下棋信息可以用一個 32bit 無符號整數(shù)表示。 第四章 詳細設計與編碼實現(xiàn) 27 表 44 編碼處理函數(shù)表 函數(shù)原型 功能 bool isMoveChess(quint32 cm) 判斷是否是移動棋子 bool isNewChess(quint32 cm) 判斷是否是新建 bool isExitChess(quint32 cm) 判斷是否是退出 bool isRegretChess(quint32 cm) 判斷是否是悔棋 bool isGiveUpChess(quint32 cm) 判斷是否是認輸 bool isDrawEndChess(quint32 cm) 判斷是否是言和 bool isCheckNet(quint32 cm) 判斷是否是檢測網(wǎng)絡 bool isStartChess(quint32 cm) 判斷是否是開始 bool isChangeChess(quint32 cm) 判斷是否是交換 quint32 makeMsg(quint32 fid, const QPoint amp。from, quint32 tid, const QPoint amp。to) 生成移動棋子編碼 quint32 getFid(quint32 cmt) 從編碼獲取 fid quint32 getTid(quint32 cmt) 從編碼獲取 tid QPoint getFrom(quint32 cmt) 從編碼獲取起點 QPoint getTo(quint32 cmt) 從編碼獲取落點 int getFx(quint32 cm) 從編碼獲取 fx int getFy(quint32 cm) 從編碼獲取 fy int getTx(quint32 cm) 從編碼獲取 tx int getTy(quint32 cm) 從編碼獲取 ty 數(shù)據(jù)的存儲 在關程序中用 Qvector[6]來存儲數(shù)據(jù)。 前面已經(jīng)說了 QPoint, 表示一個二維平面上的一個點,它有表示 X 坐標和 Y坐標的私有成員,并有獲取和修改坐標的共有函數(shù),故可以用 QPoint 表示棋盤上的一個位置。 QVecotr 即是向量,和 C++標準庫里面的 vector[7]一樣,都是一個順序存儲結(jié)構(gòu),但是可變長度的,可以用下標來訪問,并包含了一些常用的函數(shù)。vector 是動態(tài)空間,隨著元素的加入它的內(nèi)部會自行擴充空間 [8]。 在程序中就用 QVectorQPoint chess(32)表示每個棋子在棋盤上的位置,比如用 chess[0].x()就可以得到編號為 0的棋子(即紅方的帥)的 X坐標, 用 chess[16].y()就可以得到編號為 16 的棋子(即黑方的將)的 Y 坐標。用這種表示方法,就可以很容易得到每個棋子在棋盤上的位置,同時通過一些函數(shù)就可以得到棋盤上每個位置上都是些什么樣的棋子。關于這些函數(shù)的詳細信息請見下一節(jié)的介紹。 電子科技大學學士學位論文 28 表 45 棋子操作信息編碼格式表 類型編碼 類型 操作編碼 操作 完整編碼 0000 0000 0000 新建 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0000 0001 接受 0x2021 0001 0000 0000 0000 0002 拒絕 0x2021 0002 0000 0000 0001 退出 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0010 悔棋 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0000 0001 接受 0x2021 0001 0000 0000 0000 0002 拒絕 0x2021 0002 0000 0000 0100 認輸 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0000 0001 接受 0x2021 0001 0000 0000 0000 0002 拒絕 0x2021 0002 0000 0000 0000 0003 紅方請求 0x2021 0003 0000 0000 0000 0004 黑方請求 0x2021 0004 0000 0000 0101 言和 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0000 0001 接受 0x2021 0001 0000 0000 0000 0002 拒絕 0x2021 0002 0000 0000 0110 檢測 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0000 0001 相應 0x2021 0001 0000 0000 0111 開始 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0000 0001 接受 0x2021 0001 0000 0000 0000 0002 拒絕 0x2021 0002 0000 0000 1000 交換 0000 0000 0000 0000 請求 0x2021 0000 0000 0000 0000 0001 接受 0x2021 0001 0000 0000 0000 0002 拒絕 0x2021 0002 0000 0000 1001 結(jié)束 0000
點擊復制文檔內(nèi)容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1