Qt5 中国象棋悔棋操作
来源:互联网 发布:藏剑二少捏脸数据下载 编辑:程序博客网 时间:2024/05/17 02:34
使用QVector类定义容器,保存下棋操作,button按钮实现悔棋。
//定义类Step,记录每次下棋棋盘的改动//移动棋子的操作无非有两种可能性//一种是移动到空白位置//另一种是移动吃掉了棋子class Step{public: Step(); //保存操作 int _moveId;//移动棋子的ID int _killId;//吃掉棋子的ID,悔棋时需要将其_dead属性改变 int _rowPre;//起先的行 int _colPre;//起先的列 int _rowNow;//现在的行 int _colNow;//现在的列 bool _redTurnPre;//上一步执棋方};
//保存棋盘void Board::saveStep(int moveId, int killId, int row, int col, QVector<Step*>& steps){ Step* step = new Step; step->_colPre = _c[moveId]._col; step->_colNow = col; step->_rowPre = _c[moveId]._row; step->_rowNow = row; step->_moveId = moveId; step->_killId = killId;}
//移动棋子时记录棋盘
void Board::backStep(){ //恢复棋子的所有状态 //刚开始棋局,那么悔棋无效 if(this->_steps.size() == 0) return; Step* step = this->_steps.last(); //上一步操作将棋子移动到空白位置 if(step->_killId==-1) { //只要将moveId的行列修改就可以了 _c[step->_moveId]._row=step->_rowPre; _c[step->_moveId]._col=step->_colPre; _redTurn=step->_redTurnPre; update(); } else { //需要将killId棋子状态恢复,将moveId棋子状态恢复 _c[step->_moveId]._row=step->_rowPre; _c[step->_moveId]._col=step->_colPre; _c[step->_killId]._dead=false; _c[step->_killId]._row=step->_rowNow; _c[step->_killId]._col=step->_colPre; _redTurn=step->_redTurnPre; update(); } _steps.removeLast(); delete step;}
//最后用信号槽将按钮与函数联系起来connect(returnChess,&QPushButton::clicked,this,&Board::backStep);
0 0
- Qt5 中国象棋悔棋操作
- Cocos2d-X开发中国象棋《十》悔棋
- 设计模式学习之备忘录模式:象棋中“悔棋”操作
- Unity中国象棋(四)——悔棋、判断胜负的实现,以及动画特效和代码的优化
- 中国象棋
- 中国象棋
- 中国象棋
- 中国象棋
- 中国象棋
- Qt5 操作字符串
- Qt5 操作 Sqlite3实例
- QT5之MYSQL操作
- Qt5操作Excel2013
- qt5串口简易操作
- QT5.7操作word
- QT5.7操作数据库
- QT5.2 快捷键操作
- 关于黑白棋悔棋
- Classed 类
- POJ2039:反反复复
- 0005 键盘打字如何练成像黑客一样的飞速
- return,return false,return true
- 2015年9月到2017年3月研究生回顾
- Qt5 中国象棋悔棋操作
- svn 配置多个仓库和权限控制
- jQuery
- 多态 -重写/覆盖(Override) -重载(Overload)
- 1120. Friend Numbers (20)
- Java Socket通信及心跳包
- 第一篇博客
- 数组显示方法
- 指针和常量 c