基本信息
源码名称:c++ 2048游戏 源码下载
源码大小:0.95M
文件格式:.zip
开发语言:C/C++
更新时间:2017-04-03
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
#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(); }