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

正文內(nèi)容

森林伏兵——基于ios平臺(tái)的人機(jī)對(duì)戰(zhàn)棋類游戲設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)-閱讀頁

2025-07-07 16:00本頁面
  

【正文】 是上次登陸后退出時(shí)上傳的數(shù)據(jù)與本次自登陸后所得數(shù)據(jù)的累計(jì)值;非登陸玩家,數(shù)據(jù)僅是啟動(dòng)游戲以來所累計(jì)的值。3)計(jì)算機(jī)走棋模塊求出計(jì)算機(jī)所有的合法操作,再對(duì)各個(gè)操作進(jìn)行估價(jià),并按照估價(jià)從高到低排序,得到估價(jià)最高的操作,將之反映在界面上。 (4)附加功能模塊游戲暫停與恢復(fù):游戲進(jìn)行時(shí),顯示為暫停按鈕,點(diǎn)擊之后,顯示為恢復(fù)按鈕。(5)定時(shí)模塊輪流定時(shí):給下棋的雙方用倒計(jì)時(shí)的方式定時(shí)。特效定時(shí):丟棄棋子與加分特效設(shè)計(jì)中,使棋子和加分標(biāo)簽延遲到特效完成后消失。 非功能需求 外部接口需求反饋意見時(shí)啟動(dòng)玩家手機(jī)上的郵件或短信功能聯(lián)系開發(fā)商。杜絕存在內(nèi)存泄露隱患:內(nèi)存泄露會(huì)導(dǎo)致游戲閃退等意外情況發(fā)生。音效:可切換背景音樂。 3 總體設(shè)計(jì) 運(yùn)行環(huán)境開發(fā)平臺(tái):Mac OS X Version 開發(fā)工具:Xcode Version (4E1019)測試環(huán)境:iPhone模擬器,iPod 支持平臺(tái):iOS設(shè)備 基本處理流程森林伏兵系統(tǒng)的主要處理流程如圖31所示。平棋由玩家控制,當(dāng)玩家無法獲勝且計(jì)算機(jī)無法殺死玩家時(shí),由玩家選擇平棋,還是繼續(xù)逃避或追捕計(jì)算機(jī)控制的棋子。圖32 系統(tǒng)模塊結(jié)構(gòu)圖 外部接口反饋功能中調(diào)用iOS設(shè)備中的消息或郵件應(yīng)用。將計(jì)算機(jī)的操作封裝在一個(gè)類中,需要用到相關(guān)操作時(shí)調(diào)用相應(yīng)接口。將玩家的操作封裝在一個(gè)類中,需要用到相關(guān)操作時(shí)調(diào)用相應(yīng)接口。 ER圖系統(tǒng)ER圖如圖41所示。Cookie永久有效。Cookie用當(dāng)時(shí)的時(shí)間和一段常量字符串拼接成,當(dāng)玩家要訪問服務(wù)器時(shí),須通過Cookie驗(yàn)證授權(quán)。 邏輯模型玩家(User):(編號(hào),昵稱,密碼,郵箱) 戰(zhàn)績(Record):(編號(hào),玩家,輸局?jǐn)?shù),贏局?jǐn)?shù),平局?jǐn)?shù),電腦總分,玩家總分) 物理結(jié)構(gòu)設(shè)計(jì) 存取方式(1)User表存取方式獲取來自客戶端的數(shù)據(jù)時(shí),判斷是登陸事件還是注冊(cè)事件。如果是注冊(cè)玩家,將這條數(shù)據(jù)插入到User表后生成一個(gè)Cookie,插入到玩家表中,同時(shí)返回給客戶端,作為登陸的標(biāo)記。(2)Record表存取方式玩家登陸后,由客戶端發(fā)送一個(gè)請(qǐng)求給服務(wù)器,服務(wù)器接收到請(qǐng)求,查找請(qǐng)求玩家在Record表中的記錄,并將之返回給玩家。 存儲(chǔ)結(jié)構(gòu)在MySQL數(shù)據(jù)庫系統(tǒng)中使用兩張表存儲(chǔ)相關(guān)的數(shù)據(jù),分別是表User和表Record,分如表41與表42所示。登陸注冊(cè):通過不同的注冊(cè)信息,將不同玩家的游戲記錄存儲(chǔ)在服務(wù)器中,并在玩家每次登陸時(shí)從服務(wù)器中加載到客戶端。反饋:玩家可以由此界面向開發(fā)商反饋意見。游戲中心:游戲的核心界面,即走棋界面。輸棋:當(dāng)玩家輸棋時(shí),顯示該界面。平棋:當(dāng)玩家選擇平棋時(shí),顯示該界面。戰(zhàn)績:顯示玩家和計(jì)算機(jī)的游戲記錄對(duì)照表。 界面工作流圖 軟件界面工作流如圖51所示。圖52 主界面 子界面 (1)菜單游戲主菜單如圖53所示。 圖54 幫助界面(3)關(guān)于與反饋游戲的關(guān)于與反饋界面如圖55所示。圖56 轉(zhuǎn)盤界面(5)更多選項(xiàng)游戲的選項(xiàng)控制界面如圖57所示。圖58 戰(zhàn)績界面(7)切換背景音樂游戲的切換背景音樂界面如圖59所示。圖510 贏棋界面(9)輸棋界面游戲的輸棋界面如圖511所示。圖512 平棋界面 6 詳細(xì)設(shè)計(jì) 系統(tǒng)主要功能模塊介紹 界面初始化模塊完成界面各元素的布局、建圖、計(jì)算棋盤的棋子合法落點(diǎn)并通過隨機(jī)化函數(shù)生成隨機(jī)的棋子擺放順序。 玩家走棋模塊通過條件控制語句與設(shè)備的觸摸檢測系統(tǒng)來實(shí)現(xiàn)玩家對(duì)游戲的控制。 結(jié)束模塊通過對(duì)狀態(tài)標(biāo)記數(shù)組進(jìn)行檢測來判斷棋局結(jié)果。 定時(shí)模塊通過定時(shí)函數(shù),實(shí)現(xiàn)延時(shí)動(dòng)畫。 界面初始化模塊程序流程圖界面初始化模塊程序流程圖如圖61所示。 玩家走棋模塊程序流程圖玩家走棋模塊程序流程圖如圖62所示。最優(yōu)方案可能有移棋、吃棋、翻棋三種情況。圖63 計(jì)算機(jī)操作程序流程圖(2) 估計(jì)函數(shù)估價(jià)函數(shù)的流程圖如圖64所示。圖64 估價(jià)函數(shù)程序流程圖假設(shè)棋子的出發(fā)點(diǎn)是S,目的地是T,并假設(shè)S位置為危險(xiǎn)位置而且T位置也為危險(xiǎn)位置,計(jì)算從S到T位置付出的代價(jià)的程序流程圖如圖65所示。建圖:建圖的程序流程圖如圖66所示。 計(jì)算機(jī)走棋模塊關(guān)鍵函數(shù)說明(1)獲取計(jì)算機(jī)操作方案void GameCenter::puterFinishWork()(2)計(jì)算機(jī)翻棋void GameCenter::puterOpenChessI(int nChess) nChess:將要翻開的棋子(3)計(jì)算機(jī)移棋或吃棋void GameCenter::puterMoveAchess(int chessNumber,int from ,int to)chessNumber:計(jì)算機(jī)將要移動(dòng)的棋子from:出發(fā)點(diǎn)to:目的點(diǎn)(4)估價(jià)常量每一種方案的估價(jià)是按照算法規(guī)則將各部分價(jià)值累計(jì)而得,單位價(jià)值常量如下所示:1)chessValue[]chessValue[i]:表示棋子i的價(jià)值。 2) eatOther[][]eatOther[i][j]:表示i棋子殺掉j棋子所得的價(jià)值。3) positionValue[][]positionValue[i][j]:表示棋子代號(hào)模11等于i的棋子移動(dòng)到j(luò)位置所得的價(jià)值。 游戲結(jié)束模塊設(shè)計(jì) 游戲結(jié)束模塊算法描述算法描述如下:1) 判斷是否存在翻開的棋子,存在則退出函數(shù),無則繼續(xù);2) 判斷是否有哪方的棋子已經(jīng)全部犧牲,有則返回結(jié)果,無則退出函數(shù)。圖67 游戲結(jié)束判斷程序流程圖 游戲結(jié)束模塊關(guān)鍵函數(shù)說明(1)判斷游戲是否結(jié)束int GameCenter::gameOver() (2)游戲結(jié)束反饋函數(shù)void GameCenter::theGameOverAndMoveOver() 附加功能模塊設(shè)計(jì) 附加功能模塊算法描述 算法描述如下:1)未按靜音按鈕或暫停按鈕時(shí),翻棋和走棋時(shí)播放音效。3)按下暫停按妞,此按鈕變?yōu)榛謴?fù)按鈕,系統(tǒng)暫停,音效和背景音樂停止,棋盤內(nèi)只有恢復(fù)按鈕有效。5)先按靜音按鈕再按暫停按鈕,此時(shí)恢復(fù)系統(tǒng)后,系統(tǒng)仍處于靜音狀態(tài)。圖68 暫停與恢復(fù)程序流程圖(2)聲音與靜音靜音與恢復(fù)程序流程圖如圖69所示。圖610 移動(dòng)特效程序流程圖 附加功能模塊關(guān)鍵函數(shù)說明(1)暫停與恢復(fù)控制void GameCenter::pauseTheGame()(2)靜音與恢復(fù)控制void GameCenter::openTheMusic()(3)移動(dòng)特效控制void GameCenter::moveAchessPlayAction(Chess *chess,CCPoint topotion)chess:移動(dòng)的棋子topotion:目的點(diǎn) 定時(shí)模塊設(shè)計(jì) 定時(shí)模塊算法描述 當(dāng)輪到一方走棋時(shí),開始倒計(jì)時(shí),如果時(shí)間截止或一方走棋結(jié)束,則由另一方開始走棋,走棋方時(shí)間減一秒。圖611 定時(shí)模塊程序流程圖 定時(shí)模塊關(guān)鍵函數(shù)說明(1)倒計(jì)時(shí)功能控制void GameCenter::miniteTime() 7 編碼 代碼實(shí)現(xiàn)與核心算法 初始化游戲模塊(1)棋盤圖結(jié)構(gòu)edge[][]:用來保存棋盤結(jié)構(gòu),edge[i][j]表示與結(jié)點(diǎn)i相連的第j個(gè)結(jié)點(diǎn)。因?yàn)槊恳淮巫咂遄疃嘀荒茏咭徊?,所以每一次走棋只能走到相鄰的結(jié)點(diǎn)。圖71 棋圖結(jié)構(gòu)圖該算法自然語言描述如下所示:函數(shù):makeMap//初始化函數(shù) 清空edge數(shù)組; 將結(jié)點(diǎn)1與結(jié)點(diǎn)7相連; 將結(jié)點(diǎn)5與結(jié)點(diǎn)10相連; 將結(jié)點(diǎn)21與結(jié)點(diǎn)1122相連; 將結(jié)點(diǎn)25與結(jié)點(diǎn)2120相連; 枚舉2~24中的各個(gè)點(diǎn): 當(dāng)前結(jié)點(diǎn)編號(hào)用i表示; 如果i==5或者i==21:不用計(jì)算; 如果i%5!=0:連接結(jié)點(diǎn)i與結(jié)點(diǎn)i+1; 如果i%5!=1:連接結(jié)點(diǎn)i與結(jié)點(diǎn)i1; 如果i/50:連接結(jié)點(diǎn)i與結(jié)點(diǎn)i5。a[]:標(biāo)志20個(gè)棋子是否全部產(chǎn)生,a[i]=false表示i未產(chǎn)生,a[i]=true表示i已產(chǎn)生。玩家走棋時(shí),通過觸摸檢測來定位操縱的棋子和走棋路線。如果已分出雙方,輪到計(jì)算機(jī)走棋但又沒有己方翻開的棋子時(shí),計(jì)算機(jī)將選擇一個(gè)處于相對(duì)安全的未翻棋子翻開。(2)構(gòu)圖與最短路因?yàn)闆]有分清計(jì)算機(jī)屬于哪一方,所以翻棋的最佳選擇是離敵方最近的一個(gè)翻開。建圖時(shí),兩個(gè)空白位置是雙向邊,空白位置或翻開棋子到相鄰的未翻開的棋子的位置為單向邊,翻開的棋子的位置到無棋位置同樣用單向邊。數(shù)組元素dist[i][j]表示結(jié)點(diǎn)i與結(jié)點(diǎn)j的最短距離。 在結(jié)點(diǎn)i的棋子為thisChess; 如果結(jié)點(diǎn)i沒有棋子,枚舉與結(jié)點(diǎn)i相鄰的結(jié)點(diǎn)j: 如果結(jié)點(diǎn)j沒有棋子: 建立從i到j(luò)的雙向邊; 否則如果處于結(jié)點(diǎn)j的棋子還沒有翻開: 建立從i到j(luò)的單向邊; 如果當(dāng)前位置有未翻開的棋子,本輪不再計(jì)算; 如果當(dāng)前位置有已翻開的棋子: 枚舉與結(jié)點(diǎn)i相鄰的結(jié)點(diǎn)j: 如果結(jié)點(diǎn)j沒有棋子: 建立從i到j(luò)的單向邊; 如果結(jié)點(diǎn)j處的棋子沒有翻開: 建立從i到j(luò)的單向邊; ///求出當(dāng)前的最短路 從1~25枚舉中間結(jié)點(diǎn)k: 從1~25枚舉中間結(jié)點(diǎn)i: 從1~25枚舉中間結(jié)點(diǎn)j: dist[i][j]=MIN(dist[i][j],dist[i][k]+dist[k][j]); (3) 評(píng)分排序函數(shù)moveList[]:保存合法操作。該算法自然語言描述如下所示: 函數(shù):gameOver(){//判斷是否結(jié)束 如果有棋子未翻開,退出函數(shù); 求得紅方剩余棋子的總數(shù)為redLiving; 求得黑方剩余棋子的總數(shù)為blackLiving; 求得哪一方勝利; 返回結(jié)果; 附加功能模塊(1) 暫停與恢復(fù)該算法自然語言描述如下所示:函數(shù):pauseTheGame//暫停與恢復(fù)游戲 獲得按鈕tag標(biāo)志; 判斷tag屬于暫停標(biāo)志還是恢復(fù)標(biāo)志: 如果tag標(biāo)志顯示當(dāng)前處于暫停狀態(tài),則要恢復(fù)系統(tǒng): 將按鈕轉(zhuǎn)換成暫停按鈕; 如果音樂未恢復(fù): 恢復(fù)音樂; 標(biāo)志游戲已恢復(fù); 恢復(fù)系統(tǒng); 如果tag標(biāo)志顯示當(dāng)前系統(tǒng)處于正常狀態(tài),則要暫停系統(tǒng): 將按鈕轉(zhuǎn)換成恢復(fù)按鈕; 如果音樂沒有暫停: 暫停音樂; 標(biāo)志游戲已暫停; 暫停系統(tǒng);(2) 靜音與恢復(fù)該算法自然語言描述如下所示:函數(shù):openTheMusic// 靜音與恢復(fù) 獲得按鈕tag標(biāo)志; 判斷tag屬于靜音標(biāo)志還是恢復(fù)標(biāo)志: 如果tag標(biāo)志顯示當(dāng)前處于靜音狀態(tài),則要恢復(fù)音效: 將按鈕轉(zhuǎn)換成靜音按鈕; 恢復(fù)音效; 標(biāo)志當(dāng)前音效已經(jīng)恢復(fù); 如果tag標(biāo)志顯示當(dāng)前音效正常播放,則要停止音效: 將按鈕轉(zhuǎn)換成恢復(fù)按鈕; 停止音效; 標(biāo)志當(dāng)前音效已經(jīng)暫停;(3) 走棋特效當(dāng)前棋子的數(shù)字在2~8范圍內(nèi),則移動(dòng)行為為一步跳躍到目標(biāo)位置,否則為平移。timeNumber:倒計(jì)時(shí)變量,從10開始倒計(jì)時(shí),每隔一秒減少1,減到1時(shí),則表示時(shí)間已經(jīng)結(jié)束。number:為顯示倒計(jì)時(shí)上的數(shù)字。 排序算法sort函數(shù)的使用O(nlog(n))的時(shí)間復(fù)雜度。 設(shè)置公共類將不同類中用到的相同的函數(shù),組合成一個(gè)類,作為父類。 最短路算法使用弗洛伊德算法,時(shí)間復(fù)雜度為O(n*n*n),由于n=25,所以采用這個(gè)算法很簡單易行且性能很好。 8 測試 測試方案設(shè)計(jì) 測試用例的設(shè)計(jì)目的與意義在開發(fā)過程中,會(huì)直接暴露或潛伏著許多的漏洞,直接暴露出的漏洞可以通過邊開發(fā)邊測試的方法糾正,然而潛伏的漏洞則需要通過專門的測試方法來測試。通過特定的測試方法無法排除的內(nèi)存泄露等問題,則需要通過優(yōu)化代碼來完成。 測試資源構(gòu)造測試用例、Xcode開發(fā)工具、iPod一臺(tái)。2)每次最多只能對(duì)一個(gè)棋子進(jìn)行操作
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1