欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Matlab制作一款狗頭翻牌子小游戲

 更新時(shí)間:2022年03月02日 11:13:17   作者:slandarer  
本文將用Matlab制作一個(gè)狗頭翻牌子的小游戲,就是點(diǎn)擊一個(gè)牌子時(shí),該牌子和周圍四個(gè)牌子也會(huì)相應(yīng)發(fā)生變化,想辦法讓所有牌子都在同一面即為游戲勝利。感興趣的可以跟隨小編學(xué)習(xí)一下

0 游戲效果

就是點(diǎn)擊一個(gè)牌子時(shí),該牌子和周圍四個(gè)牌子也會(huì)相應(yīng)發(fā)生變化,想辦法讓所有牌子都在同一面即為游戲勝利。

1 fig界面和背景板

這一段比較簡(jiǎn)單,主要是對(duì)界面和背景板的屬性設(shè)置,我們采用編程的方式調(diào)用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 狗狗牌子與勝利標(biāo)志

2.1 狗狗牌子繪制

我們用1代表一種狗狗,2代表另一種狗狗,dogMat一開(kāi)始全為1表示所有牌子上都是第一種狗狗,imgSource代表兩種狗狗圖片位置,bkgColor代表狗狗卡牌的背景顏色

dogMat=ones(5,5); %數(shù)據(jù)矩陣
imgSource={'images\doga.png','images\dogb.png'}; %狗狗圖片鏈接
bkgColor=[[252 251 238]./255;[222 248 252]./255];%狗狗圖背景顏色

圖片自?。?/p>

doga.png

dogb.png

使用兩層for循環(huán)算好位置構(gòu)造控件:

%繪制5x5個(gè)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

注意我們?yōu)槊總€(gè)圖片設(shè)置一個(gè)UserData屬性,這可以表示圖片的位置,方便我們之后識(shí)別點(diǎn)擊的是哪個(gè)圖片。

2.2 游戲勝利標(biāo)簽

繪制一個(gè)標(biāo)簽顯示游戲勝利:

%獲勝標(biāo)簽
win=false; %是否完成游戲
winLabel=uilabel(ddooggFig);
winLabel.Position=[15 150 330 60];
winLabel.Text='恭喜你解出謎題,請(qǐng)點(diǎn)擊重新開(kāi)始';
winLabel.BackgroundColor=[238 236 225]./255;
winLabel.FontSize=19;
winLabel.FontWeight='bold';
winLabel.HorizontalAlignment='center';
winLabel.FontColor=[113 106 63]./255;

游戲一開(kāi)始標(biāo)簽式是隱藏的贏了之后才會(huì)顯示出來(lái),因此我們先將標(biāo)簽隱藏:

winLabel.Visible='off';

2.3 鼠標(biāo)點(diǎn)擊牌子回調(diào)

%創(chuàng)建uiimage回調(diào)
set(dogMatHdl,'ImageClickedFcn',@clickDog)

? ? function clickDog(~,event)
? ? ? ? if ~win %游戲贏了不做任何操作
? ? ? ? ? ? objNum=event.Source.UserData;
? ? ? ? ? ? %點(diǎn)擊事件的來(lái)源圖片的UserData屬性,與圖片位置相關(guān)
? ? ? ? ? ??
? ? ? ? ? ? crossList=[-1 0;0 1;1 0;0 -1;0 0];
? ? ? ? ? ? %點(diǎn)擊位置上下左右和自身
? ? ? ? ? ??
? ? ? ? ? ? for ii=1:5
? ? ? ? ? ? ? ? changePos=crossList(ii,:)+objNum;%要改變的牌子的位置 ? ?
? ? ? ? ? ? ? ? if all(changePos>=1&changePos<=5)%如果該位置在范圍內(nèi),改變圖片顯示和數(shù)據(jù)矩陣
? ? ? ? ? ? ? ? ? ? dogMat(changePos(1),changePos(2))=mod(dogMat(changePos(1),changePos(2)),2)+1;
? ? ? ? ? ? ? ? ? ? dogMatHdl(changePos(1),changePos(2)).ImageSource=imgSource{dogMat(changePos(1),changePos(2))};
? ? ? ? ? ? ? ? ? ? dogMatHdl(changePos(1),changePos(2)).BackgroundColor=bkgColor(dogMat(changePos(1),changePos(2)),:);
? ? ? ? ? ? ? ? end
? ? ? ? ? ? end
? ? ? ? ? ??
?? ??? ??? ?%如果所有卡牌都一樣,游戲結(jié)束
? ? ? ? ? ? if all(all(dogMat==1))||all(all(dogMat==2))
? ? ? ? ? ? ? ? win=true;
? ? ? ? ? ? ? ? winLabel.Visible='on';
? ? ? ? ? ? end
? ? ? ? end
? ? end

