贪吃蛇游戏用户手册
C语言贪吃蛇程序设计说明书

C语言贪吃蛇程序设计说明书题目:贪吃蛇游戏学校: 系别: 专业班级: 姓名: 学号: 指导老师: 日期:一、设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。
每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。
二、功能设计:本游戏要求实现以下几个功能:(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2) 用户可以调节蛇的运行速度来选择不同的难度;(3) 游戏分多个难度级别;(4) 用户可自选颜色;(5) 记录成绩前五名的游戏玩家;(6) 增加背景音乐;(7) 提高障碍物和游戏级别。
三、程序模块图:贪吃蛇游戏初画控设帮始图制置助模模模模化块块块块墙蛇食移食死变成等音体身物动物亡长绩级效2四、算法流程图:开始初始化界面和蛇身放置食物获取按键开始运动碰到边界是否否蛇吃到食是蛇长大蛇死亡是继续否结束3五、函数原型与功能 1.主函数:void main()启动程序,触动其他函数。
2.初始化:void init ()设置背景框大小、蛇体初始值,随机产生食物。
3.随机产生食物:void setfoodcrd()设置食物生成坐标,0表示食物被吃。
4.画食物:void showfood()用矩形框来画食物5.画蛇:void showsnake()根据蛇的坐标和节数,循环用矩形框来画蛇。
6.蛇移动:void snakemove() 根据按键,重设坐标7.改变蛇的方向:void changeskdir()响应用户的运动方向8.判断蛇是否死亡:void judgeslod判断蛇是否碰到自己或墙。
9.判断蛇是否吃到食物:void judgefood()判断是否吃到食物,吃食后变0,蛇增长一节。
10.结束游戏:void gameover()结束话语,并执行下一步。
六、基本代码#include<graphics.h> #include<conio.h>#include<stdio.h>#pragma comment(lib,"Winmm.lib")#include "MyTimer.h" #define SIZEMAX 100 /*蛇最大长度*/ #define SPEED 100 /*初始速度*/ #define len 20 /*蛇宽度*/#define lm 10 /*蛇每次移动距离*/ #define initlen 600 /*初始化窗口正方形的长度*/ #define Min_snakelen 2 /*蛇的最小长度*/typedef struct {int x,y;}DIR;int snakelen=Min_snakelen; /*蛇的长度*/4int isfood=1; /*食物状态*/ int isover=0; /*游戏状态*/int ispause=1; /*暂停状态*/int ismusic=1; /*音乐播放状态*/ char dir; /*记录蛇运动的方向*/ char c='d';DIR snake[500],food; /*定义蛇节点和食物的类型*/ int speed=SPEED;void drawmap() /*画地图函数*/ {IMAGE img;char str[10];loadimage(&img,"贪吃蛇.jpg"); /*游戏界面*/putimage(0,0,&img);loadimage(&img,"7.jpg"); /*侧栏提示*/putimage(600,0,&img);sprintf(str,"%d",snakelen);setfont(30,0,"宋体");setbkmode(TRANSPARENT);outtextxy(620,10,"操作说明:");setfont(20,0,"宋体");outtextxy(615,50,"awsd控制方向键");outtextxy(615,80,"p键暂停");outtextxy(615,110,"o键继续");outtextxy(615,200,"esc键退出");outtextxy(615,140,"l键暂停音乐");outtextxy(615,170,"k键继续播放");outtextxy(730,250,str);outtextxy(620,250,"蛇当前长度");}void init() /*初始化蛇函数*/ {int i;IMAGE img;snake[0].x=9*len+lm;snake[0].y=4*len+lm;loadimage(&img,"1.jpg");putimage(snake[0].x-lm,snake[0].y-lm,&img); for(i=1;i<snakelen;i++){snake[i].x=len*(9-i)+lm;snake[i].y=len*4+lm;5loadimage(&img, "2.jpg");putimage(snake[i].x-lm,snake[i].y-lm, &img); }}void showsnake() /*画蛇函数*/ {int i;IMAGE img;loadimage(&img, "1.jpg");putimage(snake[0].x-lm,snake[0].y-lm , &img);loadimage(&img, "2.jpg");for(i=1;i<snakelen;i++)putimage(snake[i].x-lm,snake[i].y-lm, &img); }void snakemove() /*画动蛇函数*/ {int i;int mx=snake[0].x;int my=snake[0].y;switch(dir){case 'a':mx-=len;break;case 'd':mx+=len;break;case 'w':my-=len;break;case 's':my+=len;break;default:break;}for(i=snakelen-1;i>=0;i--){snake[i+1].x=snake[i].x;snake[i+1].y=snake[i].y;}snake[0].x=mx;snake[0].y=my;showsnake();}int ceshiover() /*检测游戏结束函数*/ {int i;if(snake[0].x<0||snake[0].x>30*len-lm||snake[0].y<0||snake[0].y>30*len-lm)return 1;for(i=1;i<snakelen;i++)6{if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y) return 1;}return 0;}int foodinsnake() /*检测食物是否在蛇上函数*/ {for(int i=0;i<snakelen;i++)if(food.x==snake[i].x&&food.y==snake[i].y)return 1;elsereturn 0;}void showfood() /*画食物函数*/{IMAGE img;do{food.x=(rand()%30)*len+lm;food.y=(rand()%30)*len+lm;}while(foodinsnake());loadimage(&img, "3.jpg");putimage(food.x-lm,food.y-lm , &img);isfood=0;}void kmusic(){if(ismusic==0)mciSendString("pause mymusic",NULL,0,NULL);if(ismusic==1)mciSendString("resume mymusic",NULL,0,NULL);}void playbkmusic() /*播放背景音乐函数*/{mciSendString("open 超级玛丽.mp3 alias mymusic", NULL, 0, NULL); mciSendString("play mymusic repeat", NULL, 0, NULL);}void playgame() /*玩游戏函数*/{c='d'; //蛇开始向右移动isover=0;7snakelen=Min_snakelen;dir='d';IMAGE img;MyTimer t; //定义精确延时对象int T=200; // 延长时间drawmap(); //画游戏地图init(); //画小蛇初始位置while(!isover){if(ispause){snakemove();FlushBatchDraw(); //批量绘图EndBatchDraw(); //结束批量绘图if(snake[0].x==food.x&&snake[0].y==food.y){ snakelen++;isfood=1;}if(isfood)showfood();if(snakelen<35)T=200-3*snakelen;t.Sleep(T);BeginBatchDraw(); // 开始批量绘图模式,防止闪烁问题drawmap();loadimage(&img, "3.jpg"); // 加载食物图片putimage(food.x-lm,food.y-lm , &img);};//按键控制if(kbhit())c=getch();switch(c){case 'a':if(dir!='d'){dir=c;}break;case 'd':if(dir!='a'){dir=c;}break;case 'w':if(dir!='s'){8dir=c;}break;case 's':if(dir!='w'){dir=c;}break;case 27: exit(0); break; //游戏退出case 'p': ispause=0;break; //p暂停case 'o': ispause=1;break; //o继续游戏case 'l': ismusic=0;break; //l暂停音乐case 'k': ismusic=1;break; //k继续播放default:break;}kmusic(); //音乐控制播放//判断游戏结束if(ceshiover())isover=1;//判断是否重新再来HWND wnd = GetHWnd(); //获取窗口句柄if(isover)if (MessageBox(wnd, "游戏结束。
贪吃蛇游戏

1 绪论随着信息技术的发展,手机的日益普及,人们对于手机的功能要求也越来越高,例如手机游戏、手机上网等。
根据2005年中国手机游戏业务市场研究报告,2005年中国手机游戏市场发展进入快速成长期。
市场规模、用户等都呈上升趋势,手机游戏市场规模将达到12亿。
电子游戏产业已经成为电子产业中一道靓丽的风景线。
甚至可以成为一个国家的重要经济收入来源,而其中的手机网络游戏,是游戏产业未来发展的重要趋势和远景。
但是手机游戏发展中有一个无法回避的问题是目前的手机游戏大多来自于国外,日、韩、欧美的游戏开发商几乎占据了中国手机游戏市场80%的游戏内容,因此在游戏制造领域要赶上日韩和欧美就需要大量人才,但好的游戏设计人才少之又少,能在移动网络平台上开发游戏的人才就更少了,这种状况直接制约了手机游戏的开发。
如果仅仅将国外游戏针本地化的改进,对国内的开发商而言绝非长远之计。
例如:贪吃蛇游戏,目前在PC机上有很多的版本,但是在手机上却还没有一个很好的版本。
本课题旨在开发一个基于J2ME的手机贪吃蛇游戏。
通过此游戏的开发,了解手机游戏的开发过程,较深的认识手机开发环境及开发语言,设计游戏的算法与实现游戏的相关功能。
2 开发工具及相关技术介绍开发一款游戏软件,首先要确定开发语言、开发环境、开发软件平台等相关技术。
等确定了这些技术之后,再开始着手程序的设计和编写。
下面就来简要介绍一下所需的开发工具。
2.1 开发工具贪吃蛇游戏的开发,对计算机硬件的要求并不高,只要能够满足操作系统和开发工具的运行就可以了。
而软件开发工具则包括:操作系统类型、开发程序语言的选择、开发软件包和软件插件。
本课题具体的软件开发工具如下所示:操作系统:Microsoft Windows XP程序语言:Java开发包:Java 2 Platform, Standard EditionSun Micro. J2MEWireless Tool Kit 2.2IDE开发环境:Eclipse 3.1软件插件:EclipseME1.22.2 相关技术在介绍完了开发工具以后,那么就针对本游戏涉及到的一些相关技术作一个简要的介绍。
_贪吃蛇游戏_说明书

