使用Qt5.7.0完成的五子棋小軟件,支持人人對戰,人機對戰,局域網聯機對戰git
學習Qt後的一個練手項目,完成本身曾經在命令行下的五子棋的昇華^_^
github
人機對戰使用基於評分表的策略來完成電腦下子,算不上AI吧。。可是電腦的棋力仍是很高的(至少我敗多勝少)。這個評分表的來自onezeros的博客學習
評估當前棋局中,哪一個位置的得分最高。五子棋要贏,必然要有五個棋子在一塊兒成線,那麼咱們就能夠計算棋盤中每個五格相連的線,一下稱之爲五元組。通常狀況(包括專業五子棋)下棋盤是15*15的。那麼應該是572個五元組。同時,針對五元組中黑子和白子的數量(能夠不考慮相對位置)的不一樣,給該五元組評不一樣的分。而後每個位置的得分就是包含這個位置的全部五元組的得分之和。spa
評分表以下,是基於電腦黑棋,電腦白棋將評分表反過來便可.net
// 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;
這種人機AI實現仍是很簡單的,可是這個電腦的棋力仍是很強的。固然效果同極大極小值搜索中應用alpha-beta剪枝這種方法去實現五子棋AI仍是稍差的。命令行
同時在無禁手黑棋先行的狀況下,這個評測表對於電腦白棋的棋力會稍弱一些code
局域網聯機對戰使用的QUdp
實現,當時的想法是容許觀戰,同時右下角造成一個聊天室,因此採用QUdp
來實現,每當局域網中一個客戶端進入對戰頁面就會發出廣播,至關於加入聊天室blog
人人對戰就沒什麼好說的了,每一個人每侷限定爲5分鐘時間three
總的功能已經完成,但還有些小細節和流程沒處理就給爛尾了。。。rem
有興趣的能夠查看下源碼 https://github.com/BENULL/GoBang