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

发布时间:2021-05-25 15:14:20 作者:Leah
来源:亿速云 阅读:262

今天就跟大家聊聊有关使用QT如何实现一个五子棋游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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如何实现一个五子棋游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. 使用python怎么实现五子棋游戏
  2. 使用MATLAB怎么实现一个五子棋游戏

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

qt

上一篇:PHP高并发问题如何解决

下一篇:html+jQuery如何实现拖动滑块图片拼图验证码插件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》