C++ Qt 实现小游戏2048

本文介绍了使用C++和Qt5开发经典游戏2048的过程,包括创建QWidget界面,利用QTextEdit展示数字,以及通过上下左右按钮控制数字运算和得分记录。提供了关键代码段,并指出完整项目可在评论区获取,邀请读者一起学习讨论。
摘要由CSDN通过智能技术生成

原创,转载请注明出处。
这里用Qt实现了小游戏2048,基本实现了2048的功能,是C++,Qt的必备练手项目,界面设置如下图:
在这里插入图片描述
通过在界面上的按钮上下左右控制数字,实现运算,并且记录分数,游戏的玩法跟2048相同,接下来具体介绍。

在创建时使用QWidget ,并创建界面文件。
用于显示数字的区域使用QTextEdit。截图如下:在这里插入图片描述
在boardwidget.h文件里的代码如下:

#ifndef BOARDWIDGET_H
#define BOARDWIDGET_H

#include <QMainWindow>
#include<QTextEdit>
#include<QPoint>
#include<QStack>

namespace Ui {
   
class BoardWidget;
}

class BoardWidget : public QMainWindow
{
   
    Q_OBJECT

public:
    explicit BoardWidget(QWidget *parent = 0);
    ~BoardWidget();
signals:

private:
    void initBoard();
    void upDo();
    void downDo();
    void leftDo();
    void rightDo();
    int getRandomNumber_1(int min,int max);
    int getRandomNumber_2(int min,int max);
    void defNum();
    QTextEdit *textEdit[4][4];
    QStack<QPoint> emptyPosition;
    int t;
    int score=0;
    void checkResult(int w);
public slots:
private slots:
    void on_newGameBtn_clicked();

private:
    Ui::BoardWidget *ui;

};

#endif // BOARDWIDGET_H

在对应的boardwidget.cpp文件中的代码如下:

#include "boardwidget.h"
#include "ui_boardwidget.h"
#include<QPushButton>
#include<QTime>
#include<QtGlobal>
#include<QMessageBox>
BoardWidget::BoardWidget(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::BoardWidget)
{
   
    ui->setupUi(this);
    initBoard();
}

BoardWidget::~BoardWidget()
{
   
    delete ui;
}
void BoardWidget::initBoard()
{
   
    ui->scoreDisplay->setText("0");
    defNum();
    t=1;
    int x=getRandomNumber_1(0,15);
    int y=getRandomNumber_2(0,15);

    if(x!=y)
    {
   
        textEdit[x/4][x%4]->setText(QString::number(2)); //随机位置出现两个2
        textEdit[y/4][y%4]->setText(QString::number(2));
    }
    else
    {
   
        int x=getRandomNumber_1(0,15);
        int y=getRandomNumber_2(0,15);
        textEdit[x/4][x%4]->setText(QString::number(2)); //随机位置出现两个2
        textEdit[y/4][y%4]->setText(QString::number(2));
    }
    connect(ui->upBtn,&QPushButton::clicked,this,&BoardWidget::upDo);
    connect(ui->downBtn,&QPushButton::clicked,this,&BoardWidget::downDo);
    connect(ui->leftBtn,&QPushButton::clicked,this,&BoardWidget::leftDo);
    connect(ui->rightBtn,&QPushButton::clicked,this,&BoardWidget::rightDo);
}
void BoardWidget::defNum()
{
   

    textEdit[0][0]=ui->a00;
    textEdit[0][1]=ui->a01;
    textEdit[0][2]=ui->a02;
    textEdit[0][3]=ui->a03;
    textEdit[1][0]=ui->a10;
    textEdit[1][1]=ui->a11;
    textEdit[1][2]=ui->a12;
    textEdit[1][3]=ui->a13;
    textEdit[2][0]=ui->a20;
    textEdit[2][1]=ui->a21;
    textEdit[2][2]=ui->a22;
    textEdit[2][3]=ui->a23;
    textEdit[3][0]=ui->a30;
    textEdit[3][1]=ui->a31;
    textEdit[3][2]=ui->a32;
    textEdit[3][3]=ui->a33;

}

int BoardWidget::getRandomNumber_1(int min,int max)
{
   
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    int test=qrand()%(max-min);
    return test;
}
int BoardWidget::getRandomNumber_2(int min, int max)
{
   
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime())*100);
    int test=qrand()%(max-min);
    return test;
}

void BoardWidget::upDo()
{
   
    int w=0;//判断是否需要随机产生数
    QStack<int> calculatedNumbers;
    //上移
    for(int j=0;j<4;j++)
    {
   
        for(int k=0;k<3;k++)
        {
   
            for(int i=0;i<3;i<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值