Matlab實(shí)現(xiàn)貪吃蛇小游戲的示例代碼
由于老師說如果拿MATLAB制作出游戲或者有趣的動(dòng)畫的話。。
平時(shí)成績可以拿滿分
于是。。開始嘗試制作各種matlab小游戲
最初通過Alex的貪吃蛇學(xué)到了一些東西,然后制作了一個(gè)類似的俄羅斯方塊在課堂上展示的(都是動(dòng)的方塊嗯噠)。
后來自己也嘗試寫著玩了一些其他版本的貪吃蛇,并做出了一些改進(jìn)。
補(bǔ)動(dòng)圖:


沒錯(cuò)這就有點(diǎn)類似貪吃蛇大作戰(zhàn)里的蛇啦
然后做出的改進(jìn)包括:
在關(guān)閉窗口時(shí)不報(bào)錯(cuò)的設(shè)置,因?yàn)橛昧藅imer這個(gè)函數(shù),在關(guān)閉圖像時(shí)他會(huì)報(bào)錯(cuò),我們就可以加入一個(gè)回調(diào)函數(shù):
set(gcf,'tag','co','CloseRequestFcn',@clo);
function clo(~,~)
stop(game)
delete(findobj('tag','co'));
clf
close
end
意思是每次有關(guān)閉請求時(shí)就調(diào)用clo這個(gè)函數(shù)
然后為了防止他提示你用遞歸的方式調(diào)用close,
再加上delete(findobj(‘tag’,‘co’));刪除之前的設(shè)定。
完整代碼
function snake
%axis set..............................................................
axis equal
len=40;
axis(0.5+[0,len,0,len])
set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')
set(gca,'color','k')
hold on
%snake and food begining set...........................................
snaketop=[5,5;4.5,5];
body=[5,5;4.5,5;4,5;3.5,5;3,5;2.5,5];
food=[10,10];
direction=[1,0];
long=6;
plotsnake=scatter(gca,body(:,1),body(:,2),120,'w','filled');
plotfood=scatter(gca,food(1),food(2),120,'w','filled');
%timer set.............................................................
set(gcf,'WindowButtonMotionFcn',@snakefcn)
fps = 8;
game = timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @snakegame);
start(game)
%..................................................................................
set(gcf,'tag','co','CloseRequestFcn',@clo);
function clo(~,~)
stop(game)
delete(findobj('tag','co'));
clf
close
end
function snakegame(~,~)
snaketop=[body(1,:)+direction;body(1,:)+1/2*direction];
snaketop(snaketop>len)=snaketop(snaketop>len)-len;
snaketop(snaketop<1)=snaketop(snaketop<1)+len;
body=[snaketop;body];
body(long+1:end,:)=[];
if (snaketop(1,1)-food(1))^2+(snaketop(1,2)-food(2))^2<1
long = long + 2;
food = randi(len, [1, 2]);
end
set(plotfood,'XData',food(1),'YData',food(2))
set(plotsnake,'XData',body(:,1),'YData',body(:,2))
end
function snakefcn(~,~)
xy=get(gca,'CurrentPoint');
x=xy(1,1);y=xy(1,2);
dir=[x-body(1,1),y-body(1,2)];
dis=sqrt((x-body(1,1))^2+(y-body(1,2))^2);
direction=dir/dis;
end
end
以上就是Matlab實(shí)現(xiàn)貪吃蛇小游戲的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Matlab貪吃蛇游戲的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++圖形界面開發(fā)Qt教程:嵌套圓環(huán)示例
這篇文章主要介紹了C++實(shí)現(xiàn)圖形界面開發(fā)Qt教程,涉及坐標(biāo)函數(shù)的應(yīng)用及圖形界面程序設(shè)計(jì),需要的朋友可以參考下,希望能給你帶來幫助2021-08-08
QT設(shè)計(jì)秒表功能(跑步計(jì)時(shí)器)
這篇文章主要為大家詳細(xì)介紹了QT設(shè)計(jì)秒表功能,跑步計(jì)時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
udp socket客戶端和udp服務(wù)端程序示例分享
這篇文章主要介紹了udp socket客戶端和udp服務(wù)端程序示例,需要的朋友可以參考下2014-03-03
Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例
本文主要介紹了Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
C++ OpenCV實(shí)現(xiàn)抖音"藍(lán)線挑戰(zhàn)"特效
這篇文章主要介紹了如何使用OpenCV C++ 實(shí)現(xiàn)抖音上的特效“藍(lán)線挑戰(zhàn)”。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定的幫助,需要的可以參考一下2022-01-01

