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