版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、武漢理工大學 畢業(yè)設計(論文) 基于基于 vcvc 的智能中國象棋系統(tǒng)的設計與實現(xiàn)的智能中國象棋系統(tǒng)的設計與實現(xiàn) 學院(系): 專業(yè)班級: 學生姓名: 指導教師: 智能中國象棋系統(tǒng)的設計與實現(xiàn)智能中國象棋系統(tǒng)的設計與實現(xiàn) 摘摘 要要 人工智能(ai)中國象棋系統(tǒng)是將計算機知識和中國象棋知識結合起來的一種新型的 游戲方式。智能中國象棋系統(tǒng)在此基礎上實現(xiàn)人與機器的對弈,突破了以往傳統(tǒng)象棋 游戲只能人與人對戰(zhàn)的限制,使中國象棋這一古老的游戲形式煥發(fā)出蓬勃朝氣。 本文結合在中國象棋機器博弈方面的實踐經(jīng)驗,在分析了中國象棋游戲需求基礎 上,設計并實現(xiàn)了智能中國象棋系統(tǒng)。該系統(tǒng)包括人人對戰(zhàn)、人機對戰(zhàn)、制作
2、棋譜、 播放棋譜以及挑戰(zhàn)英雄榜等功能模塊。人人對戰(zhàn)規(guī)則明確,包含了中國象棋所有的著 法;人機對戰(zhàn)中電腦棋力分為簡單、中等、困難三個等級,方便了不同水平人群的選 擇;制作和播放棋譜模塊容易操作,方便學習;挑戰(zhàn)英雄榜則為象棋游戲增加了樂趣。 本系統(tǒng)的實現(xiàn)滿足了人們對中國象棋的基本需求,解決了傳統(tǒng)象棋游戲學習性差、 棋譜不易保存、不易演示等問題。 關鍵詞:計算機博弈,中國象棋,人機對戰(zhàn),制作棋譜,搜索算法 intelligent chinese chess system design and implementation abstract artificial intelligence (ai) c
3、hinese chess system is a new games way which combines with computer knowledge and chinese chess knowledge. intelligent chinese chess system on the basis of it which completes the game between human and computer , breaking the traditional chess games restriction that only can play against people. so
4、that the ancient game of chinese chess become prosperity . with the practical experience in chinese chess computer game, a detailed analysis and research has been done .based on those, i designed and implemented the intelligent chinese chess system .this system includes the game against human ,the g
5、me between computer and human ,make chess manual ,play chess manual and hero list functions .the game against human function has all the chinese chess rules and they are very clear.in the game between computer and human function ,computer thinking depth is divided into simple,medium and difficulty.i
6、t facilitate the choice of different levels. making and playing chess manual fuctions are easy to operating and learning. hero list fuction adds much fun to chess game. this system satisfied the basic demand of people to chinese chess and solved the studying hard and the theoretical is not easy to m
7、aking and playing of the traditional chess game. key words: computer game, chinese chess, game between human and computer, make chess manual, search tecniques 目目 錄錄 1 緒論.1 1.1 選題的背景和意義.1 1.2 發(fā)展動態(tài)及研究現(xiàn)狀.1 1.3 系統(tǒng)概述.2 1.4 本文的主要工作.4 1.5 論文結構.4 2 系統(tǒng)的分析和設計.5 2.1 數(shù)據(jù)結構(data structure).5 2.1.1 棋盤的基本表示法(board
8、representions).5 2.2 著法生成(move generation).7 2.2.1 模板匹配法.7 2.2.2 預置表法.8 2.3 局面評估 .8 2.3.1 估值函數(shù)(evaluation function). 9 2.3.2 估值的速度與博弈性能.10 2.3.3 估值函數(shù)的優(yōu)化.10 2.4 博弈樹搜索技術 .12 2.4.1 基本搜索算法.13 2.4.2 高級搜索算法.15 2.5 開局庫設計 .16 2.5.1 開局庫的作用.16 2.5.2 實現(xiàn)開局庫的主要方法.16 3 系統(tǒng)的實現(xiàn).19 3.1 系統(tǒng)的整體規(guī)劃 .19 3.2 象棋界面的實現(xiàn).19 3.3
9、對弈功能的實現(xiàn).24 3.4 制作和演示棋譜的實現(xiàn).28 3.5 象棋英雄榜的實現(xiàn).31 3.6 開局庫的實現(xiàn) .32 3.7 程序說明 .32 3.8 實驗結果及分析 .32 結論.34 致 謝.36 參考文獻.37 附 錄.38 附錄 a:a introduction about chinese chessa.38 附錄 b:關于中國象棋的一些簡要介紹 .41 1 緒論 1.1 選題的背景和意義 在人類文明發(fā)展的初期,人們便開始進行棋類博弈的游戲了。近幾十年來,隨著 計算機硬件和軟件技術的不斷發(fā)展,人們開始對計算機能否戰(zhàn)勝人腦這個話題產(chǎn)生了 濃厚的興趣。從 1980 開始,電腦博弈便開始逐
10、漸大規(guī)模地向人類智能發(fā)起了挑戰(zhàn),到 了 1997 年,ibm 超級電腦 deeper blue 擊敗了當時的國際象棋冠軍卡斯帕羅夫,成為 了人工智能挑戰(zhàn)人類智能發(fā)展的一個重要里程碑。 許多學者認為,對于人工智能研究而言,象棋的重要作用不亞于遺傳學研究中的 果蠅。人類對機器博弈的研究衍生了大量的研究成果,這些成果對更廣泛的領域產(chǎn)生 了重要影響。人工智能的先驅們曾認真的表明:如果能掌握下棋的本質,也許就掌握 了人類智能行為的核心;那些能夠存在于下棋活動中的重大原則,或許就存在于其它 任何需要人類智能的活動中。因此對于中國象棋人機博弈問題的研究意義重大。 而當今對中國象棋的研究也正如專家們所期望的那
11、樣在蓬勃地發(fā)展著。中國象棋 不僅是中國傳統(tǒng)智慧的體現(xiàn),同時也具有著比國際象棋更高的復雜度,如何讓機器具 有智能,與人進行對弈成了本課題研究的一個重要問題。通過本課題的研究,掌握智能知 識的表示與計算、搜索,不僅是對所學知識的鍛煉,更是在人工智能領域的有意義的 探索 1.2 發(fā)展動態(tài)及研究現(xiàn)狀 和國際象棋博弈系統(tǒng)相比,中國象棋博弈系統(tǒng)的研究起步比較晚,是八十年代開始 的。在這個時候計算機國際象棋取得重大突破,1983 年美國貝爾公司的電腦參加美國 人類比賽,取得了不錯的成績,被授予大師稱號。于是有專家學者想如何將國際象棋 電腦技術移植到中國象棋上來,以帶動中國象棋電腦較快的發(fā)展;同時中國象棋從技
12、 術研究進入理論研究,有關開局、中局、殘局理論以及象棋對策相繼建立起來,為中 國象棋計算機博弈提供了理論基礎。 1981 年張耀騰發(fā)表的人造智慧在電腦象棋上的應用 ,他提出審局函數(shù)為靜態(tài)子 力值,棋子位置值,棋子靈活度值,威脅與保護等四項之和。但該文主要以殘局做實 驗,缺乏完整對局的考慮。1982 年廖嘉成發(fā)表的利用計算機象棋的實驗就進了一 步,包括開局、中局、殘局。1983 年黃少龍、周玉龍合作制成象棋排局系列軟盤 專家系統(tǒng)與人對弈。 到了 90 年代,中國象棋計算機博弈的應用開始發(fā)展起來,人們研究出了各種博弈 軟件。比較著名的軟件有臺灣的吳身潤的中國象棋 、光譜公司出品的將族 、 晟業(yè)編制
13、的象棋水滸戰(zhàn) 、 象棋武林帖 。而且涉足這個領域比較早的是臺灣的一些 專家學者。近幾年,在內(nèi)地也涌現(xiàn)出一批對中國象棋人機博弈問題感興趣的高校、單 位及個人,而且進入 21 世紀以后,中國象棋計算機博弈的研究受到越來越多的學者的 關注,比較著名的博弈軟件如表 1 所示。 表表 1-1 著名中國象棋計算機博弈程序著名中國象棋計算機博弈程序 程程序序 作作者者 地地區(qū)區(qū) 縱縱馬馬奔奔流流 涂涂志志堅堅 廣廣州州中中山山大大學學 謝謝謝謝象象棋棋大大師師 法法國國電電腦腦公公司司 法法國國 elp 鄭鄭武武堯堯、陳陳志志呂呂 臺臺灣灣 shiga(象象棋棋世世家家) 鄭鄭明明政政、顏顏士士凈凈 臺臺灣
14、灣 shcc(神神乎乎棋棋技技) sai team 美美國國 cyclone(象象棋棋旋旋風風) 陳陳朝朝陽陽 北北京京 contemplation 千千慮慮 陳陳志志昌昌、許許舜舜欽欽 臺臺灣灣 棋棋天天大大圣圣 王王驕驕 東東北北大大學學 象象棋棋奇奇兵兵 趙明陽趙明陽 中國中國 每年也會有中國象棋計算機博弈的國際奧林匹克大賽,這其中有 2003 年的世界 冠軍“縱馬奔流” ,2004 年的世界冠軍“謝謝象棋大師” ,2005 年的世界冠軍“象棋奇 兵” ,2006、2007 年的世界冠軍“棋天大圣” , 2008 年的世界冠軍“倚天” 。 這些都 體現(xiàn)了中國象棋的人機博弈的研究的受關注程
15、度;雖然如此,但中國象棋的人機博弈的 研究比國際象棋還是晚了幾十年,并且在搜索算法等方面的研究還與國際象棋相距甚 遠。 1.3 系統(tǒng)概述 1、棋盤表示(board representations) 棋盤表示就是使用一種數(shù)據(jù)結構來描述棋盤及棋盤上的棋子,以方便計算機處理。 中國象棋的棋盤表示還沒有形成統(tǒng)一的或者公認的哪種為最佳的數(shù)據(jù)格式。最直觀也 是最典型的方式是使用 10 x9 的二維棋盤數(shù)組表示,也有使用棋子數(shù)組,擴展棋盤棋 子數(shù)組等,棋盤的數(shù)據(jù)表示直接影響到程序的時間及空間復雜度。 2、著法生成(move generation) 著法生成就是找到某個局面所有合法的走法。它與棋盤表示的數(shù)據(jù)結
16、構密切相關, 一般需要大量繁瑣的判斷,伴隨著搜索進行,并且調(diào)用頻繁,是相當復雜而且耗費運 算時間。在一定程度上形成了程序的性能瓶頸。當前為了提高著法生成的效率通常采 用以空間換時間的方法:與先求出棋子的在某位置的所有走法。 3、評估函數(shù)(evaluation function) 評估函數(shù)就是對博弈過程中實際局面的好壞做出判斷或打分,它影響著博弈局發(fā) 展的趨勢。目前象棋程序的靜態(tài)評價函數(shù)主要有子力價值,子力靈活性,子力對棋盤 的控制,和一些對棋局影響比較大的重要特征計算幾部分組成。它與著法生成一樣十 分耗費運算時間,如何加速評估函數(shù)的速度十分關鍵。 4、搜索技術(search technique
17、s) 搜索技術與算法是象棋博弈系統(tǒng)程序的核心,是決定搜索效率的關鍵所在。再好 的硬件也無法實現(xiàn)“象棋不敗算法” 。如何在成指數(shù)遞增的狀態(tài)空間中尋求最優(yōu)解,是 象棋博弈系統(tǒng)的一個重要的方向。 “蠻力搜索”肯定是不可取的。如何有選擇地搜索, 既瞄準最有希望的方向局部加深,又不遺漏其它存在最優(yōu)解的可能。目前主要是使用 - 剪枝算法加上迭代深化、置換表、歷史啟發(fā)等策略的綜合應用。 5、開局庫(opening book) 把開局幾步的走法建成數(shù)據(jù)庫供程序直接取用。實踐表明無論搜索引擎如何出色, 在開局搜索過若干層后,得到的可能只是一些很笨拙的開局。直接從開局庫中取就可 以大大加快開局時的運行速度和提高開
18、局的質量。開局庫一般是采用 zobrist 哈希技術 加以實現(xiàn)。 6、機器自學習(machine learning) 機器自學習之一是針對評估函數(shù)。對弈過程機器自動調(diào)整評估函數(shù)參數(shù)的權值進行 優(yōu)化,發(fā)現(xiàn)一些棋子之間潛在的聯(lián)系:之二是采用模式識別,學習的過程是通過對博弈 過程的識別統(tǒng)計,自行豐富模式庫中的內(nèi)容,以提高程序的博弈性能。 1.4 本文的主要工作 本文的主要工作是將博弈策略應用到中國象棋程序的設計與實現(xiàn)上,建立一個完 整的中國象棋計算機博弈系統(tǒng),研究工作主要集中在以下幾個方面: 1、棋盤表示與走法生成 從操作速度(性能)以及使用方便與否考慮,本象棋博弈系統(tǒng)從帶位行位列信息的擴 展棋盤棋
19、子聯(lián)系數(shù)組著手進行研究。然后根據(jù)棋盤表示獲得所有棋子的走法預生 成數(shù)組。在產(chǎn)生走法時直接從中取出數(shù)據(jù),進行少量判斷以得到該棋子的合法走步。 2、估值函數(shù) 如何快速有效的對一個局面進行評估需要從速度和知識的兩個角度進行考慮:一般 知識越多估值越準確,但速度也慢下來。本系統(tǒng)采用通用的靜態(tài)估值方式,同時在估 值時結合走法預生成數(shù)組,使估值的速度有很大提升。 3、搜索技術 博弈樹搜索技術它很大程度上獨立于具體的計算機博弈程序。本文討論了 - 剪 枝搜索算法及其各種增強手段:包括窗口原則、置換表(內(nèi)存增強);歷史啟發(fā)表(節(jié)點 順序調(diào)整);迭代深化(時間控制)等。如何把各種增強手段有機組合起來達到最優(yōu),文
20、 章對基于迭代加深、置換表、歷史啟發(fā)的 negascout 算法進行改進。 1.5 論文結構 第一章闡述了選題背景,課題的國內(nèi)外研究現(xiàn)狀及課題的主要工作和文章的章節(jié) 安排。 第二章第一部分首先介紹中國象棋程序的一些基本數(shù)據(jù)結構,著重研究了擴展的 棋盤棋子聯(lián)系數(shù)組棋盤;在此基礎上實現(xiàn)所有棋子的走法預生成數(shù)組,以提高搜 索過程中走法產(chǎn)生的效率。第二部分研究本系統(tǒng)的著法生成,包括預置表法和模板匹 配法,進一步提高了搜索效率。第三部分描述本系統(tǒng)的評價函數(shù)架構,著重描述了靜 態(tài)估值方法,分析了其不足,并提出了解決之道。包括子力分數(shù)、子力靈活度評價、 棋盤控制等并與走法預生成數(shù)組結合以提高估值速度。第四部
21、分實現(xiàn)了博弈樹的 - 剪枝算法并簡要介紹各種搜索策略。第五部分闡述了開局庫的設計原理。 第三章給出實驗環(huán)境和程序實現(xiàn)。 第四章是全文的總結及展望。 2 系統(tǒng)的分析和設計 2.1 數(shù)據(jù)結構(data structure) 數(shù)據(jù)結構是一個程序的骨架,選擇一種好的數(shù)據(jù)結構可以使程序的運行效率大大 提高。 2.1.1 棋盤的基本表示法(board representions) 棋盤表示就是使用一種數(shù)據(jù)結構來描述棋盤上的信息,以便程序知道博弈的狀態(tài)。 棋盤的數(shù)據(jù)表示直接影響到程序的時間及空間復雜度。為了追求更高效率,研究人員 針對中國象棋提出了多種不同的表示方法。 中國象棋的棋盤表示中最典型的是用一個
22、109 的二維字節(jié)(byte)數(shù)組,數(shù)組中每 個元素代表棋盤上的一個交點,其值表明這個交點上放置的是一個什么棋子或是沒有 棋子 從棋子的角度考慮,如果把棋盤看成是一個平面坐標系,可以知道每一個棋子的位 置信息:小于 10 的橫坐標和小于 11 的縱坐標;又在棋盤上最多 32 個棋子,故可以用一 個 32 個字節(jié)的一維數(shù)組表示所有 32 個棋子的位置,其中每個字節(jié)的高 4 位表示該棋 子的橫坐標,低 4 位表示棋子的縱坐標。而己被吃掉的棋子用坐標范圍以外的數(shù)表示。 這樣棋盤信息就被裝入這 32 個字節(jié)中。當然也可以把棋盤看作一維的,每個元素保存 直接的位置信息。 兩種棋盤表示方法:一是做一個棋盤
23、數(shù)組;二是做一個棋子數(shù)組。棋盤數(shù)組中由 棋子的位置獲得棋子的類型可以在常數(shù)時間內(nèi)完成,但由棋子的類型獲得棋子的位置 需要遍歷;在棋子數(shù)組中由棋子的類型獲得棋子的位置可以在常數(shù)時間內(nèi)完成,但由 棋子的位置獲得棋子的類型操作繁瑣。如果一個程序同時使用這兩個數(shù)組,那么獲得 棋子的類型和棋子的位置都可以在常數(shù)時間內(nèi)完成。這就是“棋盤棋子聯(lián)系數(shù)組” , 它的技術要點是: (l) 同時用棋盤數(shù)組和棋子數(shù)組表示一個局面,棋盤數(shù)組和棋子數(shù)組之間可以互相 轉換。 (2) 隨時保持這兩個數(shù)組之間的聯(lián)系,棋子移動時必須同時更新這兩個數(shù)組。在 棋盤上刪除一個棋子,需要做兩個操作(分別修改棋盤數(shù)組和棋子數(shù)組)。同樣,添
24、加一 個棋子時也需要兩個操作。 “棋盤棋子聯(lián)系數(shù)組“最大的優(yōu)勢是:對于著法產(chǎn)生過程,可以逐一查找棋子數(shù) 組,如果該子沒有被吃掉,就產(chǎn)生該子的所有合理著法,由于需要查找的棋子數(shù)組的 數(shù)量(每方只有 16 個棋子能走)比棋盤格子的數(shù)量(90 個格子)少得多,因此聯(lián)系數(shù)組的 速度要比單純的棋盤數(shù)組快很多。同時“棋盤棋子聯(lián)系數(shù)組”是很多改進的棋盤 的基礎。 2.1.2 改進型棋盤結構 在計算機上面,位運算比一般的加減乘除及取余運算快得多。如果能在尋找棋子 和定位棋子上使用位運算代替加減乘除和取余,這將很大程度上提高運算速度。所以, 人們把“棋盤棋子聯(lián)系數(shù)組“進行擴展:把棋盤做成 1616 的大小,這樣
25、得到 行號可以用 16 除,得到列號可以對 16 取余(和 15 進行運算) ,這比除以 10 和對 9 取余操作要快得多。如圖 2.1(紅色格子都被標上“出界”的標志,目標格在這些格 子上就說明著法無效): 圖 2.1 擴展的棋盤 這種棋盤的更大的好處是: (1) 它可以防止棋子走出棋盤邊界。由 bool 型棋盤數(shù)組(屬于棋盤的位置為 true, 否則為 false) ,判斷棋子是否走出棋盤邊界只要返回該數(shù)組對應的值即可,速度快。 (2) 對于是否在城池內(nèi)可以用 bool 型城池數(shù)組判斷,因為是否在城池內(nèi)的判斷會非 常頻繁,直接用該數(shù)組會很高效。 (3) 判斷是否過河的方法非常簡單:只要設定
26、特定的表達式,當表達式為假表示已 過河,否則沒過河。 (4) 還可以非常方便的判斷棋子是否在己方。 2.2 著法生成(move generation) 著法生成就是要產(chǎn)生所有有效的著法,讓電腦棋手在這些著法中選擇最好的著法, 并判斷人類棋手是否符合走棋規(guī)則。著法生成是博弈程序中一個相當復雜而且耗費運 算時間的方面,要生成所有著法只能用窮舉。中國象棋大約每一步可以有 45 個著法。 通過良好的數(shù)據(jù)結構和走法預生成,可以顯著地提高生成的速度。 2.2.1 模板匹配法 當動子確定以后,其“落址”和“提址”的相對關系便確定下來了,這樣可以為 某些動子設計其著法生成的“模板” ,只要匹配到提址,便可以迅
27、速找到落址。圖 2.3 給出了馬的匹配模板。 圖 2.2 馬的匹配模板 將馬對準提址, “o”表示符合“馬走日”規(guī)則的落址, “x”表示“蹩馬腿”的制約 條件,通過查找模板匹配數(shù)組,實現(xiàn)“本方子則止,對方子則吃” ,完成“提動 落吃”內(nèi)容的確定。 對馬的著法生成使用模板匹配法時,只要寫出符合馬行棋規(guī)則的模板匹配數(shù)組和馬 腿的模板匹配數(shù)組,在生成著法時通過查找這兩個數(shù)組就可以實現(xiàn)。顯然,這比掃描 整個棋盤,通過計算得到合法落址要快速的多。同樣的,可以對象、將、士、卒使用 模板匹配生成著法。 2.2.2 預置表法 它是把所有可能的著法預先存儲起來,在生成著法時,用查表取代計算。中國象 棋每種棋子的
28、行棋規(guī)則不同,生成每種棋子的著法和整個棋盤棋子的分布密切相關, 如果建立每種棋子最大可能著法的小型數(shù)據(jù)庫,用查詢?nèi)〈鷱碗s的判斷,那么也可以 在很大程度上加快著法生成的速度。預置表看起來似乎很大,但是只需在程序開始運 行時初始化一次就可以了,這些耗費對整個程序的影響不大,但是對著法生成的作用 卻是非常明顯的。 圖 2.3 即是以路向行向比特向量為索引的一個車的預置著法表的生成范例。圖中顯 示,該車位于某行第 4 列,棋子分布的布爾向量形式為 010100100,可以看出,此 時車可能的吃子著法落址為010000100,非吃子著法的落址為f0010110001。把車 的列號和該行棋子的布爾分布作為
29、輸入,把吃子落址和非吃子落址作為輸出,將輸入 和輸出的關系寫入一個預置表中,在使用時通過查表,就可以快速構成可行著法,而 且可以區(qū)分開吃子著法和非吃子著法。如圖 2.3 所示: 圖 2.3 車的著法預置表范例 2.3 局面評估 局面估值就是通過既有的棋類知識來評估一個局面優(yōu)劣的過程。從象棋的棋力上 考慮,在搜索之外,局面估值是最重要的部分,因為對實際局面的評價的好壞,影響 著今后局勢發(fā)展的趨勢。這一過程對具體的棋類知識依賴程度很深,但是仍有一般性 的規(guī)律可循。目前在計算機象棋博弈中常用的估值方法主要采用靜態(tài)估值方法。同時 由于隨著搜索層數(shù)的加深,葉子節(jié)點的數(shù)目迅速上升,估值函數(shù)被數(shù)以百萬次的調(diào)
30、用, 花費大量的運算時間,如何提高估值函數(shù)的速度,也成了博弈性能改進的重要話題。 下面分別從這兩個方面及其關系介紹局面評估。 2.3.1 估值函數(shù)(evaluation function) 本系統(tǒng)的估值函數(shù)包括:棋子固定價值,棋子位置附加值,棋子靈活性,棋子對 棋盤的控制,棋子間的關系幾部分。 棋子固定價值指的是對棋盤中的每一個棋子,根據(jù)它的重要性和走法的豐富程度 賦予其一個特定的值。在棋盤上,棋子多者占優(yōu),棋子少者為劣。根據(jù)經(jīng)驗,可以讓 一個車價值為 500,一個馬價值為 300,一個兵價值為 100 等等。在中國象棋的對弈中, 由于一般以將死對方的將(帥)作為結束,因此,通常賦值的規(guī)則是為
31、將(帥)賦予一個遠 大于其他棋子的子力之和的值。 可以用下面的表達式求某一方的棋子固定值 sidevalue=sum(piecenum*piecevalue); 其中 piecenum 是某種棋子的數(shù)量,piecevalue 是該種棋子的價值,sum 是對各種棋子 的總價值求和。如果紅色的棋子價值總和大于黑色的棋子價值總和,通常這意味著紅 方的局勢優(yōu)于黑方。而紅黑雙方的 sidevalue 之差越大,紅方的優(yōu)勢也就越大。 同樣的棋子在不同位置上起的作用是不同的,最明顯的是兵(卒)過河之前與之后它 的作用和攻擊力以及對對方的威脅顯然是不一樣的,而當兵卒一旦到了底線附近,它 對將(帥)的威脅度將大
32、大下降。 棋子靈活性描述的是棋子的活動范圍,即棋子向各處調(diào)動的可能性大小。棋子的威 力能否充分發(fā)揮,與靈活性直接相關。本方棋子可以走的點越多,說明本方棋子的靈 活性越大。例如車在縱橫線上遇到障礙物、馬被周圍棋子絆腳等,都降低了靈活性, 也降低了威力的發(fā)揮,靈活性的計算是把棋子在棋盤上所能夠移動到達的位置數(shù)作為 靈活性計算,給予評分。 可以用下面的表達式求某一方棋子靈活性: mobility=sum(movenum*movevalue); 其中,movenum 是某種棋子的合法走法數(shù)量,movevalue 是該種棋子每一走法的 價值,sum 是對所有棋子的靈活性價值求和。mobility 就是所
33、有棋子的靈活性分數(shù)。 一方對棋盤控制的棋盤區(qū)域越多,那么他就越具有主動性。在象棋中,如果一位置 落在某方棋子的合法走步上,就可以認為被該方控制。如果某一位置同時落在雙方的 合法走步上,可以根據(jù)雙方控制該位置的棋子數(shù)量及棋子價值來決定孰優(yōu)孰劣。能控 制更多位置的一方應在這項評分上占優(yōu)。 在中國象棋博弈中,每個棋子都不是孤立存在的,他們之間構成了各種相互關系。 如棋子 1 下一步將被吃掉,則應該給一個負的附加值。而如果周圍有己方棋子對其進 行了保護,也就是說,對方在理智的情況下不會去吃棋子 1,那么棋子 l 沒有受到威脅, 價值不變。棋子關系的評估應考慮到該誰走棋的問題。如果某個紅馬落在黑炮的合法
34、 走步之內(nèi),但此時輪到紅方走棋,應認為紅馬受到的威脅較輕。而如果此時輪到黑方 走棋,就應認為紅馬受到的威脅很大,應減去一個相對較大的值了。 2.3.2 估值的速度與博弈性能 開發(fā)人員可以向估值函數(shù)加入大量的棋類知識,使之對于局面的評估更為精確。但 是,博弈系統(tǒng)的性能,速度,棋類知識一般滿足下面的關系: performance(性能)=speed(速度)kowledge(知識) 且向估值函數(shù)加入越多的棋類知識,估值函數(shù)的速度也就越慢,因為所要進行的計 算也相應增加。因此過于簡單的估值函數(shù)和過于復雜的估值函數(shù)同樣性能不佳。在同 等的知識含量下,速度越快,性能越高。在同等速度之下,知識量越大性能越高
35、。在 速度和知識量二者的相互作用下,開發(fā)者要尋找的是一種平衡,是能夠使性能最大化 的速度和知識量。使用終點估值(endpoint envaluation),意思是當葉子節(jié)點到達時, 使用估值函數(shù)對一個局面進行評估。這樣的方法思路清晰,容易設計,而且模塊間獨 立性高,同搜索算法的耦合度很低??梢暂p易的更換估值函數(shù),只改動極少的代碼; 你也可以隨意使用任何估值方法來評估整個棋盤,最終給出估值,但這種方法的速度 較慢。 2.3.3 估值函數(shù)的優(yōu)化 目前最長使用的是優(yōu)化估值參數(shù)的方法是利用大量的測試局面進行手工調(diào)整,也是 本文在優(yōu)化評估函數(shù)時主要使用的手段。這種方法是利用人類的象棋經(jīng)驗知識來調(diào)整 參數(shù)
36、值,比如,從經(jīng)驗上可以知道,一個車的價值要比一個兵大,給車賦予比兵大的 數(shù)值,馬炮則賦予位于其間的值;馬和炮的地位相當,給予它們相當?shù)臄?shù)值,以避免盲 目換子;如果對弈中使用了一些優(yōu)秀的戰(zhàn)術配合,那么就給予一定數(shù)值的獎勵,等等。 將這些經(jīng)驗放進評估函數(shù)中反復對弈,然后不斷修正參數(shù),找出一組性能較高的參數(shù)。 (1)規(guī)格化(normalize) 如果只是關心評價的順序,而不怎么關心評價值,那么可以把每一項都乘以同樣的 常數(shù)。這就意味著,對某個特定的模塊,例如兵的價值,可以硬性設一個值,其他值 就可以表示成它們相當于多少個兵。這個做法可以減少一個需要設定的參數(shù)。 (2)約束法 (deduce cons
37、traints) 通過考慮希望電腦作出怎樣的判斷,就可以確定一些參數(shù)。例如在對弈中即使賺到 一個兵,用車換象或馬還是壞的,但如果能賺到兩個兵那還是好的,因為在考慮子力 價值是要防止換單兵,鼓勵換雙兵。這樣的條件越多,合適的權重組合就越少。在開 始設定權重值的時候,這個方法通??梢缘玫胶线m的值,但是在后面仍然需要做一些 調(diào)整。 (3)交手法 (hand tweaking) 這是調(diào)整評估函數(shù)時非常常用的方法,通過讓程序對弈,來找到它的優(yōu)勢和弱點, 猜測哪些參數(shù)會讓程序更好,然后挑選新的參數(shù)。這個方法可以很快得到合理的結果, 但是需要對棋類知識有足夠的了解,便于根據(jù)程序的對局來做分析,從而知道程序的
38、 問題在哪里。手工調(diào)整是象棋引擎調(diào)整估值參數(shù)的主要手段之一,把人類的知識和經(jīng) 驗盡量準確客觀地“教授”給計算機,是提高棋力的普遍做法,雖然比較費時,但是 很有效。通過不斷的試驗、修改參數(shù)值,可以得到不錯的結果。但是人類的知識畢竟 具有一定的局限性,評估函數(shù)也不能包含所有情況,參數(shù)之間往往又互相聯(lián)系,調(diào)整 某個參數(shù)可能解決了某類問題,但又可能給其它問題的解決帶來麻煩,在這種情況下 很難實現(xiàn)全局下的最優(yōu)組合。 還有一種主要的優(yōu)化方法是機器自學習: (1)爬山法(hill-climbing) 爬山法通過對參數(shù)進行小范圍的試探來尋找最優(yōu)解,一次只能對參數(shù)作一點小改變, 然后測試博弈程序的性能是否提高了
39、,僅當性能提高時才采納這個改變,需要重復很 多次。這種方法很慢,并且受初始采樣值的限制,很容易陷入局部最優(yōu),即評價可能 很差,但是任何很小的改變都會使評價更差。 (2)模擬退火 (simulated annealing) 模擬退火是一種基于蒙特卡羅 (monte carlo)算法的啟發(fā)式隨機搜索算法,它沒有 蒙特卡羅算法多次尋優(yōu)的過程,也不像爬山法那樣依賴初值。在優(yōu)化參數(shù)時,類似于 爬山法,模擬退火法也是對權重做改變來提高成績,如果所做的改變沒有提高成績, 也會根據(jù)一個隨機的幾率采納這個改變,試圖跳出局部最優(yōu)。這個方法需要給定一些 幾率,從幾率高、梯度大的條件開始,然后逐漸減小。模擬退火法比爬
40、山法更慢,是 最終可能得到比較好的值。 (3)遺傳算法 (genetic algorithm,ga) 遺傳算法是建立在自然選擇和自然遺傳學機理基礎上的迭代自適應概率性全局優(yōu)化 算法,因其模仿生物的遺傳機制而得名,最早由美國密執(zhí)安大學 j.h.holland 于 1975 年提出,它通過染色體的復制,交叉,變異等操作,實現(xiàn)個體適應性的提高。遺傳算 法可以同時維護多組較好的參數(shù),通過向其中添加一組新參數(shù),通常是將從幾組老參 數(shù)中選出的值組合在一起作微小的變化,然后同幾組老的參數(shù)比較孰優(yōu)孰劣,將最壞 的一組去除。遺傳算法是從幾組參數(shù)開始,而不是一組參數(shù),具有很好的全局搜索能 力,搜索速度也很快,而且
41、此算法能將搜索重點集中于性能高的部分,能較快地求出 最佳參數(shù),魯棒性也明顯優(yōu)于前兩種算法,所以在計算機博弈中最有可能取得成功。 2.4 博弈樹搜索技術 中國象棋博弈樹非常龐大,完全建立博弈樹是不可能的,唯一的解決方法就是讓博 弈樹擴展到計算機運算可以接受的深度,然后對沒有分出勝負的葉子節(jié)點給出一個盡 量準確的打分,表示此局面下取得勝利的可能性,這個打分是由評估函數(shù)計算給出的, 將搜索樹展開是著法生成的功能,而搜索引擎則是盡可能縮小樹的規(guī)模,避免一切冗 余的計算,這也是計算機博弈中搜索引擎研究的重點。 根據(jù)搜索策略,目前應用于計算機博弈的搜索算法一般可分為三類: (l)窮盡搜索 (exhaust
42、ive search),這種搜索是沒有拋棄任何可能成為最佳路徑的搜 索,不存在風險,得到的最佳走法肯定是在現(xiàn)有評估函數(shù)下應該得到的,例如極大極 小值搜索、- 剪枝搜索及其變種等。 (2)選擇性搜索 (selective search),即裁剪搜索,這種搜索略去對一些著法的搜索, 冒著有可能漏掉最佳走法的風險,而換來局部更深的搜索深度。中國象棋中最常用裁 剪算法是空著裁剪(null move)等。 (3)啟發(fā)式搜索 (heuristic search)利用象棋領域的知識(啟發(fā)信息)設計搜索算法,著 重對走法排序,以簡化和加快搜索過程。中國象棋中的啟發(fā)算法有歷史啟發(fā)、殺手啟 發(fā)、置換表等。 2.4
43、.1 基本搜索算法 極大極小值方法(minimax algorithm)是解決博弈樹問題的基本方法。香農(nóng)教授早 在 1950 年首先提出了“極大極小算法” ,奠定了計算機博弈理論的基礎。 極大極小值算法的原則是:博弈雙方所要達到的目的相反,一方要尋找的利益是另 一 方失去的利益,博弈的一方總是希望下一步是子節(jié)點中取值最大者,而另一方希望 下一步是子節(jié)點中取值最小者。在象棋博弈中,極大極小值算法體現(xiàn)在始終站在博弈 一方的立場上給棋局估值,有利于這一方的棋局給予一個較高的價值分數(shù),不利于這 一方(有利于另一方)的給予一個較低的價值分數(shù),雙方優(yōu)劣不明顯的局面給予一個中 間值分數(shù)。在這一方走棋的時候,
44、選擇價值最大的子節(jié)點走法,即實行“max 搜索” , 另一方走棋則選擇價值最小的子節(jié)點走法,即實行“min 搜索” ,這就是象棋博弈中的 一個極大極小過程。例如,如果紅方為走棋方,它在偶數(shù)層的著法選擇是要在其全部 子節(jié)點中找到評估值最大的一個,實行“max 搜索” ,稱為 max 方,而其敵對方即黑 方在奇數(shù)層的著法選擇則是在其全部子節(jié)點中要找到評估值最小的一個,實行“min 搜索” ,稱為 min 方。圖 2.4 表示了一個極大極小搜索過程,粗箭頭為最佳路徑片段。 圖 2.4 極大極小值算法示意圖 由于完整的博弈樹過于龐大,程序不能也沒有必要搜索整棵博弈樹的所有節(jié)點, 而需要像人類棋手一樣有
45、選擇性地進行搜索,對于一些已經(jīng)確定不佳的走步可以將以 它根節(jié)點的子樹剪掉(cut-off/pruning),以提高單位時間內(nèi)搜索的節(jié)點數(shù)。 上述極大極小值搜索過程中,遍歷了整個的博弈樹,這樣的搜索算法效率低,搜 索量非常大,如果要減少搜索量,又可能影響搜索效果。但假如將葉節(jié)點的評估計算 與樹的展開同時進行,然后對博弈樹進行必要的裁剪,就可能大量減少所需搜索的節(jié) 點數(shù)目,并且保持搜索效果不變。 這個技術叫 - 剪枝搜索。它是一種基于 - 搜索的深度優(yōu)先搜索,是所有剪枝算法的 基礎,它是根據(jù)極大極小搜索規(guī)則進行的。圖 2.5 和圖 2.6 給出兩個剪枝示意圖: max min max 圖 2.5
46、剪枝示意圖 min max min 圖 2.6 剪枝示意圖 在圖 2.5 所示的極大極小樹片段中,按照極大極小值搜索規(guī)則,從左路分枝的葉節(jié) 點倒推得到第一層 max 節(jié)點的值為 5,可表示此時的著法最佳值,記為 ,顯然此 值可作為 max 方著法指標的下界。在搜索中路分枝時,因為第二層著法的選擇是取 第三層節(jié)點的最小值,即取 m 州(8,3, “”),而無論“”中為何值,都不會比 5 大(最大為 3),故可以將“”表示的節(jié)點及其后繼節(jié)點剪掉,不再考慮此節(jié)點的延伸。 同理搜索右路分枝,也可以進行剪枝操作。此類剪枝稱為 -剪枝。圖 2.5 中通過剪枝, 最后得到如粗箭頭所示的最佳路徑片斷。 圖 2
47、.6 所示的極大極小樹片段中,由左路分枝的葉節(jié)點倒推得到第一層 min 節(jié)點 的值為 n,可表示此時對方著法的鉗制值,記為 。顯然此 值可作為 min 方可能實 現(xiàn)著法指標的上界。在搜索中路分枝時,因為第二層著法的選擇是取第三層節(jié)點的最 大值,即取 max(5,12, “”),而無論“”中為何值,都不會比 11 小(至少為 12),故可以將“”表示的節(jié)點及其后繼節(jié)點剪掉,不再考慮此節(jié)點的延伸。同理搜 索右路分枝,進行剪枝操作。此類剪枝稱為 -剪枝。圖 2.7 中通過剪枝,最后得到如 粗箭頭所示的最佳路徑片斷。 - 剪枝搜索能夠讓我們省略許多節(jié)點的搜索,不只是節(jié)點本身,而且包括節(jié)點下 面的子樹,
48、這樣 - 剪枝搜索需要遍歷的節(jié)點數(shù)遠少于極大極小算法所遍歷的節(jié)點, 也就節(jié)省了大量的時間開銷,并且仍不失為窮盡搜索的本性,但 - 剪枝的剪枝效果 即搜索節(jié)點數(shù)與博弈樹節(jié)點的搜索次序密切相關。 2.4.2 高級搜索算法 極大極小值搜索是所有搜索算法的基礎,而 - 剪枝搜索是所有剪枝算法的基礎。 但在實際的博弈系統(tǒng)設計中,要提高程序的搜索速度和搜索深度,還必須利用搜中得 到的一些啟發(fā)式信息來加快搜索,目前己經(jīng)有很多對基本搜索算法的增強算法。 在 - 剪枝搜索中,剪枝效率幾乎完全取決于節(jié)點的排列順序,如何調(diào)整待展開 的走法的順序,是提高搜索效率的關鍵。在搜索的過程中,往往有一些啟發(fā)性的信息 可以利用
49、,如果利用這些信息在相似的局面下對走法進行優(yōu)化排序,或者對相同的局 面不再搜索,而直接返回以前搜索的結果,都會對搜索產(chǎn)生明顯的加速作用。圍繞著 法排序,己經(jīng)出現(xiàn)了許多優(yōu)秀的搜索算法與舉措,例如歷史啟發(fā),殺手啟發(fā),置換表 等等。 歷史啟發(fā)(history heuristic)實際上就是記錄搜索過的好的走法,并在后續(xù)著法中優(yōu) 先搜索。根據(jù)經(jīng)驗,一些以前經(jīng)過搜索認為最佳的走法,其后續(xù)走法仍然有很大可能 成為最優(yōu)的走法。在搜索過程中,每找到一個好的著法,就將與該走法相應的歷史得 分作一增量,一個多次被搜索并確認為好的走法的歷史記錄分值會較高,當搜索中間 節(jié)點時,將走法根據(jù)其歷史得分排序,以獲得較佳的排
50、列順序。 殺手啟發(fā)(killer heuristic)是基于這樣的思想:在搜索過程中,有許多走法一經(jīng)搜索 就引發(fā)了剪枝,且這些走法通常是同一個走法,這樣,為每一層記錄引發(fā)剪枝最多的 走法即殺手走法,當下一次搜索到同樣的深度時,如果殺手走法是該局的一個合法走 法,就優(yōu)先搜索殺手走法。殺手啟發(fā)是一種特殊的歷史啟發(fā),它不依賴于人類的知識, 具有普遍性。 置換表 (transposiliontable)是用一張表把搜索過的信息記錄下來,在后續(xù)的搜索中, 察看記錄在表中的這些信息,如果將要搜索的某個節(jié)點已經(jīng)有記錄,就直接利用記錄 下來的結果引入到當前的搜索中,以減少搜索。置換表不同于歷史啟發(fā)表和殺手表,
51、 不必在每次搜索之前都清空,而是一直維持這些數(shù)據(jù),作為以后搜索的信息。 另外,空著搜索(null move)也是搜索算法中一種很有效的搜索策略,它的思想是 放棄本方的走棋權利,讓對方連續(xù)走棋,如果得到的分數(shù)還大于原來的 值,就可以 簡單地返回 值,在此分枝下的搜索意義不大,免于搜索??罩阉髅黠@降低了搜索 的數(shù)量,導致搜索深度顯著提高,并且危險性比較小,實現(xiàn)較為簡單。 2.5 開局庫設計 中國象棋的開局變化極多,每一種走法都能產(chǎn)生出一種新的變化,單就中炮對屏 風馬、中炮對反宮馬、中炮對左三步虎等數(shù)十種變化,其格個開局又都有自身的變化, 這些開局都遵循開局的規(guī)律:“明車” ,即車路要通;“活馬”
52、 ,即馬與兵陣的配合合理, 使馬能有活動的空間;“好炮位” ,即炮要占住子力疏密適中的要點,封鎖對方進攻路線, 配合其他子力展開進攻。另外當進行快棋賽時,棋手還會選擇一些冷門開局,使局面 很快“脫譜” ,迅速進入到中、殘局。所以中國象棋開局階段是整個對弈過程中變化最 多的階段,開局的好壞對之后的中、殘局意義重大。 2.5.1 開局庫的作用 象人們記住開局招數(shù)一樣,博弈程序使用一個數(shù)據(jù)庫,里面儲存了開局譜著和局面, 于是當對局(開局)中的棋步在開局庫中能找到時,它就可以立即取出來走,不用計 算。無庸多說,這對于程序節(jié)省思考時間有重大幫助。這對于整個博弈系統(tǒng)來說有三 點好處:一是防止戰(zhàn)略性錯誤;二
53、是形成較為穩(wěn)妥和有利的局面;三是節(jié)省了大量的 搜索時間。但另一方面,如果開局庫本身不好或部分不好,程序也可能被盲目引到劣 勢的局面甚至很快失利。所以如何設置一個比較好的開局庫,就成了程序設計中不可 或缺的部分。 2.5.2 實現(xiàn)開局庫的主要方法 實現(xiàn)開局庫的方法一般有兩種:一種是用 fen 的形式表示的開局庫;另一種是哈 希值表示的開局庫。 用 fen 串表示開局庫的方法比較簡單,該方法僅僅是將開局庫中的存儲的棋盤狀 態(tài)與當前棋盤的狀態(tài)進行比較,若相同,則程序根據(jù)庫中的走法走一步。下面我們來 看看什么是 fen 串。 (1) fen fen 就是“福斯夫-愛德華茲記號法” (forsyth-e
54、dwards notation) ,這是一種使用 ascii 碼字符描述國際象棋局面的標準。fen 是建立在 19 世紀由報社記者 sd福斯 夫設計的記錄局面的標準基礎上的。后來為了適合象棋軟件的需要,由愛德華茲對此 做了少許修改。一份標準的局面記號對需要大量交換共享局面數(shù)據(jù)的國際象棋程序設 計等工作具有尤其重要的作用。 (2) 結構描述 一個 fen 記錄使用長度可不同的一行來表示,由六個區(qū)域組成。單純的 fen 記錄 文件后綴應該是“.fen” ,比如:kk-1.fen,在中國象棋開局庫的 fen 串形式的開局庫文件 后綴為.dat。fen 描述了:棋子位置、輪走棋方、易位可行性、吃過路兵
55、目標格、半 步計數(shù)、以及總回合數(shù)。所有這一切用一行文字符號表示就行了而且非常容易讀。 看看一個 fen 的五個區(qū)域及其含義,以中國象棋為例: rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/p1p1p1p1p/1c5c1/9/rnbakabnr w0 1 這就是每盤常規(guī)對局的最初局面,一個子都沒有動,如圖 2.7: 圖 2.7 象棋初始局面 (3) 棋子位置數(shù)值區(qū)域(piece placement data) 就是表示雙方棋子各在棋盤哪個格子上的。規(guī)則是從第 10 橫線開始順序數(shù)到第 1 橫線(紅方在下,從上數(shù)到下),從 a 線開始順次數(shù)到 h 線;紅方棋子以大寫字母 “rnb
56、akabnr”功表示,黑方棋子以小寫“rnbakabnr”表示,這是英文表示法, 每個字母代表的意義與常規(guī)規(guī)定相同。數(shù)字代表一個橫線上的連續(xù)空格,反斜杠 “”表示結束一個橫線的描述。 上面的那 p1plp1plp,就是表示黑方在第 7 橫線上排有 5 只兵;后面那兩個數(shù)字 9, 就是表示從第 6 到第 5 橫線,雙方一個棋子都不在,是空格;9 個反斜杠“”將第 一區(qū)域分成 8 段,因為棋盤有 10 條橫線;其它的照著圖完全可以類推。 (4) 輪走棋方(active color) 表示目前局面誰該走棋。小寫“w”表示紅方走棋;小寫“b”表示黑方走棋; 因為起初局面是紅先,所以上面就是“w”. (
57、5) 吃過路兵目標格(en passant target square) 如果沒有,就用“-”表示。如果有,就用具體完成吃過路兵的那個格子坐標表 示,顯然對于白兵被吃只可能在第 3 橫線,對于黑兵被吃只可能在第 6 橫線。而且, 這個標記是且只是在該局面緊接的上一步棋是某方剛走兵推進兩格的情況下出現(xiàn)。 (6) 半回合數(shù)(halfmove clock) 用一個非負數(shù)表示自從上一次動兵或吃子之后目前走了的半回合數(shù)。這個是為了 適應 50 步和棋規(guī)則而定。 (7) 回合數(shù)(fullmove number) 當前要進行到的回合數(shù)。不管紅還是黑,第一步時總是以 1 表示,以后黑方每走 一步數(shù)字就加 1。
58、用哈希值開局庫的文件的后綴通常為“.bin” 。 這種方法是使用置換 表來統(tǒng)計開局庫中的一些走法的優(yōu)劣。與搜索引擎中的置換表類似,開局庫也是用表 示局面的哈希值除以開局庫的大小作為索引,而表示局面的哈希值作為校驗。雖然二 者查詢的形式完全相同,但是存儲的內(nèi)容卻大不相同。置換表存儲的內(nèi)容主要用于搜 索,開局庫存儲的內(nèi)容主要是走法的權重、輸贏比率,用于選擇最佳的走法。它只存 放某局面的一個哈希值以及對應的走法。這也意味著 zobrist 哈希所要使用的隨機數(shù)組, 不能臨時產(chǎn)生,而要包含在開局庫當中。對于當前局面,查詢數(shù)據(jù)庫的函數(shù)使用庫中 的隨機數(shù)組計算出其哈希值,然后在庫中察看是否有此值所代表的局
59、面。此種開局庫 的實現(xiàn)方法: (a) 查詢當前局面 開局庫中存儲的哈希值表示的是當前局面,查詢到開局庫中所儲存的各種走法,并 在各種走法中隨機提取一個走法執(zhí)行,走法選擇的幾率與其權重成正比。 (b)查詢后續(xù)局面 這種開局庫查詢是與搜索結合在一起的,并不是查詢當前局面是否在開局庫中,而是 展開根節(jié)點的所有走法,也就是當前局面下所有可能走法。 3 系統(tǒng)的實現(xiàn) 3.1 系統(tǒng)的整體規(guī)劃 整個智能象棋系統(tǒng)將要實現(xiàn)的主要功能是:人人對戰(zhàn)、人機對戰(zhàn)、制作棋譜、演示 棋譜、挑戰(zhàn)英雄榜等,而其中的各個功能又分為幾個小功能模塊,該系統(tǒng)的功能結構 圖如圖 3.1 所示: 用戶界面 對弈制作棋譜演示棋譜挑戰(zhàn)英雄榜 人
60、人 對 戰(zhàn) 人機 對 戰(zhàn) 保存 自動 播 放 上 一 步 下 一 步 輸入 姓名 并保 存 悔棋 圖 3.1 功能結構圖 3.2 象棋界面的實現(xiàn) 本系統(tǒng)要實現(xiàn)一個象棋游戲系統(tǒng),界面是必不可少的部分。界面的設計是供用戶與 電腦進行交互,無論是人機對戰(zhàn)還是制作、演示棋譜都是在界面中實現(xiàn)的。 運行完成的程序,本系統(tǒng)界面如圖 3.2 所示: 圖 3.2 象棋系統(tǒng)界面 界面的實現(xiàn)分為棋盤的表示和棋子的表示兩部分,棋盤和棋子通過數(shù)組連接起來, 形成一個完整的界面系統(tǒng)。首先定義一個棋子類(chesspiece) ,來獲取棋子的顏色以 及類別: public class chesspiece extends
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)學之眼模板
- 醫(yī)藥生物行業(yè)安全生產(chǎn)工作總結
- 舞蹈秘境:身心之旅
- 幼兒園環(huán)境教育的研究與實踐計劃
- 《知識產(chǎn)權法總論》課件
- 員工因病辭職報告-15篇
- 歷史學應用研究報告
- 產(chǎn)品銷售合同范文5篇
- 護理信息技術應用(第2版)課件匯 曹世華 1 護理信息學-6智能移動終端
- 在線評測系統(tǒng)中的邊緣計算應用研究
- YS/T 1149.2-2016鋅精礦焙砂化學分析方法第2部分:酸溶鋅量的測定Na2EDTA滴定法
- GB/T 11017.1-2002額定電壓110kV交聯(lián)聚乙烯絕緣電力電纜及其附件第1部分:試驗方法和要求
- 原料藥FDA現(xiàn)場GMP符合性要求與檢查實踐課件
- 科技創(chuàng)新社團活動教案課程
- 氨堿法純堿生產(chǎn)工藝概述
- 基礎化工行業(yè)深度:電解液新型鋰鹽材料之雙氟磺酰亞胺鋰(LiFSI)市場潛力可觀新型鋰鹽LiFSI國產(chǎn)化進程加速
- 年產(chǎn)10000噸一次性自然降解環(huán)保紙漿模塑餐具自動化生產(chǎn)線技改項目環(huán)境影響報告表
- 實戰(zhàn)銷售培訓講座(共98頁).ppt
- 測控電路第7章信號細分與辨向電路
- 哈爾濱工業(yè)大學信紙模版
- 氨的飽和蒸汽壓表
評論
0/150
提交評論