嵌入式Linux大作业实现2048

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2018-2019学年下学期《嵌入式Linux应用程序开发》

期末大作业

专业:软件工程

班级:1603

学号:************

*名:**

任课教师:***

成绩:

题目内容:在Linux下,用qt编程实现一个小游戏,2048. 整体的代码结构如图1:

图1

完成后预览如图2:

图2

游戏主逻辑说明:1初始生成两个值,要么2,要么4

2 移动(上下左右四个方向):首先,在行/列上找到当前行第一个为空的值,

记录下该位置,再往后找到第一个不为空的值,最后将这两个位置交换。

3 合并:1:在 2.移动中,边界值为空当交换后的位置与交换后的位置的前

一个位置(简称前一个位置)的值相等,前一个位置值*2,删除要移动的值。

2:在 2.移动中,边界值不为空判断边界值是否与后面第一个不为空的值相等

3:相等,边界值*2,删除第一个不为空的值

4:不相等,不做任何操作

4:游戏结束:如果出现2048,赢,游戏结束,当方格填满,没有合并项,失败,游戏结束

1.

注:要记录下该位置在同一回合中是否合并过,避免同一回合多次合并核心步骤:

1设定背景样式:

void BGWidget::paintEvent(QPaintEvent *event)

{

QStylePainter painter(this);

//用style画背景(会使用setstylesheet中的内容)

QStyleOption opt;

opt.initFrom(this);

opt.rect=rect();

painter.drawPrimitive(QStyle::PE_Widget, opt);

painter.setPen(QColor(204,192,180));

painter.setBrush(QColor(204,192,180));

//4*4的背景矩阵

const int colWidth = 75;

const int rowHeight = 75;

const int xOffset = 10;

const int yOffset = 10;

for(int row = 0; row < 4;++row)

{

for(int col = 0; col < 4; ++col)

{

//背景方框

int x = col * colWidth + xOffset;

int y = row * rowHeight +yOffset;

painter.drawRoundRect(x,y,65,65,10,10);

}

}

QWidget::paintEvent(event);

}

2 Label类构造:

MyLabel::MyLabel(int text)

{

this->setText(QString::number(text));

this->setAlignment(Qt::Alignment(Qt::AlignCenter));

this->setFont(QFont("Gadugi", 20, QFont::Bold));

//初始化样式

int index = log_2(text) - 1; //计算背景数组索引值

QString fontColor = "color:rgb(255,255,255);";

if(index < 8)

{

fontColor = "color:rgb(119,110,101);";

}

QString bgColor = QString("QLabel{background-color:%1;border-radius:5px;%2}").arg(digitBkg[index]).arg(fontColor );

this->setStyleSheet(bgColor);

//透明度

QGraphicsOpacityEffect *m_pGraphicsOpacityEffect = new QGraphicsOpacityEffect(this);

m_pGraphicsOpacityEffect->setOpacity(1);

this->setGraphicsEffect(m_pGraphicsOpacityEffect);

//动画让label慢慢出现

QPropertyAnimation *animation = new QPropertyAnimation(m_pGraphicsOpacityEffect,"opacity",this);

animation->setEasingCurve(QEasingCurve::Linear);

animation->setDuration(400);

animation->setStartValue(0);

animation->setEndValue(1);

animation->start(QAbstractAnimation::KeepWhenStopped);

}

void MyLabel::reSetText(int text)

{

this->setText(QString::number(text));

int index = log_2(text) - 1; //计算背景数组索引值

QString fontColor = "color:rgb(255,255,255);";

if(index < 8)

{

fontColor = "color:rgb(119,110,101);";

}

QString bgColor = QString("QLabel{background-color:%1;border-radius:5px;%2}").arg(digitBkg[index] ).arg(fontColor);

this->setStyleSheet(bgColor);

this->show();

this->repaint();

}

这里,ui就不贴出了,见源代码。

3 游戏主逻辑的设计与实现

相关文档
最新文档