3 游戲難度按鈕組

3.1 按鈕繪制

繪制三個(gè)按鈕,初始 [初級(jí)] 按鈕為被選中狀態(tài),即難度等級(jí)為一級(jí),我們將gameLevel設(shè)置為1,并將 [初級(jí)] 按鈕顏色和其他按鈕做區(qū)分,表示被選中狀態(tài):

gameLevel=1; %游戲難度級(jí)別
%初級(jí)難度按鈕屬性
levelBtn(1)=uibutton(ddooggFig);
levelBtn(1).Position=[10,360,75,30];
levelBtn(1).Text='初級(jí)';
levelBtn(1).FontWeight='bold';
levelBtn(1).FontSize=14;
levelBtn(1).BackgroundColor=[13 141 209]./255;
levelBtn(1).FontColor=[1 1 1];
levelBtn(1).UserData=1;
%中級(jí)難度按鈕屬性
levelBtn(2)=uibutton(ddooggFig);
levelBtn(2).Position=[95,360,75,30];
levelBtn(2).Text='中級(jí)';
levelBtn(2).FontWeight='bold';
levelBtn(2).FontSize=14;
levelBtn(2).BackgroundColor=[2 164 173]./255;
levelBtn(2).FontColor=[1 1 1];
levelBtn(2).UserData=2;
%高級(jí)難度按鈕屬性
levelBtn(3)=uibutton(ddooggFig);
levelBtn(3).Position=[180,360,75,30];
levelBtn(3).Text='高級(jí)';
levelBtn(3).FontWeight='bold';
levelBtn(3).FontSize=14;
levelBtn(3).BackgroundColor=[2 164 173]./255;
levelBtn(3).FontColor=[1 1 1];
levelBtn(3).UserData=3;

3.2 難度選擇回調(diào)

改變gameLevel的數(shù)值,然后改變按鈕顏色

%設(shè)置難度選擇回調(diào)
set(levelBtn,'ButtonPushedFcn',@changeLevel)
    function changeLevel(~,event)
        levelBtn(gameLevel).BackgroundColor=[2 164 173]./255;
        objNum=event.Source.UserData;
        gameLevel=objNum;
        levelBtn(gameLevel).BackgroundColor=[13 141 209]./255;   
    end

4 游戲刷新模塊

4.1 刷新游戲按鈕繪制

restartBtn=uibutton(ddooggFig);
restartBtn.Position=[265,360,85,30];
restartBtn.Text='重新開(kāi)始';
restartBtn.FontWeight='bold';
restartBtn.FontSize=14;
restartBtn.BackgroundColor=[2 164 173]./255;
restartBtn.FontColor=[1 1 1];

4.2 模擬鼠標(biāo)點(diǎn)擊

我們游戲一開(kāi)始和點(diǎn)擊重新開(kāi)始要生成未被完成的游戲局面,最簡(jiǎn)單的生成方式就是模擬鼠標(biāo)點(diǎn)擊隨機(jī)一定數(shù)量的卡牌,點(diǎn)擊次數(shù)越多難度越大,我們之前已經(jīng)有鼠標(biāo)點(diǎn)擊的回調(diào)函數(shù)了:

function clickDog(~,event)

我們發(fā)現(xiàn)我們需要模擬的主要是第二個(gè)參數(shù)event,同時(shí)我們發(fā)現(xiàn)我們需要用到的只有event的Source屬性下的UserData信息,也就是卡牌位置信息:

objNum=event.Source.UserData;

我們便可以構(gòu)造一個(gè)含有UserData信息的結(jié)構(gòu)體,例如:

simEvent.Source.UserData=[1,2];

再通過(guò)如下方式調(diào)用clickDog函數(shù):

clickDog([],simEvent)

就能模擬點(diǎn)擊第一行第二列的牌子,模擬點(diǎn)擊其他牌子操作類似。

4.3 刷新游戲回調(diào)

在程序最后需要調(diào)用一次刷新游戲回調(diào),以保證一點(diǎn)開(kāi)始就產(chǎn)生謎題。

