嵌入式Linux大作业实现(共34页).doc
《嵌入式Linux大作业实现(共34页).doc》由会员分享,可在线阅读,更多相关《嵌入式Linux大作业实现(共34页).doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上2018-2019学年下学期嵌入式Linux应用程序开发期末大作业专 业: 软件工程 班 级: 1603 学 号: 5姓 名: 赵亮 任课教师: 薛正元 成 绩: 题目内容:在Linux下,用qt编程实现一个小游戏,2048.整体的代码结构如图1: 图1完成后预览如图2: 图2游戏主逻辑说明:1初始生成两个值,要么2,要么42 移动(上下左右四个方向):首先,在行/列上找到当前行第一个为空的值,记录下该位置,再往后找到第一个不为空的值,最后将这两个位置交换。3 合并:1:在 2.移动 中,边界值为空 当交换后的位置与交换后的位置的前一个位置(简称前一个位置)的值相等,
2、前一个位置值*2,删除要移动的值。2:在 2.移动 中,边界值不为空 判断边界值是否与后面第一个不为空的值相等3: 相等,边界值*2,删除第一个不为空的值4:不相等,不做任何操作4:游戏结束:如果出现2048,赢,游戏结束,当方格填满,没有合并项,失败,游戏结束1.注:要记录下该位置在同一回合中是否合并过,避免同一回合多次合并核心步骤:1设定背景样式:void BGWidget:paintEvent(QPaintEvent *event) QStylePainter painter(this); /用style画背景 (会使用setstylesheet中的内容) QStyleOption op
3、t; 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) fo
4、r(int col = 0; col 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 setStyleSheet(bgColor); /透明度 QGraphicsOpacityEffect *m_pGra
5、phicsOpacityEffect = new QGraphicsOpacityEffect(this); m_pGraphicsOpacityEffect-setOpacity(1); this-setGraphicsEffect(m_pGraphicsOpacityEffect); /动画让label慢慢出现 QPropertyAnimation *animation = new QPropertyAnimation(m_pGraphicsOpacityEffect,opacity,this); animation-setEasingCurve(QEasingCurve:Linear);
6、 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 setS
7、tyleSheet(bgColor); this-show(); this-repaint();这里,ui就不贴出了,见源代码。3 游戏主逻辑的设计与实现/初始化void GameWidget:initGame() /初始化分数为0 m_score = 0; m_highScore = 0; /初始化 for(int row = 0;row 4;+row) for(int col = 0;col open(QIODevice:ReadOnly) QByteArray ba = file-readAll(); QJsonDocument d = QJsonDocument:fromJson(ba
8、); QJsonObject json = d.object(); QJsonValue value = json.value(QString(m_highScore); QJsonValue score = json.value(QString(m_score); /最高分数 m_highScore = value.toVariant().toInt(); this-ui-best_2-setText(QString:number(m_highScore); /当前分数 m_score = score.toVariant().toInt(); this-ui-score_3-setText(
9、QString:number(m_score); /文件保存的进度 QJsonValue labelsArr = json.value(QString(labels); QJsonArray arr = labelsArr.toArray(); for(int i = 0;i arr.size(); i+) QJsonValue labelValue = arr.at(i); QJsonArray arr1 = labelValue.toArray(); for(int j = 0; jsetGeometry(x,y,66,66); label-setParent(m_bgWidget); l
10、abelsij = label; labelsij-show(); +m_labelCount; file-close(); / 判断读取的文件是否游戏结束 / 这里可以不用判断,为了防止游戏在结束的时候程序意外关闭 / gameOver(); else /初始化两个标签 for(int i=0;itext() = labelsrowcol-text() int x = labelsrowcol-x(); int y = row * rowHeight + yOffset;/y轴偏移 /动画效果 QPropertyAnimation *animation = new QPropertyAnim
11、ation(temp,geometry); animation-setStartValue(temp-geometry(); animation-setEndValue(QRect(x,y,temp-width(),temp-height(); animation-setDuration(100); animation-setEasingCurve(QEasingCurve:Linear); animation-start(QAbstractAnimation:DeleteWhenStopped); int score = 2*labelsrowcol-text().toInt(); labe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux 作业 实现 34
限制150内