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

圖1 獲勝組合

圖2 評(píng)估棋局的優(yōu)勢(shì)


圖 五子棋流程圖

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

4、Check()判定勝負(fù):玩家或電腦落子后從橫向、縱向、左上至右下、左下至右上掃描來(lái)確認(rèn)其是否成“5”,從而判定是否有一方勝出。
本文利用VC 實(shí)現(xiàn)了一個(gè)人機(jī)對(duì)弈的程序,徑實(shí)際運(yùn)行測(cè)試,效果良好。
[1]Walter Savitch 等.C++面向?qū)ο蟪绦蛟O(shè)計(jì)第6版[M].清華大學(xué)出版社,2008
[2]吳偉民等.數(shù)據(jù)結(jié)構(gòu) C 語(yǔ)言版[M].清華大學(xué)出版社,2008
[3]侯俊杰等.深入淺出MFC 第2版[M].華中科技大學(xué)出版社,2008
[4]劉偉琴等.軟件需求2第2版[M].清華大學(xué)出版社,2008
[5]譚浩強(qiáng)等.C 程序設(shè)計(jì)第3版[M].華中科技大學(xué)出版社,2008
[6]王曙燕等.C 語(yǔ)言程序設(shè)計(jì)[M].華中科技大學(xué)出版社,2008
[7]中國(guó)五子棋網(wǎng) http://www.backgammon-zg.cn
[8]百度 http://www.baidu.com