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

正文內(nèi)容

基于j2me的藍(lán)牙中國象棋游戲的設(shè)計(jì)與實(shí)現(xiàn)-文庫吧資料

2025-06-24 14:34本頁面
  

【正文】 未分出勝負(fù),玩家回合 繼續(xù)游戲 玩家選擇悔棋命令 系統(tǒng)發(fā)送悔棋命令到對方端 系統(tǒng)收到對方同意消息 A1:系統(tǒng)收到對方不同意消息 系統(tǒng)恢復(fù)玩家操作的上一步 繼續(xù)下棋 A1:系統(tǒng)收到對方不同意消息 系統(tǒng)提示對方不同意 進(jìn)入對戰(zhàn)悔棋主事件流第 5 步 表 49 認(rèn)輸用例描述 用例名稱 參與者 前置條件 后置條件 主事件流 認(rèn)輸 玩家 進(jìn)入游戲,未分出勝負(fù),玩家回合 游戲結(jié)束 玩家選擇認(rèn)輸命令 系統(tǒng)提示游戲結(jié)束 系統(tǒng)顯示游戲戰(zhàn)果 系統(tǒng)發(fā)送認(rèn)輸消息到對方端 用例結(jié)束 其他事件流 表 410 重新開局用例描述 用例名稱 參與者 前置條件 后置條件 主事件流 重新開局 主機(jī)端玩家 主機(jī)端與客戶端已建立連接或游戲已分勝負(fù) 開始新棋局,交換雙方棋子顏色 主機(jī)端玩家選擇開始新棋局命令 系統(tǒng)發(fā)送開始命令到客戶端 客戶端返回確認(rèn)消息 28 系統(tǒng)顯示游戲界面 用例結(jié)束 其他事件流 表 411 聊天用例描述 用例名稱 參與者 前置條件 后置條件 主事件流 其他事件流 聊天 玩家 進(jìn)入游戲界面 繼續(xù)游戲 玩家選擇聊天 系統(tǒng)顯示信息輸入界面 玩家編輯信息并選擇發(fā)送命令 A1:玩家選擇取消發(fā)送 系統(tǒng)發(fā)送信息 系統(tǒng)回到游戲界面 A1:玩家選擇取消發(fā)送 (1)進(jìn)入發(fā)送信息主事件流第 5 步 系統(tǒng)詳細(xì)設(shè)計(jì) 界面模塊 界面是整個(gè)游戲最重要的部分,通過繼承 Canvas 制和用戶交互(包括按鍵,指針和 Command 等)都由 Canvas 類是 低 級 用 戶 界 面 的 畫 布 , 可 以 對 程 序 進(jìn) 行 象 素 級 的 操 作 . Canvas 類 提 供 Paint (Graphics g)方法來繪制屏幕,該方法是一個(gè)抽象方法,使用時(shí)必須實(shí)現(xiàn)這個(gè)方法 . Canvas 類與用戶的交互則通過對按鍵,指針和 Command 等事件的監(jiān)聽來實(shí)現(xiàn). Canvas 類為按鍵,指針事件提供了監(jiān)聽機(jī)制,而 Command 用戶觸發(fā)相應(yīng)事件時(shí),會觸發(fā) Canvas 類相應(yīng)的事件處理方法. 以下圖 46 是界面模塊的類圖: 圖 46 界面模塊類圖 TitleCanvas 類:游戲的 Logo 界面. MenuCanvas 類:游戲主菜單界面. BaseCanvas 類:幾個(gè)界面的通用部分提取出來的基類. MenuSingle 類:單人游戲界面. MenuTwo 類:雙人游戲界面. 30 SoundSetCanvas 類:音效設(shè)置界面. HelpCanvas 類:幫助界面. AboutCanvas 類:關(guān)于界面. BTServerUI 類:藍(lán)牙服務(wù)端連接界面. BTClientUI 類:藍(lán)牙客戶端連接界面. GameCanvasSingle 類:單人游戲界面. GameCanvasTwo 類:雙人游戲界面. MessageBox 類:信箱界面. MessageWrite 類:信息編輯界面,繼承高級界面的 TextBox 類實(shí)現(xiàn). MessageRead 類:信息查看界面. 象棋引擎模塊 象棋引擎算法在上一章已經(jīng)詳細(xì)講解,引擎中的各個(gè)要素協(xié)調(diào)起來即可工作. 以下圖 47 是象棋引擎模塊的類圖: 圖 47 象棋引擎模塊類圖 Chess 類:象棋引擎的控制類. CHESSMANPOS 類:棋子位置的結(jié)構(gòu). 31 CHESSMOVE 類:走法的結(jié)構(gòu). DEFINE 類:定義棋子的值和一些公共函數(shù). MoveGenerator 類:走法產(chǎn)生器,就當(dāng)前局面生成某一方所有合法走法. SearchEngine 類:搜索引擎類的基類,實(shí)現(xiàn)搜索的通用函數(shù). Alphabeta_HH 類:基于歷史啟發(fā)的 Alphabeta 搜索引擎. HistoryHeuristic 類:歷史啟發(fā),作為 Alphabeta 搜索引擎的搜索輔助. Eveluation 類:局面評估,為某一特定局面進(jìn)行評分. 游戲界面通過調(diào)用象棋引擎的控制類中的 Think()方法開始引擎的工作. 引擎工 作的序列圖如圖 48 所示. Chess 對象調(diào)用 Alphabeta_HH 對象的 SearchAGoodMove() 方法, 緊接著 Alphabeta_HH 對象調(diào)用 MoveGenerator 對象的 CreatePossibleMove() 方法生成每一個(gè)棋子的所有合法走法,然后對這些走法用 Eveluation 對象的 Eveluate()方法進(jìn)行估值比較,找出其中得分最高的走法,最后返回給 Chess 對象. 圖 48 象棋引擎工作序列圖 藍(lán)牙通信模塊 一個(gè)典型的藍(lán)牙游戲流程圖如圖 49 ,服務(wù)端和客戶端分 別創(chuàng)建發(fā)送,接收消息線程,采用多線程方式以防止連接操作時(shí)間過長而阻塞主線 while(true)循環(huán), 后根據(jù)消息的類型,做出不同的操作. 32 圖 49 藍(lán)牙游戲流程圖 以下圖 410 ,分別生成藍(lán) 牙連接服務(wù)類和客戶類進(jìn)行聯(lián)網(wǎng),聯(lián)網(wǎng)成功后創(chuàng)建游戲界面并把用于消息發(fā)送和接 為游戲過程中還涉及到聊天功能,信箱類采用 GOF 的 Singleton 模式設(shè)計(jì),保證了 ,隨時(shí)可以查看. 圖 410 藍(lán)牙通信模塊類圖 33 MessageBox 類:既是界面類又是實(shí)體類,用于保存發(fā)送和接收的所有信息. MessageWrite 類:用于編輯要發(fā)送的信息. GameCanvasTwo 類:既是界面類又是控制類,根據(jù)用戶輸入或根據(jù)連接類收到的 不同消息進(jìn)行不同響應(yīng). BTServerUI 類:藍(lán)牙服務(wù)端連接界面. BTClient 類:藍(lán)牙客戶端連接界面. BTSerever 類:藍(lán)牙服務(wù)類,創(chuàng)建,廣播服務(wù),與客戶端連接. BTClient 類:藍(lán)牙客戶類,查找設(shè)備和服務(wù),與服務(wù)端連接. BTConnection 類:由服務(wù)端或客戶端創(chuàng)建,用于發(fā)送和接收消息. 聲音播放模塊 Sound 類中,該類也采用 GOF 的 Singleton 模式設(shè)計(jì),以保證在整個(gè)游戲過程中游戲 MMAPI 可選包中的 Player 類來實(shí)現(xiàn). 模塊類圖如圖 411 所示. 圖 411 聲音播放模塊類圖 LPAudioPlayer 類:以獨(dú)占方式播放聲音,用于播放短促的游戲音效. ThreadAudioPLayer 類:以線程的方式播放聲音,用于背景音樂的播放. Sound 類:聲音播放模塊的控制類,外部類要調(diào)用聲音模塊就是通過獲取 Sound 類的實(shí)例來調(diào)用. 存儲模塊 節(jié)提到過,MIDP 應(yīng)用程序的標(biāo)準(zhǔn)持久化方案就是使用 RMS 34 的 RecordStore 類實(shí)現(xiàn)了 get 和 set 方法對上述信息進(jìn)行存取. 類圖如圖 412 所示. 圖 412 存儲模塊類圖 系統(tǒng)運(yùn)行結(jié)果及關(guān)鍵代碼 游戲啟動后首先進(jìn)入 Logo 界面(如圖 413),而后會進(jìn)入主界面選擇單人游戲, 多人對戰(zhàn)或音效設(shè)置等選項(xiàng)(如圖 414). 圖 413 Logo 界面 圖 414 主菜單界面 35 在主菜單界面選擇雙人對弈,對藍(lán)牙聯(lián)網(wǎng)游戲進(jìn)行測試. 圖 415 雙人對弈選擇界面 選擇創(chuàng)建游戲或加入游戲進(jìn)入聯(lián)網(wǎng)界面,在服務(wù)端界面選擇啟動服務(wù),在客戶 端界面選擇搜索服務(wù),在各自界面都會提示聯(lián)網(wǎng)成功,如圖 416,417 所示. 圖 416 藍(lán)牙連接服務(wù)端界面 圖 417 藍(lán)牙連接客戶端界面 藍(lán)牙服務(wù)端創(chuàng)建服務(wù)的關(guān)鍵代碼如下: //啟動服務(wù) public void startService() { try {//獲取藍(lán)牙設(shè)備,并使設(shè)備可以被發(fā)現(xiàn). LocalDevice device = ()。 } 歷史啟發(fā)及走法排序(搜索輔助) AlphaBeta 搜索算法在最小最大的基礎(chǔ)上引入樹的裁剪的思想以期提 19 高效率,它的效率在很大程度上取決于樹的結(jié)構(gòu)——如果搜索了沒多久就發(fā)現(xiàn)可以 裁剪了,那么需要分析的工作量將大大減少,效率自然也就大大提高。 if (val alpha) //保留最大值 alpha = val。 //遞歸調(diào)用 UnMakeMove ()。 //產(chǎn)生所有合法走法 while (MovesLeft()){ //遍歷所有走法 MakeMove ()。 (3)葉子結(jié)點(diǎn),表示棋局結(jié)束. 現(xiàn)在讓引擎下棋, 它應(yīng)當(dāng)選擇一步對它最有利的走法 (最終導(dǎo)致它取勝的走法) . 獲得最佳走法的方法就是試走每一種可能的走法,比較它們所產(chǎn)生的不同后果, 然后從中選出能夠產(chǎn)生對自己最有利的局面的走法. 結(jié)合上面所講的博弈樹, 如果給每個(gè)結(jié)點(diǎn)都打一個(gè)分值來評價(jià)其對應(yīng)的局面 (這 一任務(wù)由后面所講的局面評估來完成) ,那么可以通過比較該分值的大小來判斷局面 ,甲勝的局面是一個(gè)極大值(一個(gè)很大的正數(shù)) ,那么乙 勝的局面就是一個(gè)極小值 (極大值的負(fù)值) 和棋的局面則是零值 , (或是接近零的值) . 如此,當(dāng)輪到甲走棋時(shí)他會盡可能地讓局面上的分值大,相反輪到乙走棋時(shí)他會選 ,即如果假設(shè)奇數(shù)層表示輪到甲方走 棋,則在偶 數(shù)層上挑選分值最大的結(jié)點(diǎn)——偶數(shù)層的結(jié)點(diǎn)是甲走完一步棋之后的棋盤局面,反 ,由于乙方希望棋盤上的分值盡可能小,那 么在奇數(shù)層上就選擇分值最小的結(jié)點(diǎn). 這就是 最小最大 (Minimax)的基本思想. 這樣搜索函數(shù)在估值函數(shù)的協(xié)助下可以通過在奇數(shù)層選擇分值最大(最小)的結(jié)點(diǎn), 在偶數(shù)層選擇分值最小(最大)的結(jié)點(diǎn)的方式來搜索以當(dāng)前局面為根結(jié)點(diǎn),限定搜 索層數(shù)以內(nèi)的整棵樹來獲得一個(gè)最佳的走法. 17 然而不幸的是,博弈樹相當(dāng)龐大(它會成指數(shù)增長) ,因而搜索(限定層數(shù)以內(nèi) 的)整棵樹是一件相當(dāng)費(fèi)時(shí)的工作——其時(shí)間復(fù)雜度為 O(bn).其中 b 是分枝因子, 即針對各種局面的合法走法的數(shù)目的平均值,n , 在中盤時(shí)平均走法數(shù)目大約是 40 種左右,那么搜索 4 層需要檢查 250 萬條路線,搜 索 5 層需要檢查 1 億條路線,搜索 6 層需要檢查 40 億條路線! 幸運(yùn)的是,AlphaBeta 為,如果考慮到下棋是一個(gè)你來我往的交替進(jìn)行并且相互較勁 一方都會盡可能將局面導(dǎo)向?qū)ψ约河欣鴮Ψ讲焕姆较?那么某些局面由于能 能產(chǎn)生很糟糕的局面時(shí),應(yīng)當(dāng)立刻停止對其剩余子結(jié)點(diǎn)的分析——不要對它再抱任 何幻想了,如果選擇了它, 大程度上減少搜索的工作量,提高搜索效率,這稱為樹的裁剪 . 下面用圖 34 來進(jìn)一步說明樹的裁剪 .為了簡便起見,假設(shè)博弈樹的每個(gè)結(jié) 點(diǎn)只有三個(gè)分支. 圖 34 簡化的博弈樹 現(xiàn)在假定棋盤上的局面發(fā)展到了結(jié)點(diǎn) A,現(xiàn)在輪到最大者走棋了——即最 大者樹的裁剪對提 高搜索效率的幫助. 首先,考察結(jié)點(diǎn) A 的子結(jié)點(diǎn) B 所屬的這一層是輪到對方——最小者 18 走棋, 最小者 B 的各個(gè)子結(jié) 點(diǎn),查看它們的分值(因?yàn)槭孪燃s定好了搜索兩層,現(xiàn)在已達(dá)到搜索深度的要求了, 所以就停下來調(diào)用局面評估函數(shù)來給它打分) .結(jié)點(diǎn)B的第一個(gè)子結(jié)點(diǎn)(從左到右算 起)返回 10,第二個(gè)子結(jié)點(diǎn)返回了5, 最小者來做選擇,假設(shè)最小者一定會做出明智的選擇,那么最小者會 選擇返回值為5 的那個(gè)結(jié)點(diǎn). 我們再來分析結(jié)點(diǎn) A 的第二個(gè)子結(jié)點(diǎn) C,結(jié)點(diǎn) C 與結(jié)點(diǎn) B 同屬一層,它依然是輪 到最小者 C 的各個(gè)子結(jié)點(diǎn)的分值,其第一個(gè)子結(jié)點(diǎn)返回 ,該是裁剪 C 的剩余子結(jié)點(diǎn)了,因 為結(jié)點(diǎn) C 很糟糕,不管結(jié)點(diǎn) C 的剩余子結(jié)點(diǎn)有怎樣的分值, 與前面已經(jīng)分析過的結(jié)點(diǎn) B 所傳回5 相比較,作為最大者顯然更不愿意看
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1