贪吃蛇游戏的说明.docx

上传人:b****0 文档编号:17187062 上传时间:2023-07-22 格式:DOCX 页数:15 大小:45.06KB
下载 相关 举报
贪吃蛇游戏的说明.docx_第1页
第1页 / 共15页
贪吃蛇游戏的说明.docx_第2页
第2页 / 共15页
贪吃蛇游戏的说明.docx_第3页
第3页 / 共15页
贪吃蛇游戏的说明.docx_第4页
第4页 / 共15页
贪吃蛇游戏的说明.docx_第5页
第5页 / 共15页
贪吃蛇游戏的说明.docx_第6页
第6页 / 共15页
贪吃蛇游戏的说明.docx_第7页
第7页 / 共15页
贪吃蛇游戏的说明.docx_第8页
第8页 / 共15页
贪吃蛇游戏的说明.docx_第9页
第9页 / 共15页
贪吃蛇游戏的说明.docx_第10页
第10页 / 共15页
贪吃蛇游戏的说明.docx_第11页
第11页 / 共15页
贪吃蛇游戏的说明.docx_第12页
第12页 / 共15页
贪吃蛇游戏的说明.docx_第13页
第13页 / 共15页
贪吃蛇游戏的说明.docx_第14页
第14页 / 共15页
贪吃蛇游戏的说明.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

贪吃蛇游戏的说明.docx

《贪吃蛇游戏的说明.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏的说明.docx(15页珍藏版)》请在冰点文库上搜索。

贪吃蛇游戏的说明.docx

贪吃蛇游戏的说明

贪吃蛇游戏说明

一、游戏简介

主要功能:

(1)通过游戏设置的等级设置进入游戏,在游戏过程中可以选择速度快慢程度来选择游戏的难易度。

(2)可以选择有边界阻碍和无边界阻碍的。

界面功能:

(3)游戏的的窗口菜单是自定义的,简单设计了几个菜单项,方便选择开始游戏,离开游戏,速度快慢,有无边界。

(4)在游戏界面的右下方有一个显示当前的得分情况,方便便用户来了解自己的战绩。

操作功能:

其中游戏的主操作键是↓↑→←。

不仅可以通过菜单来进行操作,还可以通过快捷键开操作(crtrl+N---NewGame,ctrl+Q---Exit)

二、实现步骤

1、设置30×40的界面和颜色,设置控制台窗口标题,然后自定义菜单

2、设置一些主要的功能,游戏的开始,离开,难易度和有无墙壁(代码参考)

3、设置蛇和豆子的位置大小和颜色

4、在设置时考虑蛇移动的方向,通过在蛇头没有撞到自身和边界的前提下,判断蛇是否吃到食物,若吃到了食物,则需要将吃到的食物作为蛇头,否则需要在原来蛇头的下一个坐标作为蛇头,而蛇尾需要被去除,同时加分。

三、游戏截图

(无墙壁)

(有墙壁)

 

四、代码(其中标记的地方是参考的)

 

functionsnake(cmd)

globalSNAKEWALLLEVELBOARDDIRECTIONRUNNINGFOODBONUSPAUSE

if~nargin

cmd='init';

end

if~(ischar(cmd)||isscalar(cmd))

return;

end

switchcmd

case'init'

scrsz=get(0,'ScreenSize');

