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


沒(méi)錯(cuò)這就有點(diǎn)類(lèi)似貪吃蛇大作戰(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)閉請(qǐng)求時(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貪吃蛇游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)冒泡排序算法的示例詳解
這篇文章主要介紹了C語(yǔ)言如何實(shí)現(xiàn)冒泡排序算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
深入c語(yǔ)言continue和break的區(qū)別詳解
本篇文章是對(duì)c語(yǔ)言中continue和break的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
VS報(bào)錯(cuò)C6011的問(wèn)題:取消對(duì)NULL指針的引用(解決方法)
這篇文章主要介紹了VS報(bào)錯(cuò)C6011的問(wèn)題:取消對(duì)NULL指針的引用(解決方法),C6011:取消對(duì)NULL指針的引用,發(fā)現(xiàn)是沒(méi)有進(jìn)行空指針的判斷,解決方案跟隨小編一起看看吧2024-01-01
C++面試八股文之std::string實(shí)現(xiàn)方法
這篇文章主要介紹了C++面試八股文:std::string是如何實(shí)現(xiàn)的,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
c語(yǔ)言的cps實(shí)現(xiàn)求fibonacci數(shù)列示例
這篇文章主要介紹了c語(yǔ)言的cps實(shí)現(xiàn)求fibonacci數(shù)列示例,需要的朋友可以參考下2014-03-03
visual studio code 配置C++開(kāi)發(fā)環(huán)境的教程詳解 (windows 開(kāi)發(fā)環(huán)境)
這篇文章主要介紹了 windows 開(kāi)發(fā)環(huán)境下visual studio code 配置C++開(kāi)發(fā)環(huán)境的圖文教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03

