#include <QTime>
#include <QKeyEvent>
#include <QDebug>
#include "game2048.h"
#include "helpdialog.h"
#include "ui_game2048.h"
#include "welcome.h"
Game2048::Game2048(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Game2048),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()));
}
Game2048::~Game2048()
{
delete ui;
}
//键盘按下
void Game2048::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 Game2048::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;
}
基于Qt的多媒体管理系统_怡心系统.rar
需积分: 48 119 浏览量
2020-07-29
23:01:28
上传
评论 1
收藏 23.52MB RAR 举报
獨傲
- 粉丝: 2
- 资源: 1
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