湖南工业大学课程设计任务书2012 — 2013 学年第一学期计算机与通信学院学院(系、部)通信工程专业班级姓名学号课程名称:面向对象程序设计设计题目:贪吃蛇游戏完成期限:自2013 年 1 月7 日至2013 年 1 月13 日共 1 周内容及任务一、设计的主要技术参数(1) 游戏中共有贪吃蛇的长度和走向;(2) 随机生成食物(3) 通过响应定时器来实时更新。
二、设计任务(内容)(1) 随机生成贪吃蛇和食物;(2) 控制贪吃蛇的走动;(3) 食物消除判定,已经碰壁判定。
三、设计工作量一周进度安排起止日期工作内容1月7日-1月7日综合我们所学的知识,讨论设计的课题,制定用户需求。
1月8日-1月8日针对用户需求进行组员间的分工。
进一步熟悉自己的模块。
1月8日-1月12日一起完成开发,查找可能的漏洞,修改程序,直至完成程序。
1月13日-1月13日完成设计文档和课程设计说明书。
主要参考资料1.谭浩强.C++面向对象程序设计[M].北京:清华大学出版社,2006.2. Visual C++从入门到精通[M].北京:人民邮电出版社,2010指导教师(签字):年月日系(教研室)主任(签字):年月日面向对象程序设计设计说明书贪吃蛇游戏起止日期:2013 年1 月7 日至2013 年1 月13 日学生姓名班级学号成绩指导教师(签字)计算机与通信学院2013年1 月13日目录一、需求分析 (4)1.1、选题 (4)1.2、功能 (4)1.3、重要的MFC (4)二、概要设计 (4)2.1、设计思路 (4)2.2、程序框图 (5)三、详细设计 (6)四、调试分析 (8)五、用户使用说明 (8)六、测试结果 (9)七、附录或参考资料 (10)一、需求分析1.1、选题接到课程设计任务后,我们对曾经非常感兴趣的几款经典小游戏作了分析并筛选,然后发现使用MFC类库都可以完成这些游戏的编译,但是我们刚刚学习,还不能完全掌握MFC类的使用和复杂的算法,但是我们相信通过一个简单的贪吃蛇游戏可以让我们对MFC得到充分的锻炼。
贪吃蛇说明书

贪吃蛇说明书
蛇的活动区域是由若干个小方格组成的。
当这些小方格呈现灰色时,便表示蛇身。
设整个区域由m×n个方格组成,最左上角的方格坐标为(0, 0)。
蛇是由若干个邻的方格组成的,将这些方格的坐标依蛇头至蛇尾的次序存入到一个数组中便代表了蛇身。
当蛇在游戏区域中“游动”一格时,所对应的数组操作应该是,将新的位置坐标插入到数组头部,同时将数组中最后一个元素删除。
这项工作可以用一个一般的数组来完成,但当进行插入操作时需要自己移动数组中的元素;也可以使用CArray来完成这些工作,CArray的成员函数提供了需要的操作,这样做简单一些。
游戏使用四个方向键来控制蛇的前进方向,在Onkeydown消息处理函数中,根据不同的方向键设置了成员变量m_nDirect的值。
当在菜单中选择开始时,启
动了定时器,游戏开始。
在定时器消息处理函数中,根据m_nDirect的值判断出蛇的下一个位置。
如果没有超出边界或碰到自身,则蛇可以移动到新位置。
如果吃到了食物,则在CArray中只插入而不删除最后一个元素,蛇身长度增加。
当蛇移动一格时,只有蛇头和蛇尾的位置需要重绘,为此专门编写了成员函数ReDisplay来刷新一个小格。
当蛇身碰到游戏区域边界和蛇身时游戏结束,游戏区域显示游戏运行的时间及玩家得分。
贪吃蛇设计说明书

贪吃蛇设计说明书贪吃蛇设计说明书开发小组成员:目录1.需求陈述 (3)2.软件结构 (3)2.1用例图 (3)2.2类图 (4)2.3状态图---------------------------------------------------------------4 3.程序描述 (4)3.1功能 (5)3.2性能 (5)3.3输入项目 (5)3.4输出项目 (6)3.5算法 (6)3.6程序逻辑 (6)4.测试要点-----------------------------------------75.对象设计-------------------------------------------------------------------71.需求陈述1.用户需要开发一款命名为贪吃蛇的休闲小游戏2.开始游戏时,存在一条向右运动的小蛇和蛇需要吃掉的豆3.用户通过键盘的“上下左右”键控制小蛇分别向“上下左右”运动来吃掉豆,同时增加自身的长度4.小蛇吃掉游戏规定数量的豆后,游戏结束5.游戏分为初级、中级、高级6.小蛇不能碰到边界7.小蛇自身不能碰撞8.游戏可以暂停和重新开始9.游戏完成后计算所得分数10.游戏在任何时候都可以退出2.软件结构1.用例图2.类图3.状态图3.程序描述3.1功能小蛇可以通过方向键进行方向的变化。
屏幕上随机的出现豆,贪吃蛇在运动的过程中蛇头可以吃掉出现的的豆。
吃掉豆后,蛇的身体会增长一节。
当蛇的身体碰到四周的墙壁或者是自己的身体时,游戏会结束。
并且,在屏幕的上方有一个分数牌显示,游戏开始时分数为0,每当蛇吃掉一个豆,分数会增加10分。
而在游戏的过程中,玩家可以按菜单上的退出键或点击界面的关闭按钮退出游戏。
3.2性能本款游戏在界面设计上清晰明了、美观大方;在操作上简单、易懂。
有效率高,不易出错的优点。
本游戏着重于娱乐大众,并且有锻炼反应速度的特点。
3.3输入项目1)用户在界面菜单的操作有点击“开始”、“暂停”、“结束”、“重新开始”、“初级”、“中级”、“高级”。
贪吃蛇游戏的说明

