最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Matlab編寫簡易版連連看小游戲

 更新時間:2022年03月04日 10:06:37   作者:slandarer  
連連看作為經(jīng)典的小游戲,一定是很多人的回憶吧。本文將用Matlab實現(xiàn)這一經(jīng)典的游戲,文中示例代碼具有一定的參考價值,感興趣的小伙伴們可以參考一下

這是一款MATLAB連連看小游戲,基本實現(xiàn)了連連看的功能,不過目前沒有寫出死局判定的模塊,日后可能會對其進(jìn)行改進(jìn)。

游戲截圖

游戲組裝說明

我們的變量path輸入的是圖像包的相對路徑或絕對路徑

這里我們由于文件夾名稱就叫“圖片”所以直接path='圖片’是沒啥問題的。

文件夾里就是圖片素材啦,其名稱沒有任何要求,形狀最好是方的,不過不是的話問題也不大,程序會自動將其拉伸成方的。。。。。。。。

我們這里要求的是讀入jpg格式,想要png,jpg都讀的話,。。。。。最簡單的就是直接讀兩次

完整代碼

function ConnectingGame
%連連看圖片導(dǎo)入============================================================
path='圖片';
picInformation=dir(fullfile(path,'*.jpg'));
N=length(picInformation);
for i=1:N
    picList.(['pic',num2str(i)])=...
        imread([path,'\',picInformation(i).name]);
end


%全局變量==================================================================
global selectedPos clickPos
global redLinePnts
global picMat

selectedPos=[];
redLinePnts=[];
%圖片矩陣生成==============================================================
    function createMat(~,~)
        tempMat=zeros(8,6);
        while any(any(tempMat==0))
            zeosPos=find(tempMat==0);
            temprand=rand(1,length(zeosPos));
            [~,tempSort]=sort(temprand);
            tempNum=zeosPos(tempSort(1:2));
            tempMat(tempNum)=randi(N);
        end
        picMat=zeros(10,8);
        picMat(2:9,2:7)=tempMat;
    end

createMat()
%主要框架生成==============================================================
MainFig=figure('units','pixels','position',[750 250 (9*100+10*5+20)*0.5 (7*100+8*5+20)*0.5],...
    'Numbertitle','off','menubar','none','resize','off',...
    'name','ConnectingGame | by slandarer');
axes('parent',MainFig,'position',[0 0 1 1],...
    'XLim', [40 10*100+10*5-40],...
    'YLim', [40 8*100+8*5-40],...
    'color',[0.95,0.95,0.95],...
    'NextPlot','add',...
    'layer','bottom',...
    'Visible','on',...
    'YDir','reverse',...
    'XTick',[], ...
    'YTick',[]);
uh1=uimenu('label','幫助');
uimenu(uh1,'label','重新開始','callback',@restartGame)
for i=2:9
    for j=2:7
        drawPicHdl(i,j)=image([(i-1)*100,i*100]+(i-1)*5,[(j-1)*100,j*100]+(j-1)*5,...
            picList.(['pic',num2str(picMat(i,j))]),'tag',[num2str(i),num2str(j)],...
            'ButtonDownFcn',@clickOnPic);
    end
end


%重新開始函數(shù)==============================================================
    function restartGame(~,~)
        createMat()
        for ii=2:9
            for jj=2:7
                set(drawPicHdl(ii,jj),'CData',picList.(['pic',num2str(picMat(ii,jj))]))
            end
        end
    end


%主函數(shù)====================================================================
    function clickOnPic(object,~)
        redLinePnts=[];
        clickPos=[str2num(object.Tag(1)),str2num(object.Tag(2))];
        if isempty(selectedPos),selectedPos=clickPos;end
        if ~all(selectedPos==clickPos)
            %-------------------------------------------------------------------------------------------------
            condition1=0;condition2=0;
            switch 1
                case any(selectedPos(1)==clickPos(1))
                    condition1=abs(selectedPos(2)-clickPos(2))==1;
                    tempVector1=sort([selectedPos(2),clickPos(2)])+[1 -1];
                    tempSum=sum(picMat(clickPos(1),tempVector1(1):tempVector1(2)));
                    condition2=(tempSum==0)&~isempty(picMat(clickPos(1),tempVector1(1):tempVector1(2)));
                case any(selectedPos(2)==clickPos(2))
                    condition1=abs(selectedPos(1)-clickPos(1))==1;
                    tempVector1=sort([selectedPos(1),clickPos(1)])+[1 -1];
                    tempSum=sum(picMat(tempVector1(1):tempVector1(2),clickPos(2)));
                    condition2=(tempSum==0)&~isempty(picMat(clickPos(1),tempVector1(1):tempVector1(2)));
            end
            if (condition1||condition2)&&picMat(clickPos(1),clickPos(2))==picMat(selectedPos(1),selectedPos(2))
                redLinePnts=[selectedPos;clickPos];
            end
            %-------------------------------------------------------------------------------------------------
            if isempty(redLinePnts)
                tempNode=[selectedPos(1),clickPos(2)];
                tempVector1=[selectedPos(2)+1,clickPos(2)].*(clickPos(2)>selectedPos(2))+...
                    [clickPos(2),selectedPos(2)-1].*(clickPos(2)<=selectedPos(2));
                tempVector2=[selectedPos(1),clickPos(1)-1].*(clickPos(1)>selectedPos(1))+...
                    [clickPos(1)+1,selectedPos(1)].*(clickPos(1)<=selectedPos(1));
                condition1=(sum(picMat(selectedPos(1),tempVector1(1):tempVector1(2)))==0);
                condition2=sum(picMat(tempVector2(1):tempVector2(2),clickPos(2)))==0;
                condition3=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2));
                if all([condition1,condition2,condition3])
                    redLinePnts=[selectedPos;tempNode;clickPos];
                end
            end
            if isempty(redLinePnts)
                tempNode=[clickPos(1),selectedPos(2)];
                tempVector1=[clickPos(2)+1,selectedPos(2)].*(selectedPos(2)>clickPos(2))+...
                    [selectedPos(2),clickPos(2)-1].*(selectedPos(2)<=clickPos(2));
                tempVector2=[clickPos(1),selectedPos(1)-1].*(selectedPos(1)>clickPos(1))+...
                    [selectedPos(1)+1,clickPos(1)].*(selectedPos(1)<=clickPos(1));
                condition1=sum(picMat(clickPos(1),tempVector1(1):tempVector1(2)))==0;
                condition2=sum(picMat(tempVector2(1):tempVector2(2),selectedPos(2)))==0;
                condition3=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2));
                if all([condition1,condition2,condition3])
                    redLinePnts=[selectedPos;tempNode;clickPos];
                end
            end
            %-------------------------------------------------------------------------------------------------
            if isempty(redLinePnts)
                for ii=[selectedPos(1):-1:1,selectedPos(1):10]
                    tempNode1=[ii,selectedPos(2)];
                    tempNode2=[ii,clickPos(2)];
                    tempVector1=[selectedPos(1)+1,ii].*(ii>selectedPos(1))+[ii,selectedPos(1)-1].*(ii<=selectedPos(1));
                    tempVector2=[clickPos(1)+1,ii].*(ii>clickPos(1))+[ii,clickPos(1)-1].*(ii<=clickPos(1));
                    tempVector3=sort([selectedPos(2),clickPos(2)]);
                    condition1=sum(picMat(tempVector1(1):tempVector1(2),selectedPos(2)))==0;
                    condition2=sum(picMat(tempVector2(1):tempVector2(2),clickPos(2)))==0;
                    condition3=sum(picMat(ii,tempVector3(1):tempVector3(2)))==0;
                    condition4=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2));
                    if all([condition1,condition2,condition3,condition4])
                        redLinePnts=[selectedPos;tempNode1;tempNode2;clickPos];
                        break
                    end
                end
            end
            if isempty(redLinePnts)
                for jj=[selectedPos(2):-1:1,selectedPos(2):8]
                    tempNode1=[selectedPos(1),jj];
                    tempNode2=[clickPos(1),jj];
                    tempVector1=[selectedPos(2)+1,jj].*(jj>selectedPos(2))+[jj,selectedPos(2)-1].*(jj<=selectedPos(2));
                    tempVector2=[clickPos(2)+1,jj].*(jj>clickPos(2))+[jj,clickPos(2)-1].*(jj<=clickPos(2));
                    tempVector3=sort([selectedPos(1),clickPos(1)]);
                    condition1=sum(picMat(selectedPos(1),tempVector1(1):tempVector1(2)))==0;
                    condition2=sum(picMat(clickPos(1),tempVector2(1):tempVector2(2)))==0;
                    condition3=sum(picMat(tempVector3(1):tempVector3(2),jj))==0;
                    condition4=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2));
                    if all([condition1,condition2,condition3,condition4])
                        redLinePnts=[selectedPos;tempNode1;tempNode2;clickPos];
                        break
                    end
                end
            end
            %-------------------------------------------------------------------------------------------------
            if ~isempty(redLinePnts)
                redLinePntsX=(redLinePnts(:,1)-1).*100+(redLinePnts(:,1)-1).*5+50;
                redLinePntsY=(redLinePnts(:,2)-1).*100+(redLinePnts(:,2)-1).*5+50;
                RedLine=plot(redLinePntsX,redLinePntsY,'Color',[1 0 0],'LineWidth',2.5);
                pause(0.3)
                delete(RedLine)
                picMat(selectedPos(1),selectedPos(2))=0;
                picMat(clickPos(1),clickPos(2))=0;
                set(drawPicHdl(selectedPos(1),selectedPos(2)),'CData',ones(100,100,3).*0.95);
                set(drawPicHdl(clickPos(1),clickPos(2)),'CData',ones(100,100,3).*0.95);
                selectedPos=[];
            else
                selectedPos=clickPos;
            end    
        end 
    end
