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

正文內(nèi)容

森林伏兵——基于ios平臺的人機對戰(zhàn)棋類游戲設計與實現(xiàn)畢業(yè)設計(參考版)

2025-06-25 16:00本頁面
  

【正文】 3)數(shù)字小的棋子可以殺死數(shù)字大的棋子,同時數(shù)字為10的數(shù)字遇任何棋子都同歸于盡,數(shù)字相同的棋子也同歸。 關(guān)鍵測試點(1)游戲規(guī)則測試1)棋子最多只能走一步。 測試策略(1)邊開發(fā)邊測試(2)單元測試(3)黑盒測試 測試進度安排單元測試在開發(fā)過程中完成,集成測試兩天完成,黑盒測試兩天完成。由于考慮到開發(fā)周期較短,故采用黑盒測試中等價類的方法來完成。 走棋特效與音效控制將行棋特效和音效控制分別封裝成兩個函數(shù),獲得行棋方案后,自動執(zhí)行相應特效,容易修改。class CDLFunctionAllNeed { bool safePlace(int i)//判斷是不是營 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)//洗棋的隨機函數(shù),有等待更改}。 存圖用大小為26*9的數(shù)組存圖,不但節(jié)約了空間也節(jié)約了定點時間 。該算法自然語言描述如下所示:函數(shù):miniteTime//倒計時 獲得玩家的時間標簽timeComputer; 獲得計算機的時間標簽timeComputerBack; 如果時間已到或者動作已經(jīng)結(jié)束: 標志動作還未結(jié)束; 如果當前是玩家在走棋: 標志計算機在走棋; 否則: 標志玩家在走棋; 初始化timeNumbe時間; 關(guān)閉計時函數(shù); 如果當前玩家在走棋: 調(diào)用玩家走棋函數(shù); 否則: 調(diào)用計算機走棋函數(shù); 獲得number; 如果是玩家在下棋: 刷新玩家時間標簽; 否則: 刷新計算機時間標簽; timeNumber減1 代碼優(yōu)化分析 棋子表示優(yōu)化用1~20的數(shù)字分別保存20個棋子,并用模運算獲得某個棋子的大小,用sideOfchess[]標志某一個棋子屬于哪一方,實現(xiàn)了O(1)的時間判斷。movingOver:動作完成標志,movingOver=true表示動作已經(jīng)結(jié)束,movingOver=false表示動作還沒有結(jié)束。該算法自然語言描述如下所示:函數(shù):moveAchessPlayAction//移動動畫 得到棋面的數(shù)字編號x; 如果x屬于2~8間的數(shù)字: 跳躍到目標結(jié)點; 否則: 平移到目標結(jié)點; 定時模塊當某一方走棋時,定時器控制走棋方的計時標簽從10開始倒計時,走棋結(jié)束后已方時間標簽清空。該算法自然語言描述如下所示:函數(shù):cmp//排序規(guī)則 按照合法操作的估價值從大到小排序;函數(shù):sort(moveList+1, moveList+1+nMoves,cmp) 結(jié)束判定返回1表示玩家勝,返回2表示玩家輸,返回0表示游戲未結(jié)束。該算法自然語言描述如下所示:函數(shù):getTheShortestRoteFromOpenToUnopen//求翻開棋子到未翻開棋子的最短路滿懷 初始化dist[][]函數(shù): 如果結(jié)點i等于j:dist[i][j]等于0; 否則dist[i][j]等于無窮大; 枚舉編號為1~25的棋子: 當前結(jié)點為i。因為考慮自己一翻開,對方就將子吃掉的可能性,所以此圖為有向圖。棋子的距離大于3時為最佳。如果以上情況都不屬于,則將計算機所有合法走棋方案進行估價,通過排序算法,估價最高的方案作為本次走棋方案。該算法自然語言描述如下所示:函數(shù):ccTouchBegan//玩家走棋函數(shù) 如果游戲已經(jīng)暫停,退出函數(shù); 如果操作結(jié)束,退出函數(shù); 獲得點擊的位置pos; 如果沒有觸摸在棋盤結(jié)點上,退出函數(shù); 獲得在當前點的棋子nChess; 如果pos結(jié)點上沒有棋子: 如果之前沒有點擊某個已方棋子,退出函數(shù); 獲得之前點擊的棋子所在結(jié)點為posOfChessGoing; 如果pos和posOfChessGoing不相鄰,退出函數(shù); 將之前點擊的棋子chessGoing運動到posOfChessGoing結(jié)點; 退出函數(shù); 如果當前位置的棋子還未翻開,點擊它翻開,退出函數(shù); 如果未分出雙方分別屬于哪一種棋子: 系統(tǒng)給出提示,退出函數(shù); 如果點擊的是別人翻開的棋子: 獲取此棋子thisChess; 如果之前未點擊棋子,退出函數(shù); 獲得之前點擊的棋子所在結(jié)點為posOfChessGoing; 如果pos和posOfChessGoing不相鄰,退出函數(shù); 如果對方處于安全位置: 給出系統(tǒng)提示,退出函數(shù); 如果已方棋子可以殺掉對方棋子: 殺死對方,退出函數(shù); 否則:給出系統(tǒng)提示殺不了對方; 計算機走棋模塊(1)計算機走棋邏輯類接口函數(shù)如果沒有分出計算機屬于哪一方,計算機將選擇一個處于相對安全的位置的未翻棋子翻開。該算法自然語言描述如下所示:函數(shù):getOrder/初始化棋盤的隨機函數(shù) 以當前的系統(tǒng)時間為種子; 清空數(shù)組a[],表示所有編號都未出現(xiàn); 如果20個棋子編號未全部出現(xiàn),繼續(xù)產(chǎn)生數(shù)字: 產(chǎn)生1~20之間的數(shù)字x; 如果x已經(jīng)保存,不用繼續(xù)保存; 否則: 保存未產(chǎn)生過的編號x; 用order[i]保存第i個產(chǎn)生的之前未產(chǎn)生的編號x; 玩家走棋模塊當計算機走棋時,玩家不能夠觸摸棋子。; 如果i/54||i==20:連接結(jié)點i與結(jié)點i+5; 如果i==7||i==9||i==13||i==17||i==19: 將結(jié)點i分別與結(jié)點i+i+ii4連接; 如果i==11:將結(jié)點i分別與結(jié)點i+i4連接; 如果i==3:將結(jié)點i分別與結(jié)點i+i+4連接; 如果i==15:將結(jié)點i分別與結(jié)點ii+4連接; 如果i==23:將結(jié)點i分別與結(jié)點ii4連接; (2) 初始化布局函數(shù)order[]:order[i]表示第i個結(jié)點擺放的棋子。棋中結(jié)點1119為安全結(jié)點,棋局結(jié)構(gòu)如圖71所示。棋盤中一共有25個結(jié)點,一個結(jié)點最多與8個結(jié)點相連。 定時模塊程序流程圖定時模塊程序流程圖如圖611所示。圖69 靜音與恢復程序流程圖(3)移動特效移動特效程序流程圖如圖610所示。 附加功能模塊程序流程圖(1)暫停與恢復暫停與恢復程序流程圖如圖68所示。4)按下靜音按鈕,背景音樂和音效都停止,該按鈕變?yōu)榛謴桶粹o。2)走棋特效中,數(shù)字為2~8的棋子,行走時用跳動特效,其它為移動特效。 游戲結(jié)束模塊程序流程圖游戲結(jié)束判斷程序流程圖如圖67所示。具體內(nèi)容如下:static const int positionValue[11][26]={{0,12,12,13,12,12,12,27,11,27,12,13,11,26,11,13,12,27,11,27,12 ,12,12,13,12,12},//獵人{ 0,11,11,12,11,11,11,26,10,26,11,12,10,25,10,12,11,26,10,26,11,11,11,12,11,11},{0,10,10,11,10,10,10,25,9,25,10 ,11,9,24,9,11 ,10,25,9,25,10 ,10,10,11,10,10},{0,9,9,10,9,9 ,9,24,8,24,9 ,10,8,23,8,10 ,9,24,8,24,9 ,9,9,10,9,9},{ 0,8,8,9,8,8 ,8,23,7,23,8 ,9,7,22,7,9 ,8,23,7,23,8 ,8,8,9,8,8},{0,7,7,8,7,7,7,22,6,22,7 ,8,6,21,6,8 ,7,22,6,22,7 ,7,7,8,7,7},{ 0,6,6,7,6,6 ,6,21,5,21,6 ,7,5,20,5,7 ,6,21,5,21,6 ,6,6,7,6,6},{ 0,5,5,6,5,5 ,5,19,4,19,5 ,6,4,18,4,6 ,5,19,4,19,5 ,5,5,6,5,5},{ 0,4,4,5,4,4 ,4,17,3,17,4 ,5,3,16,3,5,4,17,3,17,4 ,4,4,5,4,4},{ 0,4,4,5,4,4 ,4,16,3,16,4 ,5,3,15,3,5 ,4,16,3,16,4 ,4,4,5,4,4}}。具體內(nèi)容如下:static const int eatOther[10][10]={ {1000,1000,900,800,700,600,100,200,300,400},///0//炸彈 {1000,100,900,800,700,600,500,400,300,200},//1 {900,0,100,800,700,600,500,400,300,200},//2 {800,0,0,100,700,600,500,400,300,200},//3 {700,0,0,0,100,600,500,400,300,200},//4 {60,0,0,0,0,10,50,40,30,20},//5 {700,0,0,0,0,0,1000,400,300,200},//6 {800,0,0,0,0,0,0,100,300,200},//7 {900,0,0,0,0,0,0,0,1000,200},//8 {1000,0,1000,0,0,0,0,0,0,100},//9}。具體內(nèi)容如下: chessValue[]={0,900,800,700,600,500,400,300,200,100,1000,900,800,700,600,500,400,300,200,100,1000}。圖66 距離計算程序流程圖以弗洛伊德算法求出圖中各結(jié)點兩兩之間的最短路,再枚舉所有結(jié)點,得到所求結(jié)點集合。圖65 代價計算程序流程圖(3) 獲得與A的距離為2的且能殺死A的B棋子設X為當前棋子的起始位置,Y為目的位置,Dist[X][Y]=1表示建一條從X到Y(jié)的邊。其中A為計算機操作的棋子,B為A將要攻擊的棋子,eatOther[A][B]表示A吃掉B可以獲得的價值,fP為A的起始位置,tP為A的目標位置,Score為當前方案估價的累計值,positionValue[A][tP]表示A棋子到tP位置可以獲得的價值。 計算機走棋模塊程序流程圖(1)計算機走棋模塊程序流程圖計算機走棋模塊程序流程圖如圖63所示。圖62 玩家走棋程序流程圖 玩家走棋模塊關(guān)鍵函數(shù)說明(1)玩家觸摸代理函數(shù)bool GameCenter::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)pTouch:觸摸點pEvent:是觸摸點集合(2)玩家翻棋void GameCenter::manOpenChessI(int nChess)nChess:翻開棋子的編號(3)玩家移棋或吃棋void GameCenter::manMoveAchess(int chessNumber,int opChess,int from ,int to,bool onlyMove)chessNumber:行動棋子的編號opChess:攻擊棋子的編號from:行動起點to:目的點onlyMove:是移動還是吃棋 計算機走棋模塊設計 計算機走棋模塊算法描述 算法描述如下:1) 通過定時函數(shù),判斷計算機屬于哪一方;2) 如果還未區(qū)分開,那么計算機將選擇一個相對安全的棋子翻開,否則記錄所有的可行方案,按給定規(guī)則給每一種方案估價,從所有方案選擇估價最高的作為本次行棋方案。圖61 初始化游戲程序流程圖 界面初始化模塊關(guān)鍵函數(shù)說明(1)完成界面基本布局bool GameCenter::init()(2)初始化游戲void GameCenter::initGame() 玩家走棋模塊設計 玩家走棋模塊算法描述 算法描述如下:1) 判斷玩家是否完成動作,是則繼續(xù),否則退出函數(shù);2) 判斷是否輪到玩家操作,是則繼續(xù),否則退出函數(shù);3) 判斷點擊的落點是否在棋盤上,是則繼續(xù),否則退出函數(shù);4) 判斷點擊的落點是否有棋子,是則繼續(xù)
點擊復制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1