您当前的位置: 首页 >  游戏

slandarer

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

手把手教你用MATLAB制作一款 [狗头翻牌子] 小游戏(点灯游戏)

slandarer 发布时间:2021-07-01 12:47:02 ,浏览量:0

0 游戏效果

就是点击一个牌子时,该牌子和周围四个牌子也会相应发生变化,想办法让所有牌子都在同一面即为游戏胜利。

在这里插入图片描述 在这里插入图片描述

1 fig界面和背景板

这一段比较简单,主要是对界面和背景板的属性设置,我们采用编程的方式调用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;

在这里插入图片描述

2 狗狗牌子与胜利标志 2.1 狗狗牌子绘制

我们用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属性,这可以表示图片的位置,方便我们之后识别点击的是哪个图片。

在这里插入图片描述

2.2 游戏胜利标签

绘制一个标签显示游戏胜利:

%获胜标签
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            
关注
打赏
1664692598
查看更多评论
0.0440s