贪吃蛇游戏说明一、游戏简介主要功能:(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 PAUSEif ~nargincmd = 'init';endif ~(ischar(cmd)||isscalar(cmd))return;endswitch cmdcase'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'')))',mf ilename));FileMenu = uimenu(f,'Label','&File');uimenu(FileMenu,'Label','NewGame','Accelerator','N','Callback',sprintf('%s(''NewGame'')',mfilenam e));uimenu(FileMenu,'Label','Exit','Accelerator','Q','Separator','on','Ca llback',sprintf('%s(''Stop'');closereq',mfilename));LevelMenu = uimenu(f,'Label','&Level');uimenu(LevelMenu,'Label','1','Callback',sprintf('%s(''Level'')',mfile name))uimenu(LevelMenu,'Label','2','Callback',sprintf('%s(''Level'')',mfile name))uimenu(LevelMenu,'Label','3','Callback',sprintf('%s(''Level'')',mfile name))uimenu(LevelMenu,'Label','4','Callback',sprintf('%s(''Level'')',mfile name),'checked','on')uimenu(LevelMenu,'Label','5','Callback',sprintf('%s(''Level'')',mfile name))WallMenu = uimenu(f,'Label','&Wall');uimenu(WallMenu,'Label','Nowall','Callback',sprintf('%s(''Wall'')',mfilename),'checked','on')uimenu(WallMenu,'Label','Wall','Callback',sprintf('%s(''Wall'')',mfil ename))% Create The axesaxes('Units','normalized',...'Position', [0 0 1 1],...'Visible','off',...'DrawMode','fast',...'NextPlot','replace');% Add the boardBOARD = image(getTitle,'CDataMapping','scaled');axis imageset(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 % leftif SNAKE(2,2)~=mod(SNAKE(1,2)-2,40)+1DIRECTION = cmd;endcase 29 % rightif SNAKE(2,2)~=mod(SNAKE(1,2),40)+1DIRECTION = cmd;endcase 30 % upif SNAKE(2,1)~=mod(SNAKE(1,1)-2,30)+1DIRECTION = cmd;endcase 31 % downif SNAKE(2,1)~=mod(SNAKE(1,1),30)+1DIRECTION = cmd;endcase'Level'% Change of Levelset(get(get(gcbo,'Parent'),'Children'),'checked','off') set(gcbo,'checked','on')LEVEL = length(get(gcbo,'Label'));case'Wall'% Change of Wallset(get(get(gcbo,'Parent'),'Children'),'checked','off') set(gcbo,'checked','on')WALL = zeros(30,40);switch get(gcbo,'Label')case'No wall'case'Wall'WALL([1 30],:) = 1;WALL(:,[1 40]) = 1;endfeval(mfilename,'Stop')case'ShowScore'% Change of Show Scoreswitch get(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'set(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'% Start GameRUNNING = true;bonusCounter = 0;foodCounter = 0;while(RUNNING)if ~PAUSESNAKE = circshift(SNAKE,1);SNAKE(1,:) = SNAKE(2,:);switch DIRECTIONcase 28 % leftSNAKE(1,2) = mod(SNAKE(1,2)-2,40)+1;case 29 % rightSNAKE(1,2) = mod(SNAKE(1,2),40)+1;case 30 % upSNAKE(1,1) = mod(SNAKE(1,1)-2,30)+1;case 31 % downSNAKE(1,1) = mod(SNAKE(1,1),30)+1;end% Check if snake hits any barrierif WALL(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% Check if snake eats bonusif isequal(SNAKE(1,:),BONUS)% Update scorescorehandle = findobj(gcbf,'Tag','Score'); set(scorehandle,'String',...num2str(LEVEL*ceil(bonusCounter/3)+... str2double(get(scorehandle,'String')))) bonusCounter = 1;endif BONUSbonusCounter = bonusCounter-1;if bonusCounter<=0delete(findobj(gcbf,'Tag','Bonus'))BONUS = 0;endend% Check if snake eats foodif isequal(SNAKE(1,:),FOOD)% Snake Grows!SNAKE(end+1,:) = SNAKE(end,:);% Update scorescorehandle = findobj(gcbf,'Tag','Score'); set(scorehandle,'String',...num2str(LEVEL+str2double(get(scorehandle,'String'))))% Spawn new foodfeval(mfilename,'Food')if ~BONUS % only update if no bonus existbonusCounter = bonusCounter+15;foodCounter = foodCounter+1;endif foodCounter==4 % Spawn new bonus every fourth Food feval(mfilename,'Bonus')foodCounter = 0;endendfeval(mfilename,'DrawBoard')endendpause(.3/LEVEL)endcase {112 32} % Pause GamePAUSE=~PAUSE;if PAUSE && RUNNINGset(BOARD,'CData',getPause)endcase'Stop'% Stop GameRUNNING = false;set(BOARD,'CData',getTitle)case'Food'% Put food onto game boardCData = WALL;for i=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'% Put bonus onto game boarddelete(findobj(gcbf,'Tag','Bonus'))CData = WALL;for i=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(rand*length(ind)));BONUS = [ceil(ind/40) mod(ind-1,40)+1];text(BONUS(2),BONUS(1),'\heartsuit',...'Color',[1 0 0],...'FontUnits','normalized',...'FontSize',.065,...'HorizontalAlignment','Center',...'VerticalAlignment','Middle',...'Tag','Bonus')case'DrawBoard'% Draw the Game BoardCData = WALL;for i=1:size(SNAKE,1)CData(SNAKE(i,1),SNAKE(i,2)) = 2;endCData(FOOD(1),FOOD(2)) = 4;set(BOARD,'CData',CData)endfunction [ico,map]=getIcon()% create simple icon matrixico = 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 = [0 0 0;.5 .5 .6;[148 182 166]/255;];function title = getTitle()title = zeros(30,40);title([42 43 47 48 72 73 77 78 104 105 106 107 108 134 135 136 137 138 ... 164 165 166 167 168 222 223 224 225 226 227 228 252 253 254 255 256 ... 257 258 282 283 312 313 344 345 346 347 348 374 375 376 377 378 404 ... 405 406 407 408 464 465 466 494 495 496 522 523 527 528 552 553 557 ... 558 582 583 587 588 612 613 614 615 616 617 618 642 643 644 645 646 ... 647 648 672 673 674 675 676 677 678 727 728 729 730 731 732 733 734 ... 735 736 737 738 757 758 759 760 761 762 763 764 765 766 767 768 787 ... 788 789 790 791 792 793 794 795 796 797 798 824 825 826 854 855 856 ... 882 883 887 888 912 913 917 918 972 973 974 975 976 977 978 1002 ... 1003 1004 1005 1006 1007 1008 1032 1033 1037 1038 1062 1063 1067 ... 1068 1092 1093 1097 1098 1122 1123 1124 1125 1126 1152 1153 1154 ... 1155 1156]) = 3;function gameover = getGameOver()gameover = zeros(30,40);gameover([95 96 97 98 99 100 101 102 103 104 109 110 111 112 113 114 ... 125 126 127 128 129 130 131 132 133 134 139 140 141 142 143 144 155 ... 156 163 164 167 168 175 176 185 186 193 194 197 198 205 206 215 216 ... 219 220 221 222 223 224 229 230 231 232 233 234 245 246 249 250 251 ...252 253 254 259 260 261 262 263 264 335 336 337 338 339 340 341 342 ... 343 344 347 348 349 350 351 352 353 354 365 366 367 368 369 370 371 ... 372 373 374 377 378 379 380 381 382 383 384 395 396 399 400 415 416 ... 425 426 429 430 445 446 455 456 457 458 459 460 461 462 463 464 467 ... 468 469 470 471 472 473 474 485 486 487 488 489 490 491 492 493 494 ... 497 498 499 500 501 502 503 504 575 576 577 578 579 580 581 582 583 ... 584 587 588 589 590 591 592 593 594 595 596 605 606 607 608 609 610 ... 611 612 613 614 617 618 619 620 621 622 623 624 625 626 635 636 647 ... 648 651 652 655 656 665 666 677 678 681 682 685 686 695 696 697 698 ... 699 700 701 702 703 704 707 708 711 712 715 716 725 726 727 728 729 ... 730 731 732 733 734 737 738 741 742 745 746 755 756 785 786 817 818 ... 819 820 821 822 823 824 827 828 829 830 831 832 833 834 835 836 847 ... 848 849 850 851 852 853 854 857 858 859 860 861 862 863 864 865 866 ... 887 888 891 892 917 918 921 922 935 936 937 938 939 940 941 942 943 ... 944 949 950 953 954 955 956 965 966 967 968 969 970 971 972 973 974 ... 979 980 983 984 985 986 995 996 999 1000 1003 1004 1025 1026 1029 ... 1030 1033 1034 1055 1056 1059 1060 1063 1064 1067 1068 1069 1070 ... 1071 1072 1075 1076 1085 1086 1093 1094 1097 1098 1099 1100 1101 ... 1102 1105 1106]) = 1;function pause = getPause()pause = zeros(30,40);pause([41 42 43 44 45 46 47 48 49 50 71 72 73 74 75 76 77 78 79 80 101 ... 102 103 104 105 106 107 108 109 110 131 132 136 137 161 162 166 167 ... 193 194 195 223 224 225 283 284 285 313 314 315 341 342 346 347 371 ... 372 376 377 401 402 406 407 431 432 433 434 435 436 437 461 462 463 ... 464 465 466 467 491 492 493 494 495 496 497 551 552 553 554 555 556 ... 581 582 583 584 585 586 616 617 646 647 671 672 673 674 675 676 677 ... 701 702 703 704 705 706 707 731 732 733 734 735 736 737 791 792 796 ... 797 821 822 826 827 853 854 855 856 857 883 884 885 886 887 913 914 ... 915 916 917 971 972 973 974 975 976 977 1001 1002 1003 1004 1005 ... 1006 1007 1031 1032 1036 1037 1061 1062 1066 1067 1091 1092 1096 ... 1097 1121 1122 1123 1124 1125 1151 1152 1153 1154 1155]) = 1;。
贪吃蛇游戏详细设计说明书

详细设计说明书1 引言1.1 编写目的本说明书在概要设计的基础上,对贪吃蛇游戏的各模块、程序、子系统分别进行了实现层面上的要求和说明。
软件开发小组的产品实现人员阅读和参考本说明进行代码的编写和测试。
本说明书预期的读者是软件开发小组的产品实现人员。
1.2 背景说明:系统名称:贪吃蛇游戏任务提出者:手机策划人员开发者:软件开发小组的产品实现人员用户:NOKIA手机用户运行该程序系统的计算中心:NOKIA手机芯片1.3 定义1.节:一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。
节是蛇身上最小的单位。
2.链表:用来保存每一段的状态,链表的元素单位是节。
且链表的第一个元素表示蛇的头部。
3.坐标系:以左上角那点为(0,0),向右则x递增,向下则y递增。
1.4 参考资料张海藩:《软件工程导论》第五版清华大学出版社肖刚等:《实用软件文档写作》清华大学出版社2 程序系统的组织结构2.1每个模块和子程序的名称、标识符:1Ground类:1)private int TYPE;2)public int[][] rocks=new int[Global.WIDTH][Global.HEIGHT];3)public void setGround(int type){}根据不同的Type值将rocks的不同下标的元素设为1,其他元素为0。
4)public boolean isSnakeEatRock(Snake snake){}判断蛇头的所在的位置在数组rocks中的值是否为1,如果是1,则表示蛇吃到了石头,返回TRUE,否则返回FALSE。
5)public Point getPoint(){}产生一组随机数(x,y),是食物的坐标6)public void drawMe(Graphics g){}将数组rocks中值为1的元素填充为石头颜色。
2Snake类:1)public static int x,y;2)private int oldDirection,newDirection;用于判断newDirection和oldDirection是否为相反方向,用于选取有效方向。
单片机课程设计贪吃蛇说明书