end

到此這篇關(guān)于利用Matlab編寫簡易版連連看小游戲的文章就介紹到這了,更多相關(guān)Matlab連連看游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言經(jīng)典順序表真題演練講解

    C語言經(jīng)典順序表真題演練講解

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-04-04
  • C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明

    C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明

    這篇文章主要介紹了C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解Qt中線程的使用方法

    詳解Qt中線程的使用方法

    這篇文章主要為大家詳細(xì)介紹了Qt中線程的使用方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Qt實現(xiàn)數(shù)據(jù)導(dǎo)出到xls的示例代碼

    Qt實現(xiàn)數(shù)據(jù)導(dǎo)出到xls的示例代碼

    導(dǎo)入導(dǎo)出數(shù)據(jù)到csv由于語法簡單,適用場景有限,于是本文將為大家介紹Qt如何實現(xiàn)導(dǎo)出數(shù)據(jù)到xls,感興趣的小伙伴可以跟隨小編一起試一試
    2022-01-01
  • 深入探究C++ string的內(nèi)部究竟是什么樣的

    深入探究C++ string的內(nèi)部究竟是什么樣的

    這篇文章主要給大家介紹了關(guān)于C++ string的內(nèi)部究竟是什么樣的,文中通過示例代碼的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語言回溯法 實現(xiàn)組合數(shù) 從N個數(shù)中選擇M個數(shù)

    C語言回溯法 實現(xiàn)組合數(shù) 從N個數(shù)中選擇M個數(shù)

    在平時的算法的題目中,時常會遇到組合數(shù)相關(guān)的問題,暴力枚舉。在N個數(shù)中挑選M個數(shù)出來。利用for循環(huán)也可以處理,但是可拓展性不強(qiáng),于是寫這個模板供以后參考
    2018-08-08
  • 一文秒懂C語言/C++內(nèi)存管理(推薦)

    一文秒懂C語言/C++內(nèi)存管理(推薦)

    在C++中,內(nèi)存分為:棧、堆、自由存儲區(qū)、全局/靜態(tài)存儲區(qū)、常量存儲區(qū)。這篇文章主要介紹了一文秒懂C語言/C++內(nèi)存管理,需要的朋友可以參考下
    2020-11-11
  • 基于Qt實現(xiàn)Android的圖案密碼效果

    基于Qt實現(xiàn)Android的圖案密碼效果

    這篇文章主要為大家詳細(xì)介紹了如何基于Qt實現(xiàn)Android的圖案密碼效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2024-12-12
  • C++ 中boost::share_ptr智能指針的使用方法

    C++ 中boost::share_ptr智能指針的使用方法

    這篇文章主要介紹了C++ 中boost::share_ptr智能指針的使用方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖)

    Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖)

    這篇文章主要介紹了Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖),需要的朋友可以參考下
    2020-03-03

最新評論

滕州市| 德格县| 温泉县| 陆良县| 凤凰县| 盐边县| 永昌县| 龙陵县| 兴海县| 平谷区| 襄垣县| 余姚市| 陈巴尔虎旗| 岑溪市| 互助| 原平市| 定襄县| 宝坻区| 萝北县| 文水县| 阳谷县| 内乡县| 黑水县| 抚州市| 木兰县| 龙江县| 长乐市| 如皋市| 乐山市| 扎兰屯市| 新龙县| 太谷县| 遂川县| 安岳县| 大厂| 宜州市| 铁力市| 汾西县| 赤壁市| 股票| 巴南区|