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

正文內(nèi)容

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

2025-06-22 16:00本頁(yè)面
  

【正文】 為每一次走棋最多只能走一步,所以每一次走棋只能走到相鄰的結(jié)點(diǎn)。棋中結(jié)點(diǎn)1119為安全結(jié)點(diǎn),棋局結(jié)構(gòu)如圖71所示。圖71 棋圖結(jié)構(gòu)圖該算法自然語(yǔ)言描述如下所示:函數(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。; 如果i/54||i==20:連接結(jié)點(diǎn)i與結(jié)點(diǎn)i+5; 如果i==7||i==9||i==13||i==17||i==19: 將結(jié)點(diǎn)i分別與結(jié)點(diǎn)i+i+ii4連接; 如果i==11:將結(jié)點(diǎn)i分別與結(jié)點(diǎn)i+i4連接; 如果i==3:將結(jié)點(diǎn)i分別與結(jié)點(diǎn)i+i+4連接; 如果i==15:將結(jié)點(diǎn)i分別與結(jié)點(diǎn)ii+4連接; 如果i==23:將結(jié)點(diǎn)i分別與結(jié)點(diǎn)ii4連接; (2) 初始化布局函數(shù)order[]:order[i]表示第i個(gè)結(jié)點(diǎn)擺放的棋子。a[]:標(biāo)志20個(gè)棋子是否全部產(chǎn)生,a[i]=false表示i未產(chǎn)生,a[i]=true表示i已產(chǎn)生。該算法自然語(yǔ)言描述如下所示:函數(shù):getOrder/初始化棋盤(pán)的隨機(jī)函數(shù) 以當(dāng)前的系統(tǒng)時(shí)間為種子; 清空數(shù)組a[],表示所有編號(hào)都未出現(xiàn); 如果20個(gè)棋子編號(hào)未全部出現(xiàn),繼續(xù)產(chǎn)生數(shù)字: 產(chǎn)生1~20之間的數(shù)字x; 如果x已經(jīng)保存,不用繼續(xù)保存; 否則: 保存未產(chǎn)生過(guò)的編號(hào)x; 用order[i]保存第i個(gè)產(chǎn)生的之前未產(chǎn)生的編號(hào)x; 玩家走棋模塊當(dāng)計(jì)算機(jī)走棋時(shí),玩家不能夠觸摸棋子。玩家走棋時(shí),通過(guò)觸摸檢測(cè)來(lái)定位操縱的棋子和走棋路線(xiàn)。該算法自然語(yǔ)言描述如下所示:函數(shù):ccTouchBegan//玩家走棋函數(shù) 如果游戲已經(jīng)暫停,退出函數(shù); 如果操作結(jié)束,退出函數(shù); 獲得點(diǎn)擊的位置pos; 如果沒(méi)有觸摸在棋盤(pán)結(jié)點(diǎn)上,退出函數(shù); 獲得在當(dāng)前點(diǎn)的棋子nChess; 如果pos結(jié)點(diǎn)上沒(méi)有棋子: 如果之前沒(méi)有點(diǎn)擊某個(gè)已方棋子,退出函數(shù); 獲得之前點(diǎn)擊的棋子所在結(jié)點(diǎn)為posOfChessGoing; 如果pos和posOfChessGoing不相鄰,退出函數(shù); 將之前點(diǎn)擊的棋子chessGoing運(yùn)動(dòng)到posOfChessGoing結(jié)點(diǎn); 退出函數(shù); 如果當(dāng)前位置的棋子還未翻開(kāi),點(diǎn)擊它翻開(kāi),退出函數(shù); 如果未分出雙方分別屬于哪一種棋子: 系統(tǒng)給出提示,退出函數(shù); 如果點(diǎn)擊的是別人翻開(kāi)的棋子: 獲取此棋子thisChess; 如果之前未點(diǎn)擊棋子,退出函數(shù); 獲得之前點(diǎn)擊的棋子所在結(jié)點(diǎn)為posOfChessGoing; 如果pos和posOfChessGoing不相鄰,退出函數(shù); 如果對(duì)方處于安全位置: 給出系統(tǒng)提示,退出函數(shù); 如果已方棋子可以殺掉對(duì)方棋子: 殺死對(duì)方,退出函數(shù); 否則:給出系統(tǒng)提示殺不了對(duì)方; 計(jì)算機(jī)走棋模塊(1)計(jì)算機(jī)走棋邏輯類(lèi)接口函數(shù)如果沒(méi)有分出計(jì)算機(jī)屬于哪一方,計(jì)算機(jī)將選擇一個(gè)處于相對(duì)安全的位置的未翻棋子翻開(kāi)。如果已分出雙方,輪到計(jì)算機(jī)走棋但又沒(méi)有己方翻開(kāi)的棋子時(shí),計(jì)算機(jī)將選擇一個(gè)處于相對(duì)安全的未翻棋子翻開(kāi)。如果以上情況都不屬于,則將計(jì)算機(jī)所有合法走棋方案進(jìn)行估價(jià),通過(guò)排序算法,估價(jià)最高的方案作為本次走棋方案。(2)構(gòu)圖與最短路因?yàn)闆](méi)有分清計(jì)算機(jī)屬于哪一方,所以翻棋的最佳選擇是離敵方最近的一個(gè)翻開(kāi)。棋子的距離大于3時(shí)為最佳。建圖時(shí),兩個(gè)空白位置是雙向邊,空白位置或翻開(kāi)棋子到相鄰的未翻開(kāi)的棋子的位置為單向邊,翻開(kāi)的棋子的位置到無(wú)棋位置同樣用單向邊。因?yàn)榭紤]自己一翻開(kāi),對(duì)方就將子吃掉的可能性,所以此圖為有向圖。數(shù)組元素dist[i][j]表示結(jié)點(diǎn)i與結(jié)點(diǎn)j的最短距離。該算法自然語(yǔ)言描述如下所示:函數(shù):getTheShortestRoteFromOpenToUnopen//求翻開(kāi)棋子到未翻開(kāi)棋子的最短路滿(mǎn)懷 初始化dist[][]函數(shù): 如果結(jié)點(diǎn)i等于j:dist[i][j]等于0; 否則dist[i][j]等于無(wú)窮大; 枚舉編號(hào)為1~25的棋子: 當(dāng)前結(jié)點(diǎn)為i。 在結(jié)點(diǎn)i的棋子為thisChess; 如果結(jié)點(diǎn)i沒(méi)有棋子,枚舉與結(jié)點(diǎn)i相鄰的結(jié)點(diǎn)j: 如果結(jié)點(diǎn)j沒(méi)有棋子: 建立從i到j(luò)的雙向邊; 否則如果處于結(jié)點(diǎn)j的棋子還沒(méi)有翻開(kāi): 建立從i到j(luò)的單向邊; 如果當(dāng)前位置有未翻開(kāi)的棋子,本輪不再計(jì)算; 如果當(dāng)前位置有已翻開(kāi)的棋子: 枚舉與結(jié)點(diǎn)i相鄰的結(jié)點(diǎn)j: 如果結(jié)點(diǎn)j沒(méi)有棋子: 建立從i到j(luò)的單向邊; 如果結(jié)點(diǎn)j處的棋子沒(méi)有翻開(kāi): 建立從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[]:保存合法操作。該算法自然語(yǔ)言描述如下所示:函數(shù):cmp//排序規(guī)則 按照合法操作的估價(jià)值從大到小排序;函數(shù):sort(moveList+1, moveList+1+nMoves,cmp) 結(jié)束判定返回1表示玩家勝,返回2表示玩家輸,返回0表示游戲未結(jié)束。該算法自然語(yǔ)言描述如下所示: 函數(shù):gameOver(){//判斷是否結(jié)束 如果有棋子未翻開(kāi),退出函數(shù); 求得紅方剩余棋子的總數(shù)為redLiving; 求得黑方剩余棋子的總數(shù)為blackLiving; 求得哪一方勝利; 返回結(jié)果; 附加功能模塊(1) 暫停與恢復(fù)該算法自然語(yǔ)言描述如下所示:函數(shù):pauseTheGame//暫停與恢復(fù)游戲 獲得按鈕tag標(biāo)志; 判斷tag屬于暫停標(biāo)志還是恢復(fù)標(biāo)志: 如果tag標(biāo)志顯示當(dāng)前處于暫停狀態(tài),則要恢復(fù)系統(tǒng): 將按鈕轉(zhuǎn)換成暫停按鈕; 如果音樂(lè)未恢復(fù): 恢復(fù)音樂(lè); 標(biāo)志游戲已恢復(fù); 恢復(fù)系統(tǒng); 如果tag標(biāo)志顯示當(dāng)前系統(tǒng)處于正常狀態(tài),則要暫停系統(tǒng): 將按鈕轉(zhuǎn)換成恢復(fù)按鈕; 如果音樂(lè)沒(méi)有暫停: 暫停音樂(lè); 標(biāo)志游戲已暫停; 暫停系統(tǒng);(2) 靜音與恢復(fù)該算法自然語(yǔ)言描述如下所示:函數(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)位置,否則為平移。該算法自然語(yǔ)言描述如下所示:函數(shù):moveAchessPlayAction//移動(dòng)動(dòng)畫(huà) 得到棋面的數(shù)字編號(hào)x; 如果x屬于2~8間的數(shù)字: 跳躍到目標(biāo)結(jié)點(diǎn); 否則: 平移到目標(biāo)結(jié)點(diǎn); 定時(shí)模塊當(dāng)某一方走棋時(shí),定時(shí)器控制走棋方的計(jì)時(shí)標(biāo)簽從10開(kāi)始倒計(jì)時(shí),走棋結(jié)束后已方時(shí)間標(biāo)簽清空。timeNumber:倒計(jì)時(shí)變量,從10開(kāi)始倒計(jì)時(shí),每隔一秒減少1,減到1時(shí),則表示時(shí)間已經(jīng)結(jié)束。movingOver:動(dòng)作完成標(biāo)志,movingOver=true表示動(dòng)作已經(jīng)結(jié)束,movingOver=false表示動(dòng)作還沒(méi)有結(jié)束。number:為顯示倒計(jì)時(shí)上的數(shù)字。該算法自然語(yǔ)言描述如下所示:函數(shù):miniteTime//倒計(jì)時(shí) 獲得玩家的時(shí)間標(biāo)簽timeComputer; 獲得計(jì)算機(jī)的時(shí)間標(biāo)簽timeComputerBack; 如果時(shí)間已到或者動(dòng)作已經(jīng)結(jié)束: 標(biāo)志動(dòng)作還未結(jié)束; 如果當(dāng)前是玩家在走棋: 標(biāo)志計(jì)算機(jī)在走棋; 否則: 標(biāo)志玩家在走棋; 初始化timeNumbe時(shí)間; 關(guān)閉計(jì)時(shí)函數(shù); 如果當(dāng)前玩家在走棋: 調(diào)用玩家走棋函數(shù); 否則: 調(diào)用計(jì)算機(jī)走棋函數(shù); 獲得number; 如果是玩家在下棋: 刷新玩家時(shí)間標(biāo)簽; 否則: 刷新計(jì)算機(jī)時(shí)間標(biāo)簽; timeNumber減1 代碼優(yōu)化分析 棋子表示優(yōu)化用1~20的數(shù)字分別保存20個(gè)棋子,并用模運(yùn)算獲得某個(gè)棋子的大小,用sideOfchess[]標(biāo)志某一個(gè)棋子屬于哪一方,實(shí)現(xiàn)了O(1)的時(shí)間判斷。 排序算法sort函數(shù)的使用O(nlog(n))的時(shí)間復(fù)雜度。 存圖用大小為26*9的數(shù)組存圖,不但節(jié)約了空間也節(jié)約了定點(diǎn)時(shí)間 。 設(shè)置公共類(lèi)將不同類(lèi)中用到的相同的函數(shù),組合成一個(gè)類(lèi),作為父類(lèi)。class CDLFunctionAllNeed { bool safePlace(int i)//判斷是不是營(yíng) bool allDieInTheSameTime(int x,int y)//是否同歸于盡 bool xDefeatY(int x,int y)//x是否能干掉y string numberToString(int n)//數(shù)字轉(zhuǎn)為字符串, void getOrder(int *order)//洗棋的隨機(jī)函數(shù),有等待更改}。 最短路算法使用弗洛伊德算法,時(shí)間復(fù)雜度為O(n*n*n),由于n=25,所以采用這個(gè)算法很簡(jiǎn)單易行且性能很好。 走棋特效與音效控制將行棋特效和音效控制分別封裝成兩個(gè)函數(shù),獲得行棋方案后,自動(dòng)執(zhí)行相應(yīng)特效,容易修改。 8 測(cè)試 測(cè)試方案設(shè)計(jì) 測(cè)試用例的設(shè)計(jì)目的與意義在開(kāi)發(fā)過(guò)程中,會(huì)直接暴露或潛伏著許多的漏洞,直接暴露出的漏洞可以通過(guò)邊開(kāi)發(fā)邊測(cè)試的方法糾正,然而潛伏的漏洞則需要通過(guò)專(zhuān)門(mén)的測(cè)試方法來(lái)測(cè)試。由于考慮到開(kāi)發(fā)周期較短,故采用黑盒測(cè)試中等價(jià)類(lèi)的方法來(lái)完成。通過(guò)特定的測(cè)試方法無(wú)法排除的內(nèi)存泄露等問(wèn)題,則需要通過(guò)優(yōu)化代碼來(lái)完成。 測(cè)試策略(1)邊開(kāi)發(fā)邊測(cè)試(2)單元測(cè)試(3)黑盒測(cè)試 測(cè)試進(jìn)度安排單元測(cè)試在開(kāi)發(fā)過(guò)程中完成,集成測(cè)試兩天完成,黑盒測(cè)試兩天完成。 測(cè)試資源構(gòu)造測(cè)試用例、Xcode開(kāi)發(fā)工具、iPod一臺(tái)。 關(guān)鍵測(cè)試點(diǎn)(1)游戲規(guī)則測(cè)試1)棋子最多只能走一步。2)每次最多只能對(duì)一個(gè)棋子進(jìn)行操作。3)數(shù)字小的棋子可以殺死數(shù)字大的棋子,同時(shí)數(shù)字為10的數(shù)字遇任何棋子都同歸于盡,數(shù)字相同的棋子也同歸
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1