C++编程之中国象棋
zxywd
这个作者很懒,什么都没留下…
展开
-
使用Qt开发中国象棋(七):网络对战
关于Qt网络编程QTcpServer用于创建TCP服务器端。当newConnection信号激发时,我们调用指定的槽创建一个通信的套接字。 QTcpSocket用于创建TCP通信套接字。当connected信号激发时,我们向服务器端发送消息,当readyRead信号激发时,我们就可以读取数据了。原创 2016-02-29 09:08:36 · 3397 阅读 · 6 评论 -
使用Qt开发中国象棋(一):概述
最近看了一些关于中国象棋的实现书籍,里面讲述了如何开发一个完整的中国象棋游戏,看了里面的内容,感觉里面的内容特别巧妙的,比如书中提到了用位棋盘来表示中国象棋的棋盘以及一些精妙的走棋算法。基于这些,自己也尝试的开发了一个中国象棋。 我是在Linux Mint 17.1 32伟操作系统下面开发的,用的是Qt Creator 3.3.1,Qt的版本是5.4.1。由于要实现的功能比较多,加上每天原创 2015-10-12 11:25:55 · 3753 阅读 · 5 评论 -
使用Qt开发中国象棋(二):棋盘绘制
棋盘用的是ChessBoard类,主要是显示界面上的棋子,响应鼠标点击事件,激发走棋的信号,MainWindow调用相关的槽,从而完成走棋。下面将一一介绍,错误之处,恳请各位指正,谢谢。 ChessBoard要显示一张背景图和18个棋子,还有走棋路迹。背景图是一个QPixmap对象,至于棋子,因为界面上有90个位置可以放棋子,所以用了90个QPixmap对象。棋盘的渲染是在pai原创 2015-10-12 16:27:29 · 5496 阅读 · 3 评论 -
使用Qt开发中国象棋(三):走棋着法列表
在一个完整的中国象棋游戏中,一般界面上都显示了中文着法,为了简单起见,我开发的这个用了两个着法列表,红方一个,黑方一个,其实用一个就够了,只是感觉那样稍微会麻烦些。着法列表显示了每一步的走棋。下图是着法列表的截图: 着法列表用的是一个叫StepList的类来实现的,因为有两个着法列表,所以用了两个StepList对象。实例化的时候,指定一个特殊的参数用来标示是左边的还是右边的。像下面那原创 2015-10-13 16:48:17 · 3809 阅读 · 1 评论 -
使用Qt开发中国象棋(四):步时控制
一般的象棋游戏中都会限时,超过时间没走棋,就算输了。这个游戏采用的是步时限制。走棋的时候会有提示,像下面那样:界面用的是一个QLable来显示“红方走棋”,后面显示时间的用的是一个QLCDNumber的控件。显示时间可以用定时器的方式或者线程的方式,我这里用的是线程的方式。采用的是线程和条件变量的方式。Qt提供了QWaitCondition用于条件变量,QMutex用于互斥锁,QThr原创 2015-10-23 17:07:30 · 3447 阅读 · 1 评论 -
使用Qt开发中国象棋(五):走棋
在整个游戏中,走棋是最复杂的部分,也是最麻烦的。开发这个程序,大概花了三分之一的时间在这个上面。在这个游戏中,走棋是通过鼠标点击事件来完成的,当然也可以通过拖动鼠标事件来弄。假设我们自己先走,整个走棋的逻辑如下: (1)点击鼠标。 (2)ChessBoard类调用mousePressEvent并激发doMove信号。在该事件处理函数中,我们只处理鼠标左键单击事件原创 2015-10-27 15:48:31 · 3056 阅读 · 1 评论 -
使用Qt开发中国象棋(六):将军和死棋检测
下棋的过程中,某一方主帅被对方攻击就是将军,如果不能解除危险,就是死棋。在这个游戏中实现了将军的判断和死棋的检测。具体如下: (1)每走一步棋时,先要判断自己能不能这样走,当然除了走法是否合乎规则,比如说是否为蹩脚马等等,还要判断自己这样走是否被对方将军。 (2)走完一步棋后,还要判断是否将对方的军,是否造成对方死棋。首先介绍一下将军的判断方法:能够将军的无原创 2015-11-05 14:40:55 · 2936 阅读 · 1 评论