用App Designer 制作2048小游戏

用App Designer 制作2048小游戏用 AppDesigner 制作 2048 小游戏用 AppDesigner 制作的 2048 MATLAB 版本是 2020b 记录下创作思路 以免日后忘记 APP 界面设计 APP 界面如下 为了好玩 还加入了游戏进行时播放音乐的功能 下面是游戏结束界面 除了按钮和开关部分 其余都可用标签控件制作 游戏结束界面在制作时将其 Visible 属性设为 Off 确保在主界面上层 当判定游戏结束时再将 Visible 属性修改为 On 即可 app gameOverLabe Visible

用App Designer 制作2048小游戏

用App Designer制作的2048,MATLAB版本是2020b。记录下创作思路,以免日后忘记。

APP界面设计

APP界面如下,为了好玩,还加入了游戏进行时播放音乐的功能。用App Designer 制作2048小游戏
下面是游戏结束界面:
用App Designer 制作2048小游戏
除了按钮和开关部分,其余都可用标签控件制作。游戏结束界面在制作时将其Visible属性设为Off(确保在主界面上层),当判定游戏结束时再将Visible属性修改为On即可。


 app.gameOverLabel.Visible = 'on'; app.gameOverLabel2.Visible = 'on'; app.gameOverLabel3.Visible = 'on'; 

用App Designer 制作2048小游戏

规则设计

 temp = ~app.theMatrix(4-i,:).*app.theMatrix(5-i,:); app.theMatrix(4-i,:) = app.theMatrix(4-i,:) + temp; app.theMatrix(5-i,:) = app.theMatrix(5-i,:) - temp; 
 zeroIndex = find(app.theMatrix == 0); 

后端到前端

要把矩阵映射到游戏主界面,有两个需求:一是对应位置的数字显示,其中“0”不显示;二是不同数字对应着不同的背景颜色。这个只需要对每个方格的Text属性和BackGroundColor属性依次赋值就行,注意Text属性应当用字符串类型赋值,为此可以使用string()函数将数值矩阵转换为字符串矩阵。

 strMatrix = string(app.theMatrix); 

特别地,零元素应当转换成空字符串。

 strZeroIndex = strMatrix == "0"; strMatrix(strZeroIndex) = ""; 

每进行一步操作都要将主界面更新一遍,在此更新中分数界面应当一并更新。

按钮回调

按前面所说的方式分别设计向上键、向下键、向左键和向右键的回调函数,包含两部分:一是对矩阵进行修改,二是将修改后的矩阵映射到主界面。点击按钮的任务用键盘也能完成,我们可以添加键盘回调,并在其中关联按钮回调。使用WindowKeyRelease将会按键释放时执行回调。

 function UIFigureWindowKeyRelease(app, event) key = event.Key; switch(key) case {"uparrow","w"} app.buttonUpButtonPushed(); case {"downarrow","s"} app.buttonDownButtonPushed(); case {"leftarrow","a"} app.buttonLeftButtonPushed(); case {"rightarrow","d"} app.buttonRightButtonPushed(); end end 
 f = fopen(app.dataPath,'r'); if f>0 app.bestScore = fread(f,'int32'); fclose(f); end 

运行方式

 function startupFcn(app) app.loadMusic(); app.scoreStart(); app.nextStep(); app.nextStep(); end 

首先,用loadMusic()函数加载音乐,之后我们可以用开关来控制音乐的暂停和播放。接下来用scoreStart()将得分清零,并从文件中读取最高分。然后使用nextStep()刷新界面,因为游戏初始有两个“2”,而nextStep()只能产生一个,所以使用两次。


关于批量创建控件

 Num matlab.ui.control.Label 