单片机课程实训作品说明书姓名:李兆基完成时间:2016年7月3日一、 作品说明介绍1. 作品名称:贪吃蛇简易游戏机2. 作品实现功能:a) 按上、下、左、右键控制蛇身改变方向;b) 蛇头与食物碰撞时“吃掉”食物,使蛇身变长; c) 复位键使游戏重新开始;d) 暂停/继续键可以暂停、继续游戏3. 选择目的:巩固单片机课程所学知识,真正做到学有所用二、 作品操作介绍1. 作品外观图① ②点阵屏:显示地图、蛇以及食物③STC12C5A60S2单片机:控制整个作品,可以烧录不同的程序 ④微动开关1:向上的按键,用于改变蛇的方向 ⑤微动开关2:向下的按键,用于改变蛇的方向 ⑥微动开关3:向左的按键,用于改变蛇的方向①②③④⑤⑥⑦ ⑧ ⑨⑩ ⑪⑫⑬⑭⑮⑦微动开关4:向右的按键,用于改变蛇的方向⑧微动开关5:复位按键,按下后游戏复位,重新开始⑨微动开关6:暂停/继续按键,控制游戏暂停/继续⑩自锁开关:实现整体的电源总控制(断负)⑪晶振、电容:用于单片机起振,单片机的最小时钟电路⑫排针:用于连接电源正负极以及RXD和TXD⑬电源指示灯:通电时点亮⑭8个1KΩ电阻:限制电流大小⑮10个0Ω电阻:做跳线用2.作品功能介绍及操作说明a)给游戏机上电①将电源正极接在排针处标有VCC的位置②将电源负极接在排针处标有GND的位置③按下自锁开关完成上电b)让贪吃蛇改变方向①按向上键:蛇身向上②按向下键:蛇身向下③按向左键:蛇身向左④按向右键:蛇身向右c)游戏暂停/继续、复位①按暂停/继续键:游戏暂停/继续②按复位键:游戏复位,重新开使三、作品制作说明1.电路原理图2.元件名称型号数量(个)单片机STC12C5A60S2 1单片机底座40引脚 1点阵屏8*8 2微动开关5*5 6晶振12MHz 1电容30pf 2电阻1KΩ8电阻10KΩ 1电阻0Ω10自锁开关3*3 1排针直针4(根)LED 红色 1杜邦线1组4(根)单面挂锡玻纤板1洞洞板10CM*14CM电池盒 1 3.PCBa)正面图(见附录1)b)F5图(见附录2)c)F6图(见附录3)四、产品控制顺序/*******************************************名称:贪吃蛇简易游戏机制作人:李兆基制作时间:2016.6.28修改时间:2016.7.1 (加入吃食物蛇身变长功能)2016.7.3 (处理程序兼容细节)*******************************************/#include<stc12c5a60s2.h>#include<stdlib.h>unsigned char map[16]; //定义一个MAP地图unsigned char line; //列unsigned char snake[45][2]; //定义蛇的大小unsigned char game_reset; //游戏复位unsigned char foodx,foody; //食物的位置sbit Key_left=P3^2; //左sbit Key_up=P3^3; //上sbit Key_down=P3^4; //下sbit Key_right=P3^5; //右sbit Key_start=P3^7; //开始/暂停sbit Key_reset=P3^6; //复位/****************按键所对应的位置***************/void CreateFood(){unsigned char i;i=0;RESET:foodx=rand()%6+1;//rand()函数随即产生食物的横坐标(1~6)foody=rand()%14+1;//rand()函数随即产生食物的纵坐标(1~14)while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44)) //找蛇尾(遍历蛇){if(snake[i][0]==foodx&&snake[i][1]==foody)goto RESET;//如果产生的食物在蛇的节点上,则重新生成食物i++;}}/*********构造食物********/void ClearMap(){unsigned char i;for(i=0;i<16;i++)map[i]=0x81; //清空地图map[0]=map[15]=0xff; //构造墙}/**********初始化地图**********/void ClearSnake(){unsigned char i;for(i=0;i<45;i++)snake[i][0]=snake[i][1]=0x00; //清空蛇节点snake[0][0]=5;snake[0][1]=10; //构造蛇头snake[1][0]=5;snake[1][1]=11;snake[2][0]=5;snake[2][1]=12; //构造蛇身snake[3][0]=44;snake[3][1]=44; //构造蛇尾}/************初始化蛇节点************/void SnakeToMap(void){unsigned int i;ClearMap();i=0x80>>foodx; //获取食物的横坐标map[foody]|=i; //将其横坐标和纵坐标对应的点显示在地图上i=0;while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44)){map[snake[i][1]]|=0x80>>snake[i][0];i++;} //将蛇节点全部显示在地图上}/**********************将蛇以及食物显示在地图上***********************/void Move(unsigned char fx)//fx参数(0为上,1为下,2为左,3右){unsigned char i,snakewx,snakewy;snakewx=snakewy=i=0;while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;snakewx=snake[i-1][0];snakewy=snake[i-1][1]; //扫描蛇节点并且得到尾巴的位置(横纵坐标)switch(fx){case 0:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++; //扫描蛇节点得到节点数for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];} //后节点朝着前节点方向移动snake[0][0]--; //移动蛇头break;case 1:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++; //扫描蛇节点得到节点数for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1]; //后节点朝着前节点方向移动}snake[0][0]++; //移动蛇头break;case 2:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];}snake[0][1]--;break;case 3:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];}snake[0][1]++;break;}if(snake[0][0]==foodx&&snake[0][1]==foody) //蛇吃食物(蛇头的坐标与食物坐标重合){while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;snake[i][0]=snakewx;snake[i][1]=snakewy;snake[i+1][0]=snake[i+1][1]=44; //重新添加(定义)蛇尾CreateFood(); //创建食物}}/************************蛇的移动(按键的方向改变)************************/void delay(unsigned int i){unsigned int j;while(i--)for(j=600;j>0;j--);}/*********************延时函数(接近与1毫秒)*********************/void donghua(void){unsigned int i;for(i=0;i<16;i++){if(i<8){P2=0xff;P1=~(0x80>>i);}else{P1=0xff; //第一块点阵屏亮P2=~(0x80>>(i-8));}P0=0xff;delay(20);}P1=P2=P0=0x00;for(i=0;i<16;i++){if(i<8){P1=0xff;P2=~(0x01<<i);}else{P2=0xff;P1=~(0x01<<(i-8));} //第二块点阵屏亮P0=0xff;delay(20);}}/********开机动画********/bit IsOver(){unsigned char i;game_reset=0;i=0;while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;for(i--;i>0;i--){if(snake[0][0]==snake[i][0]&&snake[0][1]==snake[i][1]){game_reset=1;break;} //遍历蛇节点是否蛇头和蛇身重合}if(snake[0][0]==0||snake[0][0]==7||snake[0][1]==0||snake[0][1]==15) //判断蛇头是否撞墙game_reset=1;return game_reset;}/*********************判断蛇的状态(死亡条件)**********************/void init(void){P0M0=0xff;P0M1=0x00;//PO为强推模式TMOD=0X01;//设定时/计数器方式EA=1; //开启中断ET0=1; //开启定时计数器0TH0=(65536-1000)/256;TL0=(65536-1000)%256; //设置计数初值为1毫秒TR0=1; //开启定时/计数软开关ClearMap(); //初始化地图ClearSnake(); //初始化蛇}/**********初始化函数**********/void main(void){unsigned char fx,i,newfx; //定义方向,新方向,以及变量iunsigned char isStart; //开始/暂停变量newfx=fx=2; //初始化方向donghua();delay(100);i=0;isStart=1;init();CreateFood();while(1){for(i=0;i<20;i++){delay(10);if(fx!=1&&!Key_up&&isStart)//蛇向下移动则向上按键无效{newfx=0;}if(fx!=0&&!Key_down&&isStart) //蛇向上移动则向下按键无效{newfx=1;}if(fx!=3&&!Key_left&&isStart) //蛇向左移动则向右按键无效{newfx=2;}if(fx!=2&&!Key_right&&isStart) //蛇向右移动则向左按键无效{newfx=3;} //按键改变newfx,默认向fx移动if(!Key_start){delay(20);if(!Key_start)if(isStart==1)isStart=0;else if(isStart==0)isStart=1; //暂停/继续改变isStart状态while(!Key_start);delay(20);}if(!Key_reset){delay(20);if(!Key_reset)game_reset=1;while(!Key_reset);delay(20);if(game_reset)return; //复位}if(!isStart)i--; //暂停状态时所执行的死循环delay(10);}if(fx==0&&newfx==1||fx==2&&newfx==3)newfx=fx;elsefx=newfx; //方向冲突时按新方向移动,避免按的太快Move(fx); //移动while(IsOver()){if(!Key_reset){delay(20);if(!Key_reset)game_reset=1;while(!Key_reset);delay(20);if(game_reset)return;}if(!isStart)i--;delay(10);} //当蛇死亡只能激活复位按钮SnakeToMap(); //将蛇显示在地图}}/******主函数******/void display(void) interrupt 1{TR0=0; //关闭软开关TH0=(65536-1000)/256;TL0=(65536-1000)%256; //计数赋值if(line<8){P2=0xff;P1=~(0x80>>line); //选列}else{P1=0xff;P2=~(0x80>>(line-8)); //选列} //两块点阵屏的对接P0=map[line]; //送行line++;if(line==16)line=0;TR0=1; //开启软开关}/********显示函数********/。
贪吃蛇游戏说明书

