#include "board.h"
board::board(QWidget *parent, bool mainRed) : QWidget(parent), myRed(mainRed)
{
this->setGeometry(0, 30, 1400, 920);
_id = 0;
d = 82;
r = d/2;
tag = true;
saveFirstPoint = QPoint(0,0);
saveSecondPoint = QPoint(0,0);
for(int i = 1; i <= 32; i++)
{
s[i].init(i, myRed);
}
this->show();
}
void board::paintEvent(QPaintEvent *)
{
QPainter * painter = new QPainter(this);
QPen pen;
pen.setWidth(3); //设置画笔粗细
painter->setPen(pen);
//画10条横线
for (int i = 1; i <= 10; i++)
painter->drawLine(QPoint(d, d*i), QPoint(d*9, d*i));//9条竖线
//画两边界竖线
painter->drawLine(QPoint(d, d), QPoint(d, d*10));
painter->drawLine(QPoint(d*9, d), QPoint(d*9, d*10));
//画中间7条竖线
for (int i = 2; i < 9; i++) {
painter->drawLine(QPoint(d*i, d), QPoint(d*i, d*5));
painter->drawLine(QPoint(d*i, d*6), QPoint(d*i, d*10));
}
//画九宫斜线
painter->drawLine(QPoint(d*4, d), QPoint(d*6, d*3));
painter->drawLine(QPoint(d*4, d*3), QPoint(d*6, d));
painter->drawLine(QPoint(d*4, d*8), QPoint(d*6, d*10));
painter->drawLine(QPoint(d*4, d*10), QPoint(d*6, d*8));
// 绘制棋子
QPoint p;
for(int i = 1; i <= 32; i++)
{
if(!s[i].dead)
{
p = center(s[i].id);
if (s[i].red)
{
if(i == _id)
{
painter->setBrush(QBrush(QColor(255,0,0)));
painter->setFont(QFont("宋体", r * 0.9, 3));
painter->drawEllipse(p, r, r);
painter->drawText(QRect(p.x() - r, p.y() - r, d, d), s[i].getText(), QTextOption(Qt::AlignCenter));
}
else
{
painter->setBrush(QBrush("#F10C45"));
painter->setFont(QFont("宋体", r * 0.7, 3));
painter->drawEllipse(p, r, r);
painter->drawText(QRect(p.x() - r, p.y() - r, d, d), s[i].getText(), QTextOption(Qt::AlignCenter));
}
}
else
{
if(i == _id)
{
painter->setBrush(QBrush(QColor(205,205,205)));
painter->setFont(QFont("宋体", r * 0.9, 3));
painter->drawEllipse(center(s[i].id), r, r);
painter->drawText(QRect(p.x() - r, p.y() - r, d, d), s[i].getText(), QTextOption(Qt::AlignCenter));
}
else
{
painter->setBrush(QBrush(QColor(255,255,255)));
painter->setFont(QFont("宋体", r * 0.7, 3));
painter->drawEllipse(center(s[i].id), r, r);
painter->drawText(QRect(p.x() - r, p.y() - r, d, d), s[i].getText(), QTextOption(Qt::AlignCenter));
}
}
}
}
painter->end();
}
void board::mouseReleaseEvent(QMouseEvent *ev)
{
QPoint pt = ev->pos();
if(tag)
moveChess(pt);
}
void board::moveChess(QPoint pt)
{
int row = 0;
int col = 0;
bool bRet = false;
saveFirstPoint = saveSecondPoint;
bRet = getRowCol(pt, row, col); // 返回point
updateId(row, col);
if(bRet)
{
if(_id)
{
saveSecondPoint = QPoint(s[_id].row, s[_id].col);
}
else
{
saveSecondPoint = QPoint(row, col);
}
}
else
{
saveSecondPoint = QPoint(0,0);
}
int temp = pointToId(saveFirstPoint);
int temp2 = pointToId(saveSecondPoint);
if(temp && s[temp].red == myRed && temp != -1)
{
if(temp2 == 0)
{
if(rule(temp))
{
s[temp].row = saveSecondPoint.x();
s[temp].col = saveSecondPoint.y();
saveSecondPoint = QPoint(0,0);
qDebug() << "移动" << temp << temp2;
emit EmitMoveChess(temp, s[temp].row ,s[temp].col);
}
}else if(temp2 != temp && s[temp2].red != myRed && temp2 != -1)
{
if(rule(temp))
{
s[temp2].dead = true;
s[temp].row = saveSecondPoint.x();
s[temp].col = saveSecondPoint.y();
saveSecondPoint = QPoint(0,0);
qDebug() << "吃棋" << temp << temp2;
emit EmitMoveChess(temp, s[temp].row ,s[temp].col);
}
}
}
update();
}
bool board::getRowCol(QPoint pt, int &row, int &col)
{
for(row = 1; row <= 10; row++)
{
for(col = 1; col <= 9; col++)
{
QPoint c = center(row, col);
int dx = c.x() - pt.x();
int dy = c.y() - pt.y();
int dist = dx * dx + dy * dy;
if(dist < r * r)
return true;
}
}
return false;
}
void board::updateId(int row, int col)
{
for(int i = 1; i <= 32; i++)
{
if(s[i].row == row && s[i].col == col && s[i].dead == false)
{
_id = i;
break;
}
else
{
_id = 0;
}
}
}
int board::pointToId(QPoint p)
{
int i = 1;
if(p == QPoint(0,0)) return -1;
for(; i <= 32; i++)
{
if(s[i].row == p.x() && s[i].col == p.y() && s[i].dead == false)
{
break;
}
}
if(i > 32) return 0;
else return i;
}
<<<<<<< HEAD
void board::drawingBoard(bool tmp)
{
if(tmp)
{
for(int i = 1; i <= 32; i++)
{
s[i].red = !s[i].red;
}
myRed = !myRed;
update();
}
}
void board::rivalMobile(QString str)
{
int pawnID = str.mid(0,2).toUInt();
int x = str.mid(2,2).toUInt();
int y = str.mid(4,2).toUInt();
for(int i = 1 ; i <= 32; i++)
{
if(s[i].row == x && s[i].col == y) s[i].dead = true;
}
qDebug() << "棋子移动" << str;
s[pawnID].row = x;
s[pawnID].col = y;
tag = !tag;
update();
if(s[21].dead == true) emit gameOver("11");
=======
void board::setMainred(bool b)
{
myRed = b;
>>>>>>> da6ad27a8e86736717b61087ca6698836ff847d9
}
QPoint board::center(int row, int col)
{
return QPoint(col * d, row * d);
}
QPoint board::center(int id)
{
return center(s[id].row, s[id].col);
}
bool board::rule(int FirstPointId)
{
switch(s[FirstPointId].type)
{
case Stone::KING: return king();
case Stone::CHE:return che();
case Stone::MA:return ma();
case Stone::PAO:return pao();
case Stone::XIANG:return xiang();
case Stone::SHI:return shi();
case Stone::BING:return bing();
default:
return false;
}
}
bool board::king()
{
int num = 1;
if(! ((saveSecondPoint.x() == saveFirstPoint.x()+num && saveSecondPoint.y() == saveFirstPoint.y()) ||
(saveSecondPoint.x() == saveFirstPoint.x()-num && saveSecondPoint.y() == saveFirstPoint.y()) ||
(saveSecondPoint.y() == saveFirstPoint.y()+num && saveSecondPoint.x() == saveFirstPoint.x()) ||
(saveSecondPoint.y() == saveFirstPoint.y()-num && saveSecondPoint.x() == saveFirstPoint.x())
))
{
qDebug() << "不在四周!(" << saveFirstPoint.x() << saveFirstPoint.y() << ")(" << saveSecondPoint.x() << saveSecondPoint.y() << ")";
return false;
}
if((saveSecondPoint.x() < 8 || saveSecondPoint.x() > 10) || (saveSecondPoint.y() < 4 || saveSecondPoint.y() > 6))
{
qDebug() << "不在圈内!";
qDebug() << saveSecondPoint.x() << saveSecondPoint.y();
return false;
}
return true;
}
bool board::che()
{
if(saveSecondPoint.x() != saveFirstPoint.x() && saveSecondPoint.y() == saveFirstPoint.y())
{
int i = 1;
for(; i <= 32; i++)
{
if(s[i].dead == true || (s[i].row == saveFirstPoint.x() && s[i].col == saveFirstPoint.y()))
{
没有合适的资源?快使用搜索试试~ 我知道了~
中国象棋游戏的设计与实现基于QT.zip
共38个文件
cpp:15个
h:13个
user:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 193 浏览量
2024-08-14
19:27:04
上传
评论
收藏 45KB ZIP 举报
温馨提示
中国象棋游戏的设计与实现基于QT.zip 个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98
资源推荐
资源详情
资源评论
收起资源包目录
中国象棋游戏的设计与实现基于QT.zip (38个子文件)
中国象棋游戏的设计与实现基于QT
.DS_Store 6KB
client
statusandmenubar.cpp 3KB
login.cpp 5KB
widget.cpp 6KB
network.cpp 3KB
board.cpp 19KB
client.pro.user 22KB
stone.h 385B
chat.h 507B
client.pro.user.3f2350f 22KB
main.cpp 164B
client.pro.user.d08a2a2 22KB
stone.cpp 2KB
board.h 1KB
statusandmenubar.h 838B
client.pro.user.6553117 22KB
network.h 1KB
client.pro 1KB
widget.h 982B
chat.cpp 1KB
login.h 940B
server
widget.ui 1KB
db.h 386B
db.cpp 2KB
widget.cpp 442B
user.cpp 117B
gameaction.cpp 4KB
user.h 275B
loginAndRegister.h 615B
main.cpp 164B
server.pro 1KB
gameaction.h 804B
loginAndRegister.cpp 3KB
server.pro.user 22KB
server.cpp 4KB
server.h 1KB
server.pro.user.6553117 22KB
widget.h 509B
共 38 条
- 1
资源评论
墨痕_777
- 粉丝: 2837
- 资源: 444
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功