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

正文內(nèi)容

基于java語(yǔ)言的中國(guó)象棋設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)-在線瀏覽

2024-10-30 15:28本頁(yè)面
  

【正文】 .................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è)人的娛樂(lè)活動(dòng)中,棋牌游戲作為 休閑類 電子 游戲,相對(duì)于角色扮演類游戲和即時(shí)戰(zhàn)略類游戲等其它游戲,具有上手快、游戲時(shí)間短的特點(diǎn),更利于用戶進(jìn)行放松休閑,為人們所喜愛(ài),特別是棋類游戲,方便、快捷、操作簡(jiǎn)單,在休閑娛樂(lè)中占主要位置。國(guó)際象棋軟件有著成功的商業(yè)運(yùn)作,已發(fā)展成一種產(chǎn)業(yè)。 研究意義 我國(guó)現(xiàn)在正處于飛速發(fā)展的階段,想要提高我國(guó)的國(guó)際地位、讓世界更好的了解我國(guó),不僅要依靠經(jīng)濟(jì)和政治的影 響,更要注重文化傳播的作用。中國(guó)象棋的藝術(shù)和棋理折射著以儒家思想為正統(tǒng)的東方民族文化精神,深為我國(guó)各階層人民喜愛(ài)。 想要提高中國(guó)象棋的知名度和普及率 ,就 必須要有一個(gè)大眾化的中國(guó)象棋游戲平臺(tái),電腦游戲無(wú)疑是最佳選擇。 因此,我們迫切的需要一個(gè)更加基礎(chǔ)、更加實(shí)用的中國(guó)象棋對(duì)戰(zhàn)平臺(tái)。 其次具體的實(shí)現(xiàn)。 最后,依據(jù)框架和目標(biāo)編寫代碼, 實(shí)現(xiàn)主要功能并且 進(jìn)行測(cè)試,直至 程序運(yùn)行 成功。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 3 2 分析 需求分析 現(xiàn)在全球超過(guò)十億臺(tái)計(jì)算機(jī)正在被使用,并且這個(gè)數(shù)目還在逐漸增加,計(jì)算機(jī)已經(jīng)深入到我們生活的各個(gè)方面。棋類游戲作為一種簡(jiǎn)單易學(xué)的休閑游戲,一直深受廣大群眾的 喜愛(ài)。因此用 JAVA 編寫的中國(guó)象棋游戲有著很大的開發(fā)潛力。人們可以隨心所欲的選擇任何時(shí)間進(jìn)行游戲,而且人人對(duì)戰(zhàn)還可以實(shí)現(xiàn)對(duì)戰(zhàn)雙方的直接交流,尤其隨著筆記本電腦的普及,基本上可以 隨時(shí)隨地都把它們帶在身邊,在人們離開家或者想玩的時(shí)候,可以不受任何時(shí)間地點(diǎn)限制地玩自己選擇的游戲。中國(guó)象棋作為我國(guó)保存最完整、最能代表我國(guó)古代文化的游戲之一,它的推廣能夠 讓世界更加了解中國(guó)。用 JAVA 編寫的中國(guó)象棋程序?qū)崿F(xiàn)了人與人的對(duì)弈, 符合 中國(guó)象棋的行棋 規(guī)則, 界面美觀,能夠激起 玩家 的興趣,同時(shí)單機(jī)游戲?qū)τ?jì)算機(jī)的環(huán)境要求十分簡(jiǎn)單、易于實(shí)現(xiàn)。單擊選中的棋子時(shí),該棋子會(huì)不停閃爍,如果符合規(guī)則,則可以移動(dòng)到指定位置。 在行棋時(shí)依照 “馬走日,象走田,車、炮走直線、士在框內(nèi)走斜線,卒未過(guò)河是上下走、過(guò)河可左右行走且不能回頭,將 、帥 只能在框內(nèi)行走 ”等行走規(guī)則,且按照 “炮必須隔一個(gè)棋子才能吃棋子,其他棋子按棋子行走規(guī)則的位置實(shí)現(xiàn)吃子 ”的規(guī)則, 完全符合象棋的行棋規(guī)則。 Microsoft Windows 9X/NT/vista 操作系統(tǒng)。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 5 3 界面設(shè)計(jì)框架 程序的框架 從程序的結(jié)構(gòu)上講,大體上可以將引擎部分劃分為四大塊: 棋局表示; 著法生成; 搜索算法; 局面評(píng)估。然后通過(guò)搜索算法來(lái)逐一讀取著法并調(diào)用局面評(píng)估函數(shù)對(duì)該著法所產(chǎn)生的后繼局面進(jìn)行評(píng)估打分,從中選出一個(gè)最有可能導(dǎo)致走棋方取勝的著法。其過(guò)程如下所示(圖 1): 當(dāng) 前 棋 局著 法 生 成 器m 1 m 2 m 3 … . . m n搜 索 算 法 搜索輔助局面評(píng)估著 法 隊(duì) 列 圖 1 著法生成 —— 位棋盤 什么是位棋盤 在中國(guó)象棋中,棋盤有 90 個(gè)交叉點(diǎn)。在 Java 中,用 3 個(gè) int類型數(shù)據(jù)(每個(gè) 32 位,共 96 位多余的 6 位不用)表示一個(gè)位棋盤。 AllPieces 告訴我們棋盤上哪些格子有棋子,哪些沒(méi)有。 有子的位對(duì)應(yīng) 1,沒(méi)有子的位對(duì)應(yīng) 0。) 0 1 0 1 1 0 0 1 ———— 0 0 0 1 或 (|) 0 1 0 1 1 0 0 1 ———— 1 1 0 1 異或 (^) 0 1 0 1 1 0 0 1 ———— 1 1 0 0 取補(bǔ) (~) a = 0001, ~a = 1110。 Java 中 “與、或 、非、異或、左位移,右位移(注意,位棋盤的右位移是無(wú)符號(hào)位移) ”分別是 “amp。代碼摘要(詳細(xì)代碼見(jiàn)附件)及相關(guān)說(shuō)明如下: public class BitBoard{ private int Low,Mid,Hi//用 3 個(gè) int 字段表示位棋盤,最高位 Hi 的高 //6 位不用 public BitBoard(int Arg1, int Arg2, int Arg3) {//構(gòu)造函數(shù) Low = Arg1。 Hi = Arg3。 int low= amp。 int mid= amp。 int hi= amp。 return new BitBoard(low,mid,hi)。 public static BitBoard opXor(BitBoard arg1,BitBoard arg2) //位棋盤的 “異或 ”操作,保存結(jié)果。當(dāng) 90位中有非 0位時(shí)返回 true。例如上面所述的那個(gè)位棋盤數(shù)組 “knight[90]”。 )這個(gè)數(shù)組將在程序開始執(zhí)行的時(shí)候被初始化并且不再改變。例如 “AllPieces”位棋盤。然而,他們的初始化方式相同。此處敘述走棋過(guò)程中隨棋局變化的諸多位棋盤的初始化及相關(guān)操作。 for (int c = 0。 c ++) { mask[c] = (b,c)。它包含了一個(gè)整型數(shù)組 int piece_in_square[90],還包含了一些位棋盤。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 8 int player。 BitBoard redKing。//黑將 BitBoard redRooks。//黑車 BitBoard redKnights。//黑馬 BitBoard redCannon。//黑炮 BitBoard redBishops。//黑象 BitBoard redAdvisor。//黑士 BitBoard redPawns。//黑卒 BitBoard redPieces。//所有黑棋子 }。 piece_in_square[0] = RED_ROOK。 piece_in_square[2] = RED_BISHOP。 現(xiàn)在初始化其他一些位棋盤 : for (c = 0。 c ++) { switch (piece_in_square[c]) { case : RED_ROOK = (,bitMask[c])。 break。例如記錄白子所在位置的“WhitePieces”位棋盤。 /* clear a bit with the XOR operation */ = (,bitMask[h2]。 = (,bitMask[h2]。 = (,bitMask[h9])。 /* clear the captured piece */ = (,bitMask[h9])。如果比較每個(gè)棋子的位置,或許不需要花很多時(shí)間,但是實(shí)戰(zhàn)中每秒種需要做成千上萬(wàn)次比較,因此這樣會(huì)使比較操作變成瓶頸的。 一個(gè)解決方案是建立一個(gè)標(biāo)簽,通常是 64 位。 Zobrist 鍵值的工作原理 Zobrist 鍵值的工作原理 用 Zobrist 技術(shù)產(chǎn)生的鍵 值,表面上與局面沒(méi)什么關(guān)系。當(dāng)把它們用作散列表鍵值的時(shí)候會(huì)非常有效。例如,紅馬在 e5 格,那么鍵值里一定異或過(guò)一個(gè) “zobrist[KNIGHT][RED][E5]”。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 10 這就是說(shuō),如果有當(dāng)前局面的鍵值,并且需要把紅馬從 e5 移到 f7,你只要異或一個(gè) “紅馬在 e5”的鍵值,把馬從 e5 格移走,并且異或一個(gè) “紅 馬在 f7”的鍵值,把紅馬放在 f7 上。 如果要改變著子的一方,只要異或一個(gè) “改變著子方 ”的鍵值就可以了。 Zobrist 鍵值的實(shí)現(xiàn)方法 實(shí)現(xiàn) Zobrist 必須從多維的 64 位數(shù)組開始,每個(gè)數(shù)組含有一個(gè)隨機(jī)數(shù)。 這個(gè) 函數(shù)用來(lái)填滿一個(gè) long 型( 64 位)的三維數(shù)組:棋子的類型、棋子的顏色和棋子的位置: long zobrist[pcMAX][coMAX][sqMAX]。要為一個(gè)局面產(chǎn)生 Zobrist 鍵值,首先把鍵值設(shè)成零,然后找棋盤上的每個(gè)子,并且讓鍵值跟 “zobrist[pc][co][sq]”做異或 (通過(guò) “^”運(yùn)算符 )運(yùn)算。 Java 中 實(shí)現(xiàn) Zobrist 鍵值 本系統(tǒng)使用 一個(gè) key 和一個(gè) lock 結(jié)合來(lái)區(qū)分每個(gè)局面,這 樣 發(fā)生沖突(即兩個(gè)局面對(duì)應(yīng)的 key 和 lock 一樣)的概率幾乎為 0。//改變走子方的 key public static long ZobristLockPlayer。 public static long[][] ZobristLockTable = new long[14][90]。 } public static void zobristGen() { int i, j。 long RandSeed。 (RandSeed)。 for (i = 0。 i ++) { //0:紅帥 1:紅仕 2:紅相 3:紅馬 4:紅車 5:紅炮 6:紅兵 //7:黑將 8:黑士 9:黑象 10:黑馬 11:黑車 12:黑炮 13:黑卒 for (j = 0。 j ++) { ZobristKeyTable[i][j] = ()。 for (i = 0。 i ++) { for (j = 0。 j ++) { ZobristLockTable[i][j] = ()。 public class ChessPosition{ long ZobristKey, ZobristLock。//初始化為 0 ZobristLock=0。 ZobristLock^=ZobristLockTable[PieceType][Square]。//改變走子方 ZobristLock ^= ZobristLockPlayer。 我選擇 使用位棋盤生成著法的基本原理。如果引擎在檢查了一部分著法后發(fā)現(xiàn)了必須走的棋,那它就無(wú)需生成余下的棋步了。 國(guó)際象棋引擎 Crafty(其作者是 Robert Hyatt 博士 )使用三個(gè)著法生成函數(shù)。注意前兩個(gè)函數(shù)生成的是偽合法的著法。在對(duì)局中可以用 “查表 ”的方式查找生成的偽著法,并對(duì)其合法性作出判斷。 偽合法著法的生成 偽合法著法包含幾類: 各兵種的不吃子著法 ; 各兵種的吃子著法 ; “將 ”和擺脫 “將 ”的著法 。(偽合法著法并不考慮被吃的棋子的顏色 ——該棋子是對(duì)方的棋子 還是己方的棋子,也不考慮該子是否能動(dòng),例如動(dòng)了該子,雙方的帥將會(huì)面。炮的吃子著法分為縱向和橫向兩類,車的吃子著法也分為縱向和橫向兩類。將軍的著法單獨(dú)作為一類。 數(shù)組及其下標(biāo)的含義 : 保存帥(將)、仕(士)、相(相)、馬、兵的偽合法靜態(tài)數(shù)組如下: public static final int[][] KingMoves=new int[90][8]。 public static final int[][] BishopMoves=new int[90][8]。 public static final int[][] KnightMoves=new int[90][12]。 public static final int[][][] PawnMoves=new int[90][2][4]。帥(將)
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1