首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

qt 中国象棋源码,界面学习

游戏开发 1.35MB 62 需要积分: 1
立即下载

资源介绍:

qt 中国象棋源码,界面学习,人人对战,网络对战。
# Chinese-Chess 中国象棋初版 实现了单人双方对战、人对战电脑、开两个客户端联机对战 ```cobol 佛曰: * 写字楼里写字间,写字间里程序员; * 程序人员写程序,又拿程序换酒钱。 * 酒醒只在网上坐,酒醉还来网下眠; * 酒醉酒醒日复日,网上网下年复年。 * 但愿老死电脑间,不愿鞠躬老板前; * 奔驰宝马贵者趣,公交自行程序员。 * 别人笑我忒疯癫,我笑自己命太贱; * 不见满街漂亮妹,哪个归得程序员? ``` ## 界面展示 ### 主菜单界面: ![mainMenuWindow](README.assets/image-20230619095939282.png) 主界面部分代码: ```c++ #include "choosemainwindow.h" ChooseMainWindow::ChooseMainWindow(QWidget *parent) : QDialog(parent) { this->setWindowTitle("选择游戏方式"); this->setFixedSize(250,120); this->setWindowIcon(QIcon(":/images/chess.svg")); QVBoxLayout* lay = new QVBoxLayout(this); lay->addWidget(m_buttons[0] = new QPushButton("玩家自己对战")); lay->addWidget(m_buttons[1] = new QPushButton("玩家和AI对战")); lay->addWidget(m_buttons[2] = new QPushButton("双人网络对战")); /*游戏方式一: 自己和自己下棋【同一台PC机器】*/ connect(m_buttons[0], &QPushButton::clicked,[=](){ this->hide(); m_pAgainstYourself = new ChessBoard(); m_pAgainstYourself->setWindowTitle("玩家自己对战"); m_pAgainstYourself->show(); //返回主窗口 connect(m_pAgainstYourself,&ChessBoard::toMenu,[=](){ m_pAgainstYourself->close(); this->show(); }); }); /*游戏方式二: 自己和电脑下棋【同一台PC机器】*/ connect(m_buttons[1], &QPushButton::clicked,[=](){ this->hide(); m_pRobotGame = new RobotGame(); m_pRobotGame->setWindowTitle("玩家和AI对战"); m_pRobotGame->show(); //返回主窗口 connect(m_pRobotGame,&ChessBoard::toMenu,[=](){ m_pRobotGame->close(); this->show(); }); }); /*游戏方式三: 双人局域网下棋【可在局域网下不同台PC机器】*/ connect(m_buttons[2], &QPushButton::clicked,[=](){ this->hide(); QMessageBox::StandardButtons ret = QMessageBox::question(NULL, "提示", "是否作为服务器启动[选择红方]?"); bool bServer = false; if(ret == QMessageBox::Yes) bServer = true; m_pNetworkGame = new NetworkGame(bServer); m_pNetworkGame->setWindowTitle("双人网络对战"); m_pNetworkGame->show(); //返回主窗口 connect(m_pNetworkGame,&ChessBoard::toMenu,[=](){ m_pNetworkGame->close(); this->show(); }); }); } ``` ### 玩家和自己对战界面: ![image-20230619100003047](README.assets/image-20230619100003047.png) 棋盘绘制部分代码: ```c++ void ChessBoard::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true);//渲染提示 int side = qMin(int(ui->centralwidget->width() - ui->rightWidget->width()), ui->label->height()); painter.scale(side / 960.0, side / 960.0); m_offset = 60; //距离界面的边距 m_distance = 90; //间距为90px m_radius = m_distance/2; //棋子半径为d/2 for(int i = 0; i <10; i++){ painter.drawLine(QPoint(m_offset, m_offset+i*m_distance), QPoint(m_offset+8*m_distance, m_offset+i*m_distance)); } for(int i=0; i<9; i++){ if(i==0 || i==8){ painter.drawLine(QPoint(m_offset+i*m_distance, m_offset), QPoint(m_offset+i*m_distance, m_offset+9*m_distance)); }else{ painter.drawLine(QPoint(m_offset+i*m_distance, m_offset), QPoint(m_offset+i*m_distance, m_offset+4*m_distance)); painter.drawLine(QPoint(m_offset+i*m_distance, m_offset+5*m_distance), QPoint(m_offset+i*m_distance, m_offset+9*m_distance)); } } painter.drawLine(QPoint(m_offset+3*m_distance, m_offset), QPoint(m_offset+5*m_distance, m_offset+2*m_distance)); painter.drawLine(QPoint(m_offset+3*m_distance, m_offset+2*m_distance), QPoint(m_offset+5*m_distance, m_offset)); painter.drawLine(QPoint(m_offset+3*m_distance, m_offset+7*m_distance), QPoint(m_offset+5*m_distance, m_offset+9*m_distance)); painter.drawLine(QPoint(m_offset+3*m_distance, m_offset+9*m_distance), QPoint(m_offset+5*m_distance, m_offset+7*m_distance)); QRect rect1(m_offset+m_distance, m_offset+4*m_distance, m_distance, m_distance); QRect rect2(m_offset+2*m_distance, m_offset+4*m_distance, m_distance, m_distance); QRect rect3(m_offset+5*m_distance, m_offset+4*m_distance, m_distance, m_distance); QRect rect4(m_offset+6*m_distance, m_offset+4*m_distance, m_distance, m_distance); painter.setFont(QFont("FangSong", m_radius * 5 / 6, 800)); painter.drawText(rect1, "楚", QTextOption(Qt::AlignCenter)); painter.drawText(rect2, "河", QTextOption(Qt::AlignCenter)); painter.drawText(rect3, "汉", QTextOption(Qt::AlignCenter)); painter.drawText(rect4, "界", QTextOption(Qt::AlignCenter)); //*******************绘画棋子******************* //绘制上次移动棋子的起止位置 if(m_isShowStep) drawLastStep(painter,m_chessSteps); for(int i = 0; i < 32; i++) drawChessPieces(painter, i); //绘制文本棋谱 drawTextStep(); } ``` ### 玩家和AI对战界面: ![玩家和AI对战界面](README.assets/image-20230619100204533.png) 其实并不算是真正的AI,算法实现的是只要有可以吃到的子,就会直接吃掉,有多个可以吃掉的子,会计算各个棋子的得分,没有就随便走一步。 部分实现代码: ```c++ ChessStep *RobotGame::getBestMove() { int maxScore = -10000; ChessStep* retStep = NULL; //有可击杀的红棋子就走击杀红棋子最优的一步 // 1.看看有那些步骤可以走 QVector steps; getAllPossibleMoveStep(steps); //没有可击杀的红棋子就走最后的一步 QVector stepsAndNoKill; getAllPossibleMoveStepAndNoKill(stepsAndNoKill); //2.试着走一下 for(QVector::iterator it = steps.begin(); it!=steps.end(); it++) { ChessStep* step = *it; fakeMove(step); int score = calcScore(); //3.计算最好的局面分 unFakeMove(step); if(score > maxScore) { maxScore = score; retStep = step; } } if(retStep != NULL) return retStep; //2.试着走一下 //从这种不击杀红棋子,只是单纯移动黑棋steps里面,随机抽选一种进行下棋 int nStepsCount = stepsAndNoKill.count(); qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); int temp =qrand()% nStepsCount; QVector::iterator it = stepsAndNoKill.begin(); retStep = it[temp]; if(retStep == NULL) whoWin(); return retStep; } int RobotGame::calcScore() { //enum m_emTYPE{JIANG, SHI, XIANG, MA, CHE, PAO, BING}; //黑棋分数 - 红棋分数 int redGrossScore = 0; int blackGrossScore = 0; static int chessScore[]={200, 20, 40, 60, 100, 80, 10}; for(int i=0; i<16; i++) { if(m_chessPieces[i].m_isDead) continue; blackGrossScore += chessScore[m_chessPieces[i].m_emType]; } for(int i=16; i<32; i++) { if(m_chessPieces[i].m_isDead) continue; redGrossScore += chessScore[m_chessPieces[i].m_emType]; } return (blackGrossScore - redGrossScore); } void RobotGame::getAllPossibleMoveStep(QVector &steps) { for(int id = 0; id<16; id++){ if(m_chessPieces[id].m_isDead) continue; for(int row=0; row<10; row++){

