https://cool9203.github.io/reversi/
程式介紹:
reversi.js 使用javascript實作出來的黑白棋局,提供變數任意存取、取得該次可以下那些位置的功能。
main.js 利用reversi.js實作黑白棋對弈功能(在該js裡的function run裡),並顯示在index.html,提供可下棋的功能。
reversiAI.js 實作黑白棋下棋AI。
AI介紹:
目前使用DFS + minimax&alpha-beta-pruning + SBE
可自行調整DFS搜尋深度,但須要是偶數,否則奇數的話會是選擇對方有利的情況來選擇要下哪步。
SBE介紹:
目前使用12個數字描述棋盤,同時分為前、中、後期,來分別對前中後期調整這12個數字的權重。
分別為:角點、邊點(排除角點&角點旁邊的點的邊邊)、中心外圍的點、中心點、前述4個以外的點、我方棋數量
共以上6個,同時加考慮對方棋子,所以6*2=12個描述棋盤數字。
目前前、中、後期預設為15、40、58顆棋時,而59~64顆棋時採用只看我方和敵方棋的數量,來決定要下哪步。
其中描述棋盤的12個數字權重分別為:
我方 敵方
前期:[15, 3, 4, 8, -2, 1.5] + [-15, 0, 0, 0, 0, -1.5]
中期:[90, 5, 4, 8, -3, 0] + [-100, -5, -4, -8, 3, 0]
後期:[90, 5, 2, 4, -3, 0] + [-100, -5, -2, -4, 3, 0]
59-64:[0, 0, 0, 0, 0, 1] + [0, 0, 0, 0, 0, -1]
若有興趣手動修改,可按F12 -> main.js -> 52-78行修改
完全開放原始碼,歡迎取用。
this code is open source, welcome used this code.
預計要完成的功能:
beam search(以放棄,懶的新增)
SBE改良