QT实现简单五子棋游戏

 更新时间:2021年05月25日 11:09:07   作者:影帝sunny  
这篇文章主要为大家详细介绍了QT实现简单五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了QT实现简单五子棋游戏的具体代码,供大家参考,具体内容如下

FIR.pro

#-------------------------------------------------
#
# Project created by QtCreator 2012-09-01T15:09:11
#
#-------------------------------------------------
 
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();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于C++实现俄罗斯方块游戏的示例代码

    基于C++实现俄罗斯方块游戏的示例代码

    俄罗斯方块(Tetris)是一款风靡全球的经典益智游戏,自1984年首次发布以来,便吸引了无数玩家,在这篇博文中,我们将深入探讨如何用 C++ 编写一个简单的俄罗斯方块游戏,我们将从游戏的基本概念和设计入手,逐步实现游戏的各个功能模块,感兴趣小伙伴快来看看吧
    2024-11-11
  • C语言压缩文件和用MD5算法校验文件完整性的实例教程

    C语言压缩文件和用MD5算法校验文件完整性的实例教程

    这篇文章主要介绍了C语言压缩文件和用MD5算法校验文件完整性的实例教程,这里演示了Windows下将文件压缩为7z格式以及MD5检验文件和密码的方法,需要的朋友可以参考下
    2016-04-04
  • C语言编程内存分配通讯录静态实现示例代码教程

    C语言编程内存分配通讯录静态实现示例代码教程

    这篇文章主要为大家介绍了C语言编程实现静态的通讯录示例代码教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-10-10
  • C++简明图解分析静态成员与单例设计模式

    C++简明图解分析静态成员与单例设计模式

    与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员,静态成员函数没有this指针。既然它没有指向某一对象,也就无法对一个对象中的非静态成员进行默认访问
    2022-06-06
  • Qt5+QMediaPlayer实现音乐播放器的示例代码

    Qt5+QMediaPlayer实现音乐播放器的示例代码

    这篇文章主要为大家详细介绍了如何利用Qt5和QMediaPlayer实现简易的音乐播放器,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-12-12
  • 使用C语言中的time函数获取系统时间

    使用C语言中的time函数获取系统时间

    在C语言中可以使用time函数来获取系统时间,以下对time函数进行了介绍,需要的朋友可以过来参考下
    2013-07-07
  • VC++操作SQLite简单实例

    VC++操作SQLite简单实例

    这篇文章主要介绍了VC++操作SQLite,很实用的功能,需要的朋友可以参考下
    2014-07-07
  • C语言实现打砖块游戏

    C语言实现打砖块游戏

    这篇文章主要为大家详细介绍了C语言实现打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C++中的类成员函数当线程函数

    C++中的类成员函数当线程函数

    这篇文章主要介绍了C++中的类成员函数当线程函数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 用C语言实现通讯录

    用C语言实现通讯录

    这篇文章主要为大家详细介绍了用C语言实现通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论