用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)
上一篇 2025年10月29日 下午4:01
下一篇 2025年10月29日 下午4:22


相关推荐

  • 数据库课程设计——火车票售票系统「建议收藏」

    数据库课程设计——火车票售票系统「建议收藏」火车票预售系统,为购票用户与卖票管理人员之间搭建平台。让用户能够通过该软件对管理人员发布的车次班进行预购与查询,方便旅客的出行。

    2022年5月19日
    182
  • android自定义toast样式_android设置对话框宽度

    android自定义toast样式_android设置对话框宽度在一般的android开发中我们一般弹出一些提示信息,例如已打开蓝牙,wifi之类的提示,我们都是会选择Toast进行弹出。今天我们的客户提出们应用弹出提示太小,用户不注意的情况下,容易被忽略掉,要弹出的宽度填充整个屏幕,首先想到是不是需要自定义Toast,经过自己的一番研究后,发现不需要自定Toast,用现有的Toast就可以轻松实现了。publicvoidshowToast(Cont

    2025年11月6日
    5
  • HP-UX 六大虚拟化技术之“网络”

    HP-UX 六大虚拟化技术之“网络”

    2021年8月5日
    44
  • executescalar mysql_ExecuteScalar

    executescalar mysql_ExecuteScalar这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

    2022年6月30日
    21
  • 什么是 Servlet 容器?

    什么是 Servlet 容器?目录 1 什么是 Web 服务器 2 什么是 Servlet 容器 3 什么是 Servlet 4 Servlet 容器和 Web 服务器如何处理一个请求的 5 JVM 的作用我们简单的谈一谈关于 Web 服务器 Servlet 容器及其与 JVM 的关系 其实 Servlet 容器只不过是一个 Java 程序 1 什么是 Web 服务器 想要了解什么是 Servl

    2026年3月19日
    2
  • IOS基金会_ UICollectionView简单易用

    IOS基金会_ UICollectionView简单易用

    2022年1月12日
    40

发表回复

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

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