五子棋评分表算法
最近學了一點QT的繪圖,于是乎照著學長的代碼繪制了五子棋的小游戲。
最基礎的東西這里就不說了,自己的知識也僅僅比會用多那么一點,下面我們來說說這里貌似高大上的人機AI吧。
評分表算法
一般情況下棋盤是15*15的。那么應該是572個五元組。而這五元組由黑棋白棋還有空格組成。也就是 3^5 * 572 = 138996; 看著很多吧,其實是可以分類的。每個五元組就是一種局勢。
我們只用統(tǒng)計只有己方棋子的局勢,以及只有敵方棋子的局勢,針對這兩種局勢給予確定的評分,而其他局勢直接評分為0。
下面是我使用的是評分表
很多人可能沒看懂,其實就是當前五元組中黑白棋子個數(shù)以及對應的得分,tupleScoreTable[0] 對應 沒有棋子的得分,tupleScoreTable[1 - 4] 代表 1個黑棋 到 4個黑棋的得分, tupleScoreTable[5 - 8]代表 1 個白棋到4個白棋的得分,tupleScoreTable[9] 代表黑白棋共存的情況,tupleScoreTable[10] 代表其他情況(貌似沒用?)
當然具體怎么來統(tǒng)計那?onezeros的博客沒有給出來,對很多初學者來說實現(xiàn)還是有一定困難,這里就詳細的講一講吧。
首先我們用一個棋盤大小的二維數(shù)組來儲存每個點的得分。int scoreTabel[15][15];
每次,當People或者Computer下完棋后,以該點為中心統(tǒng)計周圍5個點的分數(shù)(上下左右對角)。
圖1
即紅點,統(tǒng)計每個點的分數(shù)。
對于每個紅點,同樣的,我們向其周圍8個方向找到所有包括其自身的五元組,并統(tǒng)計白棋和黑棋的個數(shù),從而根據(jù)上面的評分表進行加分。
舉個栗子
圖2
對于1號位置,我們先統(tǒng)計以它為底端的五元組,即第一個矩形,然后是第二個,第三個,一直到以1號位置為頂端的五元組,這樣我們就統(tǒng)計了y軸方向的分數(shù)。
同理,接著統(tǒng)計x軸方向,兩種對角線方向的五元組的得分,這樣1號點位置的得分就出來了,我們將這個值賦值在對應的scoreTable[][]里面;
對圖1中所有紅點的得分統(tǒng)計完成后,我們就可以遍歷整個得分表scoreTable[][],其中的分最高而且為空的位置就是計算機下子的位置。
當然,這種方法思路和編程都很簡單,自然效果比不上正規(guī)軍中極大極小值搜索中應用alpha-beta剪枝這種方法。
轉(zhuǎn)載于:https://www.cnblogs.com/chaiwenjun000/p/5321115.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
- 上一篇: php mime类型怎么设置
- 下一篇: linux 查看文件夹大小「建议收藏」(