QT如何实现一个五子棋游戏

2023-05-16

FIR.pro

 
QT       += core gui
 
TARGET = FIR
TEMPLATE = app
 
 
SOURCES += main.cpp\
        widget.cpp
HEADERS  += widget.h

wight.h

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QtGui>
 
class Widget : public QWidget
{
    Q_OBJECT
private:
    int a[15][15];
    int player;
 
    bool isWin(int, int);
    bool f1(int, int);
    bool f2(int, int);
    bool f3(int, int);
    bool f4(int, int);
 
public:
    Widget(QWidget *parent = 0);
    ~Widget();
 
    void paintEvent(QPaintEvent *);
    void mousePressEvent(QMouseEvent * e);
};
 
#endif // WIDGET_H
 
/****************************************/

widget.cpp

#include "widget.h"
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    resize(640, 640);
    player = 0;
    memset(a, 0, 15 * 15 * sizeof(int));
}
 
Widget::~Widget()
{
   
}
 
  //画方格:
 
void Widget::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    int i , j ;
 
    for(i = 0; i < 16; i++)
    {
        p.drawLine(20, 20 + i * 40, 620, 20 + i * 40);
        p.drawLine(20 + i * 40, 20, 20 + i * 40, 620);
    }
 
    int m = 5;
    int n = 0;
    while(1)
    {
                QBrush brush(Qt::SolidPattern);
                brush.setColor(Qt::blue);
                p.setBrush(brush);
           //     p.drawRect((i+1)*20,(j+1)*20,80,80);//zheng fang xing
            //    p.drawRect((i+1)*20,(j+1)*20,40,160);//chang fang xing
                p.drawRect((m+1)*20,(n+1)*20,80,40);
                p.drawRect((m+3)*20,(n+3)*20,80,40);
 
                //p.drawRect();
                //p.drawEllipse(QPoint((i + 1) * 40, (j + 1) * 40), 15, 15);
    }
 
}
 
 
 
//鼠标响应:
 
void Widget::mousePressEvent(QMouseEvent * e)
{
    /*
    setWindowTitle(QString::number(e->x()) +
                   " " +
                   QString::number(e->y()));
                   */
    int x, y;
    if(e->x() >= 20 && e->x() < 620 && e->y() >= 20 && e->y() < 620)
    {
        x = (e->x() - 20) / 40;
        y = (e->y() - 20) / 40;
        if (!a[x][y])
        {
            a[x][y] = player++ % 2 + 1;
        }
        if(isWin(x, y))
        {
            update();
            setEnabled(false);
        }
    }
    update();
}
 
 
 
//判断输赢:
bool Widget::isWin(int x, int y)
{
    return f1(x, y) || f2(x, y) || f3(x, y) || f4(x ,y);
}
 
 
 
//判断四个边界:
bool Widget::f1(int x, int y)
{
    int i;
    for (i = 0; i < 5; i++)
    {
        if(y - i >= 0 &&
           y + 4 - i <= 0xF &&
           a[x][y - i] == a[x][y + 1 - i] &&
           a[x][y - i] == a[x][y + 2 - i] &&
           a[x][y - i] == a[x][y + 3 - i] &&
           a[x][y - i] == a[x][y + 4 - i])
           return true;
    }
    return false;
}
 
bool Widget::f2(int x, int y)
{
    int i;
    for (i = 0; i < 5; i++)
    {
        if(x - i >= 0 &&
           x + 4 - i <= 0xF &&
           a[x - i][y] == a[x + 1 - i][y] &&
           a[x - i][y] == a[x + 2 - i][y] &&
           a[x - i][y] == a[x + 3 - i][y] &&
           a[x - i][y] == a[x + 4 - i][y])
           return true;
    }
    return false;
}
 
bool Widget::f3(int x, int y)
{
    int i;
    for (i = 0; i < 5; i++)
    {
        if(x - i >= 0 &&
           y - i >= 0 &&
           x + 4 - i <= 0xF &&
           y + 4 - i <= 0xF &&
           a[x - i][y - i] == a[x + 1 - i][y + 1 - i] &&
           a[x - i][y - i] == a[x + 2 - i][y + 2 - i] &&
           a[x - i][y - i] == a[x + 3 - i][y + 3 - i] &&
           a[x - i][y - i] == a[x + 4 - i][y + 4 - i])
           return true;
    }
    return false;
}
 