贪吃蛇游戏说明书学院:计算机工程系专业班级:学号:学生:指导教师:青岛理工大学琴岛学院教务处2011年 7 月 8 日一、游戏说明:贪吃蛇小游戏是一款有趣的益智游戏,可以锻炼大脑的反应能力,在游戏与挑战中娱乐放松自己。
最初的蛇只有3节,随机某个地方出现一个食物,蛇从食物上走过即可吃掉食物并使自己的长度增加一节,游戏自动计时计分,撞到外侧的墙壁或自身会判定为游戏失败。
玩家可以自主设置游戏难度,改变蛇的运动速度,更加人性化。
另外,本游戏新添作弊功能,使游戏更具娱乐性。
二、操作说明:(一)游戏1. 开始:打开游戏之后,点击“开始游戏”按键,以开始游戏。
如图1所示图12.暂停/退出:在游戏进行中,如果因为有事离开可以选择暂停游戏或者退出游戏,当前的游戏会暂停或者退出,暂停的游戏再一次点击暂停游戏可以继续进行。
如图2所示图2(二)设置1.难度设置:游戏设中等为默认难度,用户可自主选择高/中等/容易任意难度,改变蛇的运动速度进行挑战。
选择的难度在游戏窗口显示。
2.声音:“背景声音开/关”,游戏默认开背景声音,点击则可以关闭,再一次点击则可以重新打开。
3.作弊开/关:游戏新加作弊功能,点击作弊开/关,蛇便可以穿过墙循环往复,游戏便不会结束,并可以继续其他功能,再次点击此处,作弊便可以关掉,正常进行游戏。
图3所示图3(三)帮助1.帮助:点击“帮助”,出现“关于Snake”及“游戏规则”。
如图4所示图42.游戏规则:点击“游戏规则”,出现对话框包含“游戏介绍”及“操作规则”的相关内容。
根据操作规则进行游戏。
如图5所示图5(四)其它1.操作规则:(1)游戏操作:键盘操作控制蛇的运动方向,方向键以及w、s、a、d分别对应向上、下、左、右移动。
(2)游戏快捷键:F1:帮助,Space:暂停/开始,F2:开始,F3:退出程序。
2.得分/用时:游戏自动计时。
当蛇吃掉一个食物时,游戏自动计分加1分。
如图6所示图63.游戏结束时点击提示对话框里的“确定”,恢复游戏主窗口。
贪吃蛇小游戏

贪吃蛇小游戏贪吃蛇是一款非常经典的小游戏,目标是控制一条蛇在屏幕上移动,并吃掉尽可能多的食物,同时避免碰到墙壁或自己的身体。
游戏的规则和玩法如下:目标:控制蛇移动,尽可能多地吃到食物,直到蛇的身体变得足够长,或者碰到了障碍物结束游戏。
规则:1. 蛇的身体由一系列相连的方块组成,初始长度为1个方块。
2. 在游戏开始时,一些食物会随机出现在屏幕上。
3. 玩家需要控制蛇的移动,通过吃掉食物来增加蛇的长度。
4. 蛇的移动方向由玩家控制,可以使用方向键或手指滑动屏幕来控制蛇的方向。
5. 如果蛇碰到了墙壁或自己的身体,游戏结束。
6. 当蛇吃掉食物时,分数会增加,同时蛇的身体会变长。
7. 食物会在蛇吃掉后重新随机生成在屏幕上。
8. 玩家可以在游戏结束后选择重新开始或退出游戏。
玩法:1. 控制蛇的移动方向,使其移动到食物的位置,吃掉食物。
2. 当蛇吃掉食物后,蛇的身体会变长,而且速度也会加快。
3. 玩家需要注意蛇的身体,避免碰到自己的身体或墙壁。
4. 玩家可以使用不同的策略,例如在蛇的身体周围留出一些空间,或者追逐食物的最短路径。
5. 在游戏过程中,玩家需要注意蛇的长度和速度,以便更好地控制蛇的移动方向。
术语和技巧:1. 食物:游戏中的目标,玩家需要控制蛇移动到食物的位置,吃掉食物来增加分数和蛇的长度。
2. 蛇的身体:由一系列相连的方块组成,初始长度为1个方块,吃掉食物后会变长。
3. 移动方向:玩家可以使用方向键或手指滑动屏幕来控制蛇的移动方向。
4. 碰撞检测:当蛇碰到墙壁或自己的身体时,游戏结束。
5. 策略:玩家可以使用不同的策略来控制蛇的移动方向,例如在蛇的身体周围留出一些空间,或者追逐食物的最短路径。
6. 长度和速度:随着蛇的长度增加和速度加快,玩家需要更好地控制蛇的移动方向,避免碰到自己的身体或墙壁。
总结:贪吃蛇是一款简单而有趣的小游戏,玩家需要控制蛇的移动方向,吃掉尽可能多的食物,同时避免碰到墙壁或自己的身体。
贪吃蛇逃生操作方法教学

贪吃蛇逃生操作方法教学贪吃蛇是一款非常受欢迎的经典游戏,玩家需要控制一条小蛇在游戏界面上不断地吃食物,使自己不断变长,同时要躲避障碍物和自己的尾巴,直到最后整个地图被填满。
在这个过程中,玩家需要注意操作技巧,灵活应对各种情况,才能获得更高的分数。
下面将教大家如何进行贪吃蛇游戏操作。
1.游戏开始时,玩家操控的小蛇通常位于地图的中央位置,初始长度为1格。
玩家需要利用方向键或触摸屏滑动来控制小蛇的移动方向。
通常方向键向上控制向上移动,向下控制向下移动,向左控制向左移动,向右控制向右移动。
2.小蛇需要不断地吃食物来增加长度。
游戏地图上会随机出现食物,玩家需要操作小蛇去吃掉它。
每吃一个食物,小蛇的长度会增加一格,同时玩家的得分也会增加。
3.随着小蛇的长度增加,游戏的难度也会逐渐增加。
小蛇在移动的过程中,不能碰到自己的尾巴,否则游戏会结束。
因此玩家需要灵活控制小蛇的移动,避免自己的尾巴。
4.在游戏地图上还会出现障碍物,通常是墙或障碍物。
玩家需要躲避这些障碍物,否则小蛇碰到了就会游戏结束。
5.当小蛇吃掉足够的食物后,地图上会生成一个随机的特殊食物,通常是水果或其他特殊形状。
吃掉特殊食物后,小蛇的速度会增加,同时长度也会快速增长一段时间。
玩家需要抓住这个机会,尽可能吃到更多的食物,以获得更高的分数。
6.在游戏过程中,玩家需要谨慎观察地图的情况,合理规划小蛇的移动路线,以尽可能多地吃到食物,同时避开障碍物和自己的尾巴。
这需要不断的练习和观察,才能掌握技巧。
7.当小蛇的长度逐渐增长,地图上几乎全部的空格都被填满后,游戏会结束,同时会显示玩家的得分和排名。
玩家可以尝试不断挑战自己的得分,争取在游戏中取得更高的成绩。
总的来说,贪吃蛇游戏虽然简单,但操作起来却需要一定的技巧和策略。
玩家需要不断地练习,灵活应对各种情况,才能在游戏中取得更好的成绩。
希望以上的操作方法教学可以帮助大家更好地掌握贪吃蛇游戏的操作技巧,享受游戏乐趣。
贪吃蛇的新手入门技巧

