Qt實現的局域網對戰五子棋

GoBang

使用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

相關文章
相關標籤/搜索