资源文件列表:

chinesechess.zip 大约有45个文件
  1. Chinese-Chess-main/
  2. Chinese-Chess-main/.gitignore 126B
  3. Chinese-Chess-main/ChineseChese.pro 1.33KB
  4. Chinese-Chess-main/LICENSE 11.09KB
  5. Chinese-Chess-main/README.assets/
  6. Chinese-Chess-main/README.assets/image-20230619095939282.png 5.92KB
  7. Chinese-Chess-main/README.assets/image-20230619100003047.png 91.15KB
  8. Chinese-Chess-main/README.assets/image-20230619100204533.png 95.53KB
  9. Chinese-Chess-main/README.assets/image-20230619101154459.png 9.06KB
  10. Chinese-Chess-main/README.assets/image-20230619101557179.png 93.11KB
  11. Chinese-Chess-main/README.md 11.25KB
  12. Chinese-Chess-main/chessboard.cpp 18.39KB
  13. Chinese-Chess-main/chessboard.h 4.18KB
  14. Chinese-Chess-main/chessboard.ui 5.86KB
  15. Chinese-Chess-main/chesspieces.cpp 3.05KB
  16. Chinese-Chess-main/chesspieces.h 761B
  17. Chinese-Chess-main/chesssound.cpp 667B
  18. Chinese-Chess-main/chesssound.h 861B
  19. Chinese-Chess-main/chessstep.cpp 85B
  20. Chinese-Chess-main/chessstep.h 450B
  21. Chinese-Chess-main/choosemainwindow.cpp 2.08KB
  22. Chinese-Chess-main/choosemainwindow.h 496B
  23. Chinese-Chess-main/images/
  24. Chinese-Chess-main/images/5abc.png 393.3KB
  25. Chinese-Chess-main/images/b.jpg 195.45KB
  26. Chinese-Chess-main/images/background.jpg 298.17KB
  27. Chinese-Chess-main/images/chess.svg 15.22KB
  28. Chinese-Chess-main/images/win.jpg 1.81KB
  29. Chinese-Chess-main/images/winwin.png 4.18KB
  30. Chinese-Chess-main/main.cpp 857B
  31. Chinese-Chess-main/mainmenuwindow.cpp 245B
  32. Chinese-Chess-main/mainmenuwindow.h 347B
  33. Chinese-Chess-main/mainmenuwindow.ui 403B
  34. Chinese-Chess-main/networkgame.cpp 1.7KB
  35. Chinese-Chess-main/networkgame.h 433B
  36. Chinese-Chess-main/resources.qrc 533B
  37. Chinese-Chess-main/robotgame.cpp 6.65KB
  38. Chinese-Chess-main/robotgame.h 774B
  39. Chinese-Chess-main/sound/
  40. Chinese-Chess-main/sound/WinSound.wav 198.01KB
  41. Chinese-Chess-main/sound/backChess.wav 12.34KB
  42. Chinese-Chess-main/sound/eatChess.wav 33.18KB
  43. Chinese-Chess-main/sound/generalSound.wav 42.38KB
  44. Chinese-Chess-main/sound/moveChess.wav 26.03KB
  45. Chinese-Chess-main/sound/selectChess.wav 15.22KB
