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

正文內(nèi)容

基于java語(yǔ)言的中國(guó)象棋設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)-文庫(kù)吧資料

2025-07-03 17:39本頁(yè)面
  

【正文】 dst。BitFiles[9]和BitRanks[10]分別保存的是位棋盤中9列(每列共10位)和10行(每行共9位)的二進(jìn)制值。 } } }以上對(duì)炮偽合法著法的合法性判斷。 (Player!=0 ? 16 : 32))!=0) { return == [x][BitWord] + y。 } else { return = [x][BitWord] + y。//行位棋盤數(shù)值,9位二進(jìn)制數(shù) if ( ) { if ((Attack amp。 } else { return = [y][BitWord]+ Bottom[x]。 } } else {// ,退 if ((Attack amp。 (Player!=0 ? 16 : 32))!=0) {//吃子return == [y][BitWord]+Bottom[x]。//棋子所在的行 if (x == File[]) {//與目標(biāo)位置在同一列,也就是進(jìn)退 BitWord = BitFiles[x]。 } switch (PieceTypes[Piece] (Player!=0 ? 7 : 0)) {//判斷棋子類型 case 5://炮,吃子時(shí)中間要有炮架 x = File[]。 (Player!=0 ? 32 : 16))!=0) { return false。//所選的棋子是否是當(dāng)前Player的 } Attack = Squares[]。 if ((Piece amp。例如,判斷炮吃子的偽合法著法是否是合法著法,需要判斷被吃子的顏色,同時(shí)需要判斷己方是否正在被“將”,如果正在被“將”,炮吃子是否能解除被“將”的狀態(tài)。 } } FileCannonCapMoves[i][j][Index] = 1。 FileCannonCapMin[i][j] = k。 (1 k))!=0) { 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。 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。//著法種類下標(biāo) 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]。 //除去蹩腿位置有子的將軍位置 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。第二個(gè)坐標(biāo)的含義,以橫線走法示例如下:例如,第二條橫線上的棋子如下(有棋子的用1表示,炮或車的位置用x表示,實(shí)際上x(chóng)也是1): 001100x01那么, RankNonCapMoves[2][101][0]=1 RankNonCapMoves[2][101][1]=1 RankNonCapMoves[2][101][2]=2 RankNonCapMoves[2][101][3]=0上面的下標(biāo)101就是001100101對(duì)應(yīng)的二進(jìn)制值,數(shù)組元素的值2表示可行走格子的增量。車炮的不吃子著法是相同的,因此,分別保存到FileNonCapMoves[10][1024][12]和RankNonCapMoves[9][512][12]中。車、炮吃子著法與它們的不吃子著法規(guī)則不同,因此需要分開(kāi)保存。 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]。BishopMoves[90][8]保存的是相(象)的著法,ElephanEyes[90][4]保存的是相(象)著法對(duì)應(yīng)的塞象眼的位置。兵最多有三種走棋方法。(在后面所講的開(kāi)局庫(kù)和置換表的大小設(shè)置是2的整次方冪也是這個(gè)道理。第5種(如果前面只有3種著法,則此處是第4種)保存的是非法著法即KingMoves[13][4]=1,其作用作為查詢算法的“哨兵”,提高查詢算法的速度。第一個(gè)下標(biāo)說(shuō)明棋子所在的格,第二個(gè)下標(biāo)含義不盡相同。 public static final int[][] HorseLegs=new int[90][8]。 public static final int[][] ElephantEyes=new int[90][4]。 public static final int[][] AdvisorMoves=new int[90][8]。本程序使用靜態(tài)數(shù)組存儲(chǔ)生成的偽合法著法,先對(duì)其作一些說(shuō)明。馬和象的著法要考慮蹩馬腿和塞象眼。)炮和車的不吃子著法規(guī)則相同,但分為縱向橫向行走兩類。其中,馬、相(象)、兵、帥(將)、仕(士)的吃子著法與其對(duì)應(yīng)的不吃子著法規(guī)則相同。這樣可以節(jié)省大量的時(shí)間。中國(guó)象棋的著法生成與此類似,先生成所有偽合法的著法,存入靜態(tài)數(shù)組中。一個(gè)用來(lái)生成所有偽合法吃子著法,一個(gè)生成所有偽合法不吃子著法,最后一個(gè)生成所有擺脫被將軍狀態(tài)的著法。因此,可能先生成所有吃子的著法,如果沒(méi)有滿意的棋再生成余下的著法。之所以用這種方式生成著法,是因?yàn)樯芍ê馁M(fèi)一定的時(shí)間。…… } }4系統(tǒng)實(shí)現(xiàn)著法生成在不同的象棋引擎中差異較大。ZobristKey ^= ZobristKeyPlayer?!瓆 ……public void makeMove(int Square, int Piece, boolean IsAdd) { …… ZobristKey^=ZobristKeyTable[PieceType][Square]。//當(dāng)前局面的zobrist鍵值 public ChessPosition{ ……ZobristKey=0。 } } } 當(dāng)移動(dòng)(添加、刪除)一個(gè)棋子時(shí),將當(dāng)前局面的Zobrist鍵值與鍵值表中該棋子的鍵值進(jìn)行異或操作,同時(shí)也與改變走子方的鍵值進(jìn)行異或操作。 j 90。 i 14。 } } ZobristLockPlayer = ()。 j 90。 i 14。 ZobristKeyPlayer = ()。 RandSeed = 1。 Random rand = new Random()。 …… static{ …… zobristGen()。//改變走子方的lock public static long[][] ZobristKeyTable = new long[14][90]。示例代碼及相關(guān)說(shuō)明如下上述的三維數(shù)組現(xiàn)在改變?yōu)槎S(將顏色與棋子兵種類型合并) ……public static long ZobristKeyPlayer。   如果局面由紅方走,那么別去動(dòng)它,如果是黑方走,你還要在鍵值上異或一個(gè)64位的隨機(jī)常數(shù)。   程序啟動(dòng)時(shí)就把這個(gè)數(shù)組用隨機(jī)數(shù)填滿。在Java中,“()”函數(shù)返回一個(gè)64位的隨機(jī)數(shù)值。用這種方法,可以在搜索根結(jié)點(diǎn)的時(shí)候構(gòu)造一個(gè)Zobrist鍵值,在搜索時(shí)通過(guò)走子函數(shù)“MakeMove()”來(lái)更新鍵值,一直讓它保持和當(dāng)前局面同步。比起從頭開(kāi)始一個(gè)個(gè)棋子去異或,這樣做可以得到同樣的鍵值。如果再次異或這個(gè)值,那么根據(jù)異或的工作原理,這個(gè)“馬”就從鍵值里刪除了。   另一個(gè)優(yōu)點(diǎn)在于,鍵值的產(chǎn)生是可以逐步進(jìn)行的。如果一個(gè)棋子動(dòng)過(guò)了,就會(huì)得到完全不同的鍵值,所以這兩個(gè)鍵值不會(huì)擠在一塊兒或者沖突。由于64位不足以區(qū)別每個(gè)局面,所以仍然存在沖突的標(biāo)簽,但實(shí)戰(zhàn)中這種情況非常罕見(jiàn)。另外,需要比較的局面數(shù)量多得驚人,要存儲(chǔ)每個(gè)棋子的位置,需要占用非常大的空間。 = (,bitMask[h9]——Zobrist鍵值 比較局面的方法  在寫中國(guó)象棋程序時(shí),需要比較兩個(gè)局面看它們是否相同。 現(xiàn)在我們要將blackPieces和blackKnights位棋盤的h9位清除,因?yàn)槟抢锏暮隈R被吃掉了。 /* set a bit with the OR operation */ = (,bitMask[h9])。 = (,bitMask[h2])。假如我們把h2格的紅炮移動(dòng)到h9格(炮二進(jìn)七),吃掉黑棋的一個(gè)馬,需要更新如下位棋盤:allPiecesredPieces redCannonsblackpiecesblackKnights首先,要把redPieces,redCannons位棋盤的“h2”位清零,然后把他們的“h9”位置1。   …  } } 位棋盤的更新當(dāng)棋盤局面變動(dòng)后,某些位棋盤就需要被更新。   (,bitMask[c])。 c 90?!?piece_in_square[89] = BLACK_ROOK。 piece_in_square[1] = RED_KNIGHT。初始化“piece_in_square[]”數(shù)組。//所有紅棋子BitBoard blackPieces。//紅兵B(niǎo)itBoard blackPawns。//紅仕BitBoard blackAdvisor。//紅相BitBoard blackBishops。//紅炮BitBoard redCannon。//紅馬BitBoard blackKnights。//紅車BitBoard blackRooks。//紅帥BitBoard blackKing。 //輪到哪方走棋,2:紅方走,1:黑方走BitBoard allPieces。 public class ChessPosition {int piece_in_square[90]。 } 其次,用一個(gè)叫 ChessPosition類記錄棋盤上某一狀態(tài)的所有有用信息。 c 90。首先,初始化“BitBoard bitMask[90]”數(shù)組:BitBoard b = new BitBoard(0,0,1)。對(duì)于諸如knight[90]這樣不變化的位棋盤的初始化,將
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1