C++ Qt 实现小游戏2048

原创,转载请注明出处。
这里用Qt实现了小游戏2048,基本实现了2048的功能,是C++,Qt的必备练手项目,界面设置如下图:

通过在界面上的按钮上下左右控制数字,实现运算,并且记录分数,游戏的玩法跟2048相同,接下来具体介绍。

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

#ifndef BOARDWIDGET_H
#define BOARDWIDGET_H

#include 
#include
#include
#include

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
#include
#include
#include
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

你可能感兴趣的:(c++,qt5,游戏开发)