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

正文內(nèi)容

基于java語言的中國象棋設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(存儲(chǔ)版)

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

下一頁面
  

【正文】 ——Zobrist 鍵值 ...............................................................................9 比較局面的方法 ................................................................................................9 Zobrist 鍵值的工作原理 ....................................................................................9 Zobrist 鍵值的實(shí)現(xiàn)方法 ..................................................................................10 Java 中實(shí)現(xiàn) Zobrist 鍵值 .................................................................................10 4 系統(tǒng)實(shí)現(xiàn) .........................................................................................................................12 著法生成 ..................................................................................................................12 偽合法著法的生成 ...........................................................................................12 合法著法的生成 ..............................................................................................17 算法實(shí)現(xiàn) ..................................................................................................................20 行棋規(guī)則算法實(shí)現(xiàn) ..........................................................................................20 界面功能算法實(shí)現(xiàn) ...........................................................................................23 5 結(jié)論 .................................................................................................................................26 參考文獻(xiàn) ............................................................................................................................27 附錄 ....................................................................................................................................28 附錄 1 算法主程序 ........................................................................................................28 附錄 2 程序截圖 ............................................................................................................53 外文文獻(xiàn)與翻譯 ................................................................................................................54 致 謝 ..............................................................................................................................63 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 1 1 緒論 研究 背景 計(jì)算機(jī)現(xiàn)在已經(jīng)成為每天工作和生活必不可少的一部分,電子游戲在計(jì)算機(jī)產(chǎn)業(yè)的帶動(dòng)下 也逐步深 入我們每個(gè)人的娛樂活動(dòng)中,棋牌游戲作為 休閑類 電子 游戲,相對(duì)于角色扮演類游戲和即時(shí)戰(zhàn)略類游戲等其它游戲,具有上手快、游戲時(shí)間短的特點(diǎn),更利于用戶進(jìn)行放松休閑,為人們所喜愛,特別是棋類游戲,方便、快捷、操作簡(jiǎn)單,在休閑娛樂中占主要位置。 題目 : 基于 JAVA 語言的中國象棋設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲明和使用授權(quán)說明 原創(chuàng)性聲明 本人鄭重承諾:所呈交的畢業(yè)設(shè)計(jì)(論文),是我個(gè)人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。 棋類運(yùn)動(dòng)的推廣和 發(fā)展是需要靠信息技術(shù)來推動(dòng)的,時(shí)下盛行的國際象棋有兩個(gè)很好的范例,一個(gè)是象棋棋譜編輯和對(duì)弈程序的公共平臺(tái) ——WinBoard 平臺(tái),另一個(gè)是商業(yè)的國際象棋數(shù)據(jù)庫和對(duì)弈軟件 ——ChessBase,他們?yōu)閲H象棋愛好者和研究者提供了極大的便利,也極大的促進(jìn)了國際象棋的發(fā)展。然而,電腦在中國象棋上的運(yùn)用還剛剛起步,盡管國內(nèi)涌現(xiàn)出一大批中國象棋的專業(yè)網(wǎng)站 和專業(yè)軟件,但是由于缺乏必要的基礎(chǔ)工作,電腦技術(shù)在中國象棋上的應(yīng)用優(yōu)勢(shì)還無法體現(xiàn)出來。而我們使用計(jì)算機(jī)時(shí),游戲所占的比重很大。 JAVA 與 C++語言非常相近,但 JAVA 比 C++簡(jiǎn)單,它拋棄了 C++中的一些 非必要的功能 。 800*600 或以上的屏幕分辨率。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 6 位棋盤的作用 記錄所有棋子位置的位棋盤 AllPieces。、 |、 ^、 ”。 。 } 位棋盤的初始化 某些位棋盤從程序開始運(yùn)行到結(jié)束都不會(huì)改變。對(duì)于諸如 knight[90]這樣不變化的位棋盤的初始化,將在 “偽著法生成 ”章節(jié)詳述。 public class ChessPosition { int piece_in_square[90]。//紅馬 BitBoard blackKnights。//紅兵 BitBoard blackPawns。 … piece_in_square[89] = BLACK_ROOK。假如我們把 h2 格的紅炮移動(dòng)到 h9 格(炮二進(jìn)七),吃掉黑棋的一個(gè)馬,需要更新如下位棋盤: allPieces 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 9 redPieces redCannons blackpieces blackKnights 首先,要把 redPieces, redCannons 位棋盤的 “h2”位清零,然后把他們的 “h9”位置 1。 = (,bitMask[h9] —— Zobrist 鍵值 比較局面的方法 在寫中國象棋程序時(shí),需要比較兩個(gè)局面看它們是否相同。 另一個(gè)優(yōu)點(diǎn)在于,鍵值的產(chǎn)生是可以逐步進(jìn)行的。在 Java中, “()”函數(shù)返回一個(gè) 64 位的隨機(jī)數(shù)值。//改變走子方的 lock public static long[][] ZobristKeyTable = new long[14][90]。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 11 ZobristKeyPlayer = ()。 i 14。 …… } …… public void makeMove(int Square, int Piece, boolean IsAdd) { …… ZobristKey^=ZobristKeyTable[PieceType][Square]。因此,可能先生成所有吃子的著法,如果沒有滿意的棋再生成余下的著法。 其中,馬、相(象)、兵、帥(將)、仕(士)的吃子著法與其對(duì)應(yīng)的不吃子著法規(guī)則相同。 public static final int[][] AdvisorMoves=new int[90][8]。第 5種(如果前面只有 3 種著法,則此處是第 4 種)保存的是非法著法即KingMoves[13][4]=1,其作用作為查詢算法的 “哨兵 ”,提高查詢算法的速度。 車、炮的偽合法著法靜態(tài)數(shù)組如下: public static final int[][][] FileNonCapMoves=new int[10][1024][12]。 //FileNonCapMax[y][bitwordY]=MinY public static final int[][] FileRookCapMax=new int[10][1024]。 public static final int[][] RankCannonCapMax=new int[9][512]。下面是炮吃子的著法: RankCannonCapMoves[2][101][0]=2 RankCannonCapMoves[2][101][1]=4 RankCannonCapMoves[2][101][2]=0。 //炮縱線照將 public static final BitBoard[] PawnCheck=new BitBoard[18]。//著法種類下標(biāo) FileNonCapMax[i][j] = i。 } FileNonCapMin[i][j] = i。 } FileNonCapMoves[i][j][Index] = 1。 FileRookCapMax[i][j] = k。 FileRookCapMin[i][j] = k。 (1 k))!=0) { k ++。 break。 k = 0。例 如,判斷炮吃子的偽合法著法是否是合法著法,需要判斷被吃子的顏色 ,同時(shí)需要判斷己方是否正在被 “將 ”,如果正在被 “將 ”,炮吃子是否能解除被 “將 ”的狀態(tài)。 } switch (PieceTypes[Piece] (Player!=0 ? 7 : 0)) {//判斷棋子類型 case 5://炮 ,吃子時(shí)中間要有炮架 x = File[]。 } else { return = [y][BitWord] + Bottom[x]。 } } } 以上對(duì)炮偽合法著法的合法性判 斷。 } public MoveStruct(int s,int d){ src = s。039。 } } } MoveStruct 是著法的數(shù)據(jù)結(jié)構(gòu), src 和 dst 分別是移動(dòng)前后的位置(格子) public void GenMoves(final ChessPosition Position, final int HistTab[][]) { GenKingMoves(Position, HistTab)。以上算法調(diào)用的子函數(shù)再此給出為代碼,詳細(xì)代碼見附件。 當(dāng)程序執(zhí)行到該算法時(shí),首先根據(jù)棋子的位置,判斷是紅棋還是黑棋, 我們以黑棋為例 , 當(dāng)卒想要移動(dòng)時(shí),程序需要判斷棋子距離目標(biāo)位置是否為一步距離,同時(shí)判斷所作的移動(dòng)是什么性質(zhì)。amp。 (() ()) = 57 amp。 } } 吃子 的算法實(shí)現(xiàn) 在象棋中,除棋子炮外,其他棋子吃子算法都與行棋算法比較相像,只是多了一步吃子的操作,而在執(zhí)行炮吃子時(shí),還需要添加一步中間是否有子的判斷,下面,我介紹一下炮吃子的規(guī)則。j++){ if (playQ[j].getX() () = 27 amp。k+=57){ //大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子 if (playQ[j].getY() () amp。 ().charAt(1) != ().charAt(1)){ 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 22 //當(dāng)前記錄添加到集合 (用于悔棋 ) ((()))。 //如果符合規(guī)則,則目標(biāo)子將自己的位置釋放,即被吃掉 (false)。 ( 紅棋勝利 )。139。 play[M].setBoun
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1