bool Widget::f4(int x, int y)
{
    int i;
    for (i = 0; i < 5; i++)
    {
        if(x + i <= 0xF &&
           y - i >= 0 &&
           x - 4 + i >= 0 &&
           y + 4 - i <= 0xF &&
           a[x + i][y - i] == a[x - 1 + i][y + 1 - i] &&
           a[x + i][y - i] == a[x - 2 + i][y + 2 - i] &&
           a[x + i][y - i] == a[x - 3 + i][y + 3 - i] &&
           a[x + i][y - i] == a[x - 4 + i][y + 4 - i])
           return true;
    }
    return false;
}

main.cpp

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

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT如何实现一个五子棋游戏 的相关文章

  • NMEA-0813协议报文解析(QT/C++)

    文章目录 一 协议说明 二 具体实现 1 GNRMC 2 GNGGA 总结 一 协议说明 34 GN 34 联合模式协议头 xff1b 34 GP 34 GPS模式协议头 xff1b 34 GL 34 GLONASS模式协议头 xff1b
  • 寄存器位设置

    作为嵌入式工程师 xff0c 一定要掌握寄存器的控制 xff0c 想要了解基本的寄存器控制 xff0c 最简单的方法就是使用单片机练手 xff0c 51 xff0c stm0 xff0c stm8 xff0c MSP430等 xff0c 与
  • STM32 —— STM32 的串口通信

    STM32 STM32 的串口通信 STM32的串口通信接口有两种 xff0c 分别是 xff1a UART 通用异步收发器 USART 通用同步异步收发器 而对于大容量 STM32F10x 系列芯片 xff0c 分别有 3 个 USART
  • STM32 —— 串口数据接收

    STM32 串口接收数据 我们已经在前面的博客中讲过了串口通信中发送数据和中断的一些基本原理 xff0c 这里主要介绍串口接收数据的相关内容 定长字符串的接收 当接收单字节时 xff0c 我们就可以使用最简单的接收方式即可 xff0c 这种
  • 远距离WiFi模块,无人机传输技术,无线通信视频传输技术

    随着科技的发展 xff0c 无人机应用范围的不断扩展且愈加广泛 无人机的起飞 xff0c 航行 xff0c 悬停 xff0c 返回的任何一个阶段 xff0c 都需要进行无线遥控 xff0c 这就需要很高的灵敏度了 同时在无人机飞行的过程中
  • OpenMV:14巡线小车

    文章目录 追小球的小车巡线小车 这个例子展示了在OpenMV Cam上使用get regression xff08 xff09 方法获得ROI的线性回归 使用这种方法 xff0c 可以轻松让机器人跟踪所有指向相同大致方向的线 本例程可以用于
  • OpenMV:16神经网络

    文章目录 导论利用神经网络进行特征识别 已停用 神经网络检测函数检测函数 96 tf classify 96 返回值加载神经网络函数 96 tf load 返回值 96 例程1 图像中央人检测例程2 整幅图像人脸检测 导论 OpenMV内置
  • OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别

    文章目录 1 采集2 连接3 训练复制API KEY上传照片模型创建生成神经网络训练神经网络测试神经网络备份保存 4 下载代码分析 注意 xff1a 只有 OpenMV4 Plus可以自己训练神经网络 xff0c 其他版本的性能不够 本节讲
  • OpenMV:21控制多个舵机(需要模块PCA9685)

    文章目录 连接代码控制单个舵机的旋转pc8596 pyservo pymain py利用两个舵机拓展板控制16个舵机 今天我们来学习下 OpenMV的舵机拓展板来控制多个舵机同时使用 如果我们想控制三个以上的舵机 xff0c 就需要用到舵机
  • OpenMV:22电机扩展板控制直流电机

    文章目录 电机拓展板产品介绍代码 今天为大家讲解下 OpenMV配套的电机扩展板 我们需要自己焊接插针 在使用电机扩展板时 xff0c 我们的电机扩展板需要外接一个6V 12V的电源 xff0c 来为电机供电 xff1b 电机扩展板同时会使
  • OpenMV:23串口发送数据

    文章目录 产品Hello World简单的数据发送 本节讲解 如何使用OpenMV通过串口来发送数据 OpenMV 是可以直接通过串口发送字符串的 为什么要用串口呢 xff1f 因为要时候需要把信息传给其他MCU xff08 单片机 xff
  • HTTP AUTH验证

    何为http auth http auth是一种基础的用户验证 xff0c 原理是将用户名 密码base64加密后放在http的请求头部Authorization 发给服务器 浏览器的做法 当你访问一个需要http auth验证的资源时 x
  • OpenMV与Arduino通信—串口

    文章目录 96 Arduino 96 的串口函数接收函数 96 Serial read 96 检测串口 96 Serial available 96 串口通信例程 96 OpenMV 96 代码 96 Arduino 96 代码 所有要进行
  • OpenCV:08图像金字塔

    目录 图像金字塔图像金字塔介绍高斯金字塔 xff08 Gaussian pyramid xff09 向下采样向上采样 拉普拉斯金字塔 图像直方图图像直方图的基本概念直方图术语使用 96 OpenCV 96 统计直方图使用 96 OpenCV
  • OpenCV:09车辆统计项目

    车辆统计项目 涉及到的内容大体流程知识补充背景减除 具体流程视频加载去除背景形态学识别车辆对车辆进行统计显示车辆统计信息 效果图 xff1a 涉及到的内容 窗口的展示图像 视频的加载基本图像的绘制 车辆识别 基本图像运算与处理形态学轮廓查找
  • OpenCV:10特征检测

    特征检测的基本概念 特征检测是计算机视觉和图像处理中的一个概念 它是指使用计算机提取图像信息 xff0c 决定每个图像的点是否属于一个图像特征 特征检测的结果是把图像上的点分为不同的子集 xff0c 这些子集往往属于孤立的点 连续的曲线或者
  • Android-自定义圆形ProgressBar加载

    帮朋友做个圆形加载进度条 xff0c 后来发现做的挺简单的 xff0c 大佬一个比一个厉害 介绍一下 xff1a 1 自定义View属性 2 View 的测量 3 计算绘制 View 所需参数 4 圆弧的绘制及渐变的实现 5 文字的绘制 效
  • VINS-MONO的安装与运行

    1 安装ros 网上大量教程 2 安装ceres 1 14 0版本 源码安装 xff0c 有依赖 xff09 安装mkdir build cd build cmake make sudo make install xff08 亲测2 0版本
  • STM32F1--FreeRTOS系统学习(二):任务创建与删除(动态)

    以下内容皆是个人学习过程中的总结 xff0c 记录一下整个过程 xff0c 用于后期复习 xff0c 如有不对之处 xff0c 麻烦各位大佬指出 xff08 喜欢的朋友麻烦点个关注 后期还会进行持续更新 xff09 在FreeRTOS 中应
  • ::在c++中含义

    34 34 在C 43 43 中表示作用域 xff0c 和所属关系 34 34 是运算符中等级最高的 xff0c 它分为三种 xff0c 分别如下 xff1a 一 作用域符号 xff1a 作用域符号 的前面一般是类名称 xff0c 后面一般