set(restartBtn,'ButtonPushedFcn',@restart)
? ? function restart(~,~)
? ? ?? ?%相關(guān)參數(shù)設(shè)置:
? ? ?? ?%是否獲勝改為否
? ? ?? ?%勝利標(biāo)簽隱藏
? ? ?? ?%數(shù)據(jù)矩陣全為1
? ? ? ? win=false;
? ? ? ? winLabel.Visible='off';
? ? ? ? dogMat=ones(5,5);
? ? ? ??
? ? ? ? %將狗狗牌子恢復(fù)至初始狀態(tài)
? ? ? ? for ii=1:5
? ? ? ? ? ? for jj=1:5
? ? ? ? ? ? ? ? dogMatHdl(ii,jj).ImageSource=imgSource{1};
? ? ? ? ? ? ? ? dogMatHdl(ii,jj).BackgroundColor=bkgColor(1,:);
? ? ? ? ? ? end
? ? ? ? end

?? ??? ?%依據(jù)游戲難度不同選擇不同模擬點(diǎn)擊次數(shù)
? ? ? ? switch gameLevel
? ? ? ? ? ? case 1,changeTimes=3;
? ? ? ? ? ? case 2,changeTimes=5;
? ? ? ? ? ? case 3,changeTimes=11;
? ? ? ? end
?? ?
?? ??? ?%模擬點(diǎn)擊
? ? ? ? for ii=1:changeTimes
? ? ? ? ? ? changePos=randi([1,5],[1,2]);
? ? ? ? ? ? simEvent.Source.UserData=changePos;
? ? ? ? ? ? clickDog([],simEvent)
? ? ? ? end
? ? end
restart()

5 完整代碼

function ddoogg
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;


%繪制狗狗和獲勝標(biāo)簽========================================================
dogMat=ones(5,5); %數(shù)據(jù)矩陣
imgSource={'images\doga.png','images\dogb.png'}; %狗狗圖片鏈接
bkgColor=[[252 251 238]./255;[222 248 252]./255];%狗狗圖背景顏色

%繪制5x5個(gè)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

%獲勝標(biāo)簽
win=false; %是否完成游戲
winLabel=uilabel(ddooggFig);
winLabel.Position=[15 150 330 60];
winLabel.Text='恭喜你解出謎題,請(qǐng)點(diǎn)擊重新開(kāi)始';
winLabel.BackgroundColor=[238 236 225]./255;
winLabel.FontSize=19;
winLabel.FontWeight='bold';
winLabel.HorizontalAlignment='center';
winLabel.FontColor=[113 106 63]./255;
winLabel.Visible='off';


%創(chuàng)建uiimage回調(diào)
set(dogMatHdl,'ImageClickedFcn',@clickDog)
    function clickDog(~,event)
        if ~win
            objNum=event.Source.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<=5)
                    dogMat(changePos(1),changePos(2))=mod(dogMat(changePos(1),changePos(2)),2)+1;
                    dogMatHdl(changePos(1),changePos(2)).ImageSource=imgSource{dogMat(changePos(1),changePos(2))};
                    dogMatHdl(changePos(1),changePos(2)).BackgroundColor=bkgColor(dogMat(changePos(1),changePos(2)),:);
                end
            end
            if all(all(dogMat==1))||all(all(dogMat==2))
                win=true;
                winLabel.Visible='on';
            end
        end
    end

%游戲等級(jí)按鈕==============================================================
gameLevel=1; %游戲難度級(jí)別
%初級(jí)難度按鈕屬性
levelBtn(1)=uibutton(ddooggFig);
levelBtn(1).Position=[10,360,75,30];
levelBtn(1).Text='初級(jí)';
levelBtn(1).FontWeight='bold';
levelBtn(1).FontSize=14;
levelBtn(1).BackgroundColor=[13 141 209]./255;
levelBtn(1).FontColor=[1 1 1];
levelBtn(1).UserData=1;
%中級(jí)難度按鈕屬性
levelBtn(2)=uibutton(ddooggFig);
levelBtn(2).Position=[95,360,75,30];
levelBtn(2).Text='中級(jí)';
levelBtn(2).FontWeight='bold';
levelBtn(2).FontSize=14;
levelBtn(2).BackgroundColor=[2 164 173]./255;
levelBtn(2).FontColor=[1 1 1];
levelBtn(2).UserData=2;
%高級(jí)難度按鈕屬性
levelBtn(3)=uibutton(ddooggFig);
levelBtn(3).Position=[180,360,75,30];
levelBtn(3).Text='高級(jí)';
levelBtn(3).FontWeight='bold';
levelBtn(3).FontSize=14;
levelBtn(3).BackgroundColor=[2 164 173]./255;
levelBtn(3).FontColor=[1 1 1];
levelBtn(3).UserData=3;
%設(shè)置難度選擇回調(diào)
set(levelBtn,'ButtonPushedFcn',@changeLevel)
    function changeLevel(~,event)
        levelBtn(gameLevel).BackgroundColor=[2 164 173]./255;
        objNum=event.Source.UserData;
        gameLevel=objNum;
        levelBtn(gameLevel).BackgroundColor=[13 141 209]./255;   
    end


