基本信息
源码名称: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();
}