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

正文內(nèi)容

基于java語言的中國象棋設(shè)計與實現(xiàn)畢業(yè)設(shè)計(參考版)

2024-08-31 15:28本頁面
  

【正文】 。139。 play[M].setBounds(x,y,55,55)。 //獲得索引 int M = ((String)(()1))。 //獲得 X 坐標 int x = ((String)(()3))。 ( 紅棋勝利 )。 }//if else if (!play[30].isVisible()){ ( this,紅棋勝利 ,玩家二勝利 , ,)。 //雙方都不可以在走棋了 chessPlayClick=3。 } }//炮、車吃棋方法結(jié)束 判斷勝負的算法實現(xiàn) 在中國象棋中,將是最重要的棋子,它的存在決定了棋局的勝負。 //如果符合規(guī)則,則目標子將自己的位置釋放,即被吃掉 (false)。 ((()))。 //當前記錄添加到集合 (用于悔棋 ) ((()))。 ((()))。 ().charAt(1) != ().charAt(1)){ 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 22 //當前記錄添加到集合 (用于悔棋 ) ((()))。 Chess == 0 amp。 } } //炮吃子時,與目標 間要一個棋子 , 并 規(guī)定目標與自己不能同色 if (Count == 1 amp。 playQ[j].getY() ()){ //計算起點和終點的棋子個數(shù) Count++。k+=57){ //大于起點、小于終點的坐標就可以知道中間是否有棋子 if (playQ[j].getY() () amp。 playQ[j].isVisible()){ //自己是起點被吃的是終點 (以 從上到下 為例 ) for (int k=()+57。 playQ[j].getName()!=() amp。 playQ[j].getX() () = 27 amp。j++){ if (playQ[j].getX() () = 27 amp。 for (int j=0。如果這些規(guī)則都符合,且目標子與炮的顏色不相同,目標子將被設(shè)置為不可見,且炮會占據(jù)目標子的位置,這就完成了吃子的目的。同 時要 定義 一個循環(huán), 用于查找所有棋子所在的位置。 } } 吃子 的算法實現(xiàn) 在象棋中,除棋子炮外,其他棋子吃子算法都與行棋算法比較相像,只是多了一步吃子的操作,而在執(zhí)行炮吃子時,還需要添加一步中間是否有子的判斷,下面,我介紹一下炮吃子的規(guī)則。amp。amp。 (() ()) = 112){ 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 21 (()+57,(),55,55)。 (() ()) = 57 amp。 } else if (() 284 amp。 ((Man))。 ((()))。amp。amp。amp。在移動的同時,還要將當前棋子的位置記錄下來,以便悔棋。 當程序執(zhí)行到該算法時,首先根據(jù)棋子的位置,判斷是紅棋還是黑棋, 我們以黑棋為例 , 當卒想要移動時,程序需要判斷棋子距離目標位置是否為一步距離,同時判斷所作的移動是什么性質(zhì)。下面我以卒的算法為例,介紹如何實現(xiàn)棋子 按行棋 規(guī)則行走 。 } } } 算法實現(xiàn) 行棋規(guī)則算法實現(xiàn) 走棋的算法 實現(xiàn) 在中國象棋中,由于各個棋子都有自己的行棋規(guī)則,所以棋子走法算法非常復(fù)雜 。 If(走子方不是處于被 “將 ”狀態(tài) ) saveToMoveList。以上算法調(diào)用的子函數(shù)再此給出為代碼,詳細代碼見附件。//炮 GenPawnMoves(Position, HistTab)。//馬 GenRookMoves(Position, HistTab)。//仕士 GenBishopMoves(Position, HistTab)。 } } } MoveStruct 是著法的數(shù)據(jù)結(jié)構(gòu), src 和 dst 分別是移動前后的位置(格子) public void GenMoves(final ChessPosition Position, final int HistTab[][]) { GenKingMoves(Position, HistTab)。)。] + (3) 39。 dst = (char) ([(2) 39。039。a39。chk=false。 chk=false。 } public MoveStruct(int s,int d){ src = s。 public MoveStruct(){ src = dst = cap = 1。 合法著法的生成 代碼如下: public class MoveStruct { public int src, cap, dst。 BitFiles[9]和 BitRanks[10]分別保存的是位棋盤中 9 列(每列共 10 位)和 10 行(每行共 9 位)的二進制值。 } } } 以上對炮偽合法著法的合法性判 斷。 (Player!=0 ? 16 : 32))!=0) { return == [x][BitWord] + y。 } else { return = [x][BitWord] + y。//行位棋盤數(shù)值, 9 位二進制數(shù) if ( ) { if ((Attack amp。 } else { return = [y][BitWord] + Bottom[x]。 } } else {// ,退 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 18 if ((Attack amp。 (Player!=0 ? 16 : 32))!=0) {//吃子 return == [y][BitWord] +Bottom[x]。//棋子所在的行 if (x == File[]) {//與目標位置在同一列,也就是進退 BitWord = BitFiles[x]。 } switch (PieceTypes[Piece] (Player!=0 ? 7 : 0)) {//判斷棋子類型 case 5://炮 ,吃子時中間要有炮架 x = File[]。 (Player!=0 ? 32 : 16))!=0) { return false。//所選的棋子是否是當前 Player 的 } Attack = Squares[]。 if ((Piece amp。例 如,判斷炮吃子的偽合法著法是否是合法著法,需要判斷被吃子的顏色 ,同時需要判斷己方是否正在被 “將 ”,如果正在被 “將 ”,炮吃子是否能解除被 “將 ”的狀態(tài)。 } } FileCannonCapMoves[i][j][Index] = 1。 FileCannonCapMin[i][j] = k。 (1 k))!=0) { 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 17 FileCannonCapMoves[i][j][Index] = k。 k = 0。 break。 k ) { if ((j amp。 for (k = i 1。 break。 Index ++。 k ++) { if ((j amp。 } } for (。 (1 k))!=0) { k ++。 k = 9。 FileCannonCapMax[i][j] = i。 } } FileRookCapMoves[i][j][Index] = 1。 FileRookCapMin[i][j] = k。 (1 k))!=0) { FileRookCapMoves[i][j][Index] = k。 k = 0。 } } FileRookCapMin[i][j] = i。 FileRookCapMax[i][j] = k。 (1 k))!=0) { FileRookCapMoves[i][j][Index] = k。 k = 9。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 16 FileRookCapMax[i][j] = i。 } FileNonCapMoves[i][j][Index] = 1。 Index ++。 (1 k))!=0) { break。 k = 0。 } FileNonCapMin[i][j] = i。 Index ++。 (1 k))!=0) { break。 k = 9。//著法種類下標 FileNonCapMax[i][j] = i。 j 1024。 i 10。 KnightPinCheck 是馬 “照將 ”的著法, CheckLegs 是馬 “照將 ”蹩馬腿的位棋盤。 //炮縱線照將 public static final BitBoard[] PawnCheck=new BitBoard[18]。 //炮縱線照將 public static final BitBoard[][] RankRookCheck=new BitBoard[18][512]。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 15 //除去蹩腿位置有子的將軍位置 public static final BitBoard[][] FileRookCheck=new BitBoard[18][1024]。 “照將 ”著法 public static final BitBoard[] CheckLegs=new BitBoard[18]。下面是炮吃子的著法: RankCannonCapMoves[2][101][0]=2 RankCannonCapMoves[2][101][1]=4 RankCannonCapMoves[2][101][2]=0。第二個坐標的含義,以橫線走法示例如下: 例如,第二條橫線上的棋子如下(有棋子的用 1 表示,炮或車的位置用 x 表示,實際上 x 也是 1): 001100x01 那么, RankNonCapMoves[2][101][0]=1 RankNonCapMoves[2][101][1]=1 RankNonCapMoves[2][101][2]=2 RankNonCapMoves[2][101][3]=0 上面的下標 101 就是 001100101 對應(yīng)的二進制值,數(shù)組元素的值 2 表示可行走格子的增量。車炮的不吃子著法是相同的,因此,分別保存到 FileNonCapMoves[10][1024][12]和 RankNonCapMoves[9][512][12]中。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 14 車、炮吃子著法與它們的不吃子著法規(guī)則不同,因此需要分開保存。 public static final int[][] RankCannonCapMax=new int[9][512]。 public static final int[][] RankRookCapMax=new int[9][512]。 public static final int[][] RankNonCapMax=new int[9][512]。 public static final int[][] FileCannonCapMax=new int[10][1024]。 //FileNonCapMax[y][bitwordY]=MinY public static final int[][] FileRookCapMax=new int[10][1024]。 public static final int[][] FileNonCapMax=new int[10][1024]。 //RankNonCapMoves[x][bitWordX][index]=newX,平 public static final int[][][] RankRookCapMoves=new int[9][512][4]。 public static final int[][][] FileCannonCapMoves=new int[10][1024][4]。 車、炮的偽合法著法靜態(tài)數(shù)組如下: public static final int[][][] FileNonCapMoves=new int[10][1024][12]
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1