0评论
提交 加载更多评论
其他资源 拓展之crash-gcore ,github源码
拓展crash-gcore,csdn源码
最简单的基于GO的文件服务器
最简单的基于GO的文件服务器
(解压密码1234) C#混淆加密大师1.2.0最新版
资源解压密码1234, C#混淆加密大师是一款专为保护C#开发的DLL和EXE文件而设计的强大工具,适用于各种应用程序,包括Winform、WPF、Unity游戏以及控制台程序。该工具支持从.Net Framework 2.0到.Net Framework 4.x,以及.NET Core 2.0至最新的.NET 8版本。C#混淆加密大师不仅提供代码加密和混淆功能,还能对EXE文件进行加壳处理,增强防篡改能力,并注入无用数据,从而有效保护您的C#程序代码,防止非法复制或篡改,确保您的知识产权得到充分保障。通过使用C#混淆加密大师,可以大幅提升应用程序的安全性和可靠性,确保您的软件在各种环境中都能安全运行。无论是企业级应用还是个人项目,C#混淆加密大师都是您保护C#代码的理想选择。
很好的MCJAVA版启动器-HMCL与PCL
网上的介绍已经够了,还是下载下来试试吧
linux 安装protobuf资源包
linux 安装protobuf资源包
c++基于链表的图书信息管理系统.zip
设计一个图书信息管理系统,要求完成以下功能: (1)图书信息包含书号、书名、出版社、价格四个部分 (2)图书信息用文件存储。 (3)可以增加新图书。 (4)可以修改某个图书信息(书号不能改)。 (5)可以删除某些图书信息(分别按书号和书名进行删除)。 (6)可以按书号或书名进行精确查找(按书名查找时,如果有多本图书,则全部查找出来,并输出其查找长度)。 (7)可以按价格范围进行查找(结果按价格降序输出)。 (8)查找某个作者出版的所有图书信息,按价格升序输出。 (9)可以按书名进行模糊查找。 (10)输出所有图书信息。 a)按出版社输出所有图书,同一出版社的图书按作者输出。 b)按作者输出所有图书,同一作者的图书按价格升序输出。 (11)统计。 a) 统计每个出版社出版的图书总数,按图书总数升序输出。 b) 统计每个作者出版的图书总数,按图书总数降序输出。
fyfyfyfyfyfyfyfyfyfyfyfy
fyfyfyfyfyfyfyfyfyfyfyfy
火热!!cfa三级2025最新notes免费下载
最新出的notes!免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费免费