在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++游戏开发 → c++ 2048游戏 源码下载

c++ 2048游戏 源码下载

C/C++游戏开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.95M
  • 下载次数:55
  • 浏览次数:808
  • 发布时间:2017-04-03
  • 实例类别:C/C++游戏开发
  • 发 布 人:ppldo
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 游戏 2048

实例介绍

【实例简介】

【实例截图】

【核心代码】

#include <QTime>
#include <QKeyEvent>
#include <QDebug>
#include "mydialog.h"
#include "aboutdialog.h"
#include "helpdialog.h"
#include "ui_mydialog.h"

MyDialog::MyDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyDialog),source(0),keyUp(false),keyDown(false),keyLeft(false),keyRight(false),okPressKey(false)
{
    ui->setupUi(this);
    ui->lossLabel->setText(" ");
    for(int i=0;i!=4;  i)
    {
        for(int j=0;j!=4;  j)
            array[i][j] = 0;//设置数组为无数状态 全为0
    }
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
}

MyDialog::~MyDialog()
{
    delete ui;
}
//键盘按下
void MyDialog::keyPressEvent(QKeyEvent *event)
{
    if(!okPressKey)
        return ;
       if(event->key()==Qt::Key_Up)
       {
           if(event->isAutoRepeat())
               return ;//按键重复时不做处理
           else
               keyUp = true;
       }
       else if(event->key()==Qt::Key_Down)
       {
           if(event->isAutoRepeat())
               return ;
           else
               keyUp = true;
       }
       else if(event->key()==Qt::Key_Left)
       {
           if(event->isAutoRepeat())
               return ;
           else
               keyLeft = true;
       }
       else if(event->key()==Qt::Key_Right)
       {
           if(event->isAutoRepeat())
               return ;
           else
               keyRight = true;
       }
       else
           return ;
}
//键盘释放
void MyDialog::keyReleaseEvent(QKeyEvent *event)
{
    if(!okPressKey)
        return ;
    //bool col0Caled,col1Caled,col2Caled,col3Caled;//列 0-3 有过计算标志
    bool isCaled = false;//是否有过计算标志,默认为false
    int xAddLoc,yAddLoc;
    bool is2;
    bool doAction = false;
    bool full = true;
    bool fail = true;
    //上建处理
    if(event->key()==Qt::Key_Up)
    {
        if(event->isAutoRepeat())
            return ;
        else
        {
            keyUp = false;
            for(int y = 0;y!=4;  y)
            {
                isCaled = false;
                if(array[0][y] array[1][y] array[2][y] array[3][y])//y列有数
                {
                    if(array[0][y])//(0,y)有数
                    {
                        if(array[1][y])//(1,y)有数
                        {
                            if(array[0][y]==array[1][y])//(0,y)与(1,y)相等
                            {
                                if(!isCaled)
                                {
                                    array[0][y]*=2;//array[0][y] array[1][y]放入array[0][y]
                                    array[1][y] = 0;
                                    source =array[0][y];//加分
                                    isCaled = true;//标记为true
                                    if(array[2][y])//(2,y)有数
                                    {
                                        array[1][y] = array[2][y];
                                        array[2][y] = array[3][y];
                                        array[3][y] = 0;
                                        doAction = true;
                                    }
                                    else//(2,y)没数
                                    {
                                        array[1][y] = array[3][y];
                                        array[3][y] = 0;
                                        doAction = true;
                                    }                                  
                                }
                            }
                            else//(0,y)与(1,y)不相等
                            {
                                if(array[2][y])//(2,y)有数
                                {
                                    if(array[1][y]==array[2][y])//(1,y)与(2,y)相等
                                    {
                                        if(!isCaled)
                                        {
                                            array[1][y]*=2;
                                            source =array[1][y];
                                            isCaled = true;
                                            doAction = true;
                                        }
                                    }
                                    else//(1,y)与(2,y)不相等
                                    {
                                        if(array[3][y])//(3,y)有数
                                        {
                                            if(array[2][y]==array[3][y])//(2,y)与(3,y)相等
                                            {
                                                if(!isCaled)
                                                {
                                                    array[2][y]*=2;
                                                    source =array[2][y];
                                                    isCaled = true;
                                                    doAction = true;
                                                }
                                            }
                                            else//(2,y) != (3,y)
                                            {

                                            }
                                        }
                                        else//(3,y)没数
                                        {

                                        }
                                    }
                                }
                                else//(2,y)没数
                                {
                                    if(array[3][y])//(3,y)有数
                                    {
                                        if(array[1][y]==array[3][y])//(1,y) == (3,y)
                                        {
                                            if(!isCaled)
                                            {
                                                array[1][y]*=2;
                                                source =array[1][y];
                                                array[3][y] = 0;
                                                isCaled = true;
                                                doAction = true;
                                            }
                                        }
                                        else//(1,y) != (3,y)
                                        {
                                            array[2][y] = array[3][y];
                                            array[3][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(3,y)没数
                                    {
                                        ;
                                    }
                                }
                            }
                        }
                        else//(1,y)没数
                        {
                            if(array[2][y])//(2,y)有数
                            {
                                if(array[0][y]==array[2][y])//(0,y) == (2,y)
                                {
                                    if(!isCaled)
                                    {
                                        array[0][y]*=2;
                                        source =array[0][y];
                                        array[2][y] = 0;
                                        isCaled = true;
                                        array[1][y] = array[3][y];
                                        array[3][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else
                                {
                                    if(array[3][y])//(3,y)有数
                                    {
                                        if(array[2][y]==array[3][y])//(2,y) == (3,y)
                                        {
                                            if(!isCaled)
                                            {
                                                array[2][y]*=2;
                                                source =array[2][y];
                                                array[3][y] =0;
                                                isCaled = true;
                                                array[1][y] = array[2][y];
                                                array[2][y] = 0;
                                                doAction = true;
                                            }
                                        }
                                        else
                                        {
                                            array[1][y] = array[2][y];
                                            array[2][y] = array[3][y];
                                            array[3][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(3,y)没数
                                    {
                                        array[1][y] = array[2][y];
                                        array[2][y] = 0;
                                        doAction = true;
                                    }
                                }
                            }                               
                            else//(2,y)没数
                            {
                                if(array[3][y])//(3,y)有数
                                {
                                    if(array[0][y]==array[3][y])
                                    {
                                        if(!isCaled)
                                        {
                                            array[0][y]*=2;
                                            source =array[0][y];
                                            array[3][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else
                                    {
                                        array[1][y] = array[3][y];
                                        array[3][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else
                                    ;
                            }
                        }
                    }
                    else//(0,y)没数
                    {
                        if(array[1][y])//(1,y)有数
                        {
                            if(array[2][y])//(2,y)有数
                            {
                                if(array[1][y]==array[2][y])//(1,y) == (2,y)
                                {
                                    if(!isCaled)
                                    {
                                        array[1][y]*=2;
                                        source =array[1][y];
                                        array[2][y] = 0;
                                        isCaled = true;
                                        array[0][y] = array[1][y];
                                        array[1][y] = array[3][y];
                                        array[3][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(1,y) != (2,y)
                                {
                                    if(array[3][y])//(3,y)有数
                                    {
                                        if(array[2][y]==array[3][y])//(2,y) == (3,y)
                                        {
                                            if(!isCaled)
                                            {
                                                array[2][y]*=2;
                                                source =array[2][y];
                                                array[3][y] = 0;
                                                isCaled = true;
                                                array[0][y] = array[1][y];
                                                array[1][y] = array[2][y];
                                                doAction = true;
                                            }
                                        }
                                        else//(2,y) != (3,y)
                                        {
                                            array[0][y] = array[1][y];
                                            array[1][y] = array[2][y];
                                            array[2][y] = array[3][y];
                                            array[3][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(3,y)没数
                                    {
                                        array[0][y] = array[1][y];
                                        array[1][y] = array[2][y];
                                        array[2][y] = 0;
                                        doAction = true;
                                    }
                                }
                            }
                            else//(2,y)没数
                            {
                                if(array[3][y])//(3,y)有数
                                {
                                    if(array[1][y]==array[3][y])//(1,y) == (3,y)
                                    {
                                        if(!isCaled)
                                        {
                                            array[1][y]*=2;
                                            source = array[1][y];
                                            array[3][y] = 0;
                                            array[0][y] = array[1][y];
                                            array[1][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(1,y) != (3,y)
                                    {
                                        array[0][y] = array[1][y];
                                        array[1][y] = array[3][y];
                                        array[3][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(3,y)没数
                                {
                                    array[0][y] = array[1][y];
                                    array[1][y] = 0;
                                    doAction = true;
                                }
                            }
                        }
                        else//(1,y)没数
                        {
                            if(array[2][y])//(2,y)有数
                            {
                                if(array[3][y])//(3,y)有数
                                {
                                    if(array[2][y]==array[3][y])//(2,y) == (3,y)
                                    {
                                        if(!isCaled)
                                        {
                                          array[2][y]*=2;
                                          source =array[2][y];
                                          array[3][y] = 0;
                                          array[0][y] = array[2][y];
                                          array[2][y] = 0;
                                          isCaled = true;
                                          doAction = true;
                                        }
                                    }
                                    else//(2,y) != (3,y)
                                    {
                                        array[0][y] = array[2][y];
                                        array[1][y] = array[3][y];
                                        array[2][y] = 0;
                                        array[3][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(3,y)没数
                                {
                                    array[0][y] = array[2][y];
                                    array[2][y] = 0;
                                    doAction = true;
                                }
                            }
                            else//(2,y)没数
                            {
                                array[0][y] = array[3][y];
                                array[3][y] = 0;
                                doAction = true;
                            }
                        }
                    }
                }
                isCaled = false;
            }
        }
        for(int i = 0;i!=4;  i)
            for(int j = 0;j!=4;  j)
                if(array[i][j]==0)
                    full = false;
        //在最后一行添加一个新数。。。
        //随机生成一个坐标
        if(doAction&&(!full))//有过操作,并且没有满,否则表示数字已经填满,不能再添加
        {
            do
            {
             xAddLoc = qrand()%4;
             yAddLoc = qrand()%4;
            }while(array[xAddLoc][yAddLoc]);
            is2 = qrand()%3;//当随机数是1或2时,is2为true,当随机数是0时,is2为false,所以有1/3的概率添加4,
                            //2/3的概率添加2
            if(is2)
                array[xAddLoc][yAddLoc]=2;
            else
                array[xAddLoc][yAddLoc]=4;
        }
    }
    //下键处理
    else if(event->key()==Qt::Key_Down)
    {
        if(event->isAutoRepeat())
            return ;
        else
        {
            keyDown = false;

            for(int y = 0;y!=4;  y)
            {
                isCaled = false;
                if(array[3][y] array[2][y] array[1][y] array[0][y])//y列有数
                {
                    if(array[3][y])//(3,y)有数
                    {
                        if(array[2][y])//(2,y)有数
                        {
                            if(array[3][y]==array[2][y])//(3,y)与(2,y)相等
                            {
                                if(!isCaled)
                                {
                                    array[3][y]*=2;//array[3][y] array[2][y]放入array[3][y]
                                    array[2][y] = 0;
                                    source =array[3][y];//加分
                                    isCaled = true;//标记为true
                                    if(array[1][y])//(1,y)有数
                                    {
                                        array[2][y] = array[1][y];
                                        array[1][y] = array[0][y];
                                        array[0][y] = 0;
                                        doAction = true;
                                    }
                                    else//(1,y)没数
                                    {
                                        array[2][y] = array[0][y];
                                        array[0][y] = 0;
                                        doAction = true;
                                    }
                                    //qDebug()<<array[0][y];
                                }
                            }
                            else//(3,y)与(2,y)不相等
                            {
                                if(array[1][y])//(1,y)有数
                                {
                                    if(array[2][y]==array[1][y])//(2,y)与(1,y)相等
                                    {
                                        if(!isCaled)
                                        {
                                            array[2][y]*=2;
                                            source =array[2][y];
                                            isCaled = true;
                                            doAction = true;
                                        }
                                    }
                                    else//(2,y)与(1,y)不相等
                                    {
                                        if(array[0][y])//(0,y)有数
                                        {
                                            if(array[1][y]==array[0][y])//(1,y)与(0,y)相等
                                            {
                                                if(!isCaled)
                                                {
                                                    array[1][y]*=2;
                                                    source =array[1][y];
                                                    isCaled = true;
                                                    doAction = true;
                                                }
                                            }
                                            else//(1,y) != (0,y)
                                            {
                                                ;
                                            }
                                        }
                                        else//(0,y)没数
                                        {
                                            ;
                                        }
                                    }
                                }
                                else//(1,y)没数
                                {
                                    if(array[0][y])//(0,y)有数
                                    {
                                        if(array[2][y]==array[0][y])//(2,y) == (0,y)
                                        {
                                            if(!isCaled)
                                            {
                                                array[2][y]*=2;
                                                source =array[2][y];
                                                array[0][y] = 0;
                                                isCaled = true;
                                                doAction = true;
                                            }
                                        }
                                        else//(2,y) != (0,y)
                                        {
                                            array[1][y] = array[0][y];
                                            array[0][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(0,y)没数
                                    {
                                        ;
                                    }
                                }
                            }
                        }
                        else//(2,y)没数
                        {
                            if(array[1][y])//(1,y)有数
                            {
                                if(array[3][y]==array[1][y])//(0,y) == (1,y)
                                {
                                    if(!isCaled)
                                    {
                                        array[3][y]*=2;
                                        source =array[3][y];
                                        array[1][y] = 0;
                                        isCaled = true;
                                        array[2][y] = array[0][y];
                                        array[0][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else
                                {
                                    if(array[0][y])//(0,y)有数
                                    {
                                        if(array[1][y]==array[0][y])//(1,y) == (0,y)
                                        {
                                            if(!isCaled)
                                            {
                                                array[1][y]*=2;
                                                source =array[2][y];
                                                array[0][y] =0;
                                                isCaled = true;
                                                array[2][y] = array[1][y];
                                                array[1][y] = 0;
                                                doAction = true;
                                            }
                                        }
                                        else
                                        {
                                            array[2][y] = array[1][y];
                                            array[1][y] = array[0][y];
                                            array[0][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(0,y)没数
                                    {
                                        array[2][y] = array[1][y];
                                        array[1][y] = 0;
                                        doAction = true;
                                    }
                                }
                            }
                            else//(1,y)没数
                            {
                                if(array[0][y])//(0,y)有数
                                {
                                    if(array[3][y]==array[0][y])
                                    {
                                        if(!isCaled)
                                        {
                                            array[3][y]*=2;
                                            source =array[3][y];
                                            array[0][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else
                                    {
                                        array[2][y] = array[0][y];
                                        array[0][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else
                                    ;
                            }
                        }
                    }
                    else//(3,y)没数
                    {
                        if(array[2][y])//(2,y)有数
                        {
                            if(array[1][y])//(1,y)有数
                            {
                                if(array[2][y]==array[1][y])//(2,y) == (1,y)
                                {
                                    if(!isCaled)
                                    {
                                        array[2][y]*=2;
                                        source =array[2][y];
                                        array[1][y] = 0;
                                        isCaled = true;
                                        array[3][y] = array[2][y];
                                        array[2][y] = array[0][y];
                                        array[0][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(2,y) != (1,y)
                                {
                                    if(array[0][y])//(0,y)有数
                                    {
                                        if(array[1][y]==array[0][y])//(1,y) == (0,y)
                                        {
                                            if(!isCaled)
                                            {
                                                array[1][y]*=2;
                                                source =array[1][y];
                                                array[0][y] = 0;
                                                isCaled = true;
                                                array[3][y] = array[2][y];
                                                array[2][y] = array[1][y];
                                                doAction = true;
                                            }
                                        }
                                        else//(1,y) != (0,y)
                                        {
                                            array[3][y] = array[2][y];
                                            array[2][y] = array[1][y];
                                            array[1][y] = array[0][y];
                                            array[0][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(0,y)没数
                                    {
                                        array[3][y] = array[2][y];
                                        array[2][y] = array[1][y];
                                        array[1][y] = 0;
                                        doAction = true;
                                    }
                                }
                            }
                            else//(1,y)没数
                            {
                                if(array[0][y])//(0,y)有数
                                {
                                    if(array[2][y]==array[0][y])//(2,y) == (0,y)
                                    {
                                        if(!isCaled)
                                        {
                                            array[2][y]*=2;
                                            source = array[2][y];
                                            array[0][y] = 0;
                                            array[3][y] = array[2][y];
                                            array[2][y] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(2,y) != (0,y)
                                    {
                                        array[3][y] = array[2][y];
                                        array[2][y] = array[0][y];
                                        array[0][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(0,y)没数
                                {
                                    array[3][y] = array[2][y];
                                    array[2][y] = 0;
                                    doAction = true;
                                }
                            }
                        }
                        else//(2,y)没数
                        {
                            if(array[1][y])//(1,y)有数
                            {
                                if(array[0][y])//(0,y)有数
                                {
                                    if(array[1][y]==array[0][y])//(1,y) == (0,y)
                                    {
                                        if(!isCaled)
                                        {
                                          array[1][y]*=2;
                                          source =array[1][y];
                                          array[0][y] = 0;
                                          array[3][y] = array[1][y];
                                          array[1][y] = 0;
                                          isCaled = true;
                                          doAction = true;
                                        }
                                    }
                                    else//(1,y) != (0,y)
                                    {
                                        array[3][y] = array[1][y];
                                        array[2][y] = array[0][y];
                                        array[1][y] = 0;
                                        array[0][y] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(0,y)没数
                                {
                                    array[3][y] = array[1][y];
                                    array[1][y] = 0;
                                    doAction = true;
                                }
                            }
                            else//(1,y)没数
                            {
                                array[3][y] = array[0][y];
                                array[0][y] = 0;
                                doAction = true;
                            }
                        }
                    }
                }
                isCaled = false;
            }
        }
        for(int i = 0;i!=4;  i)
            for(int j = 0;j!=4;  j)
                if(array[i][j]==0)
                    full = false;
        //在最后一行添加一个新数。。。
        //随机生成一个坐标
        if(!full)//没有填满,可以再添加
        {
            do
            {
             xAddLoc = qrand()%4;
             yAddLoc = qrand()%4;
            }while(array[xAddLoc][yAddLoc]);
            is2 = qrand()%3;//当随机数是1或2时,is2为true,当随机数是0时,is2为false,所以有1/3的概率添加4,
                            //2/3的概率添加2
            if(is2)
                array[xAddLoc][yAddLoc]=2;
            else
                array[xAddLoc][yAddLoc]=4;
        }
    }
    //左键处理
    else if(event->key()==Qt::Key_Left)
    {
        if(event->isAutoRepeat())
            return ;
        else
        {
            keyLeft = false;
            for(int x = 0;x!=4;  x)
            {
                isCaled = false;
                if(array[x][0] array[x][1] array[x][2] array[x][3])//y列有数
                {
                    if(array[x][0])//(x,0)有数
                    {
                        if(array[x][1])//(x,1)有数
                        {
                            if(array[x][0]==array[x][1])//(x,0)与(x,1)相等
                            {
                                if(!isCaled)
                                {
                                    array[x][0]*=2;//array[x][0] array[x][1]放入array[x][0]
                                    array[x][1] = 0;
                                    source =array[x][0];//加分
                                    isCaled = true;//标记为true
                                    if(array[x][2])//(x,2)有数
                                    {
                                        array[x][1] = array[x][2];
                                        array[x][2] = array[x][3];
                                        array[x][3] = 0;
                                        doAction = true;
                                    }
                                    else//(x,2)没数
                                    {
                                        array[x][1] = array[x][3];
                                        array[x][3] = 0;
                                        doAction = true;
                                    }
                                    //qDebug()<<array[0][y];
                                }
                            }
                            else//(x,0)与(x,1)不相等
                            {
                                if(array[x][2])//(x,2)有数
                                {
                                    if(array[x][1]==array[x][2])//(x,1)与(x,2)相等
                                    {
                                        if(!isCaled)
                                        {
                                            array[x][1]*=2;
                                            source =array[x][1];
                                            isCaled = true;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,1)与(x,2)不相等
                                    {
                                        if(array[x][3])//(x,3)有数
                                        {
                                            if(array[x][2]==array[x][3])//(x,2)与(x,3)相等
                                            {
                                                if(!isCaled)
                                                {
                                                    array[x][2]*=2;
                                                    source =array[x][2];
                                                    isCaled = true;
                                                    doAction = true;
                                                }
                                            }
                                            else//(x,2) != (x,3)
                                            {
                                                ;
                                            }
                                        }
                                        else//(x,3)没数
                                        {
                                            ;
                                        }
                                    }
                                }
                                else//(x,2)没数
                                {
                                    if(array[x][3])//(x,3)有数
                                    {
                                        if(array[x][1]==array[x][3])//(x,1) == (x,3)
                                        {
                                            if(!isCaled)
                                            {
                                                array[x][1]*=2;
                                                source =array[x][1];
                                                array[x][3] = 0;
                                                isCaled = true;
                                                doAction = true;
                                            }
                                        }
                                        else//(x,1) != (x,3)
                                        {
                                            array[x][2] = array[x][3];
                                            array[x][3] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,3)没数
                                    {
                                        ;
                                    }
                                }
                            }
                        }
                        else//(x,1)没数
                        {
                            if(array[x][2])//(x,2)有数
                            {
                                if(array[x][0]==array[x][2])//(x,0) == (x,2)
                                {
                                    if(!isCaled)
                                    {
                                        array[x][0]*=2;
                                        source =array[x][0];
                                        array[x][2] = 0;
                                        isCaled = true;
                                        array[x][1] = array[x][3];
                                        array[x][3] = 0;
                                        doAction = true;
                                    }
                                }
                                else
                                {
                                    if(array[x][3])//(x,3)有数
                                    {
                                        if(array[x][2]==array[x][3])//(x,2) == (x,3)
                                        {
                                            if(!isCaled)
                                            {
                                                array[x][2]*=2;
                                                source =array[x][2];
                                                array[x][3] =0;
                                                isCaled = true;
                                                array[x][1] = array[x][2];
                                                array[x][2] = 0;
                                                doAction = true;
                                            }
                                        }
                                        else
                                        {
                                            array[x][1] = array[x][2];
                                            array[x][2] = array[x][3];
                                            array[x][3] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,3)没数
                                    {
                                        array[x][1] = array[x][2];
                                        array[x][2] = 0;
                                        doAction = true;
                                    }
                                }
                            }

                            else//(x,2)没数
                            {
                                if(array[x][3])//(x,3)有数
                                {
                                    if(array[x][0]==array[x][3])
                                    {
                                        if(!isCaled)
                                        {
                                            array[x][0]*=2;
                                            source =array[x][0];
                                            array[x][3] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else
                                    {
                                        array[x][1] = array[x][3];
                                        array[x][3] = 0;
                                        doAction = true;
                                    }
                                }

                            }
                        }
                    }
                    else//(x,0)没数
                    {
                        if(array[x][1])//(x,1)有数
                        {
                            if(array[x][2])//(x,2)有数
                            {
                                if(array[x][1]==array[x][2])//(x,1) == (x,2)
                                {
                                    if(!isCaled)
                                    {
                                        array[x][1]*=2;
                                        source =array[x][1];
                                        array[x][2] = 0;
                                        isCaled = true;
                                        array[x][0] = array[x][1];
                                        array[x][1] = array[x][3];
                                        array[x][3] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(x,1) != (x,2)
                                {
                                    if(array[x][3])//(x,3)有数
                                    {
                                        if(array[x][2]==array[x][3])//(x,2) == (x,3)
                                        {
                                            if(!isCaled)
                                            {
                                                array[x][2]*=2;
                                                source =array[x][2];
                                                array[x][3] = 0;
                                                isCaled = true;
                                                array[x][0] = array[x][1];
                                                array[x][1] = array[x][2];
                                                doAction = true;
                                            }
                                        }
                                        else//(x,2) != (x,3)
                                        {
                                            array[x][0] = array[x][1];
                                            array[x][1] = array[x][2];
                                            array[x][2] = array[x][3];
                                            array[x][3] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,3)没数
                                    {
                                        array[x][0]= array[x][1];
                                        array[x][1] = array[x][2];
                                        array[x][2] = 0;
                                        doAction = true;
                                    }
                                }
                            }
                            else//(x,2)没数
                            {
                                if(array[x][3])//(x,3)有数
                                {
                                    if(array[x][1]==array[x][3])//(x,1) == (x,3)
                                    {
                                        if(!isCaled)
                                        {
                                            array[x][1]*=2;
                                            source = array[x][1];
                                            array[x][3] = 0;
                                            array[x][0] = array[x][1];
                                            array[x][1] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,1) != (x,3)
                                    {
                                        array[x][0] = array[x][1];
                                        array[x][1] = array[x][3];
                                        array[x][3] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(x,3)没数
                                {
                                    array[x][0] = array[x][1];
                                    array[x][1] = 0;
                                    doAction = true;
                                }
                            }
                        }
                        else//(x,1)没数
                        {
                            if(array[x][2])//(x,2)有数
                            {
                                if(array[x][3])//(x,3)有数
                                {
                                    if(array[x][2]==array[x][3])//(x,2) == (x,3)
                                    {
                                        if(!isCaled)
                                        {
                                          array[x][2]*=2;
                                          source =array[x][2];
                                          array[x][3] = 0;
                                          array[x][0] = array[x][2];
                                          array[x][2] = 0;
                                          isCaled = true;
                                          doAction = true;
                                        }
                                    }
                                    else//(x,2) != (x,3)
                                    {
                                        array[x][0] = array[x][2];
                                        array[x][1] = array[x][3];
                                        array[x][2] = 0;
                                        array[x][3] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(x,3)没数
                                {
                                    array[x][0] = array[x][2];
                                    array[x][2] = 0;
                                    doAction = true;
                                }
                            }
                            else//(x,2)没数
                            {
                                array[x][0] = array[x][3];
                                array[x][3] = 0;
                                doAction = true;
                            }
                        }
                    }
                }
                isCaled = false;
            }
        }
        for(int i = 0;i!=4;  i)
            for(int j = 0;j!=4;  j)
                if(array[i][j]==0)
                    full = false;
        //在最后一行添加一个新数。。。
        //随机生成一个坐标
        if(doAction&&(!full))//有过操作,并且没有满,否则表示数字已经填满,不能再添加
        {
            do
            {
             xAddLoc = qrand()%4;
             yAddLoc = qrand()%4;
            }while(array[xAddLoc][yAddLoc]);
            is2 = qrand()%3;//当随机数是1或2时,is2为true,当随机数是0时,is2为false,所以有1/3的概率添加4,
                            //2/3的概率添加2
            if(is2)
                array[xAddLoc][yAddLoc]=2;
            else
                array[xAddLoc][yAddLoc]=4;
        }
    }
    //右键处理
    else if(event->key()==Qt::Key_Right)
    {
        if(event->isAutoRepeat())
            return ;
        else
        {
            keyRight = false;
            for(int x = 0;x!=4;  x)
            {
                isCaled = false;
                if(array[x][3] array[x][2] array[x][1] array[x][0])//x行有数
                {
                    if(array[x][3])//(x,3)有数
                    {
                        if(array[x][2])//(x,2)有数
                        {
                            if(array[x][3]==array[x][2])//(x,3)与(x,2)相等
                            {
                                if(!isCaled)
                                {
                                    array[x][3]*=2;//array[x][3] array[x][2]放入array[x][3]
                                    array[x][2] = 0;
                                    source =array[x][3];//加分
                                    isCaled = true;//标记为true
                                    if(array[x][1])//(x,1)有数
                                    {
                                        array[x][2] = array[x][1];
                                        array[x][1] = array[x][0];
                                        array[x][0] = 0;
                                        doAction = true;
                                    }
                                    else//(x,1)没数
                                    {
                                        array[x][2] = array[x][0];
                                        array[x][0] = 0;
                                        doAction = true;
                                    }
                                    //qDebug()<<array[0][y];
                                }
                            }
                            else//(x,3)与(x,2)不相等
                            {
                                if(array[x][1])//(x,1)有数
                                {
                                    if(array[x][2]==array[x][1])//(x,2)与(x,1)相等
                                    {
                                        if(!isCaled)
                                        {
                                            array[x][2]*=2;
                                            source =array[x][2];
                                            isCaled = true;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,2)与(x,1)不相等
                                    {
                                        if(array[x][0])//(x,0)有数
                                        {
                                            if(array[x][1]==array[x][0])//(x,1)与(x,0)相等
                                            {
                                                if(!isCaled)
                                                {
                                                    array[x][1]*=2;
                                                    source =array[x][1];
                                                    isCaled = true;
                                                    doAction = true;
                                                }
                                            }
                                            else//(x,1) != (x,0)
                                            {
                                                ;
                                            }
                                        }
                                        else//(x,0)没数
                                        {
                                            ;
                                        }
                                    }
                                }
                                else//(x,1)没数
                                {
                                    if(array[x][0])//(x,0)有数
                                    {
                                        if(array[x][2]==array[x][0])//(x,2) == (x,0)
                                        {
                                            if(!isCaled)
                                            {
                                                array[x][2]*=2;
                                                source =array[x][2];
                                                array[x][0] = 0;
                                                isCaled = true;
                                                doAction = true;
                                            }
                                        }
                                        else//(x,2) != (x,0)
                                        {
                                            array[x][1] = array[x][0];
                                            array[x][0] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,0)没数
                                    {
                                        ;
                                    }
                                }
                            }
                        }
                        else//(x,2)没数
                        {
                            if(array[x][1])//(x,1)有数
                            {
                                if(array[x][3]==array[x][1])//(x,0) == (x,1)
                                {
                                    if(!isCaled)
                                    {
                                        array[x][3]*=2;
                                        source =array[x][3];
                                        array[x][1] = 0;
                                        isCaled = true;
                                        array[x][2] = array[x][0];
                                        array[x][0] = 0;
                                        doAction = true;
                                    }
                                }
                                else
                                {
                                    if(array[x][0])//(x,0)有数
                                    {
                                        if(array[x][1]==array[x][0])//(x,1) == (x,0)
                                        {
                                            if(!isCaled)
                                            {
                                                array[x][1]*=2;
                                                source =array[x][2];
                                                array[x][0] =0;
                                                isCaled = true;
                                                array[x][2] = array[x][1];
                                                array[x][1] = 0;
                                                doAction = true;
                                            }
                                        }
                                        else
                                        {
                                            array[x][2] = array[x][1];
                                            array[x][1] = array[x][0];
                                            array[x][0] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,0)没数
                                    {
                                        array[x][2] = array[x][1];
                                        array[x][1] = 0;
                                        doAction = true;
                                    }
                                }
                            }
                            else//(x,1)没数
                            {
                                if(array[x][0])//(x,0)有数
                                {
                                    if(array[x][3]==array[x][0])
                                    {
                                        if(!isCaled)
                                        {
                                            array[x][3]*=2;
                                            source =array[x][3];
                                            array[x][0] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else
                                    {
                                        array[x][2] = array[x][0];
                                        array[x][0] = 0;
                                        doAction = true;
                                    }
                                }
                                else
                                    ;
                            }
                        }
                    }
                    else//(x,3)没数
                    {
                        if(array[x][2])//(x,2)有数
                        {
                            if(array[x][1])//(x,1)有数
                            {
                                if(array[x][2]==array[x][1])//(x,2) == (x,1)
                                {
                                    if(!isCaled)
                                    {
                                        array[x][2]*=2;
                                        source =array[x][2];
                                        array[x][1] = 0;
                                        isCaled = true;
                                        array[x][3] = array[x][2];
                                        array[x][2] = array[x][0];
                                        array[x][0] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(x,2) != (x,1)
                                {
                                    if(array[x][0])//(x,0)有数
                                    {
                                        if(array[x][1]==array[x][0])//(x,1) == (x,0)
                                        {
                                            if(!isCaled)
                                            {
                                                array[x][1]*=2;
                                                source =array[x][1];
                                                array[x][0] = 0;
                                                isCaled = true;
                                                array[x][3] = array[x][2];
                                                array[x][2] = array[x][1];
                                                doAction = true;
                                            }
                                        }
                                        else//(x,1) != (x,0)
                                        {
                                            array[x][3] = array[x][2];
                                            array[x][2] = array[x][1];
                                            array[x][1] = array[x][0];
                                            array[x][0] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,0)没数
                                    {
                                        array[x][3] = array[x][2];
                                        array[x][2] = array[x][1];
                                        array[x][1] = 0;
                                        doAction = true;
                                    }
                                }
                            }
                            else//(x,1)没数
                            {
                                if(array[x][0])//(x,0)有数
                                {
                                    if(array[x][2]==array[x][0])//(x,2) == (x,0)
                                    {
                                        if(!isCaled)
                                        {
                                            array[x][2]*=2;
                                            source = array[x][2];
                                            array[x][0] = 0;
                                            array[x][3] = array[x][2];
                                            array[x][2] = 0;
                                            doAction = true;
                                        }
                                    }
                                    else//(x,2) != (x,0)
                                    {
                                        array[x][3] = array[x][2];
                                        array[x][2] = array[x][0];
                                        array[x][0] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(x,0)没数
                                {
                                    array[x][3] = array[x][2];
                                    array[x][2] = 0;
                                    doAction = true;
                                }
                            }
                        }
                        else//(x,2)没数
                        {
                            if(array[x][1])//(x,1)有数
                            {
                                if(array[x][0])//(x,0)有数
                                {
                                    if(array[x][1]==array[x][0])//(x,1) == (x,0)
                                    {
                                        if(!isCaled)
                                        {
                                          array[x][1]*=2;
                                          source =array[x][1];
                                          array[x][0] = 0;
                                          array[x][3] = array[x][1];
                                          array[x][1] = 0;
                                          isCaled = true;
                                          doAction = true;
                                        }
                                    }
                                    else//(x,1) != (x,0)
                                    {
                                        array[x][3] = array[x][1];
                                        array[x][2] = array[x][0];
                                        array[x][1] = 0;
                                        array[x][0] = 0;
                                        doAction = true;
                                    }
                                }
                                else//(x,0)没数
                                {
                                    array[x][3] = array[x][1];
                                    array[x][1] = 0;
                                    doAction = true;
                                }
                            }
                            else//(x,1)没数
                            {
                                array[x][3] = array[x][0];
                                array[x][0] = 0;
                                doAction = true;
                            }
                        }
                    }
                }
                isCaled = false;
            }
        }
        for(int i = 0;i!=4;  i)
            for(int j = 0;j!=4;  j)
                if(array[i][j]==0)
                    full = false;
        //在最后一行添加一个新数
        //随机生成一个坐标
        if(!full)//没有填满,可以再添加
        {
            do
            {
             xAddLoc = qrand()%4;
             yAddLoc = qrand()%4;
            }while(array[xAddLoc][yAddLoc]);
            is2 = qrand()%3;//当随机数是1或2时,is2为true,当随机数是0时,is2为false,所以有1/3的概率添加4,
                            //2/3的概率添加2
            if(is2)
                array[xAddLoc][yAddLoc]=2;
            else
                array[xAddLoc][yAddLoc]=4;
        }
    }
    else
        return ;
    //显示新数字。。。

    ui->label00->setText(QString::number(array[0][0])=="0"?" ":QString::number(array[0][0]));
    ui->label01->setText(QString::number(array[0][1])=="0"?" ":QString::number(array[0][1]));
    ui->label02->setText(QString::number(array[0][2])=="0"?" ":QString::number(array[0][2]));
    ui->label03->setText(QString::number(array[0][3])=="0"?" ":QString::number(array[0][3]));
    ui->label10->setText(QString::number(array[1][0])=="0"?" ":QString::number(array[1][0]));
    ui->label11->setText(QString::number(array[1][1])=="0"?" ":QString::number(array[1][1]));
    ui->label12->setText(QString::number(array[1][2])=="0"?" ":QString::number(array[1][2]));
    ui->label13->setText(QString::number(array[1][3])=="0"?" ":QString::number(array[1][3]));
    ui->label20->setText(QString::number(array[2][0])=="0"?" ":QString::number(array[2][0]));
    ui->label21->setText(QString::number(array[2][1])=="0"?" ":QString::number(array[2][1]));
    ui->label22->setText(QString::number(array[2][2])=="0"?" ":QString::number(array[2][2]));
    ui->label23->setText(QString::number(array[2][3])=="0"?" ":QString::number(array[2][3]));
    ui->label30->setText(QString::number(array[3][0])=="0"?" ":QString::number(array[3][0]));
    ui->label31->setText(QString::number(array[3][1])=="0"?" ":QString::number(array[3][1]));
    ui->label32->setText(QString::number(array[3][2])=="0"?" ":QString::number(array[3][2]));
    ui->label33->setText(QString::number(array[3][3])=="0"?" ":QString::number(array[3][3]));
    ui->sourcePrint->setText(QString::number(source));
    //判断游戏是否结束
    fail = true;
    for(int i = 0;i!=4;  i)
    {
        for(int j = 0;j!=4;  j)
        {
            if(j==3)
            {
                if(array[i][j]==array[i 1][j])
                    fail = false;
            }
            if(i==3)
            {
                if(array[i][j]==array[i][j 1])
                    fail = false;
            }
            if(i<3&&j<3)
            {
                if(array[i][j]==array[i 1][j]||array[i][j]==array[i][j 1])
                    fail = false;
            }
        }
    }
    if(fail&&full)//游戏结束
    {
        ui->label00->setText(" ");
        ui->label01->setText(" ");
        ui->label02->setText(" ");
        ui->label03->setText(" ");
        ui->label10->setText("L");
        ui->label11->setText("O");
        ui->label12->setText("S");
        ui->label13->setText("E");
        ui->label20->setText("L");
        ui->label21->setText("O");
        ui->label22->setText("S");
        ui->label23->setText("E");
        ui->label30->setText(" ");
        ui->label31->setText(" ");
        ui->label32->setText(" ");
        ui->label33->setText(" ");
       // ui->lossLabel->setText("LOSS");
        okPressKey = false;

    }
}

void MyDialog::on_startButton_clicked()//点击开始游戏键
{

    int xf1,xf2,xf3,yf1,yf2,yf3;

    QString string;
    xf1 = xf2 = xf3 = yf1 = yf2 = yf3 = 0;
    for(int i = 0;i!=4;  i)
        for(int j = 0;j!= 4;  j)
            array[i][j] = 0;
    source = 0;
    ui->lossLabel->setText(" ");
    while(((xf1==xf2)&&(yf1==yf2))||((xf1==xf3)&&(yf1==yf3))||((xf2==xf3)&&(yf2==yf3)))//坐标相同则再次随机
    {
        xf1 = qrand()%4;
        xf2 = qrand()%4;
        xf3 = qrand()%4;
        yf1 = qrand()%4;
        yf2 = qrand()%4;
        yf3 = qrand()%4;

    }

    //设置初始值
    array[xf1][yf1] = 2;
    array[xf2][yf2] = 2;
    array[xf3][yf3] = 2;

    //初始化显示
    ui->label00->setText(QString::number(array[0][0])=="0"?" ":QString::number(array[0][0]));
    ui->label01->setText(QString::number(array[0][1])=="0"?" ":QString::number(array[0][1]));
    ui->label02->setText(QString::number(array[0][2])=="0"?" ":QString::number(array[0][2]));
    ui->label03->setText(QString::number(array[0][3])=="0"?" ":QString::number(array[0][3]));
    ui->label10->setText(QString::number(array[1][0])=="0"?" ":QString::number(array[1][0]));
    ui->label11->setText(QString::number(array[1][1])=="0"?" ":QString::number(array[1][1]));
    ui->label12->setText(QString::number(array[1][2])=="0"?" ":QString::number(array[1][2]));
    ui->label13->setText(QString::number(array[1][3])=="0"?" ":QString::number(array[1][3]));
    ui->label20->setText(QString::number(array[2][0])=="0"?" ":QString::number(array[2][0]));
    ui->label21->setText(QString::number(array[2][1])=="0"?" ":QString::number(array[2][1]));
    ui->label22->setText(QString::number(array[2][2])=="0"?" ":QString::number(array[2][2]));
    ui->label23->setText(QString::number(array[2][3])=="0"?" ":QString::number(array[2][3]));
    ui->label30->setText(QString::number(array[3][0])=="0"?" ":QString::number(array[3][0]));
    ui->label31->setText(QString::number(array[3][1])=="0"?" ":QString::number(array[3][1]));
    ui->label32->setText(QString::number(array[3][2])=="0"?" ":QString::number(array[3][2]));
    ui->label33->setText(QString::number(array[3][3])=="0"?" ":QString::number(array[3][3]));
    ui->sourcePrint->setText("0");
    okPressKey = true;
}

void MyDialog::on_aboutButton_clicked()
{
    aboutDialog *abdlg = new aboutDialog(this);
    abdlg->show();
}

void MyDialog::on_helpButton_clicked()
{
    helpDialog *help = new helpDialog(this);
    help->show();
}

标签: 游戏 2048

实例下载地址

c++ 2048游戏 源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 mercury123 发表于: 2020-11-21 20:05 14
我来说两句...根本运行不了啊

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警