0 游戏效果
就是点击一个牌子时,该牌子和周围四个牌子也会相应发生变化,想办法让所有牌子都在同一面即为游戏胜利。
这一段比较简单,主要是对界面和背景板的属性设置,我们采用编程的方式调用app designer控件:
ddooggFig=uifigure('units','pixels',...
'position',[320 120 360 400],...
'Numbertitle','off',...
'menubar','none',...
'resize','off',...
'name','ddoogg',...
'color',[0.98 0.98 0.98]);
bkgLabel=uilabel(ddooggFig);
bkgLabel.Position=[10 10 340 340];
bkgLabel.Text='';
bkgLabel.BackgroundColor=[193 214 232]./255;
我们用1代表一种狗狗,2代表另一种狗狗,dogMat一开始全为1表示所有牌子上都是第一种狗狗,imgSource代表两种狗狗图片位置,bkgColor代表狗狗卡牌的背景颜色
dogMat=ones(5,5); %数据矩阵
imgSource={'images\doga.png','images\dogb.png'}; %狗狗图片链接
bkgColor=[[252 251 238]./255;[222 248 252]./255];%狗狗图背景颜色
图片自取: doga.png dogb.png
使用两层for循环算好位置构造控件:
%绘制5x5个uiimage控件
for i=1:5
for j=1:5
dogMatHdl(i,j)=uiimage(ddooggFig);
dogMatHdl(i,j).Position=[20+65*(j-1),280-65*(i-1),60,60];
dogMatHdl(i,j).ImageSource=imgSource{1};
dogMatHdl(i,j).BackgroundColor=bkgColor(1,:);
dogMatHdl(i,j).UserData=[i,j];
end
end
注意我们为每个图片设置一个UserData属性,这可以表示图片的位置,方便我们之后识别点击的是哪个图片。
绘制一个标签显示游戏胜利:
%获胜标签
win=false; %是否完成游戏
winLabel=uilabel(ddooggFig);
winLabel.Position=[15 150 330 60];
winLabel.Text='恭喜你解出谜题,请点击重新开始';
winLabel.BackgroundColor=[238 236 225]./255;
winLabel.FontSize=19;
winLabel.FontWeight='bold';
winLabel.HorizontalAlignment='center';
winLabel.FontColor=[113 106 63]./255;
游戏一开始标签式是隐藏的赢了之后才会显示出来,因此我们先将标签隐藏:
winLabel.Visible='off';
2.3 鼠标点击牌子回调
%创建uiimage回调
set(dogMatHdl,'ImageClickedFcn',@clickDog)
function clickDog(~,event)
if ~win %游戏赢了不做任何操作
objNum=event.Source.UserData;
%点击事件的来源图片的UserData属性,与图片位置相关
crossList=[-1 0;0 1;1 0;0 -1;0 0];
%点击位置上下左右和自身
for ii=1:5
changePos=crossList(ii,:)+objNum;%要改变的牌子的位置
if all(changePos>=1&changePos=1&changePos
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?