井字棋游戏:任意一方先走,占据一个格子,只要某一方先在井字中画成一条直线就算赢。
首先在Qt Creator 中创建我们需要的项目,代码如下
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class QGridLayout;
class QLabel;
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//初始化界面布局
void initUi();
//重写事件过滤器
bool eventFilter(QObject *, QEvent *);
//计算
bool calculate(QList<int>,int);
//判断是否已经选择
inline bool isSelected(int);
private:
//网格布局
QGridLayout* gridLayout;
//声明9个格子
QLabel* label1;
QLabel* label2;
QLabel* label3;
QLabel* label4;
QLabel* label5;
QLabel* label6;
QLabel* label7;
QLabel* label8;
QLabel* label9;
//接收选中的数字
int num;
//判断是红方还是蓝方(自增,奇数为红,偶数为蓝)
int isRed;
//保存红方选中的数字列表
QList<int> redList;
//保存蓝方选中的数字列表
QList<int> blueList;
};
#endif // WIDGET_H
widget.cpp 文件
#include "widget.h"
#include <QLabel>
#include <QGridLayout>
#include <QEvent>
#include <QDebug>
#include <QMessageBox>
#include <QString>
#include <QPushButton>
#include <QApplication>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//判断是红方还是蓝方(自增,奇数为红,偶数为蓝)
isRed = 1;
//设置窗口标题
setWindowTitle(QStringLiteral("井字棋游戏"));
//设置主窗口最小大小
setMinimumSize(740, 700);
//初始化界面布局
initUi();
//给每个格子添加事件过滤
label1->installEventFilter(this);
label2->installEventFilter(this);
label3->installEventFilter(this);
label4->installEventFilter(this);
label5->installEventFilter(this);
label6->installEventFilter(this);
label7->installEventFilter(this);
label8->installEventFilter(this);
label9->installEventFilter(this);
}
//初始化界面布局
void Widget::initUi(){
//初始化
label1 = new QLabel("1");
label1->setText("1");
label2 = new QLabel("2");
label3 = new QLabel("3");
label4 = new QLabel("4");
label5 = new QLabel("5");
label6 = new QLabel(