用App designer制作数字华容道

做完2048后突然想到华容道,但是华容道比较难做,就先做个数字华容道试试。

UI设计

主要控件就是16个展示数字的方块、1个计时用的面板、1个游戏胜利的界面以及1个新游戏按钮。如下图所示。


与2048不同的是,这次的数字方块用的是Button控件,创建该控件代码如下(注意在properties中声明Num类型为matlab.ui.control.Button):

function createNum(app)for i=1:4for j=1:4app.Num(i,j) = uibutton(app.NumHuaRongUIFigure,'push');app.Num(i,j).ButtonPushedFcn = createCallbackFcn(app, @NumButtonPushed,true);app.Num(i,j).BackgroundColor = [0.91 0.77 0.66];app.Num(i,j).Position = [-47.5+j*100 442.5-i*100 95 95];app.Num(i,j).Text = '';app.Num(i,j).FontName = 'Segoe UI Historic';app.Num(i,j).FontSize = 40;app.Num(i,j).FontColor = [1,1,1];app.Num(i,j).Tag = num2str(sub2ind([4 4],i,j));endendend

创建对应的回调函数:

        function NumButtonPushed(app,event)  end

创建胜利面板函数:

        function createGameOverLabel(app)app.gameOverLabel = uilabel(app.NumHuaRongUIFigure);app.gameOverLabel.BackgroundColor = [0.59,0.66,0.64];app.gameOverLabel.Position = [50,140,400,200];app.gameOverLabel.FontName = 'Ink Free';app.gameOverLabel.FontSize = 70;app.gameOverLabel.FontColor = [1,1,1];app.gameOverLabel.HorizontalAlignment = 'center';app.gameOverLabel.Text = "YOU WIN";app.gameOverLabel.Visible = 'off';end

其余控件建议直接使用用户界面创建。

规则设计

  • 游戏初始矩阵

我们需要一个打乱的矩阵才能开始游戏。要实现这个功能可以使用randperm()函数,其可以生成一组各不相同的整数。

            m = randperm(16,16)-1;m = reshape(m,4,4);app.theMatrix = m;
  • 点击空格旁边的方块可以使方块移动到空格

实现这个规则主要有两点:一是判断点击的方块在不在空格周围,二是交换位置。首先,空白格对应矩阵元素为0,利用find()函数可以快速确定其位置,而在空格周围可移动的最多有4个位置。我们可以将点击的方块位置索引传入,并与空白格索引比较。如果两个位置的行索引相等且列索引相差1,或者列索引相等而行索引相差1,则该方块可以与空白格交换。

        function f = isMovable(app,i,j)[x,y] = find(app.theMatrix == 0);if (i==x)&&(abs(j-y)==1)f = true;elseif  (j==y)&&(abs(i-x)==1)f = true;elsef = false;endend

其次,交换位置就是把矩阵两个位置的值修改一下。

function moveNum(app,i,j)if app.isMovable(i,j)[x,y] = find(app.theMatrix == 0);app.theMatrix(x,y) = app.theMatrix(i,j);app.theMatrix(i,j) = 0;end
end
  • 使方块按顺序排列,并且最后一格是空格即宣布游戏胜利

这个规则的实现只需用isequal()函数判断两个矩阵是否相等。

        function y = isGameWin(app)if isequal(app.theMatrix,app.desMatrix)y = true;elsey = false;endend

计时器

为了评估游戏成绩,我们可以加入一个计时器。

  • 在properties中创建一个timer
 theTimer = timer
  • 创建一个timer的初始化函数
        function timerInit(app)app.theTimer.StartDelay = 1;app.theTimer.Period = 1;app.theTimer.ExecutionMode = 'fixedSpacing';app.theTimer.TimerFcn = @(~,~)timerCallback(app);end

上述代码表明timer会有1s的开始延迟,且其每隔1s会执行回调

  • 别忘了创建timer的回调函数
        function timerCallback(app)end
  • 在回调中修改计时器面板的值实现计时功能
            t = str2double(app.TimerPanel.Value);t = t+1;app.TimerPanel.Value = string(t);
  • 使用start()和stop()分别开始和停止计时器,别忘了在关闭APP前先删除计时器(在UIFigure的回调函数中)
        function NumHuaRongUIFigureCloseRequest(app, event)stop(app.theTimer)delete(app.theTimer)delete(app)            end

完善各回调,一个简单的数字华容道就完成了。


工程文件
用App Designer制作的数字华容道

