五子棋評分表算法


最近學了一點QT的繪圖,於是乎照着學長的代碼繪制了五子棋的小游戲。

最基礎的東西這里就不說了,自己的知識也僅僅比會用多那么一點,下面我們來說說這里貌似高大上的人機AI吧。


評分表算法

一般情況下棋盤是15*15的。那么應該是572個五元組。而這五元組由黑棋白棋還有空格組成。也就是 3^5 * 572 = 138996; 看着很多吧,其實是可以分類的。每個五元組就是一種局勢。

我們只用統計只有己方棋子的局勢,以及只有敵方棋子的局勢,針對這兩種局勢給予確定的評分,而其他局勢直接評分為0。

下面是我使用的是評分表

    // tuple is empty  
    Blank,  
    // tuple contains a black chess  
    B,  
    // tuple contains two black chesses  
    BB,  
    // tuple contains three black chesses  
    BBB,  
    // tuple contains four black chesses  
    BBBB,  
    // tuple contains a white chess  
    W,  
    // tuple contains two white chesses  
    WW,  
    // tuple contains three white chesses  
    WWW,  
    // tuple contains four white chesses  
    WWWW,  
    // tuple does not exist  
    Virtual,  
    // tuple contains at least one black and at least one white  
    Polluted  
      
      
    tupleScoreTable[0] = 7;  
    tupleScoreTable[1] = 35;  
    tupleScoreTable[2] = 800;  
    tupleScoreTable[3] = 15000;  
    tupleScoreTable[4] = 800000;  
    tupleScoreTable[5] = 15;  
    tupleScoreTable[6] = 400;  
    tupleScoreTable[7] = 1800;  
    tupleScoreTable[8] = 100000;  
    tupleScoreTable[9] = 0;  
    tupleScoreTable[10] = 0;  

很多人可能沒看懂,其實就是當前五元組中黑白棋子個數以及對應的得分,tupleScoreTable[0] 對應 沒有棋子的得分,tupleScoreTable[1 - 4] 代表 1個黑棋 到 4個黑棋的得分, tupleScoreTable[5 - 8]代表 1 個白棋到4個白棋的得分,tupleScoreTable[9] 代表黑白棋共存的情況,tupleScoreTable[10] 代表其他情況(貌似沒用?)


當然具體怎么來統計那?onezeros的博客沒有給出來,對很多初學者來說實現還是有一定困難,這里就詳細的講一講吧。

首先我們用一個棋盤大小的二維數組來儲存每個點的得分。int scoreTabel[15][15];

每次,當People或者Computer下完棋后,以該點為中心統計周圍5個點的分數(上下左右對角)。

圖1

即紅點,統計每個點的分數。

對於每個紅點,同樣的,我們向其周圍8個方向找到所有包括其自身的五元組,並統計白棋和黑棋的個數,從而根據上面的評分表進行加分。

舉個栗子

圖2

對於1號位置,我們先統計以它為底端的五元組,即第一個矩形,然后是第二個,第三個,一直到以1號位置為頂端的五元組,這樣我們就統計了y軸方向的分數。

同理,接着統計x軸方向,兩種對角線方向的五元組的得分,這樣1號點位置的得分就出來了,我們將這個值賦值在對應的scoreTable[][]里面;


對圖1中所有紅點的得分統計完成后,我們就可以遍歷整個得分表scoreTable[][],其中的分最高而且為空的位置就是計算機下子的位置。


當然,這種方法思路和編程都很簡單,自然效果比不上正規軍中極大極小值搜索中應用alpha-beta剪枝這種方法。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM