吳四光
(駐馬店職業技術學院,463000)
五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養性。五子棋既有現代休閑的明顯特征“短、平、快”,又有古典哲學的高深學問“陰陽易理”;它既有簡單易學的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結晶。
通過VC 調用API 自帶函數來完成程序圖形界面的顯示,用一15×15的為二維數組board[15][15]來存儲棋盤狀態;如果電腦下子標記為1(電腦棋子顏色0x0b),玩家下子標記為2(玩家棋子顏色0x0e);五子棋棋盤中的任一個位置,都有可能往4個方向連成“5”,這樣總共有572個位置和方向的組合,稱為獲勝組合或成“5”的位置。如圖1所示。
由于對于計算機來說,直接通過棋盤信息判別走法的好壞并不精確。如圖2所示。除了輸贏這樣的局面可以可靠的判別外,其他的判斷都只能做到大致的估計。判斷兩種走法孰優孰劣的一個好方法就是查看棋局走下去的結果,也就是向下搜索若干步,然后比較發展下去的結果。為了避免差錯,我們假定玩家的思考與電腦一樣,也就是,電腦想到的內容,對手也想到了。為此,我們可以用極大極小搜索算法來處理:
輪到計算機時,它可以選擇一個得分最高的位置下棋;但在該位置下棋后,假設玩家也很聰明,也能在下一步找到一個對他最有利的位置,這有可能使得計算四處于被動局面、甚至輸掉比賽。因此,對計算機來說,它選擇的最佳位置,應該是“它的得分+玩家的得分”的最大的位置。
本程序流程圖大體如下圖3所示。
InitializeBoard()有關參數的初始化:主要用于初始化計算機和玩家的獲勝組合情況
GiveScore()局面優劣評估:得出當前“家得分+電腦得分”的值,以便算出電腦落子的最佳位置。主要代碼:現:得出算出電腦落子的位置。主要代碼:

圖1 獲勝組合

圖2 評估棋局的優勢


圖 五子棋流程圖

3、ComTurn()極大極小值算法的實

4、Check()判定勝負:玩家或電腦落子后從橫向、縱向、左上至右下、左下至右上掃描來確認其是否成“5”,從而判定是否有一方勝出。
本文利用VC 實現了一個人機對弈的程序,徑實際運行測試,效果良好。
[1]Walter Savitch 等.C++面向對象程序設計第6版[M].清華大學出版社,2008
[2]吳偉民等.數據結構 C 語言版[M].清華大學出版社,2008
[3]侯俊杰等.深入淺出MFC 第2版[M].華中科技大學出版社,2008
[4]劉偉琴等.軟件需求2第2版[M].清華大學出版社,2008
[5]譚浩強等.C 程序設計第3版[M].華中科技大學出版社,2008
[6]王曙燕等.C 語言程序設計[M].華中科技大學出版社,2008
[7]中國五子棋網 http://www.backgammon-zg.cn
[8]百度 http://www.baidu.com