用App designer制作数字华容道相关推荐

  1. 用App Designer 制作2048小游戏

    用App Designer 制作2048小游戏 用App Designer制作的2048,MATLAB版本是2020b.记录下创作思路,以免日后忘记. APP界面设计 APP界面如下,为了好玩,还加入 ...

  2. APP Designer 制作简易英汉词典的回调函数书写

    APP Designer 制作简易英汉词典的回调函数书写 在学习MATLAB 的App Designer 时看到的一个有意思的小项目,主要步骤参考了slandarer 的MATLAB 手把手带你制作第 ...

  3. matlab制作数字华容道,从技术角度实现实现数字华容道

    目的 上周新一期的最强大脑出来了,虽然上季被称为最强黑幕,不过呢.我决定还是看看= =.它里面第一关是叫做数字华容道.说白了,就是和拼图差不多.一开始我准备下一个玩玩的.结果没搜到.所以决定写了一个. ...

  4. matlab app designer制作软件_gif制作软件app

    gif制作软件app是一款功能全面的动图制作工具,支持视频.图片等多种gif制作格式,通过它,可以轻松快速将视频转.图片制作出你想要的GIF动态图片,变得与众不同,堪称是制作GIF表情包的神器.同时该 ...

  5. MATLAB app designer 制作单选按钮的方法

    任务描述:添加单选按钮控件后,如何根据用户不同的选项返回不同的值? selectedButton = app.ButtonGroup.SelectedObject; switch selectedBu ...

  6. 用MATLAB app designer设计人机交互界面——二阶线性动态电路可视化分析的研究

    用MATLAB app designer设计人机交互界面--二阶线性动态电路可视化分析的研究 这是我第一次尝试写博客,我试着给出电路课上要求的电路实验编程.但是电路的类型有点儿多,所以我只以二阶动态电 ...

  7. MATLAB 版几何画板小工具(App designer)

    使用MATLAB App designer制作了一款几何画板小工具,参考了几何画板及oripa等软件: 该程序可以计算得到所有交点位置,并在鼠标移动到交点位置处给予提示,同时属性设置栏可以隐藏(设置按 ...

  8. matlab中制作软件,在matlab app designer中制作多个3d图形动画

    我正试图将我的一个脚本转录到Matlab中的AppDesigner中,以便轻松地分发给学生.其目的是实时显示作用在车辆上6个自由度的力和力矩(基于用户通过操纵杆的输入).我现在使用的是一个非常简单的动 ...

  9. 制作Python数字华容道(可选择关卡)

    制作Python数字华容道(可选择关卡) 由于比赛需要,我这边制作了一份数字华容道,内含有3,4,5阶的数字华容道,开头在壳窗口内选择,运用了随机数模块(random)和图形化用户界面(tkinter ...

  10. HarmonyOS(鸿蒙)运动手表第二个小游戏app——数字华容道

    前言 这次博客是学完鸿蒙应用开发之后,自行开发的鸿蒙小游戏--数字华容道,这篇博客详细地讲了数字华容道的开发思路. 概述 本个demo将从零基础开始完成鸿蒙小游戏APP在可穿戴设备上的编译,此处以运动 ...

最新文章

  1. Linux 浏览网址汇集
  2. 第一章:React入门
  3. 软考信息系统项目管理师_项目范围管理1---软考高级之信息系统项目管理师011
  4. mysql udf禁用_如何禁用 mysql 的 udf 功能
  5. oracle 分页过程,oracle存储过程分页的完整例子
  6. 【渝粤教育】国家开放大学2019年春季 1396药事管理与法规(本) 参考试题
  7. RedHat 7配置KVM和桥接
  8. scsi服务器硬盘如何用,实战:不重启服务器添加scsi硬盘
  9. K线形态识别—三K线之卖出型三日K线组合
  10. 招商银行笔试题之X游戏
  11. 3GPP中的各种缩写
  12. ElementUI el-input 设置 type 类型为 number 时,如何去掉上下指示箭头
  13. 搜索思维[PPT制作]
  14. 如何将视频生成二维码?
  15. LU分解,LDLT分解,Cholesky分解
  16. BeanCounter for Mac(财务记账软件)
  17. 小侃设计模式(十五)-命令模式
  18. Verilgo实现的FPGA奇偶校验
  19. pr2机器人手臂画圆
  20. Android 13 针对 Intent filters 安全的再加强

热门文章

  1. 广东省地方税务局电子办税服务厅--卡在注册ca证书界面的处理
  2. java 加入环境变量_JAVA添加环境变量
  3. java中面向对象的例子_java面向对象九个经典例子程序
  4. AMOS分析技术:路径分析的非递归模型
  5. GD32F103入门实践(一)配置环境,搭建工程模板,烧写程序
  6. Windows一键修改IP、DNS等网络配置(AutoHotkey实现)
  7. 电商小程序如何实现分账?
  8. 小程序积分商城如何实现营销目的
  9. 0到50带圆圈的数字序号有需要的吗:)
  10. 易语言之编译后图标模糊的处理方案