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

正文內(nèi)容

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

2022-09-07 15:28:26 本頁面
 

【正文】 狀、分析中國象棋的需求和用 JAVA語言設(shè)計中國象棋程序的可行性,同時 根據(jù)國際象棋程序設(shè)計的一些成功經(jīng)驗,主要借鑒了位棋盤、 Zobrist 鍵值等, 針對中國象棋程序設(shè)計的一系列問題,總結(jié)出一些 中國象棋程序 的設(shè)計方法 。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對本研究提供過幫助和做出過貢獻(xiàn)的個人或集體,均已在文中作了明確的說明并表示了謝意。 根據(jù)該方法 設(shè)計 出了符合中國象棋 行棋和吃子規(guī)則,能夠判斷勝負(fù) ,能夠 實現(xiàn)悔棋、重新開始等 多種 功能, 而且 界面 十分 美觀的中國象棋程序,并給出了 JAVA 語言的實現(xiàn)方法。在設(shè)計中國象棋軟件過程中,國際象棋軟件有很多值得借鑒的成功經(jīng)驗和優(yōu)秀的思想。但是中國象棋在國際上的普及率仍然很低,并因此未被入選 2020 年廣州亞運會的競賽項目 。 預(yù)期目標(biāo) 首先進(jìn)行理論的研究,研究 JAVA 編程的基礎(chǔ),包括 JAVA 編成的主要步驟及所需要的工具和軟件, 熟悉編程軟件后,開始著手 進(jìn)行 研究,設(shè)計出論文的主要框架和具體實現(xiàn)的步驟、目標(biāo) 。 最終 在深入研究理論的基礎(chǔ)上,實現(xiàn)基于 JAVA 語言設(shè)計的中國象棋,做出預(yù)期的完整游戲。 JAVA 作為一種程序編寫的語言,在軟件市場的影響力快速提高,潛力巨大。 可行性分析 隨著計算機(jī)的普及和應(yīng)用,電子游戲已經(jīng)深入到我們生活的各個方面,利用電子游戲推廣我國文化、增加我國傳統(tǒng) 游戲的市場占有率,是將我國文化推向世界的 比較便捷的一種方式。 功能分析 打開游戲,鼠標(biāo)所在的功能鍵會突出顯示,點開新游戲后,原本的 “歡迎使用象棋對弈系統(tǒng) ”會變成提示 “紅棋 走棋 ”或 “黑棋走棋 ”。 北京物資學(xué)院 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 以上硬盤。 程序的大概的思想是: 首先使用一個數(shù)據(jù)結(jié)構(gòu)來描述棋局信息,對某一特定的棋局信息由著法生成器生成當(dāng)前下棋方所有合法的著法并依次存入著法隊列。位棋盤其實就是一個長度為 90 位的變量,每個位對應(yīng)一個交叉點,用來記錄棋盤上的某些布爾值。當(dāng)棋子處于最初位置的時候, “AllPieces”看上去是這個樣子的 (以下描述中,格子的下標(biāo)從 0 開始 ): (Hi,89,a9)111111111 000000000 101010101 000000000 000000000 101010101 000000000 010000010 000000000 111111111(Low,0,i0) 其最高位對應(yīng)第 89 格 (a9 格 ,左上角 ),最低位對應(yīng)第 0 格 (a8 格,右下角 )。 Java 中位棋盤的實現(xiàn) 位棋盤類的實現(xiàn) Java 中,位棋盤用 3 個 int 型的數(shù)據(jù)表示,最高六位不用。 Mid = Arg2。 。 。 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”。 (他實際上記錄了當(dāng) “馬 ”在任意格子上時,它下一步可以走的格子。當(dāng)中國象棋棋盤變化時,它也跟著變化。 首先,初始化 “BitBoard bitMask[90]”數(shù)組: BitBoard b = new BitBoard(0,0,1)。 } 其次,用一個叫 ChessPosition 類記錄棋盤上某一狀態(tài)的所有有用信息。 //輪到哪方走棋, 2:紅方走, 1:黑方走 BitBoard allPieces。//紅車 BitBoard blackRooks。//紅炮 BitBoard redCannon。//紅仕 BitBoard blackAdvisor。//所有紅棋子 BitBoard blackPieces。 piece_in_square[1] = RED_KNIGHT。 c 90。 … } } 位棋盤的更新 當(dāng)棋盤局面變動后,某些位棋盤就需要被更新。 = (,bitMask[h2])。 現(xiàn)在我們要將 blackPieces 和 blackKnights 位棋盤的 h9 位清除,因為那里的黑馬被吃掉了。另外,需要比較的局面數(shù)量多得驚人,要存儲每個棋子的位置,需要占用非常大的空間。如果一個棋子動過了,就會得到完全不同的鍵值,所以這兩個鍵值不會擠在一塊兒或者沖突。如果再次異或這個值,那么根據(jù)異或的工作原理,這個 “馬 ”就從鍵值里刪除了。用這種方法,可以在搜索根結(jié)點的時候構(gòu)造一個 Zobrist 鍵值,在搜索時通過走子函數(shù)“MakeMove()”來更新鍵值,一直讓它保持和當(dāng)前局面同步。 程序啟動時就把這個數(shù)組用隨機(jī)數(shù)填滿。示例代碼及相關(guān)說明如下 填充數(shù)組 上述的三維數(shù)組現(xiàn)在改變?yōu)槎S(將顏色與棋子兵種類型合并) …… public static long ZobristKeyPlayer。 …… static{ …… zobristGen()。 RandSeed = 1。 i 14。 } } ZobristLockPlayer = ()。 j 90。 //當(dāng)前局面的 zobrist 鍵值 public ChessPosition{ …… ZobristKey=0。 ZobristKey ^= ZobristKeyPlayer。 之所以 用這種方式生成著法 , 是 因為 生成著法耗費一定的時間。一個用來生成所有偽合法吃子著法,一個生成所有偽合法不吃子著法,最后一個生成所有擺脫被將軍狀態(tài)的著法。這樣可以節(jié)省大量的時間。)炮和車的不吃子著法規(guī)則相同,但分為縱向橫向行走兩類。 本程序使用靜態(tài)數(shù)組存儲生成的偽 合法著法,先對其作一些說明。 public static final int[][] ElephantEyes=new int[90][4]。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 13 第一個下標(biāo)說明棋子所在的格,第二個下標(biāo)含義不盡相同。(在后面所講的開局庫和置換表的大小設(shè)置是 2 的整次方冪也是這個道 理。 BishopMoves[90][8]保存的是相(象)的著法, ElephanEyes[90][4]保存的是相(象)著法對應(yīng)的塞象眼的位置。 public static final int[][][] FileCannonCapMoves=new int[10][1024][4]。 public static final int[][] FileNonCapMax=new int[10][1024]。 public static final int[][] FileCannonCapMax=new int[10][1024]。 public static final int[][] RankRookCapMax=new int[9][512]。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 14 車、炮吃子著法與它們的不吃子著法規(guī)則不同,因此需要分開保存。第二個坐標(biāo)的含義,以橫線走法示例如下: 例如,第二條橫線上的棋子如下(有棋子的用 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 上面的下標(biāo) 101 就是 001100101 對應(yīng)的二進(jìn)制值,數(shù)組元素的值 2 表示可行走格子的增量。 “照將 ”著法 public static final BitBoard[] CheckLegs=new BitBoard[18]。 //炮縱線照將 public static final BitBoard[][] RankRookCheck=new BitBoard[18][512]。 KnightPinCheck 是馬 “照將 ”的著法, CheckLegs 是馬 “照將 ”蹩馬腿的位棋盤。 j 1024。 k = 9。 Index ++。 k = 0。 Index ++。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 16 FileRookCapMax[i][j] = i。 (1 k))!=0) { FileRookCapMoves[i][j][Index] = k。 } } FileRookCapMin[i][j] = i。 (1 k))!=0) { FileRookCapMoves[i][j][Index] = k。 } } FileRookCapMoves[i][j][Index] = 1。 k = 9。 } } for (。 Index ++。 for (k = i 1。 break。 (1 k))!=0) { 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 17 FileCannonCapMoves[i][j][Index] = k。 } } FileCannonCapMoves[i][j][Index] = 1。 if ((Piece amp。 (Player!=0 ? 32 : 16))!=0) { return false。//棋子所在的行 if (x == File[]) {//與目標(biāo)位置在同一列,也就是進(jìn)退 BitWord = BitFiles[x]。 } } else {// ,退 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 18 if ((Attack amp。//行位棋盤數(shù)值, 9 位二進(jìn)制數(shù) if ( ) { if ((Attack amp。 (Player!=0 ? 16 : 32))!=0) { return == [x][BitWord] + y。 BitFiles[9]和 BitRanks[10]分別保存的是位棋盤中 9 列(每列共 10 位)和 10 行(每行共 9 位)的二進(jìn)制值。 public MoveStruct(){ src = dst = cap = 1。 chk=false。a39。 dst = (char) ([(2) 39。)。//仕士 GenBishopMoves(Position, HistTab)。//炮 GenPawnMoves(Position, HistTab)。 If(走子方不是處于被 “將 ”狀態(tài) ) saveToMoveList。下面我以卒的算法為例,介紹如何實現(xiàn)棋子 按行棋 規(guī)則行走 。在移動的同時,還要將當(dāng)前棋子的位置記錄下來,以便悔棋。amp。 ((()))。 } else if (() 284 amp。 (() ()) = 112){ 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計) 21 (()+57,(),55,55)。amp。同 時要 定義 一個循環(huán), 用于查找所有棋子所在的位置。 for (int j=0。 playQ[j].getX() () = 27 amp。 playQ[j].isVisible()){ //自己是起點被吃的是終點 (以 從上到下 為例 ) for (int k=()+57。 playQ[j].getY() ()){ //計算起點和終點的棋子個數(shù) Count++。 Chess =
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1