用App designer制作数字华容道
用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制作数字华容道相关推荐
- 用App Designer 制作2048小游戏
用App Designer 制作2048小游戏 用App Designer制作的2048,MATLAB版本是2020b.记录下创作思路,以免日后忘记. APP界面设计 APP界面如下,为了好玩,还加入 ...
- APP Designer 制作简易英汉词典的回调函数书写
APP Designer 制作简易英汉词典的回调函数书写 在学习MATLAB 的App Designer 时看到的一个有意思的小项目,主要步骤参考了slandarer 的MATLAB 手把手带你制作第 ...
- matlab制作数字华容道,从技术角度实现实现数字华容道
目的 上周新一期的最强大脑出来了,虽然上季被称为最强黑幕,不过呢.我决定还是看看= =.它里面第一关是叫做数字华容道.说白了,就是和拼图差不多.一开始我准备下一个玩玩的.结果没搜到.所以决定写了一个. ...
- matlab app designer制作软件_gif制作软件app
gif制作软件app是一款功能全面的动图制作工具,支持视频.图片等多种gif制作格式,通过它,可以轻松快速将视频转.图片制作出你想要的GIF动态图片,变得与众不同,堪称是制作GIF表情包的神器.同时该 ...
- MATLAB app designer 制作单选按钮的方法
任务描述:添加单选按钮控件后,如何根据用户不同的选项返回不同的值? selectedButton = app.ButtonGroup.SelectedObject; switch selectedBu ...
- 用MATLAB app designer设计人机交互界面——二阶线性动态电路可视化分析的研究
用MATLAB app designer设计人机交互界面--二阶线性动态电路可视化分析的研究 这是我第一次尝试写博客,我试着给出电路课上要求的电路实验编程.但是电路的类型有点儿多,所以我只以二阶动态电 ...
- MATLAB 版几何画板小工具(App designer)
使用MATLAB App designer制作了一款几何画板小工具,参考了几何画板及oripa等软件: 该程序可以计算得到所有交点位置,并在鼠标移动到交点位置处给予提示,同时属性设置栏可以隐藏(设置按 ...
- matlab中制作软件,在matlab app designer中制作多个3d图形动画
我正试图将我的一个脚本转录到Matlab中的AppDesigner中,以便轻松地分发给学生.其目的是实时显示作用在车辆上6个自由度的力和力矩(基于用户通过操纵杆的输入).我现在使用的是一个非常简单的动 ...
- 制作Python数字华容道(可选择关卡)
制作Python数字华容道(可选择关卡) 由于比赛需要,我这边制作了一份数字华容道,内含有3,4,5阶的数字华容道,开头在壳窗口内选择,运用了随机数模块(random)和图形化用户界面(tkinter ...
- HarmonyOS(鸿蒙)运动手表第二个小游戏app——数字华容道
前言 这次博客是学完鸿蒙应用开发之后,自行开发的鸿蒙小游戏--数字华容道,这篇博客详细地讲了数字华容道的开发思路. 概述 本个demo将从零基础开始完成鸿蒙小游戏APP在可穿戴设备上的编译,此处以运动 ...
最新文章
- Linux 浏览网址汇集
- 第一章:React入门
- 软考信息系统项目管理师_项目范围管理1---软考高级之信息系统项目管理师011
- mysql udf禁用_如何禁用 mysql 的 udf 功能
- oracle 分页过程,oracle存储过程分页的完整例子
- 【渝粤教育】国家开放大学2019年春季 1396药事管理与法规(本) 参考试题
- RedHat 7配置KVM和桥接
- scsi服务器硬盘如何用,实战:不重启服务器添加scsi硬盘
- K线形态识别—三K线之卖出型三日K线组合
- 招商银行笔试题之X游戏
- 3GPP中的各种缩写
- ElementUI el-input 设置 type 类型为 number 时,如何去掉上下指示箭头
- 搜索思维[PPT制作]
- 如何将视频生成二维码?
- LU分解,LDLT分解,Cholesky分解
- BeanCounter for Mac(财务记账软件)
- 小侃设计模式(十五)-命令模式
- Verilgo实现的FPGA奇偶校验
- pr2机器人手臂画圆
- Android 13 针对 Intent filters 安全的再加强