贪吃蛇的新手入门技巧
1. 控制蛇的方向:使用键盘上的方向键或滑动屏幕来控制蛇的移动方向。
建议使用方向键而不是滑动屏幕,因为这样能更精确地控制蛇的移动。
2. 规划路径:在控制蛇移动的时候,要提前规划好蛇的路径,避免撞到自己身体或墙壁。
尽量选择空闲的区域移动,避免陷入死胡同。
3. 吃食物:在游戏中出现的食物是蛇生长的关键,吃下食物后蛇的长度会增加。
因此,要尽量吃下食物,但要注意避免撞到自己的身体。
4. 制定策略:制定一些策略来增加蛇的生存时间和长度。
比如,可以选择围绕边界移动,这样可以更容易躲避食物和自己的身体。
5. 集中注意力:在玩贪吃蛇游戏时要保持专注和集中注意力,随时注意蛇的位置和周围的环境。
这样可以更好地控制蛇的移动,并及时回应食物的出现。
6. 练习反应速度:贪吃蛇游戏对于玩家的反应速度要求较高。
通过反复练习,提高自己的反应速度和手眼协调能力,可以更好地应对突发情况。
7. 避免速度过快:当蛇的长度增加时,游戏的速度也会加快。
速度过快会增加操作的难度和失误的概率。
要尽量避免速度过快,需要一定的经验和技巧。
8. 学习他人的技巧:在互联网上可以找到很多贪吃蛇的高手录制的视频或攻略,可以通过观看他们的游戏技巧来学习和借鉴。
同时,还可以向其他玩家请教他们的经验和技巧。
贪吃蛇功能说明书(初稿)

贪吃蛇功能说明书(初稿)贪吃蛇(单词版)软件功能说明书1 开发背景“贪吃蛇”这个游戏对于80,90后的⼈来说是童年的记忆,可以将其说为是⼀个时代的经典,实现了传统贪吃蛇的游戏功能;现在⼈们对英语的重视程度越来越深,现在的⼩孩⼦在幼⼉园的时候就接受了简单的英语教学,熟记较多的英语单词对英语的学习起着巨⼤的积极作⽤,市⾯上的英语单词背记软件对于初⾼中学⽣来说易于接受,但是对于⼩学及以下的学⽣来说,这些软件的使⽤普遍率不⾼,年龄较⼩的孩⼦很难使⽤这些软件保持较长时间的集中⼒背单词。
基于这样的现实情况,【探路者团队】开发了贪吃蛇(单词版)的益智游戏软件。
该软件既可以实现贪吃蛇的游戏功能,⼜在原始功能的基础上增加单词拼写功能,使⽤户在娱乐的同时进⾏英语单词的学习。
2 开发⽬标开发本软件⼀⽅⾯是为了让80,90后⽤户重温童年的美好记忆,另⼀⽅⾯也是为了增加对英语学习兴趣较弱、意志⼒薄弱的中⼩学⽣学习英语的兴趣和动⼒,在游戏中记忆单词拼写。
本软件在使⽤过程中按照提供单词的顺序,“吃掉”软件当前提供的单词,并按照拼写顺序依次“吃”相应的字母才能完成此单词的任务,不提供⽤户跳过此单词进⾏下⼀单词的功能。
本软件只⽀持蛇头进⾏上下左右四个⽅位移动,暂不⽀持360°全⽅位移动蛇头。
3 软件⽤户本软件的应⽤⼈群主要是喜欢玩贪吃蛇,并且想通过游戏记单词的⼈群。
⽬前主要⽬标是学龄前⼉童,后期我们会对词库进⾏增加,以适合更多的⼈群。
4 软件功能描述4.1 贪吃蛇游戏基本功能4.1.1 运动功能⽤户可通过使⽤键盘上的上下左右⽅位键控制蛇的移动⽅向,蛇在控制的⽅向上进⾏直线前进。
4.1.2 吃⾷物功能当界⾯任意位置出现⾷物,⽤户使⽤⽅位键控制蛇移动到⾷物周围,当蛇头碰到⾷物时则表⽰贪吃蛇吃到此⾷物,界⾯上会在任意位置出现下⼀个⾷物,⽤户再次控制蛇去吃这⼀⾷物。
4.1.3 死亡判定功能当蛇头在前进⽅向上撞到墙壁或蛇头吃到蛇⾝时,给出死亡判定,并给出⽤户本次游戏得分,在下⼀次⽤户使⽤软件进⾏游戏时会将本次成绩加⼊到成绩排名列表中。
《贪吃蛇》游戏程序代码

