贪吃蛇游戏的说明

更新时间:2023-11-26 01:51:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

贪吃蛇游戏说明

一、 游戏简介

主要功能:

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

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

界面功能:

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

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

操作功能:

其中游戏的主操作键是↓↑→←。不仅可以通过菜单来进行操作,还可以通过快捷键开操作(crtrl+N --- New Game,ctrl+Q--- Exit)

二、 实现步骤

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

义菜单

2、 设置一些主要的功能,游戏的开始,离开,难易度和有无墙

壁(代码参考)

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

4、 在设置时考虑蛇移动的方向,通过在蛇头没有撞到自身和边

界的前提下,判断蛇是否吃到食物,若吃到了食物,则需要

将吃到的食物作为蛇头,否则需要在原来蛇头的下一个坐标作为蛇头,而蛇尾需要被去除,同时加分。

三、游戏截图

(无墙壁)

(有墙壁)

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

function snake(cmd)

global SNAKE WALL LEVEL BOARD DIRECTION RUNNING FOOD BONUS PAUSE if ~nargin cmd = 'init'; end

if ~(ischar(cmd)||isscalar(cmd)) return; end switch cmd 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)/2 400 300],... 'Colormap',[.1 .71 0;.3 .4 .4;0 0 0;1 1 0],...

'CloseRequestFcn',sprintf('%s(''Stop'');closereq;',mfilename),...

'KeyPressFcn',sprintf('%s(double(get(gcbf,''Currentcharacter'')))',mfilename));

FileMenu = uimenu(f,'Label','&File'); uimenu(FileMenu,'Label','New

Game','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','No

wall','Callback',sprintf('%s(''Wall'')',mfilename),'checked','on')

uimenu(WallMenu,'Label','Wall','Callback',sprintf('%s(''Wall'')',mfilename))

% Create The axes

axes('Units','normalized',... 'Position', [0 0 1 1],... 'Visible','off',... 'DrawMode','fast',... 'NextPlot','replace'); % Add the board

BOARD = image(getTitle,'CDataMapping','scaled'); axis image set(gca,... 'XTick',NaN,... 'YTick',NaN) text(40,30,'0',...

'FontUnits','normalized', ... 'FontSize',0.03, ... 'FontName','FixedWidth',... 'FontWeight','bold',... 'Color',[1 1 1],...

'VerticalAlignment','baseline', ... 'HorizontalAlignment','right',... 'Tag','Score');

SNAKE = [14,20;14,19;14,18;14,17;14,16]; WALL = zeros(30,40); LEVEL = 4;

case 28 % left

if SNAKE(2,2)~=mod(SNAKE(1,2)-2,40)+1 DIRECTION = cmd; end

case 29 % right

if SNAKE(2,2)~=mod(SNAKE(1,2),40)+1 DIRECTION = cmd; end case 30 % up

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

本文来源:https://www.bwwdw.com/article/26kt.html

Top