f=figure('Name','Snake',...

'Numbertitle','off',...

'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))

%CreateTheaxes

axes('Units','normalized',...

'Position',[0011],...

'Visible','off',...

'DrawMode','fast',...

'NextPlot','replace');

%Addtheboard

BOARD=image(getTitle,'CDataMapping','scaled');

axisimage

set(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%left

ifSNAKE(2,2)~=mod(SNAKE(1,2)-2,40)+1

DIRECTION=cmd;

end

case29%right

ifSNAKE(2,2)~=mod(SNAKE(1,2),40)+1

DIRECTION=cmd;

end

case30%up

ifSNAKE(2,1)~=mod(SNAKE(1,1)-2,30)+1

DIRECTION=cmd;

end

case31%down

ifSNAKE(2,1)~=mod(SNAKE(1,1),30)+1

DIRECTION=cmd;

end

case'Level'%ChangeofLevel

set(get(get(gcbo,'Parent'),'Children'),'checked','off')

set(gcbo,'checked','on')

LEVEL=length(get(gcbo,'Label'));

case'Wall'%ChangeofWall

set(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;

end

feval(mfilename,'Stop')

case'ShowScore'%ChangeofShowScore

switchget(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')

end

case'NewGame'set(findobj(gcbf,'Tag','Score'),'String','0')

SNAKE=[14,20;14,19;14,18;14,17;14,16];

DIRECTION=29;%right

BONUS=0;

PAUSE=false;

feval(mfilename,'Food')

feval(mfilename,'Start')

case'Start'%StartGame

RUNNING=true;

bonusCounter=0;

foodCounter=0;

while(RUNNING)

if~PAUSE

SNAKE=circshift(SNAKE,1);

SNAKE(1,:

)=SNAKE(2,:

);

switchDIRECTION

case28%left

SNAKE(1,2)=mod(SNAKE(1,2)-2,40)+1;

case29%right

SNAKE(1,2)=mod(SNAKE(1,2),40)+1;

case30%up

SNAKE(1,1)=mod(SNAKE(1,1)-2,30)+1;

case31%down

SNAKE(1,1)=mod(SNAKE(1,1),30)+1;

end

%Checkifsnakehitsanybarrier

ifWALL(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

%Checkifsnakeeatsbonus

ifisequal(SNAKE(1,:

),BONUS)

%Updatescore

scorehandle=findobj(gcbf,'Tag','Score');

set(scorehandle,'String',...

num2str(LEVEL*ceil(bonusCounter/3)+...

str2double(get(scorehandle,'String'))))

bonusCounter=1;

end

ifBONUS

bonusCounter=bonusCounter-1;

ifbonusCounter<=0

delete(findobj(gcbf,'Tag','Bonus'))

BONUS=0;

end

end

%Checkifsnakeeatsfood

ifisequal(SNAKE(1,:

),FOOD)

%SnakeGrows!

SNAKE(end+1,:

)=SNAKE(end,:

);

%Updatescore

scorehandle=findobj(gcbf,'Tag','Score');

set(scorehandle,'String',...

num2str(LEVEL+str2double(get(scorehandle,'String'))))

%Spawnnewfood

feval(mfilename,'Food')

if~BONUS%onlyupdateifnobonusexist

bonusCounter=bonusCounter+15;

foodCounter=foodCounter+1;

end

iffoodCounter==4%SpawnnewbonuseveryfourthFood

feval(mfilename,'Bonus')

foodCounter=0;

end

end

feval(mfilename,'DrawBoard')

end

end

pause(.3/LEVEL)

end

case{11232}%PauseGame

PAUSE=~PAUSE;

ifPAUSE&&RUNNING

set(BOARD,'CData',getPause)

end

case'Stop'%StopGame

RUNNING=false;

set(BOARD,'CData',getTitle)

case'Food'%Putfoodontogameboard

CData=WALL;

fori=1:

size(SNAKE,1)

CData(SNAKE(i,1),SNAKE(i,2))=1;

end

ind=find(CData'==0);

ind=ind(ceil(rand*length(ind)));

FOOD=[ceil(ind/40)mod(ind-1,40)+1];

case'Bonus'%Putbonusontogameboard

delete(findobj(gcbf,'Tag','Bonus'))

CData=WALL;

fori=1:

size(SNAKE,1)

CData(SNAKE(i,1),SNAKE(i,2))=1;

end

CData(FOOD(1,1),FOOD(1,2))=1;

ind=find(CData'==0);

ind=ind(ceil(rand*length(ind)));

BONUS=[ceil(ind/40)mod(ind-1,40)+1];

text(BONUS

(2),BONUS

(1),'\heartsuit',...

'Color',[100],...

'FontUnits','normalized',...

'FontSize',.065,...

'HorizontalAlignment','Center',...

'VerticalAlignment','Middle',...

'Tag','Bonus')

case'DrawBoard'%DrawtheGameBoard

CData=WALL;

fori=1:

size(SNAKE,1)

CData(SNAKE(i,1),SNAKE(i,2))=2;

end

CData(FOOD

(1),FOOD

(2))=4;

set(BOARD,'CData',CData)

end

function[ico,map]=getIcon()

%createsimpleiconmatrix

ico=ones(13)*3;

ico(:

1:

4:

13)=1;

ico(1:

4:

13,:

)=1;

ico(6:

8,6:

8)=2;

ico(6:

8,10:

12)=2;

ico(10:

12,10:

12)=2;

map=[000;.5.5.6;[148182166]/255;];

functiontitle=getTitle()

title=zeros(30,40);

title([4243474872737778104105106107108134135136137138...

164165166167168222223224225226227228252253254255256...

257258282283312313344345346347348374375376377378404...

405406407408464465466494495496522523527528552553557...

558582583587588612613614615616617618642643644645646...

647648672673674675676677678727728729730731732733734...

735736737738757758759760761762763764765766767768787...

788789790791792793794795796797798824825826854855856...

8828838878889129139179189729739749759769779781002...

1003100410051006100710081032103310371038106210631067...

1068109210931097109811221123112411251126115211531154...

11551156])=3;

functiongameover=getGameOver()

gameover=zeros(30,40);

gameover([9596979899100101102103104109110111112113114...

125126127128129130131132133134139140141142143144155...

156163164167168175176185186193194197198205206215216...

219220221222223224229230231232233234245246249250251...

252253254259260261262263264335336337338339340341342...

343344347348349350351352353354365366367368369370371...

372373374377378379380381382383384395396399400415416...

425426429430445446455456457458459460461462463464467...

468469470471472473474485486487488489490491492493494...

497498499500501502503504575576577578579580581582583...

584587588589590591592593594595596605606607608609610...

611612613614617618619620621622623624625626635636647...

648651652655656665666677678681682685686695696697698...

699700701702703704707708711712715716725726727728729...

730731732733734737738741742745746755756785786817818...

819820821822823824827828829830831832833834835836847...

848849850851852853854857858859860861862863864865866...

887888891892917918921922935936937938939940941942943...

944949950953954955956965966967968969970971972973974...

979980983984985986995996999100010031004102510261029...

1030103310341055105610591060106310641067106810691070...

1071107210751076108510861093109410971098109911001101...

110211051106])=1;

functionpause=getPause()

pause=zeros(30,40);

pause([4142434445464748495071727374757677787980101...

102103104105106107108109110131132136137161162166167...

193194195223224225283284285313314315341342346347371...

372376377401402406407431432433434435436437461462463...

464465466467491492493494495496497551552553554555556...

581582583584585586616617646

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2