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

正文內(nèi)容

基于java語言的中國象棋設(shè)計與實現(xiàn)畢業(yè)設(shè)計-文庫吧在線文庫

2024-10-10 15:28上一頁面

下一頁面
  

【正文】 ds(x,y,55,55)。 }//if else if (!play[30].isVisible()){ ( this,紅棋勝利 ,玩家二勝利 , ,)。 ((()))。 Chess == 0 amp。 playQ[j].isVisible()){ //自己是起點被吃的是終點 (以 從上到下 為例 ) for (int k=()+57。 for (int j=0。amp。 } else if (() 284 amp。amp。下面我以卒的算法為例,介紹如何實現(xiàn)棋子 按行棋 規(guī)則行走 。//炮 GenPawnMoves(Position, HistTab)。)。a39。 public MoveStruct(){ src = dst = cap = 1。 (Player!=0 ? 16 : 32))!=0) { return == [x][BitWord] + y。 } } else {// ,退 北京物資學院 2020屆畢業(yè)論文(設(shè)計) 18 if ((Attack amp。 (Player!=0 ? 32 : 16))!=0) { return false。 } } FileCannonCapMoves[i][j][Index] = 1。 break。 Index ++。 k = 9。 (1 k))!=0) { FileRookCapMoves[i][j][Index] = k。 (1 k))!=0) { FileRookCapMoves[i][j][Index] = k。 Index ++。 Index ++。 j 1024。 //炮縱線照將 public static final BitBoard[][] RankRookCheck=new BitBoard[18][512]。第二個坐標的含義,以橫線走法示例如下: 例如,第二條橫線上的棋子如下(有棋子的用 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 表示可行走格子的增量。 public static final int[][] RankRookCapMax=new int[9][512]。 public static final int[][] FileNonCapMax=new int[10][1024]。 BishopMoves[90][8]保存的是相(象)的著法, ElephanEyes[90][4]保存的是相(象)著法對應(yīng)的塞象眼的位置。 北京物資學院 2020屆畢業(yè)論文(設(shè)計) 13 第一個下標說明棋子所在的格,第二個下標含義不盡相同。 本程序使用靜態(tài)數(shù)組存儲生成的偽 合法著法,先對其作一些說明。這樣可以節(jié)省大量的時間。 之所以 用這種方式生成著法 , 是 因為 生成著法耗費一定的時間。 //當前局面的 zobrist 鍵值 public ChessPosition{ …… ZobristKey=0。 } } ZobristLockPlayer = ()。 RandSeed = 1。示例代碼及相關(guān)說明如下 填充數(shù)組 上述的三維數(shù)組現(xiàn)在改變?yōu)槎S(將顏色與棋子兵種類型合并) …… public static long ZobristKeyPlayer。用這種方法,可以在搜索根結(jié)點的時候構(gòu)造一個 Zobrist 鍵值,在搜索時通過走子函數(shù)“MakeMove()”來更新鍵值,一直讓它保持和當前局面同步。如果一個棋子動過了,就會得到完全不同的鍵值,所以這兩個鍵值不會擠在一塊兒或者沖突。 現(xiàn)在我們要將 blackPieces 和 blackKnights 位棋盤的 h9 位清除,因為那里的黑馬被吃掉了。 … } } 位棋盤的更新 當棋盤局面變動后,某些位棋盤就需要被更新。 piece_in_square[1] = RED_KNIGHT。//紅仕 BitBoard blackAdvisor。//紅車 BitBoard blackRooks。 } 其次,用一個叫 ChessPosition 類記錄棋盤上某一狀態(tài)的所有有用信息。當中國象棋棋盤變化時,它也跟著變化。 public static int count(BitBoard arg) //計算位棋盤中非零位的個數(shù) public static BitBoard duplicate(int arg) //復(fù)制位棋盤 public static boolean equals(BitBoard arg1,BitBoard arg2) //位棋盤是否相等(所有 90位對應(yīng)的位相同即 //為相等) public static BitBoard leftShift(BitBoard arg,int num) //位棋盤 arg左位移 num位 public static rightShift(BitBoard,int num) //位棋盤右位移 num位 public static int LSB(BitBoard Arg) //位棋盤最低非 0位的位置(從 0開始計數(shù)) public static int MSB(BitBoard Arg) //位棋盤最高非 0位的位置(從 0開始計數(shù)) public static boolean notZero(BitBoard Arg) //是否非 “0”。 。 Java 中位棋盤的實現(xiàn) 位棋盤類的實現(xiàn) Java 中,位棋盤用 3 個 int 型的數(shù)據(jù)表示,最高六位不用。位棋盤其實就是一個長度為 90 位的變量,每個位對應(yīng)一個交叉點,用來記錄棋盤上的某些布爾值。 北京物資學院 2020屆畢業(yè)論文(設(shè)計) 4 硬件環(huán)境 開發(fā)環(huán)境 硬件環(huán)境 CPU: AMD Turion(tm)64*2 內(nèi)存: DDR 硬盤: 80G 軟件環(huán)境 操作系統(tǒng): WINDOWS XP 開發(fā)語言: JAVA 運行環(huán)境 32M 以上內(nèi)存, 4G 以上硬盤。 可行性分析 隨著計算機的普及和應(yīng)用,電子游戲已經(jīng)深入到我們生活的各個方面,利用電子游戲推廣我國文化、增加我國傳統(tǒng) 游戲的市場占有率,是將我國文化推向世界的 比較便捷的一種方式。 最終 在深入研究理論的基礎(chǔ)上,實現(xiàn)基于 JAVA 語言設(shè)計的中國象棋,做出預(yù)期的完整游戲。但是中國象棋在國際上的普及率仍然很低,并因此未被入選 2020 年廣州亞運會的競賽項目 。 根據(jù)該方法 設(shè)計 出了符合中國象棋 行棋和吃子規(guī)則,能夠判斷勝負 ,能夠 實現(xiàn)悔棋、重新開始等 多種 功能, 而且 界面 十分 美觀的中國象棋程序,并給出了 JAVA 語言的實現(xiàn)方法。盡我所知,除文中特別加以標注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機構(gòu)的學位或?qū)W歷而使用過的材料。國際象棋軟件有著成功的商業(yè)運作,已發(fā)展成一種產(chǎn)業(yè)。 因此,我們迫切的需要一個更加基礎(chǔ)、更加實用的中國象棋對戰(zhàn)平臺。棋類游戲作為一種簡單易學的休閑游戲,一直深受廣大群眾的 喜愛。用 JAVA 編寫的中國象棋程序?qū)崿F(xiàn)了人與人的對弈, 符合 中國象棋的行棋 規(guī)則, 界面美觀,能夠激起 玩家 的興趣,同時單機游戲?qū)τ嬎銠C的環(huán)境要求十分簡單、易于實現(xiàn)。 北京物資學院 2020屆畢業(yè)論文(設(shè)計) 5 3 界面設(shè)計框架 程序的框架 從程序的結(jié)構(gòu)上講,大體上可以將引擎部分劃分為四大塊: 棋局表示; 著法生成; 搜索算法; 局面評估。 AllPieces 告訴我們棋盤上哪些格子有棋子,哪些沒有。代碼摘要(詳細代碼見附件)及相關(guān)說明如下: public class BitBoard{ private int Low,Mid,Hi//用 3 個 int 字段表示位棋盤,最高位 Hi 的高 //6 位不用 public BitBoard(int Arg1, int Arg2, int Arg3) {//構(gòu)造函數(shù) Low = Arg1。 int hi= amp。例如上面所述的那個位棋盤數(shù)組 “knight[90]”。此處敘述走棋過程中隨棋局變化的諸多位棋盤的初始化及相關(guān)操作。 北京物資學院 2020屆畢業(yè)論文(設(shè)計) 8 int player。//黑馬 BitBoard redCannon。//黑卒 BitBoard redPieces。 現(xiàn)在初始化其他一些位棋盤 : for (c = 0。 /* clear a bit with the XOR operation */ = (,bitMask[h2]。如果比較每個棋子的位置,或許不需要花很多時間,但是實戰(zhàn)中每秒種需要做成千上萬次比較,因此這樣會使比較操作變成瓶頸的。例如,紅馬在 e5 格,那么鍵值里一定異或過一個 “zobrist[KNIGHT][RED][E5]”。 這個 函數(shù)用來填滿一個 long 型( 64 位)的三維數(shù)組:棋子的類型、棋子的顏色和棋子的位置: long zobrist[pcMAX][coMAX][sqMAX]。 public static long[][] ZobristLockTable = new long[14][90]。 for (i = 0。 i ++) { for (j = 0。 ZobristLock^=ZobristLockTable[PieceType][Square]。 國際象棋引擎 Crafty(其作者是 Robert Hyatt 博士 )使用三個著法生成函數(shù)。(偽合法著法并不考慮被吃的棋子的顏色 ——該棋子是對方的棋子 還是己方的棋子,也不考慮該子是否能動,例如動了該子,雙方的帥將會面。 public static final int[][] BishopMoves=new int[90][8]。為了速度(以位移運算取代除法運算),第 2 個坐標值用 2 的整次方冪。 //共十條橫線 ,FileNonCapMoves[y][bitWordY][index]=newY,進 public static final int[][][] FileRookCapMoves=new int[10][1024][4]。 public static final int[][] FileRookCapMin=new int[10][1024]。 public static final int[][] RankCannonCapMin=new int[9][512]。 下面是最大的位移量和最小的位移量,用來生成合法著法時初步判斷著法的合法性: RankNonCapMax[2][101]=2 //不吃子著法中最大的格子增量 RankNonCapMin[2][101]=1 //不吃子著法中最小的 格子增量 RankRookCapMax[2][101]=3//車吃子著法中最大的格子增量 RankRookCapMin[2][101]=2//車吃子著法中最小的格子增量 RankCannonCapMax[2][101]=4//炮吃子著法中最大的格子增量 RankCannonCapMin[2][101]=2//炮吃子著法中最小的格子增量 以上是橫向(平)著法的靜態(tài)數(shù)組,縱向著法的表示與此類似,在此不再贅述。 //兵照將 帥、將的位置共有 18 個,每個位置有一個編號,從 0 到 17,對應(yīng)數(shù)組的第一個下標。 for (k = i + 1。 for (k = i 1。 Index = 0。 break。 break。 break。 } } FileCannonCapMin[i][j] = i。 k ) { if ((j amp。 現(xiàn)列出生成合法著法的算法并附簡要說明如下: 偽合法著法的合法性判斷: 以炮為例,算法如下: public boolean LeagalMove(MoveStruct Move){ int Piece, Attack, x, y, BitWord; Piece = Squares[]。//棋子所在的列 y = Rank[]。 } } } else {//與目標位置的列位置不同,也就是 “平 ” BitWord = BitRanks[y]。 File[90]和 Rank[90]保存的是格子
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1