用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java多线程面试题(面试必备)

    文章目录一、多线程基础基础知识1.并发编程1.1并发编程的优缺点1.2并发编程的三要素1.3并发和并行有和区别1.4什么是多线程,多线程的优劣?2.线程与进程2.1什么是线程与进程2.2线程与进程的区别2.3用户线程与守护线程2.4什么是线程死锁2.5形成死锁的四个必要条件2.6如何避免死锁3.创建线程的四种方式4.线程状态和基本操作一、多线程基础基础知识1.并发编程1.1并发编程的优缺点优点:充分利用多核CPU的计算能力,通过并发编程的形式将多核CPU的计算.

    2022年4月7日
    35
  • Ubuntu 优化、美化(主题、终端)[通俗易懂]

    Ubuntu 优化、美化(主题、终端)[通俗易懂]Ubuntu优化、美化(主题、终端)零效果图一优化Ubuntu\1系统更新\2安装GDebi(第三方软件安装)\3安装搜狗输入法\4软件卸载,安装4.1卸载libreOffice安装WPS4.2卸载掉亚马逊链接4.3卸载firebox浏览器安装Chrome/Chromium浏览器\5修改更新源\6vim配置\6菜单栏位置\7二美化Ubuntu\1主题1.1安装unity-tweak-tool:1.2Flatabulous主题\

    2022年7月22日
    17
  • php header 404写法 php header函数用法

    php header 404写法 php header函数用法header("HTTP/1.1404NotFound");exit;

    2022年7月1日
    22
  • 妳不能不知道的部落格(zz)

    妳不能不知道的部落格(zz)妳不能不知道的部落格這是我給 微電腦傳真 的稿子 據說是刊登在五月號 第 207 期 上但是由於邀稿者離職之故 大概不會刊登出來了 以下為全文 共約一萬五千字 請注意這些內容使用需註明出處 未經允許不得作為商業使用 商業用書面印刷權目前僅授予微電腦傳真雜誌 妳不能不知道的部落格 Blog 是甚麼碗糕啊 源起 Blog 指的並非任何一套特定的軟體 也不是特定的系統或服務 Blog 實

    2025年7月6日
    2
  • iOS 自我检測

    iOS 自我检測

    2022年1月29日
    50
  • JFinal开发web项目出现故障小记

    JFinal开发web项目出现故障小记

    2022年1月28日
    45

发表回复

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

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