%刷新游戲按鈕==============================================================
restartBtn=uibutton(ddooggFig);
restartBtn.Position=[265,360,85,30];
restartBtn.Text='重新開(kāi)始';
restartBtn.FontWeight='bold';
restartBtn.FontSize=14;
restartBtn.BackgroundColor=[2 164 173]./255;
restartBtn.FontColor=[1 1 1];
%設(shè)置刷新游戲回調(diào)
set(restartBtn,'ButtonPushedFcn',@restart)
    function restart(~,~)
        win=false;
        winLabel.Visible='off';
        dogMat=ones(5,5);
        for ii=1:5
            for jj=1:5
                dogMatHdl(ii,jj).ImageSource=imgSource{1};
                dogMatHdl(ii,jj).BackgroundColor=bkgColor(1,:);
            end
        end
        switch gameLevel
            case 1,changeTimes=3;
            case 2,changeTimes=5;
            case 3,changeTimes=11;
        end
        for ii=1:changeTimes
            changePos=randi([1,5],[1,2]);
            simEvent.Source.UserData=changePos;
            clickDog([],simEvent)
        end
    end
restart()
end

另:

需要MATLAB版本至少在R2019a及以后,若是以前版本可以嘗試用uiaxes和image進(jìn)行改寫。

總代碼長(zhǎng)度140行左右,快來(lái)試試呀

以上就是利用Matlab制作一款狗頭翻牌子小游戲的詳細(xì)內(nèi)容,更多關(guān)于Matlab狗頭翻牌子游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 實(shí)例代碼講解c++ 繼承特性

    實(shí)例代碼講解c++ 繼承特性

    這篇文章主要介紹了c++ 繼承特性的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • opencv提取輪廓大于某個(gè)閾值的圖像

    opencv提取輪廓大于某個(gè)閾值的圖像

    這篇文章主要為大家詳細(xì)介紹了opencv提取輪廓大于某個(gè)閾值的圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼

    C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼,感興趣的朋友可以參考一下
    2016-05-05
  • 純C++代碼詳解二叉樹(shù)相關(guān)操作

    純C++代碼詳解二叉樹(shù)相關(guān)操作

    二叉樹(shù)(Binary?tree)是樹(shù)形結(jié)構(gòu)的一個(gè)重要類型。許多實(shí)際問(wèn)題抽象出來(lái)的數(shù)據(jù)結(jié)構(gòu)往往是二叉樹(shù)形式。本文將通過(guò)代碼為大家詳細(xì)講講C++二叉樹(shù)的一些常規(guī)操作,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • C語(yǔ)言合并兩個(gè)帶頭節(jié)點(diǎn)升序排列鏈表

    C語(yǔ)言合并兩個(gè)帶頭節(jié)點(diǎn)升序排列鏈表

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言合并兩個(gè)帶頭節(jié)點(diǎn)升序排列鏈表的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • vscode終端中打不開(kāi)conda虛擬包管理的解決

    vscode終端中打不開(kāi)conda虛擬包管理的解決

    本文主要介紹了vscode終端中打不開(kāi)conda虛擬包管理的解決,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++標(biāo)準(zhǔn)模板庫(kù)函數(shù)sort的那些事兒

    C++標(biāo)準(zhǔn)模板庫(kù)函數(shù)sort的那些事兒

    sort函數(shù)是標(biāo)準(zhǔn)模板庫(kù)的函數(shù),已知開(kāi)始和結(jié)束的地址即可進(jìn)行排序,可以用于比較任何容器(必須滿足隨機(jī)迭代器),任何元素,任何條件,執(zhí)行速度一般比qsort要快
    2013-09-09
  • C語(yǔ)言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

    C語(yǔ)言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

    這篇文章主要介紹了C語(yǔ)言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C++實(shí)現(xiàn)延遲的方法詳解

    C++實(shí)現(xiàn)延遲的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)延遲的三個(gè)方法,文中的示例代碼講解詳細(xì),對(duì)我們深入了解C++有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-12-12

最新評(píng)論