资源简介
用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
- 上一篇:多项式的加法,减法和乘法运算
- 下一篇:软件成本估算报告
相关资源
- 基于QT的浏览器插件
- QTP(UFT)12.01版本安装包及永久使用方
- qt下串口读温度和曲线图
- linux下QT中文滚屏小程序
- qt opengl 2d纹理到球面
- Qt 编程-地址薄开发
- QT版QQ登陆框的账号下拉菜单
- QT制作的时钟,动态展示
- linux下QT5十字路口红绿灯信号灯模拟程
- linux下的QT登陆界面用户名,密码
- Qt实现的delaunay三角分割可视化
- Qt 缩略图列表显示图片
- Qt 文件选择对话框
- 2048.rar
- QT和linux简易远程聊天源代码
- 基于QT的银行排队系统
- 移柯L206 ALIYUN_MQTT开发流程说明
- Qt服务器1源代码
- QT5串口上位机工程
- 基于qt的usb串口通信
- QT绘图程序
- QT单击按钮关闭一个窗口,并且打开一
- Qt实现的文件传输和对话
- QT打开摄像头 拍照 截图
- 基于Qt4RTU模式modbus使用包括slave和ma
- Qt个性化系统托盘的实现
- qt 内建PID模拟仿真
- Qt ActiveX 开发帮助文档
- Qt五子棋程序源码
- ros_qtc_plugin配置脚本
评论
共有 条评论