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

正文內(nèi)容

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

2024-09-04 15:28本頁面
  

【正文】 。 BishopMoves[90][8]保存的是相(象)的著法, ElephanEyes[90][4]保存的是相(象)著法對(duì)應(yīng)的塞象眼的位置。兵最多有三種走棋方法。(在后面所講的開局庫和置換表的大小設(shè)置是 2 的整次方冪也是這個(gè)道 理。第 5種(如果前面只有 3 種著法,則此處是第 4 種)保存的是非法著法即KingMoves[13][4]=1,其作用作為查詢算法的 “哨兵 ”,提高查詢算法的速度。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 13 第一個(gè)下標(biāo)說明棋子所在的格,第二個(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ì)其作一些說明。馬和象的著法要考慮蹩馬腿和塞象眼。)炮和車的不吃子著法規(guī)則相同,但分為縱向橫向行走兩類。 其中,馬、相(象)、兵、帥(將)、仕(士)的吃子著法與其對(duì)應(yīng)的不吃子著法規(guī)則相同。這樣可以節(jié)省大量的時(shí)間。中國象棋的著法生成與此類似,先生成所有偽合法的著法,存入靜態(tài)數(shù)組中。一個(gè)用來生成所有偽合法吃子著法,一個(gè)生成所有偽合法不吃子著法,最后一個(gè)生成所有擺脫被將軍狀態(tài)的著法。因此,可能先生成所有吃子的著法,如果沒有滿意的棋再生成余下的著法。 之所以 用這種方式生成著法 , 是 因?yàn)?生成著法耗費(fèi)一定的時(shí)間。 …… } } 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 12 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。 } } } 移子函數(shù) 當(dāng)移動(dòng)(添加、刪除)一個(gè)棋子時(shí),將當(dāng)前局面的 Zobrist 鍵值與鍵值表中該棋子的鍵值進(jìn)行異或操作,同時(shí)也與改變走子方的鍵值進(jìn)行異或操作。 j 90。 i 14。 } } ZobristLockPlayer = ()。 j 90。 i 14。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 11 ZobristKeyPlayer = ()。 RandSeed = 1。 Random rand = new Random()。 …… static{ …… zobristGen()。//改變走子方的 lock public static long[][] ZobristKeyTable = new long[14][90]。示例代碼及相關(guān)說明如下 填充數(shù)組 上述的三維數(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í)通過走子函數(shù)“MakeMove()”來更新鍵值,一直讓它保持和當(dāng)前局面同步。比起從頭開始一個(gè)個(gè)棋子去異或,這樣做可以得到同樣的鍵值。如果再次異或這個(gè)值,那么根據(jù)異或的工作原理,這個(gè) “馬 ”就從鍵值里刪除了。 另一個(gè)優(yōu)點(diǎn)在于,鍵值的產(chǎn)生是可以逐步進(jìn)行的。如果一個(gè)棋子動(dòng)過了,就會(huì)得到完全不同的鍵值,所以這兩個(gè)鍵值不會(huì)擠在一塊兒或者沖突。由于 64 位不足以區(qū)別每個(gè)局面,所以仍然存在沖突的標(biāo)簽 , 但實(shí)戰(zhàn)中這種情況非常罕見 。另外,需要比較的局面數(shù)量多得驚人,要存儲(chǔ)每個(gè)棋子的位置,需要占用非常大的空間。 = (,bitMask[h9] —— Zobrist 鍵值 比較局面的方法 在寫中國象棋程序時(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è)馬,需要更新如下位棋盤: allPieces 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 9 redPieces redCannons blackpieces blackKnights 首先,要把 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。//紅兵 BitBoard 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]這樣不變化的位棋盤的初始化,將在 “偽著法生成 ”章節(jié)詳述。當(dāng)中國象棋棋盤變化時(shí),它也跟著變化。其余的位棋盤將不斷變 化。 (他實(shí)際上記錄了當(dāng) “馬 ”在任意格子上時(shí),它下一步可以走的格子。 } 位棋盤的初始化 某些位棋盤從程序開始運(yùn)行到結(jié)束都不會(huì)改變。 public static int count(BitBoard arg) //計(jì)算位棋盤中非零位的個(gè)數(shù) public static BitBoard duplicate(int arg) //復(fù)制位棋盤 public static boolean equals(BitBoard arg1,BitBoard arg2) //位棋盤是否相等(所有 90位對(duì)應(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開始計(jì)數(shù)) public static int MSB(BitBoard Arg) //位棋盤最高非 0位的位置(從 0開始計(jì)數(shù)) public static boolean notZero(BitBoard Arg) //是否非 “0”。 } public static BitBoard opOr(BitBoard arg1,BitBoard arg2) //位棋盤的 “或 ”操作,保存結(jié)果。 。 。 。 } public static BitBoard opAnd(BitBoard arg1,BitBoard arg2) { 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 7 //位棋盤的 “與 ”操作,保存結(jié)果。 Mid = Arg2。、 |、 ^、 ”。 Java 中位棋盤的實(shí)現(xiàn) 位棋盤類的實(shí)現(xiàn) Java 中,位棋盤用 3 個(gè) int 型的數(shù)據(jù)表示,最高六位不用。 這樣顯示位棋盤可能更形象一點(diǎn): 黑棋 111111111 000000000 010000010 101010101 000000000 000000000 101010101 000000000 010000010 000000000 111111111 紅棋 位棋盤的基本運(yùn)算 與 (amp。當(dāng)棋子處于最初位置的時(shí)候, “AllPieces”看上去是這個(gè)樣子的 (以下描述中,格子的下標(biāo)從 0 開始 ): (Hi,89,a9)111111111 000000000 101010101 000000000 000000000 101010101 000000000 010000010 000000000 111111111(Low,0,i0) 其最高位對(duì)應(yīng)第 89 格 (a9 格 ,左上角 ),最低位對(duì)應(yīng)第 0 格 (a8 格,右下角 )。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 6 位棋盤的作用 記錄所有棋子位置的位棋盤 AllPieces。位棋盤其實(shí)就是一個(gè)長度為 90 位的變量,每個(gè)位對(duì)應(yīng)一個(gè)交叉點(diǎn),用來記錄棋盤上的某些布爾值。在搜索的過程中還可以采用一些輔助手段來提高搜索的效率。 程序的大概的思想是: 首先使用一個(gè)數(shù)據(jù)結(jié)構(gòu)來描述棋局信息,對(duì)某一特定的棋局信息由著法生成器生成當(dāng)前下棋方所有合法的著法并依次存入著法隊(duì)列。 800*600 或以上的屏幕分辨率。 北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 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 運(yùn)行環(huán)境 32M 以上內(nèi)存, 4G 以上硬盤。 在進(jìn)行人與人之間對(duì)戰(zhàn)時(shí) ,按照紅先黑后的順序進(jìn)行,并把下棋的每一步過程記錄下來,在對(duì)戰(zhàn)時(shí)能進(jìn)行悔棋功能 ,對(duì)悔棋次數(shù)沒有限定,玩家可以再玩之前自己約定,增加了游戲的靈活性 。 功能分析 打開游戲,鼠標(biāo)所在的功能鍵會(huì)突出顯示,點(diǎn)開新游戲后,原本的 “歡迎使用象棋對(duì)弈系統(tǒng) ”會(huì)變成提示 “紅棋 走棋 ”或 “黑棋走棋 ”。 JAVA 與 C++語言非常相近,但 JAVA 比 C++簡(jiǎn)單,它拋棄了 C++中的一些 非必要的功能 。 可行性分析 隨著計(jì)算機(jī)的普及和應(yīng)用,電子游戲已經(jīng)深入到我們生活的各個(gè)方面,利用電子游戲推廣我國文化、增加我國傳統(tǒng) 游戲的市場(chǎng)占有率,是將我國文化推向世界的 比較便捷的一種方式。 與 網(wǎng)絡(luò)游戲 相比, 單機(jī)游戲有著不可匹敵的簡(jiǎn)約性。 JAVA 作為一種程序編寫的語言,在軟件市場(chǎng)的影響力快速提高,潛力巨大。而我們使用計(jì)算機(jī)時(shí),游戲所占的比重很大。 最終 在深入研究理論的基礎(chǔ)上,實(shí)現(xiàn)基于 JAVA 語言設(shè)計(jì)的中國象棋,做出預(yù)期的完整游戲。設(shè)計(jì)出一個(gè) 基于 JAVA 語言的中國象棋對(duì)戰(zhàn)平臺(tái), 由于中國象棋比較復(fù)雜,所以主要設(shè)計(jì)出一個(gè)人、人對(duì)戰(zhàn)的平臺(tái), 這個(gè)平臺(tái) 必須 符合中國象棋規(guī)則(包括勝負(fù)、北京物資學(xué)院 2020屆畢業(yè)論文(設(shè)計(jì)) 2 走棋、悔棋、吃 子 、判斷勝負(fù) 等主要功能,各棋子按象棋規(guī)則走動(dòng)) ,如果時(shí)間允許,可進(jìn)一步實(shí)現(xiàn)一些附加功能,包括美觀的界面、對(duì)戰(zhàn)雙方交流 、 添加背景音樂等。 預(yù)期目標(biāo) 首先進(jìn)行理論的研究,研究 JAVA 編程的基礎(chǔ),包括 JAVA 編成的主要步驟及所需要的工具和軟件, 熟悉編程軟件后,開始著手 進(jìn)行 研究,設(shè)計(jì)出論文的主要框架和具體實(shí)現(xiàn)的步驟、目標(biāo) 。然而,電腦在中國象棋上的運(yùn)用還剛剛起步,盡管國內(nèi)涌現(xiàn)出一大批中國象棋的專業(yè)網(wǎng)站 和專業(yè)軟件,但是由于缺乏必要的基礎(chǔ)工作,電腦技術(shù)在中國象棋上的應(yīng)用優(yōu)勢(shì)還無法體現(xiàn)出來。但是中國象棋在國際上的普及率仍然很低,并因此未被入選 2020 年廣州亞運(yùn)會(huì)的競(jìng)賽項(xiàng)目 。 中國象棋是我國起源最早( 最早出現(xiàn)于戰(zhàn)國時(shí)期 )、也 是我國保存最為完整的棋類運(yùn)動(dòng)之一,他的行棋規(guī)則和棋子、棋盤的設(shè)計(jì)都蘊(yùn)函著豐富的中國文化。在設(shè)計(jì)中國象棋軟件過程中,國際象棋軟件有很多值得借鑒的成功經(jīng)驗(yàn)和優(yōu)秀
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1