看了一点qt,尝试自己写了一下简单的五子棋

使用了mousePressEvent和paintEvent两个事件

实现界面:

文件结构:

widget.h文件代码:

#ifndef WIDGET_H
#define WIDGET_H
#include<QPaintEvent>
#include <QWidget>
#include<QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);void mousePressEvent(QMouseEvent *ev);void paintEvent(QPaintEvent *event);int  status[25][25];QPoint blackp[313];QPoint whitep[313];int blacknumber;int whitenumber;QPoint p1;QVector<QPointF>::iterator iter1;bool who;~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H

main.cpp文件代码:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.blacknumber=0;w.whitenumber=0;w.show();return a.exec();
}

widget.cpp文件代码:

#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
#include<QDebug>
#include<QDialog>
#include<QMessageBox>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{for (int i=0;i<25;i++) {for (int j=0;j<25;j++){status[i][j]=0;}}ui->setupUi(this);who=0;}Widget::~Widget()
{delete ui;
}
void Widget::paintEvent(QPaintEvent *event){QPainter painter(this);QBrush black(Qt::black);QBrush white(Qt::white);for(int i=0;i<20;i++){for (int j=0;j<20;j++) {painter.drawRect(60+j*25,60+i*25,25,25);}}int xleft,xpole,exchange;exchange=9999999;xpole=0;for (int i=0;i<21;i++) {xleft=abs(p1.x()-(60+i*25));if(xleft<exchange){xpole=i;int tem;tem=xleft;xleft=exchange;exchange=tem;}}int yleft,ypole,exchangey;exchangey=9999999;ypole=0;for (int i=0;i<21;i++) {yleft=abs(p1.y()-(60+i*25));if(yleft<exchangey){ypole=i;int tem;tem=yleft;yleft=exchangey;exchangey=tem;}}if(p1.x()<575&&p1.x()>45&&p1.y()<575&&p1.y()>45&&!status[xpole][ypole]){p1.setX(60+xpole*25);p1.setY(60+ypole*25);if(who==1){//黑棋子判断blackp[blacknumber++]=p1;for (int i=0;i<blacknumber;i++) {painter.setBrush(black);painter.drawEllipse(blackp[i].x()-10,blackp[i].y()-10,20,20);}for (int i=0;i<whitenumber;i++){painter.setBrush(white);painter.drawEllipse(whitep[i].x()-10,whitep[i].y()-10,20,20);}who=0;status[xpole][ypole]=1;int numx=1;int numy=1;int nump=1;for(int i=0;i<4;i++){if(status[xpole-i-1][ypole]==1&&status[xpole-i][ypole]==1)numx++;if(status[xpole+i+1][ypole]==1&&status[xpole+i][ypole]==1)numx++;if(status[xpole][ypole-i-1]==1&&status[xpole][ypole-i]==1)numy++;if(status[xpole][ypole+i+1]==1&&status[xpole][ypole+i]==1)numy++;if(status[xpole-i-1][ypole-i-1]==1&&status[xpole-i][ypole-i]==1)nump++;if(status[xpole+i+1][ypole+i+1]==1&&status[xpole+i][ypole+i]==1)nump++;if(numx>=5||numy>=5||nump>=5){qDebug()<<"黑方胜利";QMessageBox *dia=new QMessageBox(this);dia->setWindowTitle(QString("游戏结束"));dia->setText(QString("黑方胜利"));dia->show();}}}elseif(who==0){//白棋子判断whitep[whitenumber++]=p1;for (int i=0;i<whitenumber;i++){painter.setBrush(white);painter.drawEllipse(whitep[i].x()-10,whitep[i].y()-10,20,20);}for (int i=0;i<blacknumber;i++) {painter.setBrush(black);painter.drawEllipse(blackp[i].x()-10,blackp[i].y()-10,20,20);}who=1;status[xpole][ypole]=2;int numx=1;int numy=1;int nump=1;for(int i=0;i<4;i++){if(status[xpole-i-1][ypole]==2&&status[xpole-i][ypole]==2)numx++;if(status[xpole+i+1][ypole]==2&&status[xpole+i][ypole]==2)numx++;if(status[xpole][ypole-i-1]==2&&status[xpole][ypole-i]==2)numy++;if(status[xpole][ypole+i+1]==2&&status[xpole][ypole+i]==2)numy++;if(status[xpole-i-1][ypole-i-1]==2&&status[xpole-i][ypole-i]==2)nump++;if(status[xpole+i+1][ypole+i+1]==2&&status[xpole+i][ypole+i]==2)nump++;if(numx>=5||numy>=5||nump>=5){qDebug()<<"白方胜利";QMessageBox *dia=new QMessageBox(this);dia->setWindowTitle(QString("游戏结束"));dia->setText(QString("白方胜利"));dia->show();}}}}else{for (int i=0;i<whitenumber;i++){painter.setBrush(white);painter.drawEllipse(whitep[i].x()-10,whitep[i].y()-10,20,20);}for (int i=0;i<blacknumber;i++) {painter.setBrush(black);painter.drawEllipse(blackp[i].x()-10,blackp[i].y()-10,20,20);}}}
void Widget::mousePressEvent(QMouseEvent *ev){int x= ev->x();int y= ev->y();const  QString x0=QString::number(x);const  QString y0=QString::number(y);p1=ev->pos();update();}

因为一直是自己着玩的,中间很多冗余都没及时删除,也没怎么写注释

有什么问题欢迎评论区讨论~

QT 简单五子棋实现相关推荐

  1. 第18篇 Qt实现简单五子棋游戏(二)算法说明

    第18篇 Qt实现简单五子棋游戏(二)算法说明 5.算法说明 5.1.画棋盘: void drawChessboard(); 5.2.画棋子:void drawChess(); 5.3.鼠标点击响应: ...

  2. 编写五子棋的完整python代码_python制作简单五子棋游戏

    本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 #五子棋 '" 矩阵做棋盘 16*16 "+" 打印棋盘 for for 游戏是否结束 开 ...

  3. python写游戏棋牌游戏_使用python实现简单五子棋游戏

    使用python实现简单五子棋游戏 发布时间:2020-08-29 06:12:30 来源:脚本之家 阅读:73 作者:weixin_42874933 用python实现五子棋简单人机模式的练习过程, ...

  4. canvas简单五子棋

    canvas简单五子棋 效果 思路 代码 效果 思路 canvans 绘制棋盘,绘制时候边缘预留棋子位置 监听点击事件绘制落子并记录到字典中 获胜判定,在四个方向上检测是否有足够数量的连贯棋子 代码 ...

  5. 简单五子棋(单机版-C)

    简单五子棋(单机版-C) 一个简单的五子棋过程. 之实现了开局和判断胜负.缺少载入棋谱,保存棋谱. #include <stdio.h> //图形输出棋盘 printGraphicBoar ...

  6. python简单网格五子棋_python实现简单五子棋游戏

    本文实例为大家分享了python实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 from graphics import * from math import * import numpy a ...

  7. 使用java实现简单五子棋

    用java实现一个简单五子棋 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Ar ...

  8. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

    原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...

  9. QT简单入门程序——实现可修改用户信息界面

    QT简单入门程序 一.先行准备 二.新建项目 三.添加文件 四.编辑代码 1.基本信息窗口类 2.详细资料窗口类 3.联系信息窗口类 4.导航界面 5.main函数 五.CTRL+R运行 六.额外知识 ...

最新文章

  1. android 滑动模糊渐变,Android UI效果实现 滑动模糊渐变效果实现
  2. 关于修改session的生存时间以及回收机制
  3. OutOfMemoryError: GC Overhead Limit Exceeded错误处理
  4. 欢迎来到我的第一个个人laravel尝试论坛项目,给予评价和建议 谢谢。
  5. 40幅五彩缤纷的秋天风景摄影作品欣赏(上篇)
  6. 一建机电实务教材电子版_20年一建其实并不难,官方出版:复习题集(精修),速做速提90分...
  7. 资源放送丨《Oracle中为什么没有Double Write?Oracle支持原子写吗?》PPT视频
  8. 奈飞文化手册_奈飞文化手册,如何塑造企业文化
  9. 树展示 移动端_企业快速搭建移动BI轻应用,怎么少得了这款BI工具
  10. 2006-8-11 11:29:00 搜索算法及其在ACM竞赛中的应用(作者/刘力科 计算机系01级4班)...
  11. [luoguP1373] 小a和uim之大逃离(DP)
  12. 取消idm下载器和google浏览器的关联(让谷歌浏览器禁止使用idm插件)
  13. 机器学习如何帮助Caesars大涨邮件绩效
  14. 计算机设备管理cmd命令,打开设备管理器的命令,教你一分钟学会最简单
  15. 汉语是世界上唯一一种面向对象的高级语言【转】
  16. 使用shell脚本写出乘法
  17. 截图工具(窗体永远前置)
  18. 「鹿班智能设计平台」是如何工作的
  19. 'dict' object has no attribute '_txn_read_preference' Sort exceeded memory limit of 10485760
  20. 分享一些Python导图与速查表

热门文章

  1. android集成sdk 马甲包,Android 马甲包制作流程
  2. 谈谈双活业务中心和异地容灾备份设计
  3. 阿里云-视频点播服务API调用
  4. Python批量处理lrmx格式文档内指定内容
  5. matlab平稳性检验
  6. 【笔记本加配置记录】笔记本加内存条,华硕拆后盖
  7. 微信小程序-slot插槽
  8. iPhone 设备目录结构
  9. 汽车电瓶电压12V验证
  10. carsim转向扭矩控制-开环控制设置