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

正文內(nèi)容

基于android的中國象棋的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2024-10-02 15:38 本頁面
 

【文章內(nèi)容簡介】 if(fromY == toY){//橫線 if(fromX toX){//想右走 for(i = fromX + 1。 i toX。 i++){ if(qizi[fromY][i] != 0){ return false。//返回 false } } } else{//向走走 for(i = toX + 1。 i fromX。 i++){ if(qizi[fromY][i]!=0){ return false。//返回 false } } } } else{//豎線 if(fromY toY){//向下走 for(j = fromY + 1。 j toY。 j++){ if(qizi[j][fromX] != 0){ return false。//返回 false } } } else{//向上走 for(j = toY + 1。 j fromY。 j++){ 13 if(qizi[j][fromX] != 0){ return false。//返回 false } } } } } else{//吃子時(shí) int count=0。 if(fromY == toY){//走的是橫線 if(fromX toX){//向右走 for(i=fromX+1。itoX。i++){ if(qizi[fromY][i]!=0){ count++。 } } if(count != 1){ return false。//返回 false } } else{//向左走 for(i=toX+1。ifromX。i++){ if(qizi[fromY][i] != 0){ count++。 } } if(count!=1){ return false。//返回 false } } } else{//走的是豎線 if(fromYtoY){//向下走 14 for(j=fromY+1。jtoY。j++){ if(qizi[j][fromX]!=0){ count++。//返回 false } } if(count!=1){ return false。//返回 false } } else{//向上走 for(j=toY+1。jfromY。j++){ if(qizi[j][fromX] != 0){ count++。//返回 false } } if(count!=1){ return false。//返回 false } } } } break。 15 象、相:只可以在己方 陣營走動(dòng),且僅限于 7 個(gè)點(diǎn),即己方“田”字格上的 7 個(gè)點(diǎn),走的是斜線,走動(dòng)時(shí),起始點(diǎn)與目標(biāo)點(diǎn)構(gòu)成一條斜線,若該斜線的中點(diǎn)位置存在其他棋子,則被絆住無法走動(dòng)。 圖 象的走法 case 6://黑象 if(toY4){//不能過河 return false。 } if((fromXtoX) != 2 || (fromYtoY) != 2){//相走“田”字 return false。 } if(qizi[(fromY+toY)/2][(fromX+toX)/2] != 0){ return false。//相眼處有棋子 } break。 case 13://紅相 if(toY5){//不能過河 return false。//返回 false } if((fromXtoX) != 2 || (fromYtoY) != 2){//相走“田”字 16 return false。//返回 false } if(qizi[(fromY+toY)/2][(fromX+toX)/2] != 0){ return false。//相眼處有棋子 } break。 將、帥:只可以在己方陣營走動(dòng),且僅限于 9 個(gè)點(diǎn),即己方底三行中三列形成的 9個(gè)交叉點(diǎn),也就是俗稱的“九宮”,一步只可以走動(dòng)一個(gè)方格的直線距離作為本方的主將,鎮(zhèn)守大本營,雙方的主將是不能夠處于同一條直線而主將之間不存在其他的棋子進(jìn)行隔擋。 圖 將帥的走法 case 1://黑帥 if(toY2||toX3||toX5){//出了九宮格 return false。 } if(((fromYtoY)+(toXfromX))1){//只能走一步 return false。 } break。 17 case 8://紅將 if(toY7||toX5||toX3){//出了九宮格 return false。 } if(((fromYtoY)+(toXfromX))1){//只能走一步 return false。 } break。 (2) 棋盤的表示 針對(duì)棋盤的設(shè)計(jì),每一種棋子對(duì)應(yīng)一個(gè)固定的值用以識(shí)別該棋子的類型,那么設(shè)計(jì)就根據(jù)紅黑雙方的棋子以及每個(gè)類型的棋子,設(shè)計(jì)規(guī)則類( GuiZe 類,調(diào)用其中的 canMove方法用以判斷某一步走棋的是否可行。規(guī)則類的設(shè)計(jì)則采用了常規(guī)的辦法,因?yàn)槠遄拥姆N類只有 7 種,且紅黑雙方處于棋盤的兩端,某些棋子走動(dòng)時(shí)的方向不一樣,設(shè)計(jì)時(shí)就要進(jìn)行分類討論設(shè)計(jì),供存在 14 中不同的判別方法來對(duì)所以的棋子走法進(jìn)行判別是否可行,每一個(gè)判別方法都對(duì)應(yīng)于其獨(dú)有的判斷算法。 棋盤上各種棋子以及棋盤的初始布局的設(shè)計(jì)采用 10*9 的數(shù)組來進(jìn)行標(biāo)識(shí),如下圖 所示 : 圖 棋盤初始布局 各個(gè)數(shù)字的對(duì)應(yīng)關(guān)系如下: 0無棋子; 1黑方的帥; 2黑方的車 ; 3黑方的馬; 4黑方的炮; 5黑方的士; 6黑方的象; 7黑方的卒; 8紅方的將; 9紅方的車; 10紅方的馬; 11紅方的炮; 12紅方的士; 13紅方的相; 14紅方的兵。 坐標(biāo) (0,0)到坐標(biāo) (8,4)之間的坐標(biāo)代表楚河漢界的一方,坐標(biāo) (0,5)到坐標(biāo) (8,9)之間的 18 坐標(biāo)代表楚河漢界的另一方,即紅黑雙方各自的領(lǐng)土。 電腦走棋時(shí)通過構(gòu)造一個(gè)走法類 ChessMove,創(chuàng)建一個(gè)對(duì)象調(diào)用 NegamaxEngine 類中的 Search()函數(shù) 根據(jù)當(dāng)前局勢(shì)查詢一個(gè)最好的走法 記錄棋子的原有位置坐標(biāo)、目標(biāo)位置坐標(biāo)、 棋子類型并對(duì)該對(duì)象進(jìn)行初始化。然后根據(jù)該對(duì)象記錄的原有位置坐標(biāo)和目標(biāo)位置坐標(biāo)進(jìn)行數(shù)據(jù)改變達(dá)到行棋目的。 玩家走棋是通過對(duì)屏幕進(jìn)行監(jiān)聽,從而記錄棋子類型,原有位置坐標(biāo)和目標(biāo)位置坐標(biāo),通過調(diào)用規(guī)則類 GuiZe 中的 CanMove 判斷該棋子走法是否可行符合棋子走棋規(guī)則,可行就改變?cè)形恢煤湍繕?biāo)位置數(shù)據(jù),達(dá)到行棋的目的 輪到走棋的一方,游戲界面當(dāng)前位置顯示走棋一方的“黑帥”或者“紅將”,將某個(gè)棋子從一個(gè)交叉點(diǎn)走到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方的棋子而占領(lǐng)其交叉點(diǎn),這樣一方走棋結(jié)束當(dāng)前位置顯示改變輪到另一方走棋。 任何棋子 走動(dòng),如果目標(biāo)位置上有對(duì)方的棋子,就可以把對(duì)方的棋子拿出棋盤,即在 10*9 數(shù)組中相應(yīng)位置的數(shù)字變?yōu)樽约浩遄铀鶎?duì)應(yīng)的數(shù)字,自己棋子原來所在的位置對(duì)應(yīng)數(shù)組的數(shù)字變?yōu)?0,刷幀線程不斷的刷新界面改變屏幕顯示,這樣對(duì)方的棋子就被吃掉,在屏幕上消失在對(duì)應(yīng)顯示自己的棋子;如果目標(biāo)位置上沒有對(duì)方棋子, 10*9 數(shù)組對(duì)應(yīng)目標(biāo)位置數(shù)字改變,原有位置數(shù)字變?yōu)?0,刷幀線程更新界面改變顯示。 游戲人機(jī)對(duì)戰(zhàn)的實(shí)現(xiàn) (1) 首先產(chǎn)生所有可能的走法,定義 一個(gè) ArrayList 容器,把可能的走法放入 ArrayList 容器里面。 public ListChessMove allPossibleMoves(int qizi[][]){//產(chǎn)生所有可能的走法 ListChessMove ret = new ArrayListChessMove()。//用來裝所有可能的走法 for (int x = 0。 x 10。 x++){ for (int y = 0。 y 9。 y++){//循環(huán)所有的棋牌位置 int chessman = qizi[x][y]。 if (chessman != 0){//當(dāng)次位 置不為空時(shí),即有棋子時(shí) if(chessman 7){//是紅方,即是玩家棋子時(shí)跳過 continue。 } .......... } } } 19 return () ? null : ret。//當(dāng) ret 中沒有走法時(shí),返回空,有時(shí)返回 ret } (2) 利用隨機(jī)數(shù)從容器中取出一種走法,完成移動(dòng)。 public ChessMove searchAGoodMove(int[][] qizi){//查詢一個(gè)好的走法 ListChessMove ret = allPossibleMoves(qizi)。//產(chǎn)生所有走法 try { (1000)。//睡眠四秒鐘,以便調(diào)試 } catch (InterruptedException e) {//捕獲異常 ()。//打印堆棧信息 } return ((int)(()*()))。 } 系統(tǒng) 流程圖 游戲流程圖 如圖 所示 圖 系統(tǒng)流程圖 菜單開始游戲紅方走棋黑方是否被將死紅方勝利 黑方走棋結(jié)束游戲紅方是否被將死黑方勝利 20 5 運(yùn)行測試 測試 用例表 測試編號(hào) 測試目標(biāo) 期望結(jié)果 實(shí)際結(jié)果 001 測試象棋“馬”是否“絆馬腿” 游戲過程中,“馬”在絆馬腿情況下不能移動(dòng)。 能實(shí)現(xiàn)“絆馬腿” 002 測試一方棋子能否被另一方吃掉,并消失 棋子被吃后消失,吃子的棋子能代替被吃棋子的位置 一方棋子能被另一方吃掉,并消失 003 測試對(duì)手的象棋“將”能否被將死,能結(jié)束游戲 對(duì)手的象棋“將”被將死,并出現(xiàn)提示“你贏了” ,結(jié)束游戲 對(duì)手的象棋“將”被將 死,能結(jié)束游戲 004 測試象棋“炮”是否能隔子吃掉 對(duì)手的棋子,即“炮打隔子” “炮”隔子吃掉對(duì)手棋子 “炮”能“炮打隔子” 005 測試游戲棋子是否能移動(dòng) 棋子從一個(gè)到另一個(gè)位置 游戲棋子能移動(dòng) 006 不同 分辨率模擬器能否正常運(yùn)行 能夠 正常運(yùn)行 不能 正常運(yùn)行 007 能否 對(duì)將 可以對(duì)將 不能對(duì)將 測試結(jié)果 (1) 測試 001“馬”是否“絆馬腿”測試 結(jié)果 如 圖 所示 圖 測試 絆馬腿 21 (2) 測試 002 一方棋子能否被另一方吃掉測試 結(jié)果 如 圖 所示 圖 測試 吃子 (3) 測試 003“將”能否被將死測試 結(jié)果 如 圖 所示 圖 測試能否 贏 棋 22 (4) 測試 003“將”能否被將死測試 結(jié)果 如 圖 所示
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1