國際象棋人工智能軟件chessdb
第1章 軟件概述
國際象棋人工智能軟件(以下簡稱chessdb),是用VB.NET語言開發的一款Windows桌面應用程序。基本功能包括:
l 編輯棋局
l 保存棋譜
l 打開棋譜
l 人工智能分析局面
其他選項有:
l 旋轉棋盤
l 翻轉棋子
l 設置格子顏色
該軟件的特點是兼容性好,無需安裝,雙擊文件即可打開。而且,棋力水平高,適合各個水平的棋手作為輔助工具使用。
1.1 開發背景
國際象棋(Chess)是歐美國家比較流行的一種智力游戲,近年來在國內也已經非常普及,而且經常舉辦各種規模的賽事。越來越多的家長願意讓自己的孩子學習國際象棋,提高智力水平。
但是,適合國人推演棋局的人工智能軟件卻不多,本軟件的設計是為了讓更多人了解國際象棋,借助本軟件的分析功能進一步提高棋手的競技水平。
1.2 設計思路
棋類游戲的軟件開發,首選窗體應用程序,利用圖像控件呈現棋子效果。因此,本軟件的實現必須考慮如下多個方面:
l 國際象棋棋盤的正常顯示
l 棋子的正常顯示
l 棋子按照行棋規則正常移動
l 行棋過程中記錄前后移動的坐標
l 棋譜的保存
l 棋譜的打開
l 在任意一個局面下分析局面
除了實現以上基本功能外,還需要從方便用戶使用的角度,設計如下選項:
l 設置深格、淺格顏色
l 棋盤旋轉
l 棋子翻轉
這些設置應該保存於注冊表,下次啟動軟件時直接使用上次的設置。
棋盤的實現,采用了64個PictureBox控件,每個控件具有BackColor屬性和Image屬性,其中BackColor通常為純色,用於顯示格子顏色。而Image屬性是一個圖像,在行棋的過程中利用不斷修改Image屬性實現走棋的效果。也就是說,行棋過程中,所有的控件位於原地不動,只是更改了相應控件的圖像。
在手動走棋過程中,還需要對行棋行為按照國際象棋行棋規則進行約束,否則,拿起任何一個棋子都可以移動或吃掉另一個棋子。具體的行棋規則請參考其他資料。但是國際象棋有以下4個特殊的走棋方式,需要個別處理。
1.2.1 王車易位
當一方的王和車從未走動,而且王車之間沒有任何棋子,此時王可以向車的方向一次移動兩格,車越過王靠在王的另一側。這個動作算一步棋。
王向a列的車易位,稱為“長易位”,把王走到c1,並且把左側的車走到d1。
王向h列的車易位,稱為“短易位”,把王走到g1,並且把右側的車走到f1。
需要另外注意的是:易位時必須考慮王經過的每個格子是否被對方將軍,如果某個格子處於將軍,則不具有易位條件。假設計划長易位,必須提前看一下e1、d1、c1這三個格子,是否被對方棋子將軍。
長易位的結果:
短易位的結果:
1.2.2 兵走兩格
在初始局面,白黑雙方各有8個兵,分別位於2線和7線。
在沒有被對方將軍的前提下,原位的兵可以直接向前移動兩格,如果不是原位的兵,一次只能前進一格。
兵走兩格的條件是,兵前面的兩個格子都沒有任何棋子。
上圖的行棋結果是:
再看下圖,白方e2兵前面有象,黑方a7兵前面有馬,這兩個兵都不具有走兩格的條件。
1.2.3 吃過路兵
吃過路兵的走法必須基於對方兵走兩格。
假設白方e線的兵已經走到5線(對方境內),那么相鄰的d線和f線,對方的原位兵如果走兩格,白方就可以吃掉黑方的兵。
假設黑方走d7d5,那么白方可以認為黑方的兵在d6,直接走e5d6,並且把d5的兵從棋盤拿掉。
行棋的結果:
反之,當黑方的兵已經走到4線(白方境內),白方相鄰線的原位兵前進兩格,也有被吃過路兵的可能。
上圖,當白方走b2b4,黑方可以走a4b3吃掉白兵。
此外,需要注意的是吃過路兵不是必須的,主吃方根據棋局形勢可以選擇吃,也可以任之不管。如果選擇吃,必須立即吃掉,如果雙方各走了其他的棋子,則吃過路兵的條件已喪失。
1.2.4 底兵升變
當一方的兵走到了對方棋盤的底線,這個兵必須變更為己方的后、車、馬、象之一。
白方的兵走到了8線,或者黑方的兵走到了1線,都必須升變。
上圖,如果輪白方走,b7兵既可以吃掉黑方馬並且升變,也可以直接走到b8升變。
如果輪黑方走,c2兵走到c1升變。
假設白兵吃掉了黑馬,軟件彈出一個升變對話框,白方必須從中選擇一個,通常選擇后。
升變后的結果:
1.3 軟件的基本信息
軟件名稱:chessdb
文件類型:exe可執行程序
其他輔助文件:無
運行平台:Windows系統均可正常運行
第2章 軟件下載
聯網用戶可以訪問:https://share.weiyun.com/R3QI4yfl
進入“工具大全”文件夾,下載chessdb.zip
也可以直接從如下鏈接下載:
https://files.cnblogs.com/files/ryueifu-VBA/chessdb.zip
下載后解壓縮到任意路徑,主文件是chessdb.exe,另一個a.txt是一個示例棋譜文件。
第3章 功能說明
3.1 軟件概覽
本軟件的功能分布在窗體區域和主菜單中。
窗體區域包括:
l 棋盤和棋子
l FEN文本框
l 棋譜列表
l 招法列表
菜單包括:
l 文件:棋譜的保存和打開
l 選項:棋盤和棋子的外觀設定
l 人工智能:設置是否顯示招法
l 幫助
3.2 編輯棋局
剛打開軟件時,默認顯示的是國際象棋初始局面。
由白方先行,用戶使用鼠標點擊白方的棋子,按照國際象棋行棋規則走棋即可。
如果不啟用人工智能,白方、黑方均由軟件的用戶使用鼠標走棋。
棋譜可以保存為TXT文件,以后通過“文件”、“打開”再次查看棋譜
3.3 查看棋譜
一個棋譜由初始局面和棋招列表構成,棋招列表位於棋盤右側,用戶使用鼠標點擊列表中的某項,或者按鍵盤的上下箭頭,可以快速跳轉到該局面。
同時,棋盤底部有一個FEN文本框,里面實時顯示當前局面信息。
3.4 編輯殘局
本軟件未提供直接從棋盤編輯殘局的方法。
用戶可以直接修改FEN文本框的內容,按下回車鍵完成殘局編輯。如果想編輯殘局,用戶需要事先了解FEN字符串的構成和含義。
FEN字符串把某個局面的棋子,使用字母代替,最后連成一個長的字符串,方便在不同的軟件之間傳遞局面信息。
例如初始局面如下:
白方棋子對應的字母為:
車(R)、馬(N)、象(B)、后(Q)、王(K)、兵(P)
黑方棋子是上述各個字母對應的小寫。
如果把初始局面用字母代替,則結果為:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
其中/用於分行,數字表示連續的空白格子數。
編輯殘局舉例如下:
假設FEN文本框中的內容為:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
用鼠標選中前面的rnbq,這4個字母,刪掉,改寫為數字4,表示4個空白格子。然后再把第二行的前面3個p,刪掉,換成數字3。最后按下回車。
FEN文本框內容被修改為:
4kbnr/3ppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
棋盤局面為:
如果要設置殘局該黑方行棋,將后面的w改為b即可。
3.5 更改格子顏色
用戶根據自己的愛好,可以修改深格和淺格的顏色。
點擊菜單“選項”、“深格顏色”,彈出一個顏色選取對話框。
點擊“確定”后,棋盤顏色發生了變化
3.6 旋轉棋盤
如果用戶需要查看黑方,把白方當作對方,可以通過旋轉棋盤來切換視圖。
3.7 翻轉棋子
國際象棋平面棋子,一般默認是白黑雙方的棋子都是正向的,沿着屏幕方向朝上。
有時候需要把對方的棋子方向調轉,更好地分辨走棋方向。
3.8 人工智能
軟件默認是關閉人工智能功能的。如果要為白方支招,選擇菜單“人工智能”、“顯示白方招法”,使其處於勾選狀態(也可按下快捷鍵Ctrl+W)。
這樣,每當黑方走完一步棋,軟件最右側就自動顯示白方的各種招法,用戶一般選擇最上面的招法即可。
例如使用鼠標點擊右側列表中的e2e4,軟件會自動為白方走棋,結果為:
如果出現卡頓,耐心等待即可。