资源简介
qt下简单的2048源码,参考网上的代码进行一些修改,
可以很好的运行
代码片段和文件信息
#include
#include “GameWidget.h“
// 颜色数组 存储每个数字对应的背景色
QColor digitBkg[11] = {QColor::fromRgb(0xEE 0xE5 0xDB) QColor::fromRgb(0xEC 0xE0 0xC8)
QColor::fromRgb(0xF2 0xAF 0x78) QColor::fromRgb(0xEE 0x8A 0x54)
QColor::fromRgb(0xFE 0x76 0x5E) QColor::fromRgb(0xE7 0x58 0xC)
QColor::fromRgb(0xFF 0x66 0x66) QColor::fromRgb(0xF1 0xCF 0x48)
QColor::fromRgb(0xCC 0x33 0x33) QColor::fromRgb(0xE3 0xB9 0x11)
QColor::fromRgb(0xFF 0x00 0x00)};
// 每个方向位置的增量
QPointF dPos[5] = {QPointF(-10 0) QPointF(10 0) QPointF(0 -10) QPointF(0 10) QPointF(-2 -2)};
GameWidget::GameWidget(QWidget *parent) :
QWidget(parent)
{
// 连接手势移动信号和相应的槽函数
connect(this SIGNAL(GestureMove(GestureDirect)) SLOT(onGestureMove(GestureDirect)));
// 初始化board数组
memset(board 0 sizeof(board));
// 随机填入两个2
board[rand() % 4][rand() % 4] = 2;
while(true) {
int x = rand() % 4;
int y = rand() % 4;
if (board[x][y] != 0) {
continue;
}
else {
board[x][y] = 2;
break;
}
}
// 分数初始化为0
score = 0;
// 数码个数初始化为2
digitCount = 2;
isAnimating = false;
cacheImg = NULL;
}
void GameWidget::keyPressEvent(QKeyEvent *event)
{
if (isAnimating)
return;
switch (event->key()) {
case Qt::Key_Left:
emit GestureMove(LEFT);
break;
case Qt::Key_Right:
emit GestureMove(RIGHT);
break;
case Qt::Key_Down:
emit GestureMove(DOWN);
break;
case Qt::Key_Up:
emit GestureMove(UP);
break;
default:
break;
}
QWidget::keyPressEvent(event);
}
void GameWidget::mousePressEvent(QMouseEvent *e)
{
// 获取起点坐标
startPos = e->pos();
}
void GameWidget::mouseReleaseEvent(QMouseEvent *e)
{
// 如果在播放动画效果则直接退出防止重复产生手势事件
if (isAnimating)
return;
// 根据终点坐标和起点坐标计算XY坐标的增量
float dX = (float)(e->pos().x() - startPos.x());
float dY = (float)(e->pos().y() - startPos.y());
// 确定手势方向
if (abs(dX) > abs(dY))
{
if (dX < 0)
emit GestureMove(LEFT);
else
emit GestureMove(RIGHT);
}
else
{
if (dY < 0)
emit GestureMove(UP);
else
emit GestureMove(DOWN);
}
}
void GameWidget::onGestureMove(GestureDirect direct)
{
int i j k;
Animation a;
// 是否合并过方格
bool combine = false;
// 处理不同方向
switch (direct)
{
// 向左
case LEFT:
// 循环每一行
for (i = 0; i < 4; i++)
{
/* 初始化j k为0
* 这里j表示要交换的数字列号
* k表示交换到的位置的列号
* */
j = 0 k = 0 combine = false;
- 上一篇:Qt下tcp和udp的编程
- 下一篇:QZxing解码二维码
相关资源
- 学习cocos2d-x 3.0自己写的游戏2048
- arcgis9.3破解到2048
- 2048小游戏完整项目源码.zip
- zw_2048-master.zip
- Appinventor的2048安卓小游戏,足够简易
- QT小游戏《2048》源码含大量注释
- Linux2048详细注释版-验证可运行
- Qt2048游戏
- 520489f3fa80b0538a60b4f96ea53b56.zip
- 基于arm的车载娱乐系统.zip
- 2048.war games
- 2048-AI-master 的源码
- imagenet-vgg-m-2048
- 极客学院2048游戏项目开发视频及源代
- 2048游戏源码
- ApiCloud 2048 H5版源码
- 2048源代码c#版
- 可自定义2048游戏源码
- 小游戏2048微信版
- 个人写的wince小游戏 2048
- PCI-82548 AMP-2048C Function Library V1.1.pdf
- 蓝宝石 570 580 2048sp BIOS.rar
- 微信小游戏2048
- app inventor游戏2048
- qt写的2048小游戏
- QT 2048小游戏
- 584 2048通用(584.rom)
-
Flash 2048游戏(actionsc
ript3.0) - ios 2048 游戏代码
- 基于QT的2048小游戏
评论
共有 条评论