其中,Num是控件名,后面的 matlab.ui.control.Label 表明了Num是Label控件。之后,我们写一个创建控件的函数。

 function createNum(app) for i=1:4 for j=1:4 app.Num(i,j) = uilabel(app.UIFigure); app.Num(i,j).BackgroundColor = [0.902 0.902 0.8]; app.Num(i,j).HorizontalAlignment = 'center'; app.Num(i,j).FontName = 'Calibri'; app.Num(i,j).FontSize = 40; app.Num(i,j).Position = [-60+100*j 440-100*i 90 90]; app.Num(i,j).Text = ''; end end end 

注意需要在properties中声明Num的类型才能对控件的属性进行点索引。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232150.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tomcat 设置允许跨域访问「建议收藏」

    tomcat 设置允许跨域访问「建议收藏」既然想到使用tomcat进行跨域的设置,而不使用在项目中设置header来解决,说明你也是tomcat下的资源需要做跨域处理吧?这也是一个统一的允许跨域设置,tomcat下的所有请求都将放开,请注意。具体步骤:1.首先找到你的tomcat所在路径,并在conf文件夹下找到web.xml2.打开该文件,在以下位置加上这段:<filter><…

    2022年9月30日
    4
  • 数模笔记(五):变异系数法

    数模笔记(五):变异系数法数模笔记(一):线性规划、整数规划及非线性规划数模笔记(二):层次分析法数模笔记(三):灰色系统分析方法数模笔记(四):插值与拟合一、原理若某项指标的数值差异较大,能明确区分开各被评价对象,说明该指标的分辨信息丰富,因而应给该指标以较大的权重;反之,若各个被评价对象在某项指标上的数值差异较小,那么这项指标区分各评价对象的能力较弱,因而应给该指标较小的权重。因为方差可以描述取值的离散程度,即某指标的方差反映了该指标的的分辨能力,所以可用方差定义指标的…

    2022年6月8日
    65
  • html中div加滚动条

    html中div加滚动条div加滚动条的两种方法:一、<divstyle=”overflow:scroll;width:400px;height:400px;”></div>记住宽和高一定要设置噢,否则不成的不过在不超出时,会有下面的滚动条,所以不是最好的选择二、<divstyle=”overflow-y:auto;overflow-x:auto;…

    2022年7月12日
    44
  • 自动化运维平台Spug介绍

    自动化运维平台Spug介绍一、概要Spug是一款使用Python+Flask+Vue+Element组件开发的开源运维管理系统,系统前后端分离,项目创建于2017年,2018年2月第一个开源运维平台版本发布,设计为面向中小型企业设计的轻量级无Agent的自动化运维平台,UI基于AntDesign设计,整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能,且二次开发很方便。它采用授权协议AGPL-3.0,使用开发语言PythonJavaScript;软件采用无Agen

    2022年5月13日
    61
  • stm32循迹小车详细制作过程(附加完全版代码)「建议收藏」

    stm32循迹小车详细制作过程(附加完全版代码)「建议收藏」stm32循迹小车详细制作过程一.材料准备1、主控板Stm32f103c8t6(推荐,便宜够用)2、下载器USB转TTL串口模块3、电源12v锂电池组、配套充电器(推荐下图这种,方便,好接线,12v!12v!12v!)4、电机驱动模块L298n电机驱动模块(尽量多备一两个,容易烧)5、循迹模块TCRT5000循迹模块(多买几个,四个吧)6、杜邦线公对公、母对母、公对母(都买上,不贵,消耗品)7、开关避免出现意外还是备一个吧8、小车底座有四个轮的,三个轮的(

    2026年2月3日
    4
  • javascript中条件运算符判断成年_c语言中条件运算符

    javascript中条件运算符判断成年_c语言中条件运算符条件运算符也称三木运算符,三元运算符;例题:// 是否年满18岁 varnum=+prompt(‘请输入年龄’); num>=18&&num>0?alert(‘你已成年’):alert(‘你未满18岁’); // 从两个数中找最大值 varnum1=+prompt(‘输入第一个数字’); varnum2=+prompt(‘输入…

    2022年9月28日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号