您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > matlab编写的贪吃蛇游戏
functionsnake(cmd)globalSNAKEWALLLEVELBOARDDIRECTIONRUNNINGFOODBONUSPAUSEif~nargincmd='init';endif~(ischar(cmd)||isscalar(cmd))return;endswitchcmdcase'init'scrsz=get(0,'ScreenSize');f=figure('Name','Snake',...%显示图形窗口的标题'Numbertitle','off',...%标题栏中是否显示’FigureNo.n’,其中n为图形窗口的编号'Menubar','none',...%转换图形窗口菜单条的“关”'Color',[.95.95.95],...'DoubleBuffer','on',...'Position',[(scrsz(3)-400)/2(scrsz(4)-300)/2400300],...'Colormap',[.1.710;.3.4.4;000;110],...'CloseRequestFcn',sprintf('%s(''Stop'');closereq;',mfilename),...'KeyPressFcn',sprintf('%s(double(get(gcbf,''Currentcharacter'')))',mfilename));%当在图形窗口中按下一键时,定义一回调程序%建菜单FileMenu=uimenu(f,'Label','&File');uimenu(FileMenu,'Label','NewGame','Accelerator','N','Callback',sprintf('%s(''NewGame'')',mfilename));uimenu(FileMenu,'Label','Exit','Accelerator','Q','Separator','on','Callback',sprintf('%s(''Stop'');closereq',mfilename));LevelMenu=uimenu(f,'Label','&Level');uimenu(LevelMenu,'Label','1','Callback',sprintf('%s(''Level'')',mfilename))uimenu(LevelMenu,'Label','2','Callback',sprintf('%s(''Level'')',mfilename))uimenu(LevelMenu,'Label','3','Callback',sprintf('%s(''Level'')',mfilename))uimenu(LevelMenu,'Label','4','Callback',sprintf('%s(''Level'')',mfilename),'checked','on')uimenu(LevelMenu,'Label','5','Callback',sprintf('%s(''Level'')',mfilename))WallMenu=uimenu(f,'Label','&Wall');uimenu(WallMenu,'Label','Nowall','Callback',sprintf('%s(''Wall'')',mfilename),'checked','on')uimenu(WallMenu,'Label','Wall','Callback',sprintf('%s(''Wall'')',mfilename))%CreateTheaxesaxes('Units','normalized',...'Position',[0011],...'Visible','off',...'DrawMode','fast',...'NextPlot','replace');%清除图形轴中全部的子对象,并将轴的对象属性设置为系统的默认数值%AddtheboardBOARD=image(getTitle,'CDataMapping','scaled');axisimageset(gca,...'XTick',NaN,...'YTick',NaN)text(40,30,'0',...'FontUnits','normalized',...'FontSize',0.03,...'FontName','FixedWidth',...'FontWeight','bold',...'Color',[111],...'VerticalAlignment','baseline',...'HorizontalAlignment','right',...%标签字符串的对齐方式'Tag','Score');%用户指定的对象标记符SNAKE=[14,20;14,19;14,18;14,17;14,16];WALL=zeros(30,40);LEVEL=4;case28%leftifSNAKE(2,2)~=mod(SNAKE(1,2)-2,40)+1DIRECTION=cmd;endcase29%rightifSNAKE(2,2)~=mod(SNAKE(1,2),40)+1DIRECTION=cmd;endcase30%upifSNAKE(2,1)~=mod(SNAKE(1,1)-2,30)+1DIRECTION=cmd;endcase31%downifSNAKE(2,1)~=mod(SNAKE(1,1),30)+1DIRECTION=cmd;endcase'Level'%ChangeofLevelset(get(get(gcbo,'Parent'),'Children'),'checked','off')set(gcbo,'checked','on')LEVEL=length(get(gcbo,'Label'));case'Wall'%ChangeofWallset(get(get(gcbo,'Parent'),'Children'),'checked','off')set(gcbo,'checked','on')WALL=zeros(30,40);switchget(gcbo,'Label')case'Nowall'case'Wall'WALL([130],:)=1;WALL(:,[140])=1;endfeval(mfilename,'Stop')case'ShowScore'%ChangeofShowScoreswitchget(gcbo,'checked')case'on'set(gcbo,'checked','off')set(findobj(gcbf,'Tag','Score'),'Visible','off')case'off'set(gcbo,'checked','on')set(findobj(gcbf,'Tag','Score'),'Visible','on')endcase'NewGame'%NewGameNorCtrl-Nset(findobj(gcbf,'Tag','Score'),'String','0')SNAKE=[14,20;14,19;14,18;14,17;14,16];DIRECTION=29;%rightBONUS=0;PAUSE=false;feval(mfilename,'Food')feval(mfilename,'Start')case'Start'%StartGameRUNNING=true;bonusCounter=0;foodCounter=0;while(RUNNING)if~PAUSESNAKE=circshift(SNAKE,1);SNAKE(1,:)=SNAKE(2,:);switchDIRECTIONcase28%leftSNAKE(1,2)=mod(SNAKE(1,2)-2,40)+1;case29%rightSNAKE(1,2)=mod(SNAKE(1,2),40)+1;case30%upSNAKE(1,1)=mod(SNAKE(1,1)-2,30)+1;case31%downSNAKE(1,1)=mod(SNAKE(1,1),30)+1;end%CheckifsnakehitsanybarrierifWALL(SNAKE(1,1),SNAKE(1,2))||...sum(ismember(SNAKE(2:end,1),SNAKE(1,1))+...ismember(SNAKE(2:end,2),SNAKE(1,2))==2)pause(.3)delete(findobj(gcbf,'Tag','Bonus'))feval(mfilename,'Stop')set(BOARD,'CData',getGameOver)else%Checkifsnakeeatsbonusifisequal(SNAKE(1,:),BONUS)%Updatescorescorehandle=findobj(gcbf,'Tag','Score');set(scorehandle,'String',...num2str(LEVEL*ceil(bonusCounter/3)+...str2double(get(scorehandle,'String'))))bonusCounter=1;endifBONUSbonusCounter=bonusCounter-1;ifbonusCounter=0delete(findobj(gcbf,'Tag','Bonus'))BONUS=0;endend%Checkifsnakeeatsfoodifisequal(SNAKE(1,:),FOOD)%SnakeGrows!SNAKE(end+1,:)=SNAKE(end,:);%Updatescorescorehandle=findobj(gcbf,'Tag','Score');set(scorehandle,'String',...num2str(LEVEL+str2double(get(scorehandle,'String'))))%Spawnnewfoodfeval(mfilename,'Food')if~BONUS%onlyupdateifnobonusexistbonusCounter=bonusCounter+15;foodCounter=foodCounter+1;endiffoodCounter==4%SpawnnewbonuseveryfourthFoodfeval(mfilename,'Bonus')foodCounter=0;endendfeval(mfilename,'DrawBoard')endendpause(.3/LEVEL)endcase{11232}%PauseGamePAUSE=~PAUSE;ifPAUSE&&RUNNINGset(BOARD,'CData',getPause)endcase'Stop'%StopGameRUNNING=false;set(BOARD,'CData',getTitle)case'Food'%PutfoodontogameboardCData=WALL;fori=1:size(SNAKE,1)CData(SNAKE(i,1),SNAKE(i,2))=1;endind=find(CData'==0);ind=ind(ceil(rand*length(ind)));FOOD=[ceil(ind/40)mod(ind-1,40)+1];case'Bonus'%Putbonusontogameboarddelete(findobj(gcbf,'Tag','Bonus'))CData=WALL;fori=1:size(SNAKE,1)CData(SNAKE(i,1),SNAKE(i,2))=1;endCData(FOOD(1,1),FOOD(1,2))=1;ind=find(CData'==0);ind=ind(ceil(r
本文标题:matlab编写的贪吃蛇游戏
链接地址:https://www.777doc.com/doc-7110164 .html