Qt实现的局域网对战五子棋

比特逐浪
• 阅读 4835

GoBang

使用Qt5.7.0完成的五子棋小软件,支持人人对战,人机对战,局域网联机对战

学习Qt后的一个练手项目,完成自己曾经在命令行下的五子棋的升华^_^

人机对战使用基于评分表的策略来完成电脑下子,算不上AI吧。。但是电脑的棋力还是很高的(至少我败多胜少)。这个评分表的来自onezeros的博客

评估当前棋局中,哪个位置的得分最高。五子棋要赢,必然要有五个棋子在一起成线,那么我们就可以计算棋盘中每一个五格相连的线,一下称之为五元组。一般情况(包括专业五子棋)下棋盘是15*15的。那么应该是572个五元组。同时,针对五元组中黑子和白子的数量(可以不考虑相对位置)的不同,给该五元组评不同的分。然后每一个位置的得分就是包含这个位置的所有五元组的得分之和。

评分表如下,是基于电脑黑棋,电脑白棋将评分表反过来即可

// 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还是稍差的。

同时在无禁手黑棋先行的情况下,这个评测表对于电脑白棋的棋力会稍弱一些

局域网联机对战使用的QUdp实现,当时的想法是允许观战,同时右下角形成一个聊天室,所以采用QUdp来实现,每当局域网中一个客户端进入对战页面就会发出广播,相当于加入聊天室

人人对战就没什么好说的了,每个人每局限定为5分钟时间

总的功能已经完成,但还有些小细节和流程没处理就给烂尾了。。。


Qt实现的局域网对战五子棋
Qt实现的局域网对战五子棋
Qt实现的局域网对战五子棋
Qt实现的局域网对战五子棋


有兴趣的可以查看下源码 https://github.com/BENULL/GoBang

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
仲远 仲远
2年前
堆叠大陆 Stacklands for Mac(卡牌游戏)v1.3.4中文原生版
堆叠大陆(Stacklands)forMac是一款策略卡牌游戏,由ThunderboxEntertainment开发。在这个游戏中,玩家需要构建自己的卡组并与其他玩家进行对战。堆叠大陆的游戏玩法有两个主要元素:卡片和地图。每张卡片代表一个单位,如士兵、法师
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Oracle一张表中实现对一个字段不同值和总值的统计(多个count)
需求:统计WAIT\_ORDER表中的工单总数、未处理工单总数、已完成工单总数、未完成工单总数。表结构:为了举例子方便,WAIT\_ORDER表只有两个字段,分别是ID、STATUS,其中STATUS为工单的状态。1表示未处理,2表示已完成,3表示未完成总数。 SQL:  1.SELECT   2
Wesley13 Wesley13
3年前
Unity2017五子棋大战_人机_双人_UNET联网
五子棋大战源码工程基于Unity2017.2进行开发,分为人机、双人、UNET网络三种对战方式,配有案例讲解视频,其中人机五子棋AI有三种开发难度,欢迎有兴趣的同学加入学习! 。!(https://img2018.cnblogs.com/blog/54608/201810/5460820181030231059137457568553.j
Stella981 Stella981
3年前
AD软件Bug和自我失误的对战
说说我近期犯的两大过失,让我无语的过失,要购买重大责任险呀一大过失:上图,看了下面的图想必大家都明白了,TOP层元件只有位号和焊盘,丝印边框哪去了?!(https://oscimg.oschina.net/oscnet/4959f96d7ed520dfc65653f459d8d04910f.png)别急,在这里,下图!(htt
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(