《贪吃蛇》游戏程序代码1. 游戏初始化:设置游戏窗口、蛇的初始位置和长度、食物的初始位置等。
2. 蛇的移动:根据用户输入的方向键,更新蛇的位置。
确保蛇的移动不会超出游戏窗口的边界。
3. 食物的:在游戏窗口中随机食物的位置。
确保食物不会出现在蛇的身体上。
4. 碰撞检测:检测蛇头是否撞到食物或自己的身体。
如果撞到食物,蛇的长度增加;如果撞到自己的身体,游戏结束。
5. 游戏循环:不断更新游戏画面,直到游戏结束。
6. 游戏结束:显示游戏结束的提示,并询问用户是否重新开始游戏。
import random游戏窗口大小WIDTH, HEIGHT = 800, 600蛇的初始位置和长度snake = [(WIDTH // 2, HEIGHT // 2)]snake_length = 1食物的初始位置food = (random.randint(0, WIDTH // 10) 10,random.randint(0, HEIGHT // 10) 10)蛇的移动方向direction = 'RIGHT'游戏循环while True:更新蛇的位置if direction == 'UP':snake.insert(0, (snake[0][0], snake[0][1] 10)) elif direction == 'DOWN':snake.insert(0, (snake[0][0], snake[0][1] + 10)) elif direction == 'LEFT':snake.insert(0, (snake[0][0] 10, snake[0][1])) elif direction == 'RIGHT':snake.insert(0, (snake[0][0] + 10, snake[0][1]))检测碰撞if snake[0] == food:food = (random.randint(0, WIDTH // 10) 10, random.randint(0, HEIGHT // 10) 10)else:snake.pop()检测游戏结束条件if snake[0] in snake[1:] or snake[0][0] < 0 or snake[0][0] >= WIDTH or snake[0][1] < 0 or snake[0][1] >= HEIGHT:break游戏画面更新(这里使用print代替实际的游戏画面更新) print(snake)用户输入方向键direction = input("请输入方向键(WASD): ").upper() print("游戏结束!")。
贪吃蛇程序设计说明书

贪吃蛇程序设计说明书贪吃蛇游戏程序设计说明书题目:贪吃蛇游戏学校:系别:专业班级:姓名:学号:指导老师:日期:一、设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。
每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。
二、功能设计:本游戏要求实现以下几个功能:(1)用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2)用户可以调节蛇的运行速度来选择不同的难度;(3)游戏分多个难度级别;(4)用户可自选颜色;(5)记录成绩前五名的游戏玩家;(6)增加背景音乐;(7)提高障碍物和游戏级别。
三、程序模块图:贪吃蛇游戏初始化图模块控制模块设置模块帮助模块墙体蛇身食物移动食物死亡变长绩等级音效四、算法流程图:是否否是否是开始初始化界面和蛇身放置食物获取按键开始运动碰到边界蛇吃到食蛇长大蛇死亡继续结束五、函数原型与功能1.主函数:void main()启动程序,触动其他函数。
2.初始化:void init ()设置背景框大小、蛇体初始值,随机产生食物。
3.随机产生食物:void setfoodcrd()设置食物生成坐标,0表示食物被吃。
4.画食物:void showfood()用矩形框来画食物5.画蛇:void showsnake()根据蛇的坐标和节数,循环用矩形框来画蛇。
6.蛇移动:void snakemove()根据按键,重设坐标7.改变蛇的方向:void changeskdir()响应用户的运动方向8.判断蛇是否死亡:void judgeslod判断蛇是否碰到自己或墙。
9.判断蛇是否吃到食物:void judgefood()判断是否吃到食物,吃食后变0,蛇增长一节。
10.结束游戏:void gameover()结束话语,并执行下一步。
六、基本代码#include#include#include#pragma comment(lib,"Winmm.lib")#include "MyTimer.h"#define SIZEMAX 100 /*蛇最大长度*/#define SPEED 100 /*初始速度*/#define len 20 /*蛇宽度*/#define lm 10 /*蛇每次移动距离*/#define initlen 600 /*初始化窗口正方形的长度*/ #define Min_snakelen 2 /*蛇的最小长度*/ typedef struct {int x,y;}DIR;int snakelen=Min_snakelen; /*蛇的长度*/int isfood=1; /*食物状态*/int isover=0; /*游戏状态*/int ispause=1; /*暂停状态*/int ismusic=1; /*音乐播放状态*/char dir; /*记录蛇运动的方向*/char c='d';DIR snake[500],food; /*定义蛇节点和食物的类型*/int speed=SPEED;void drawmap() /*画地图函数*/ {IMAGE img;char str[10];loadimage(&img,"贪吃蛇.jpg"); /*游戏界面*/ putimage(0,0,&img);loadimage(&img,"7.jpg"); /*侧栏提示*/putimage(600,0,&img);sprintf(str,"%d",snakelen);setfont(30,0,"宋体");setbkmode(TRANSPARENT);outtextxy(620,10,"操作说明:");setfont(20,0,"宋体");outtextxy(615,50,"awsd控制方向键");outtextxy(615,80,"p键暂停");outtextxy(615,110,"o键继续");outtextxy(615,200,"esc键退出");outtextxy(615,140,"l键暂停音乐");outtextxy(615,170,"k键继续播放");outtextxy(730,250,str);outtextxy(620,250,"蛇当前长度");}void init() /*初始化蛇函数*/ {int i;IMAGE img;snake[0].x=9*len+lm;snake[0].y=4*len+lm;loadimage(&img,"1.jpg");putimage(snake[0].x-lm,snake[0].y-lm,&img); for(i=1;i<snakelen;i++)< p="">{snake[i].x=len*(9-i)+lm;snake[i].y=len*4+lm;loadimage(&img, "2.jpg");putimage(snake[i].x-lm,snake[i].y-lm, &img); }}void showsnake() /*画蛇函数*/{int i;IMAGE img;loadimage(&img, "1.jpg");putimage(snake[0].x-lm,snake[0].y-lm , &img); loadimage(&img, "2.jpg");for(i=1;i<snakelen;i++)< p="">putimage(snake[i].x-lm,snake[i].y-lm, &img); }void snakemove() /*画动蛇函数*/{int i;int mx=snake[0].x;int my=snake[0].y;switch(dir){case 'a':mx-=len;break;case 'd':mx+=len;break;case 'w':my-=len;break;case 's':my+=len;break;default:break;}for(i=snakelen-1;i>=0;i--){snake[i+1].x=snake[i].x;snake[i+1].y=snake[i].y;}snake[0].x=mx;snake[0].y=my;showsnake();}int ceshiover() /*检测游戏结束函数*/{int i;if(snake[0].x<0||snake[0].x>30*len-lm||snake[0].y<0||snake[0].y>30*len-lm) return 1;for(i=1;i<snakelen;i++)< p="">{if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y) return 1;}return 0;}int foodinsnake() /*检测食物是否在蛇上函数*/ {for(int i=0;i<snakelen;i++)< p="">if(food.x==snake[i].x&&food.y==snake[i].y)return 1;elsereturn 0;}void showfood() /*画食物函数*/{IMAGE img;do{food.x=(rand()%30)*len+lm;food.y=(rand()%30)*len+lm;}while(foodinsnake());loadimage(&img, "3.jpg");putimage(food.x-lm,food.y-lm , &img);isfood=0;}void kmusic(){if(ismusic==0)mciSendString("pause mymusic",NULL,0,NULL);if(ismusic==1)mciSendString("resume mymusic",NULL,0,NULL);}void playbkmusic() /*播放背景音乐函数*/{mciSendString("open 超级玛丽.mp3 alias mymusic", NULL, 0, NULL);mciSendString("play mymusic repeat", NULL, 0, NULL);}void playgame() /*玩游戏函数*/{c='d'; //蛇开始向右移动isover=0;snakelen=Min_snakelen;dir='d';IMAGE img;MyTimer t; //定义精确延时对象int T=200; // 延长时间drawmap(); //画游戏地图init(); //画小蛇初始位置while(!isover){if(ispause){snakemove();FlushBatchDraw(); //批量绘图EndBatchDraw(); //结束批量绘图if(snake[0].x==food.x&&snake[0].y==food.y){ snakelen++;isfood=1;}if(isfood)showfood();if(snakelen<35)T=200-3*snakelen;t.Sleep(T);BeginBatchDraw(); // 开始批量绘图模式,防止闪烁问题drawmap();loadimage(&img, "3.jpg"); // 加载食物图片putimage(food.x-lm,food.y-lm , &img);};//按键控制if(kbhit())c=getch();switch(c){case 'a':if(dir!='d'){dir=c;}break;case 'd':if(dir!='a'){dir=c;}break;case 'w':if(dir!='s'){dir=c;}break;case 's':if(dir!='w'){dir=c;}break;case 27: exit(0); break; //游戏退出case 'p': ispause=0;break; //p暂停case 'o': ispause=1;break; //o继续游戏case 'l': ismusic=0;break; //l暂停音乐case 'k': ismusic=1;break; //k继续播放default:break;}kmusic(); //音乐控制播放//判断游戏结束if(ceshiover())isover=1;//判断是否重新再来HWND wnd = GetHWnd(); //获取窗口句柄if(isover)if (MessageBox(wnd, "游戏结束。
贪吃蛇小游戏

贪吃蛇小游戏贪吃蛇是一款经典的小游戏,玩家需要控制一条蛇在一个有限的区域内移动,吃掉尽可能多的食物,并避免撞到自己的身体或墙壁。
游戏的目标是尽可能地延长蛇的长度,直到无法移动为止。
游戏规则:1. 游戏开始时,蛇只有一个头部,没有身体。
2. 蛇的头部可以通过方向键或滑动手势来控制移动方向,蛇的身体会随着头部的移动而跟随。
3. 蛇每次移动一格,可以选择向上、向下、向左或向右移动。
4. 游戏区域内会随机生成食物,蛇需要移动到食物的位置上去吃掉它。
5. 当蛇吃到食物时,身体会增加一节,长度增加。
6. 如果蛇撞到自己的身体或撞到墙壁,游戏结束。
7. 游戏结束后,会显示玩家的得分,即蛇的长度。
术语和技巧:1. 食物:游戏区域内随机生成的可以被蛇吃掉的物体。
2. 头部:蛇的移动部分的前端,控制蛇移动的方向。
3. 身体:蛇的移动部分除了头部以外的其他部分。
4. 长度:蛇的身体部分的数量,也是玩家的得分。
5. 撞墙:蛇撞到游戏区域的边界,导致游戏结束。
6. 撞身体:蛇的头部撞到自己的身体,导致游戏结束。
7. 策略:玩家可以选择不同的移动策略,如优先吃食物、避免撞墙或身体等,以延长蛇的长度。
玩家可以通过不同的策略和技巧来挑战自己的高分:1. 尽量吃到更多的食物,以增加蛇的长度。
2. 注意蛇的移动方向,避免撞到自己的身体或墙壁。
3. 利用地图的边界,将蛇的身体围成一个小空间,以便更容易捕捉食物。
4. 观察食物的位置和蛇的身体,选择合适的移动路径,避免撞到自己。
5. 提高反应速度和手眼协调能力,以更好地控制蛇的移动。
6. 尝试不同的策略和技巧,寻找最适合自己的玩法,挑战更高的分数。
通过理解游戏的规则和玩法,并运用不同的策略和技巧,玩家可以充分享受贪吃蛇小游戏带来的挑战和乐趣。
不断尝试和探索,挑战自己的高分,让游戏更具创造性和想象力。
贪吃蛇大作战功能描述

用户可以重新开始游戏、继续游戏 、 结束游戏 使用WASD或者上下左右控制蛇的移 食动物按照一定的规则在地图上随机刷 新吃掉食物后蛇身变长 蛇碰壁死亡、咬蛇身死亡 显示用户的分数,用户可以选择重新 开始 游戏、回到主页面 用户可以查看自编号 功能描述
001 游戏初始化界面
002 用户注册
003 用户登录 004 游戏主界面
005 游戏暂停界面
006 游戏控制 007 食物刷新 008 蛇身变长 009 游戏死亡 010 游戏结算页面 011 分数查看界面
战功能描述
备注
游戏加载界面 (1)用户输入用户名和密码进行 注册 (2)根据用户输入的用户进行查 找,若存在,提示用户用户名已存 在;不存在即可进行创建 用户输入用户名和密码进行注册
贪吃蛇小游戏

贪吃蛇小游戏
贪吃蛇是一款经典的小游戏,目标是控制一条蛇吃掉尽可能多的食物,同时避免碰到墙壁或自己的身体,直到蛇的身体变得足够长或无法移动为止。
规则和玩法:
1. 开始游戏时,蛇只有一个头部,其余部分都是空的。
2. 蛇会自动向前移动,玩家需要使用方向键控制蛇的移动方向。
3. 当蛇头碰到食物时,蛇会变长一格,食物会重新生成在随机位置。
4. 当蛇头碰到墙壁或自己的身体时,游戏结束。
5. 玩家可以在游戏中使用暂停、重新开始等功能。
6. 游戏难度会逐渐增加,蛇的移动速度会变快,同时地图也会变得更加复杂。
术语和技巧:
1. 食物:蛇需要吃掉的小点,吃掉后蛇身体会变长一格。
2. 身体:蛇的身体部分,如果蛇头碰到身体,则游戏结束。
3. 头部:蛇的移动方向由头部控制,如果蛇头碰到墙壁,则游戏结束。
4. 长度:蛇身体的长度,蛇吃掉食物后会变长。
5. 分数:游戏中的得分,每吃掉一个食物就会增加一分。
6. 策略:玩家需要考虑蛇的移动方向,避免蛇头碰到墙壁或自己的身体,同时尽可能多地吃掉食物,使蛇变得更长。
游戏的挑战性和乐趣:
1. 随着游戏难度的增加,蛇的移动速度会变快,玩家需要更快地做出反应。
2. 地图的复杂程度也会逐渐增加,玩家需要更加小心谨慎地控制蛇的移动。
3. 玩家可以尝试不同的策略和方法,比如优先吃掉靠近墙壁的食物,或者避免
反向移动等。
4. 游戏的乐趣在于挑战自己的反应速度和思维能力,同时享受蛇变长的快感。
贪吃蛇用户手册

贪吃蛇用户手册开发小组成员:目录一、引言......................................................................................................... 错误!未定义书签。
一、引言 (3)1. 编写目的 (3)2. 背景 (3)3. 定义 (3)4. 参考资料 (3)二、用途 (3)1. 功能 (3)2. 性能 (4)2.1精度 (4)2.2时间特性 (4)2.3灵活性 (4)三、运行环境 (4)1. 硬设备 (4)2. 支持软件 (4)四、使用过程 (5)1. 安装与初始化 (5)2. 输入/输出 (6)2.1输入/输出格式 (6)2.2输入/输出举例 (6)3. 出错处理与恢复 (10)一、引言1. 编写目的本用户手册的编写目的是帮助用户了解《贪吃蛇游戏》,并学会对游戏的操作。
本用户手册的读者对象为:使用该软件的玩家以及系统维护人员。
2. 背景开发软件的名称:贪吃蛇游戏任务提出者:手机策划人员开发者:软件开发小组的产品实现人员用户:NOKIA手机用户运行该程序系统的计算中心:NOKIA手机芯片3. 定义键盘方向键:键盘上的↑←↓→4. 参考资料张海藩:《软件工程导论》第五版清华大学出版社肖刚等:《实用软件文档写作》清华大学出版社二、用途1. 功能●开始新游戏重新开始一个游戏●暂停使游戏暂停,并保存暂停时的游戏状态●继续游戏暂停后可以继续●设置为初级将游戏设置为比较简单的模式●设置为中级将游戏设置为中等难度的模式●设置为高级将游戏设置成很有难度的模式●查看成绩每次游戏结束了,窗口右上角可以直接看到本次的成绩●查看游戏说明说明游戏规则●退出游戏2. 性能2.1精度本软件对数据的精度没有特殊的要求。
2.2时间特性响应时间不能超过3秒钟。
没有更新处理。
2.3灵活性本软件采用的可视化界面,用户通过单击界面上的相关按钮就可以完成相关操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用户手册
一、引言
1. 编写目的
本用户手册的编写目的是帮助用户了解《贪吃蛇游戏》,并学会对游戏的操作。
本用户手册的读者对象为:使用该软件的玩家以及系统维护人员。
2. 背景
开发软件的名称:贪吃蛇游戏
任务提出者:手机策划人员
开发者:软件开发小组的产品实现人员
用户:NOKIA手机用户
运行该程序系统的计算中心:NOKIA手机芯片
3. 定义
键盘方向键:键盘上的↑←↓→
4. 参考资料
张海藩:《软件工程导论》第五版清华大学出版社
肖刚等:《实用软件文档写作》清华大学出版社
二、用途
1. 功能
●开始新游戏
重新开始一个游戏
●暂停
使游戏暂停,并保存暂停时的游戏状态
●继续
游戏暂停后可以继续
●设置为初级
将游戏设置为比较简单的模式
●设置为高级
将游戏设置成稍有难度的模式
●查看历史成绩
查看以前包括本次的游戏成绩和游戏时间
●查看游戏说明
说明游戏规则
●退出游戏
2. 性能
●精度
本软件对数据的精度没有特殊的要求。
●时间特性
➢响应时间不能超过1秒钟。
➢更新处理时间也不能超过1秒钟。
●灵活性
本软件采用的可视化界面,用户通过单击界面上的相关按钮就可以完成相关操作。
三、运行环境
1. 硬设备
运行环境:WindowsXP
2. 支持软件
编程语言:Java
使用工具:Eclipse
四、使用过程
1. 安装与初始化
将工程文件MySnake拷贝到Eclipse的工作路径下,在Eclipse里导入工程,运行Game
类,初始化界面如下:
点击newGame后,出现如下画面:
2. 输入/输出
输入/输出格式
用户点击游戏界面的按钮或者选择规定的游戏快捷键或者方向键。
程序响应鼠标点击事件或键盘按键事件,在游戏的主界面会有相应提示。
●输入/输出举例
➢运行程序后,点击newGanme按钮或者按键(N)后有如下界面:
可以看到,在游戏的主窗口有分数和时间显示,新游戏开始后newGanme、Resume、LowLevel、HighLevel、Exit按钮变为灰显,不可用了,这样就有效的避免了用户的非正常操作使程序抛出异常。
➢按键盘上的方向键,蛇会相应的改变方向:
➢让蛇吃到食物,可以看到蛇的身体增加一节,分数增加10分:
➢游戏结束有两种可能:
蛇吃到石头而死,会弹出如下对话框:
蛇吃到自己而死,会弹出如下对话框:
➢游戏的暂停功能:
蛇停止移动,计时器停止计时,此时,除了不能再次暂停外,其他按钮均可以选择。
➢游戏的继续功能:
可以看到计时器又接着暂停时的时间继续计时,蛇、食物、石头的状态和暂停时的一样。
此时,newGanme、Resume、LowLevel、HighLevel、Exit都是灰显,不可用。
避免了用户的非正常操作。
如果暂停后、选择Exit退出程序,下次再运行时可以选择Resume继续上次的游戏。
➢查看历史成绩功能:
选择HighScore后,会弹出如下对话框:
这里显示的是自用户第一次玩本游戏开始,到最近一次结束的游戏中,成绩最高的6次成绩,并且成绩按降序排列,如果两次成绩相当,则时间少的排在前面。
➢设置游戏为高级模式:
选择HighLevel再选择newGame,石头的布局和蛇的移动频率都改变了。
此时,Resume、Pause、LowLevel、HighLevel按钮都是不可选的。
每吃掉一个食物会增加15分,当蛇从界面的一边消失时会从另一边接着出现,只要没吃到石头。
➢设置游戏为初级模式:
选择LowLevel再选择newGame,石头的布局和蛇的移动频率都改变了。
➢查看游戏说明:
点击Description按钮,会弹出如下对话框:
➢退出游戏:点击Exit按钮。
2. 出错处理与恢复
可能的出错或故障情况系统输出信息的形式、含意处理方法
按钮连续选择两次蛇的速度加快或是抛出异常每个按钮在选择后设为灰显
游戏在进行时选择新游戏蛇的速度加快在游戏开始后newGame按钮变
灰显直到游戏结束或暂停
●由用户选择游戏控制类别:开始、暂停、继续、历史最高分、游戏说明、退出,或者选
择有效方向键。
●尚未暂停不能选择继续。
●历史最高分、游戏说明任何时候都可以选择,
●游戏没结束时不能选择退出,可以暂停,
●下次再运行时可以选择新游戏或者继续。