资源简介
用QT写的一个很好用的2048,给大家分享一下,相互学习
代码片段和文件信息
#include “GameWidget.h“
// 颜色数组 存储每个数字对应的背景色
QColor digitBkg[11] = {QColor::fromRgb(0xFF 0xFF 0xCC) QColor::fromRgb(0xFF 0xFF 0x99)
QColor::fromRgb(0xFF 0xCC 0xCC) QColor::fromRgb(0xFF 0xCC 0x99)
QColor::fromRgb(0xFF 0x99 0x99) QColor::fromRgb(0xFF 0x99 0x66)
QColor::fromRgb(0xFF 0x66 0x66) QColor::fromRgb(0xCC 0x99 0x66)
QColor::fromRgb(0xCC 0x33 0x33) QColor::fromRgb(0xCC 0x00 0x33)
QColor::fromRgb(0xFF 0x00 0x00)};
// 每个方向位置的增量
QPointF dPos[5];
GameWidget::GameWidget(QWidget *parent) :
QGLWidget(QGLFormat(QGL::SampleBuffers) parent)
timer(this)
{
// 连接手势移动信号和相应的槽函数
connect(this SIGNAL(GestureMove(GestureDirect)) SLOT(onGestureMove(GestureDirect)));
// 连接时钟信号和画板更新的槽
connect(&timer SIGNAL(timeout()) this SLOT(update()));
// 初始化board数组
memset(board 0 sizeof(board));
// 分数初始化为0
score = 0;
// 数码个数初始化为2
digitCount = 2;
// 没有在播放动画效果
isAnimating = false;
// 初始化两个方格
init2Block();
}
void GameWidget::init2Block()
{
board[rand() % 4][rand() % 4] = 2;
int i = rand() % 4 j = rand() % 4;
while (board[i][j] != 0)
i = rand() % 4 j = rand() % 4;
board[i][j] = 2;
update();
}
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 move = false combine = false;
// 记录某个格子是否参与过合并
bool isCombined[4][4];
memset(isCombined 0 sizeof(isCombined));
// 处理不同方向
switch (direct)
{
// 向左
case LEFT:
// 循环每一行
for (i = 0; i < 4; i++)
{
/* 初始化j k为0
* 这里j表示要交换的数字列号
* k表示交换到的位置的列号
* */
j = 0 k = 0;
while (true)
{
// 循环找到第一个不是0的数字对应的列号
while (j < 4 && board[i][j] == 0)
j++;
// 如果超过了3则说明搜索完毕 推出循环
if (j > 3)
break;
// 交换两个数字
qSwap(board[i][k] board[i][j]);
if (j != k)
move = true;
// 记录动
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-01-01 16:14 My2048\
文件 19219 2014-05-23 14:54 My2048\GameWidget.cpp
文件 2976 2014-05-23 14:36 My2048\GameWidget.h
文件 428 2014-05-22 14:50 My2048\My2048.pro
文件 13584 2014-12-24 20:08 My2048\My2048.pro.user
文件 29994 2014-05-23 00:27 My2048\My2048.pro.user.3.2-pre1
目录 0 2015-01-01 16:15 My2048\debug\
文件 175 2014-05-21 15:27 My2048\main.cpp
目录 0 2015-01-01 16:15 My2048\release\
文件 3713 2014-05-23 14:33 My2048\widget.cpp
文件 1423 2014-05-23 14:30 My2048\widget.h
- 上一篇:多项式的加法,减法和乘法运算
- 下一篇:软件成本估算报告
相关资源
- mgn-mqt82.exe
- Trojan-Qt5-Windows-0.0.4.rar
- 酒店管理系统基于Qt Creator5)
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- QT,JPEG解码源代码(已完成)
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- MQTT推送Demo
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- QT酷炫界面开发指南《QmlBook》
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- MQTT_3.1protocol_Specific中文版
- 在QT中使用RTP进行视频的采集和传输
- Mini6410 Qt4和Qtopia编程开发指南
- Qt实现Code39条形码
- qt_ffmpeg_mp4_export_and_import.zip
评论
共有 条评论