随机推荐

  • Keil4打开单片机工程一片空白,cpu100%程序卡死的问题解决

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言 xff1a 问题描述一 原因二 解决办法1 问题图片2 解决办法 xff1a 删除部分文件 总结 前言 xff1a 问题描
  • CAN协议扩展帧ID

    例如 ID xff1a 0x18102701 扩展帧ID共29位 准换为二进制0001 1000 0001 0000 0010 0111 0000 0001 29位110代表优先级十进制6 xff0c PF十进制16 xff08 16进制0
  • STM32的USART中RTS、CTS的作用和意义

    USART中RX和TX这两个引脚的功能 xff0c 这两个引脚是USART串行通信最常见和必不可少的两个引脚 但我们在手册中会发现关于USART的其他引脚 xff1a USART CK USART RTS USART CTS xff0c 如
  • 步骤一:Jetson Nano安装ROS步骤,及相关错误分析

    安装系统为 xff1a ubantu 18 04 ros melodic 硬件 xff1a jetson nano b01 xff0c 联想拯救者r7000p 内存卡 xff1a SAMSUNG 128G 最后一次更新2022 10 5 亲
  • 步骤三:PX4,Mavros的下载安装及代码测试

    1 安装Mavros sudo apt install ros melodic mavros ros melodic mavros extras 2 安装Mavros相关的 geographiclib dataset 此处已经加了ghpro
  • 步骤五:PIXHAWK遥控器的使用

    采用福斯i6s遥控 1 连接飞控 打开遥控器 xff0c 接收机插上飞控 xff0c 再插上送的短接线 xff0c 进行匹配对码RX 2 遥控器长按两秒锁 xff0c system output mode Output mode按照图片这样
  • 步骤七:激光雷达的驱动安装与建图使用

    大致的步骤可以按照官网来 nbsp Cartographer SLAM for Non GPS Navigation Dev documentation ardupilot org 但是官网的步骤有严重的问题 问题1 报错 libabsl
  • 步骤八:PX4使用cartographer与move_base进行自主建图导航

    首先老样子硬件如下 飞控 HOLYBRO PIXHAWK V4 PX4 机载电脑 jetson nano b01 激光雷达 思岚a2 前提 你已经完成了cartographer建图部分 能够正常输出map话题 前言 由于要参加中国机器人大赛
  • 最详细的流媒体传输协议-rtsp协议详解

    流媒体传输协议 rtsp协议详解 参阅 RTSP协议详解和分析从零开始写一个RTSP服务器 xff08 一 xff09 RTSP协议讲解关于RTSP RTP RTCP协议的深刻初步介绍 rtsp RTSP出现以前 xff0c 最热的大概就是
  • 利用FFmpeg合并音频和视频

    一 FFmpeg 多个音频合并的2种方法 多个mp3文件合并成一个mp3文件 一种方法是连接到一起 ffmpeg64 exe i 34 concat 123 mp3 124 mp3 34 acodec copy output mp3 解释
  • 流媒体服务器之 ZLMediaKit介绍

    流媒体服务器是流媒体应用的核心系统 xff0c 是运营商向用户提供视频服务的关键平台 流媒体服务器的主要功能是对流媒体内容进行采集 缓存 调度和传输播放 流媒体应用系统的主要性能体现都取决于媒体服务器的性能和服务质量 因此 xff0c 流媒
  • WebRTC 教程三:WebRTC特性,调试方法以及相关服务器搭建方法

    WebRTC 教程一 xff1a WebRTC信令 架构和 API 入门 WebRTC 教程二 xff1a WebRTC API 和 Leak 本文是 WebRTC 的第三篇教程 xff0c 主要介绍了 WebRTC 的一些特性 xff0c
  • 能不能在头文件中定义全局变量?

    首先 xff0c 这是一篇科普文 xff0c 所以 比较杂 xff0c 我尽量写清楚一些 1 ANSI C标准是什么 xff1f GNU又是什么 xff1f ld是什么 xff1f ANSI C是C语言的标准规范 xff0c 是国际标准化组
  • FFmpeg转码流程详解

    前言 音视频转码主要指这样的概念 xff1a 容器格式的转换 xff0c 比如MP4转换为MOV 容器中音视频数据编码方式转换 xff0c 比如H264编码转换成MPEG4编码 xff0c MP3换为AAC 音视频码率的转换 xff0c 比
  • FFmpeg 代码实现流媒体推流(RTSP)

    实时录屏并把视频推流到RTSP服务器 xff0c 具体流程是抓取屏幕内容 bitmap xff0c 并把bitmap转化为YUV xff0c 接着把YUV编码成H264 xff0c 再把H264码流推到RTSP服务器 xff1b 把采集到的
  • rtsp协议的理解

    一 rtsp协议概述 RTSP xff08 Real Time Streaming Protocol xff09 实时流传输协议 xff0c 是TCP IP协议体系中的一个应用层协议 该协议定义了一对多的应用程序如何有效地通过IP网络传送多
  • QT 程序打包的方法

    01前言 很多朋友因为要把程序放到不同电脑的环境去测试 xff0c 而又不可能每一台电脑都安装了QT的开发环境 xff0c 于是乎有了将程序打包的想法 这里用来的包的工具是windeployqt xff0c 是QT官方自带的打包软件 xff
  • C++Qt开发——事件处理函数

    事件 event 是由系统或者Qt本身在不同时刻发出的 当用户按下鼠标 敲下键盘 xff0c 或者其它情况时候都会发出一个相应的事件 一些事件在对用户操作做出相应时发出 xff0c 如键盘事件等 xff1b 另外一些则是由系统自动发出 xf
  • C++Qt开发——类图结构

    Qt 类图 系统性地总结一下相关的知识点 xff0c 这里有个网图 xff0c 是Qt的类图 xff0c 看完可以对Qt整体的框架有一个大致的了解 xff0c 具体如下 CSDN QT大纲 xff1a Qt开发必备技术栈学习路线和资料 Qt
  • QT如何实现一个五子棋游戏

    FIR pro QT 43 61 core gui TARGET 61 FIR TEMPLATE 61 app SOURCES 43 61 main cpp widget cpp HEADERS 43 61 widget h wight h