贪吃蛇详细设计说明书
C++贪吃蛇说明

C语言课程设计报告题目:贪吃蛇指导教师:**院系:电气信息工程学院班级: 01 *名:***学号: 15目录1程序设计目的.......................................... 错误!未定义书签。
2程序设计具体要求...................................... 错误!未定义书签。
3程序功能.............................................. 错误!未定义书签。
4设计思路.............................................. 错误!未定义书签。
5程序清单.............................................. 错误!未定义书签。
6总结与体会............................................ 错误!未定义书签。
7结束语................................................ 错误!未定义书签。
1、课程设计目的:1.进一步掌握和利用C语言进行行程设计的能力;2.进一步理解和运用结构化程序设计的思想和方法;3.初步掌握开发一个小型实用系统的基本方法;4.学会调试一个较长程序的基本方法;5.学会利用流程图表示算法;6.掌握书写程序设计开发文档的能力(书写课程设计报告)。
2、课程设计具体要求:贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长。
只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。
和别的游戏不同,贪食蛇是一个悲剧性的游戏。
许多电子游戏都是打通关到底,游戏操作者以胜利而告终。
而贪食蛇的结局却是死亡。
“贪食蛇”,要命的就在一个“贪”字上。
所以,有时候真的需要及时收手,不要逼人太甚。
如果没有余地,就算你的手再快,面临的结局也是——崩盘。
贪吃蛇设计文档.doc

贪吃蛇游戏的设计文档目录一、需求分析 ................................................. 错误 ! 未定义书签。
1.功能需求 . .............................................. 错误 ! 未定义书签。
2.非功能需求错误 ! 未定义书签。
. ............................................二、系统设计 ................................................. 错误 ! 未定义书签。
1. 实际思路 . ............................................... 错误 ! 未定义书签。
2,结构设计 . .............................................. 错误 ! 未定义书签。
(1), main(), 主函数; . ................................ 错误 ! 未定义书签。
(2), init() , 图形化驱动函数 . ......................... 错误 ! 未定义书签。
(3), help(), 帮助信息函数 . ............................ 错误 ! 未定义书签。
(4), drawfence(), 周围墙壁函数 . ....................... 错误 ! 未定义书签。
(5), printscore(), 得分显示函数 . ...................... 错误 ! 未定义书签。
(6), playgame(), 游戏控制函数 . ........................ 错误 ! 未定义书签。
(7), gameover(), 游戏结束函数 . ........................ 错误 ! 未定义书签。
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, "游戏结束。
课程方案贪吃蛇编制

课程设计成果说明书题目:贪吃蛇游戏的编制学生姓名:杜恩荣学号: 100604120学院:数理与信息学院班级:A10计算机指导教师:亓常松老师浙江海洋学院教务处2018年 7 月 8 日目录1.系统需求分析1.1程序功能说明1.2程序设计的分析2. 软件设计说明2.1a主界面控件设计 2.1b 颜色控件设计2.2 具体操作3. 测试报告3.1测试游戏3.2测试的意义4. 参考文件5. 课程设计总结贪吃蛇游戏的设计与实现1.系统需求分析:1.1程序功能说明:贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘wsad控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
1.2程序设计的分析:通过程序所要实现的功能可以看出,该程序中有蛇,食物两个主要的对象,所以我们可以定义两个类:蛇类和食物类;在蛇类中封装了蛇的所有的属性和操作。
蛇的属性有:蛇的长度,蛇的长度,蛇的初始位置,蛇的运动方向,蛇的存活状态,蛇的运动速度。
蛇的操作有:蛇的移动,蛇吃食物,画出蛇所有的状态。
食物的属性有:食物的出现位置,食物的存活状态。
食物类的操作:创建一个新的食物,画出食物的位置。
在该程序中还有一个from类,用来画出和显示蛇和食物的状态和位置,该类提供给蛇和食物的运动平台,蛇和食物在该from的画板范围内运行。
程序中还有其他的功能要一一实现。
如:在用户点击“开始”按钮后程序才能开始运行。
用户如果按空格键,则该程序暂停,但并不终止程序,在用户再次按空格键时,程序继续运行。
如果程序运行结束,即程序出现“GAME OVER”,或用户点击窗口关闭按钮时,程序结束,并且退出。
在程序运行过程中,用户控制的蛇,没吃到一个食物,那么该玩家的得分就加10,并且还要记录玩家的总得分。
在菜单栏【游戏设置】中选择【颜色设置】命令,可以设置蛇体和食物的颜色;在菜单栏【游戏设置】中选择【难度选择】命令,可以设置游戏难度。
_贪吃蛇游戏_说明书

湖南工业大学课程设计任务书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得到充分的锻炼。
贪吃蛇设计说明书

贪吃蛇设计说明书贪吃蛇设计说明书开发小组成员:目录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. 游戏设计3.1 游戏场景贪吃蛇游戏的场景是一个矩形的游戏区域,可以使用二维数组来表示。
每个数组元素可以表示该位置的状态,如蛇的身体部分、食物或空白区域。
3.2 蛇的移动蛇的移动是关键部分,可以通过控制蛇的方向来实现。
蛇的长度会随着吃到食物而增加,当蛇移动时,蛇的尾部会被剪切掉,而蛇头会根据移动方向新增一个位置。
3.3 食物的生成食物的生成可以随机选择游戏区域的一个空白位置,并将该位置设置为食物。
3.4 碰撞检测碰撞检测主要检测蛇是否撞到了游戏边界或自己的身体。
当蛇的头部位置与边界或身体的其他部分位置重叠时,游戏结束。
4. 游戏实现贪吃蛇游戏可以使用编程语言来实现。
以下是一个示例的实现代码:import random# 游戏区域的大小width =10height =10# 蛇的初始位置和方向snake = [(0, 0)]direction = (1, 0)# 食物的位置food = (random.randint(0, width-1), random.randint(0, height-1))# 游戏是否结束的标志game_over =False# 游戏主循环while not game_over:# 处理输入# ...# 更新蛇的位置head = snake[0]new_head = (head[0] + direction[0], head[1] + direction[1])snake.insert(0, new_head)# 如果蛇头位置与食物位置重叠,则吃掉食物并生成新的食物if new_head == food:food = (random.randint(0, width-1), random.randint(0, height-1)) else:snake.pop()# 检测碰撞if new_head[0] <0or new_head[0] >= width or new_head[1] <0or ne w_head[1] >= height:game_over =Trueif new_head in snake[1:]:game_over =True# 渲染游戏界面# ...# 游戏结束,显示得分等信息# ...5. 总结贪吃蛇游戏是一款简单但耐人寻味的游戏,通过实现蛇的移动、食物的生成和碰撞检测等功能,可以让玩家体验到游戏的乐趣。
单片机课程设计贪吃蛇说明书

单片机课程实训作品说明书姓名:李兆基完成时间: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; //开启软开关}/********显示函数********/。
贪吃蛇开发与设计

贪吃蛇游戏的开发与设计一、需求分析1.功能需求“贪吃蛇”游戏的总体需求就是能够正常玩游戏并能够观察到自己的得分。
具体的功能性需求如下:(1)玩家只能在屏幕上固定的区域内玩游戏,区域周围用墙壁状的图形来标识;(2)蛇的身体由一个个小方块来构成,蛇头由两个小方块构成;(3)食物由一个方块构成,食物要随机出现在游戏区域(4)玩家可用键盘上的上、下、左、右四个方向键来控制蛇的运行方向;(5)当蛇向前移动过程中,碰上了食物,则蛇身增长一节,当前食物消失,并且在令一处游戏区内随机出现一个食物;(6)蛇每增长一节,则得分相应增加;(7)得分实时显示在屏幕顶部(游戏区域边框处的某个位置);(8)蛇在移动的过程中,蛇头不能撞上蛇身,蛇头也不能撞上周围墙壁,若这两种情形发生,则认为蛇已死,在游戏区域内显示“GAME OVER”信息,并在顶部显示所得分数,游戏结束;(9)在游戏过程中,玩家可随时按“ESC”键结束游戏;2.非功能需求(1)界面友好,图形界面,游戏开始前有游戏的简单使用说明,方便玩家使用;(2)具有较好的容错能力,玩家在游戏过程中,除了规定的按键外,其他按键均忽略,不予处理;(3)发布游戏时,将图形驱动加载到程序中,使系统具有良好的可扩展性和平台适应性,可在任何PC机上运行。
二、系统设计1.设计思路程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。
移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体虽蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这是,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的身体,所以将蛇的最后一节用背景色覆盖。
食物的出现与消失也是画矩形块和覆盖矩形块。
贪吃蛇游戏程序的设计说明

测控技术与仪器专业课程设计题单班级0982011 学生某某课程名称计算机课程设计课题贪吃蛇游戏程序设计设计要求 1.学习游戏设计有关知识。
2.设计贪吃蛇游戏程序。
3.调试并修改程序。
4.完成课程设计论文。
课题发给日期2011年6月25日课程设计完成日期2011年7月09日指导教师余某某评语:贪吃蛇游戏学生:某某班级:0882011指导老师:余某某摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙,在围墙随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
作为一个完整的程序,必须考虑人机交流与用户体验。
游戏的界面不能太丑,更不能连个简单的界面都没有。
游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。
游戏的美观是一方面,游戏的在素质是另一方面。
一个游戏的优劣,最终由玩家决定。
在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
关键词:贪吃蛇流程图c语言源程序目录1 前言 (1)2 课设容 (3)2.1课设目的 (3)2.2设计功能 (3)2.3结构设计 (7)3结论 (11)参考文献 (15)附录A (16)1 前言C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。
作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。
制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。
贪吃蛇课程设计报告

本科课程设计贪吃蛇游戏设计摘要 (3)Abstract (3)一.详细设计 (4)1.属性解释 (4)2.初始化坐标: (4)3.调用线程 (4)4.具体功能实现: (5)4.1.移动功能的实现: (5)4.2.吃食物功能实现: (6)4.3.判断游戏是否结束的功能实现: (8)4.4.画图方法的实现 (9)4.5.监听键盘动作: (10)5.界面的设计: (11)5.1进入程序界面设计 (11)5.2第2个界面的设计: (12)5.3第3个界面设计: (12)6.把程序植入手机中 (13)二.字符设备驱动程序实现 (13)三.总结: (14)四.参考文献: (14)五.致谢 (15)摘要程序核心思想:运行程序首界面(进入游戏,退出游戏)进入游戏后选择难度(简单,普通,高难)根据不同的难度设置相应的属性。
进入游戏界面。
首先初始化蛇的坐标,食物的坐标,和障碍物的坐标。
然后获取当前屏幕的大小为将来的边界判断做准备。
然后创建并执行线程。
线程基本流程:判断是否是暂停阶段,如果没有暂停就执行:eatFood();move(direction); repaint();如果游戏结束了就重新游戏或者退出。
AbstractCore of the process: first running the program interface (into the game, withdraw from the game) into the game after the difficult choice of (simple, ordinary, highly difficult) depending on the difficulty of setting the corresponding attribute. Into the game interface. First initialize the coordinates of the snake, coordinates food, and the coordinates of obstructions. And access to the size of the current screen for the future of the border to prepare for judgement. And then create and execution threads. Thread the basic process: determine whether the stage is suspended, if not the moratorium on the implementation of: eatFood (); move (direction); repaint (); game to an end if the game or out on the re.一.详细设计1.属性解释用1个2维数组snake[200][2]存放蛇身坐标,第2维是0的时候代表横坐标,为1的时候为纵坐标。
贪吃蛇游戏-概要设计

《项目名称》概要设计说明书2010-01目录1 概述 (1)1.1 编写目的 (1)2 需求概述 (1)2.1 目标与需求 (1)2.2 环境描述 (1)3 总体设计 (1)3.1 总体解决方案 (1)3.1.1 软件体系结构 (1)3.1.1.1显示层类图 (2)3.1.1.2控制层类图 (2)3.1.1.3业务层类图 (2)3.1.1.4实体层类图 (2)3.1.2控制层顺序图 (3)3.1.3显示层顺序图 (4)4 接口设计 (4)4.1 内部接口设计 (4)1 概述1.1 编写目的本文档的编写目的是:详细定义贪吃蛇游戏的总体功能;给出系统的结构设计,作为过程设计和程序编写的依据。
2需求概述2.1 目标与需求在游戏中,玩家操控一条蛇,它会不停前进,玩家只能操控蛇的头部朝向(上下左右),吃掉食物,并要避免触碰到自身或者墙壁。
每次贪食蛇吃掉一件食物,它的身体便增长一些,蛇的身体越长,游戏得分越高,直到蛇碰到墙壁或者自身时候,游戏结束。
2.2 环境描述jre1.5版本或以上Windows xp3 总体设计3.1 总体解决方案设计贪吃蛇时采用面向对象的设计方法。
3.1.1 软件体系结构整个贪吃蛇游戏由显示层、控制层、业务层、实体层组成。
软件体系结构图如下。
图1软件体系结构图显示层:将蛇、食物、墙通过加载相应的图片形式化显示出来。
控制层:接收键盘事件,调用相关事件处理方法,以及计算游戏分数等方法实体层:包含蛇、食物、墙数据(坐标,长度等)业务层:具体的事件处理方法,以及对实体层数据进行更新的具体方法以下为各层的核心类。
3.1.1.1显示层类图parse图2显示层类图显示层只有一个边界类parse。
3.1.1.2控制层类图mainProcess图3控制层类图控制层只有一个mainProcess一个控制类。
3.1.1.3业务层类图keyPressed图4业务层类图业务层只有一个类keyPressed。
3.1.1.4实体层类图图5实体层类图包含Food、Snake和Wall 3个实体类。
《贪吃蛇游戏课程设计》报告(可打印修改)

{ snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1];
5
} switch(snake.direction)//1,2,3,4 表示上下左右四个方向,通过这个判断 来移动蛇头 {
rectangle(i,40,i+10,49);//上边 rectangle(i,451,i+10,460);//下边 } for(i=40;i<=450;i+=10) { rectangle(50,i,59,i+10);//左边 rectangle(601,i,610,i+10);//右边 } }
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) {
GameOver();//显示失败 snake.life=1; break; } } if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)// 蛇是否撞到墙壁 { GameOver();//本次游戏结束 snake.life=1;//蛇死 } if(snake.life==1)//以上两种判断以后,如果蛇死就跳出内循环,重新开始 break; if(snake.x[0]==food.x&&snake.y[0]==food.y)//吃到食物以后 { setcolor(0);//把画面上的食物去掉 rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20;
贪吃蛇游戏课程设计报告

贪吃蛇游戏课程设计报告贪吃蛇游戏程序设计一、课程设计任务贪吃蛇小游戏程序设计二、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C 语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(4).完成课程设计报告,并进行答辩三、需求分析3.1、程序功能贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
3.2、设计思想程序关键在于透露表现蛇的图形及蛇的挪动。
用一个小矩形快透露表现蛇的一节身材,身材每长一节,增加一个矩形块,蛇头用俩节透露表现。
挪动时必须从蛇头动手下手,以是蛇不克不及向相反的偏向挪动,假如不按随便键,蛇自行在当火线向上前移,但按下有效偏向键后,蛇头朝着该偏向挪动,一步挪动一节身材,以是按下有效偏向键后,先肯定蛇头的位置,尔后蛇的身材随蛇头挪动,图形的完成是从蛇头新位置动手下手画出蛇,这时分,因为未清屏的缘故原由,原先的蛇的位置和新蛇的位置差一个单元,以是看起来蛇多一节身材,以是将蛇的末了一节用背景色掩盖。
食品的呈现与消失也是画矩形块和掩盖矩形块。
为了便于理解,界说两个布局体:食品与蛇。
3.3、流程图动手下手初始化界面和蛇身游戏者按键选择放置食物蛇开始运动蛇吃到食?Y蛇长大N蛇死亡?Y继续?N退出界面YN四、设计的具体实现(1)函数定义函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#define M 200#include"graphics.h"#include<XXX>#include<XXX>#include<string.h>#include<XXX>#include<dos.h>#include<XXX>#include <windows.h>#define LEFT 97//A#define RIGHT 100//D#define DOWN 115//S#define UP 119//W#define Esc 0x011bint i,key;int score=0;int gamespeed=250;//游戏速度可根据实际情况自行调解struct Food{int x;//食品的横坐标int y;//食物的纵坐标intyes;//判别是否要呈现食品的变量}food;//食品的布局体struct XXX{int x[M];int y[M];int node;//蛇的节数XXX的移动方向int life;//蛇的生命,透露表现在世,1 透露表现出生}XXX;void Init();//图形驱动void Close();//图形结束void DrawK();//开始画面XXX();//玩游戏的具体过程XXX();//游戏结束void PrScore();//输出成就(2)主函数main( )主函数是程序的支流程,首先界说利用到的常数、全局变量及函数原型申明,然后初始化图形体系,挪用函数DrawK()画出动手下手画面,挪用函数GamePlay(),即玩游戏的详细进程,游戏结束后挪用Close()封闭图形体系,结束程序void main()//主函数{Init();//图形驱动DrawK();//开始画面GamePlay();//玩游戏的详细进程Close();//图形结束}void Init()//图形驱动{int gd=DETECT,gm;initgraph(&gd,&gm," ");/*此处为turboc的路径,读者可以根据自己的电脑而改*/cleardevice();}(3)画界面函数DrawK( )主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。
贪吃蛇详细设计说明书

贪吃蛇_详细设计说明书编写人:完成日期:X年X月X日文档名称:详细设计规格说明书1项目名称:贪吃蛇游戏项目负责人:XXX XXX编写 TEST __X___年_X_月___X_日校对所有小组成员 __2015___年___6__月___13_日审核所有小组成员 ____2015_年___6__月___13_日批准 XXX _2015____年___6__月___14__日开发单位 __XXX班_____组员: XXX XXX目录1.引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (3)2.系统的结构 (4)2.1 每个模块的名称、标识符如下所示: (4)2.2模块之间的关系: (5)3.模块1(标识符)设计说明 (6)3.1模块描述 (6)3.2功能 (7)3.3性能 (7)3.4输入项 (8)3.5输出项 (8)3.6设计方法(算法) (8)3.7流程逻辑 (11)3.8接口 (12)3.9存储分配 (12)3.10注释设计 (12)3.11限制条件 (12)3.12测试计划 (13)3.13尚未解决的问题 (13)1.引言1.1编写目的本说明书在概要设计的基础上,对贪吃蛇游戏的各模块、程序、子系统分别进行了实现层面上的要求和说明。
软件开发小组的产品实现人员阅读和参考本说明进行代码的编写和测试。
本说明书预期的读者是软件开发小组的产品实现人员。
1.2背景说明:系统名称:贪吃蛇游戏任务提出者:手机策划人员开发者:软件开发小组的产品实现人员用户:Android操作系统手机用户运行该程序系统的计算中心:Android操作系统手机芯片1.3定义1. 节:一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。
节是蛇身上最小的单位。
2. 链表:用来保存每一段的状态,链表的元素单位是节。
且链表的第一个元素表示蛇的头部。
3. 坐标系:以左上角那点为(0,0),向右则x递增,向下则y递增1.4参考资料1.《软件工程导论》张海藩著清华大学出版社2.《数据库系统原理教程》刘韬著人民邮电出版社3.《C程序设计》谭浩强清华大学出版社4.《成功的软件开发》(原书第二版)(蔡愉祖、邓本江等译)机械工业出版社)5.《实用软件文档写作》肖刚著清华大学出版社6.计算器的电路设计及算法研究[D]. 邱钊. 电子科技大学,2011.7.基于Java EE的网络销售系统的设计与实现[D]. 刘丹.湖南大学,20128.需求规格说明书《》软件开发小组2015/49.用户操作手册(初稿)《》软件开发小组2015/52.系统的结构2.1 每个模块的名称、标识符如下所示:1.Ground类1) private int TYPE;2) public int[][] rocks=new int[Global.WIDTH][Global.HEIGHT];3) public void setGround(int type){} 根据不同的Type值将rocks的不同下标的元素设为1,其他元素为0。
贪吃蛇设计说明书

贪吃蛇设计说明书摘要本贪吃蛇(Snake)游戏仿照以往的贪吃蛇游戏,尽管在图形界面方面存在一定的缺陷,但能够基本实现游戏的功能。
本游戏分为10个级别,玩家通过方向键对蛇的运动进行控制,如果蛇吃到食物,得分加10分,并且到一定的程度级别会上升。
此外,用户可以根据需要选择速度、界面以及播放的音乐,并且在游戏中保存了以往前三名玩家的记录,供玩家参考。
关键字:主页面,快捷键,方向键,解决方案目录第一章:ATM系统概述1.1系统的主要任务1.2 基本要求1.3 主要功能1.4 设计方法及涉及知识点1.4.1 设计方法1.4.2 涉及知识点1.5 系统开发的目的第二章:系统分析2.1分析问题和定义类,给出类的定义和联系,2.2系统开发平台的选择2.3程序设计语言的选择2.4 操作平台第三章:总体设计3.1系统的结构图(总图)3.2函数模块说明(每个函数的原型、功能说明)3.3系统运行界面截图第四章:系统评价4.1系统的特点4.2系统的缺点4.3将来可能提出的要求第五章:小结第六章:参考文献第一章 ATM系统概述1.系统的主要任务本游戏主要提供给玩家进行娱乐。
2.基本要求1.要求利用面向对象的方法以及C#程序设计语言来完成该系统的设计;2.要求在设计的过程中,建立清晰的类的层次;3.在系统中建立相关的类,每个类中都要有各自的属性和方法;4.程序运行结果正确,操作方面,界面美观,逻辑层次清楚,程序结构合理,文档规范清晰。
3.主要功能该系统具备以下功能:控制蛇运动方向:用键盘上的↑、↓、←、→控制蛇的运动方向。
当蛇向一个方向运动时,它的反向键被锁定。
不能通过连续按住某个方向键而加快蛇的运动。
若在游戏中,蛇头碰了墙或是自己的身体,则游戏结束。
蛇吃食物:蛇每吃一个食物增长一节,并且得分加10分,总共为100节。
蛇每增长10节游戏上升一个级别。
游戏结束:如果在游戏过程中,蛇头碰墙或是碰到了自己的身体,则游戏结束。
如果在游戏过程中,用户选择退出游戏,则提醒用户游戏正在进行,是否要退出。
贪吃蛇功能说明书(初稿)

贪吃蛇功能说明书(初稿)贪吃蛇(单词版)软件功能说明书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)增加背景音乐;(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, "游戏结束。
贪吃蛇 策划书3篇

贪吃蛇策划书3篇篇一《贪吃蛇策划书》一、游戏概述1. 游戏名称:贪吃蛇2. 游戏类型:休闲益智类游戏3. 游戏目标:玩家通过控制蛇的移动,吃掉食物使蛇变长,同时避免碰到墙壁或自己的身体,挑战更高的分数。
4. 游戏规则:蛇初始长度为一定值,通过吃掉食物来增加长度。
食物会随机出现在游戏区域内。
蛇的移动方向由玩家控制,可以通过方向键或触摸屏幕来操作。
当蛇碰到墙壁或自己的身体时,游戏结束。
游戏结束后,根据玩家的得分进行排名。
二、游戏界面设计1. 游戏区域:展示蛇和食物的区域,背景可以选择简洁的颜色或图案。
2. 得分显示:实时显示玩家的得分。
3. 游戏状态显示:显示游戏的开始、暂停、结束等状态。
4. 操作按钮:提供开始游戏、暂停游戏、重新开始等操作按钮。
三、游戏玩法设计1. 单人模式:玩家独自控制蛇进行游戏,挑战自己的最高分。
2. 多人模式(可选):支持多人在线对战,玩家可以与其他玩家竞争得分。
3. 关卡模式(可选):设置不同的关卡,每个关卡有特定的目标和难度。
四、游戏难度设计1. 随着蛇的长度增加,速度逐渐加快,增加游戏难度。
2. 食物出现的频率和位置可以根据难度级别进行调整。
3. 可以设置障碍物或特殊道具,增加游戏的挑战性和趣味性。
五、游戏音效设计1. 背景音乐:选择轻松愉快的音乐,营造游戏氛围。
2. 吃食物音效:当蛇吃掉食物时,播放相应的音效,增加游戏的趣味性。
3. 碰撞音效:当蛇碰到墙壁或自己的身体时,播放碰撞音效,提示玩家游戏结束。
六、游戏开发计划1. 确定游戏开发团队和分工。
2. 制定游戏开发时间表,包括各个阶段的时间节点。
3. 进行游戏原型设计和开发。
4. 进行游戏测试和优化。
5. 发布游戏并进行推广。
七、游戏盈利模式1. 广告收入:在游戏中展示广告,获取广告收益。
2. 内购道具:提供一些付费道具,如加速道具、复活道具等,增加游戏收入。
3. 付费:提供付费版本,获取收益。
八、游戏推广计划1. 利用社交媒体、游戏论坛等渠道进行宣传推广。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
贪吃蛇_详细设计说明书编写人:完成日期:X年X月X日文档名称:详细设计规格说明书1项目名称:贪吃蛇游戏项目负责人:XXX XXX编写 TEST __X___年_X_月___X_日校对所有小组成员 __2015___年___6__月___13_日审核所有小组成员 ____2015_年___6__月___13_日批准 XXX _2015____年___6__月___14__日开发单位 __XXX班_____组员: XXX XXX目录1.引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (3)2.系统的结构 (4)2.1 每个模块的名称、标识符如下所示: (4)2.2模块之间的关系: (5)3.模块1(标识符)设计说明 (6)3.1模块描述 (6)3.2功能 (7)3.3性能 (7)3.4输入项 (8)3.5输出项 (8)3.6设计方法(算法) (8)3.7流程逻辑 (11)3.8接口 (12)3.9存储分配 (12)3.10注释设计 (12)3.11限制条件 (12)3.12测试计划 (13)3.13尚未解决的问题 (13)1.引言1.1编写目的本说明书在概要设计的基础上,对贪吃蛇游戏的各模块、程序、子系统分别进行了实现层面上的要求和说明。
软件开发小组的产品实现人员阅读和参考本说明进行代码的编写和测试。
本说明书预期的读者是软件开发小组的产品实现人员。
1.2背景说明:系统名称:贪吃蛇游戏任务提出者:手机策划人员开发者:软件开发小组的产品实现人员用户:Android操作系统手机用户运行该程序系统的计算中心:Android操作系统手机芯片1.3定义1. 节:一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。
节是蛇身上最小的单位。
2. 链表:用来保存每一段的状态,链表的元素单位是节。
且链表的第一个元素表示蛇的头部。
3. 坐标系:以左上角那点为(0,0),向右则x递增,向下则y递增1.4参考资料1.《软件工程导论》张海藩著清华大学出版社2.《数据库系统原理教程》刘韬著人民邮电出版社3.《C程序设计》谭浩强清华大学出版社4.《成功的软件开发》(原书第二版)(蔡愉祖、邓本江等译)机械工业出版社)5.《实用软件文档写作》肖刚著清华大学出版社6.计算器的电路设计及算法研究[D]. 邱钊. 电子科技大学,2011.7.基于Java EE的网络销售系统的设计与实现[D]. 刘丹.湖南大学,20128.需求规格说明书《》软件开发小组2015/49.用户操作手册(初稿)《》软件开发小组2015/52.系统的结构2.1 每个模块的名称、标识符如下所示:1.Ground类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的元素填充为石头颜色。
2 .Snake类:1) public static int x,y;2) private int oldDirection,newDirection; 用于判断newDirection 和oldDirection是否为相反方向,用于选取有效方向。
3) private Point oldTail; 用于判断蛇头是否和蛇身的某个节点的坐标重合,即蛇是否吃到自己。
4) public LinkedList<Point> body=new LinkedList<Point>();5) public void die(){} 设置变量life=FALSE;使控制进程的条件为假,进程结束。
6) public void move(){} 实现蛇身沿着蛇头的轨迹移动7) public void changeDirection(int direction){} 根据方向键,改变蛇头的x、y的值,即改变方向8) public void drawMe(Graphics g){}//把属于蛇的格子画出来9) private class SnakeDriver implements Runnable{}//蛇不停走动3. Food类:1) public void drawMe(Graphics g){} 根据产生的一组随机坐标,在其坐标处画出食物4 .Controller类:功能:处理按键事件及鼠标点击事件,处理逻辑。
根据不同的情况向Snake,Food,Ground发出不同的命令。
实现接口snake Moved,蛇每移动一步,就要判断一次,蛇是否吃到石头、是否吃到自己,是的话就snake.die()并停止计时;不是则不进行任何操作。
如果吃到食物,就要加分、重画食物、蛇身加长。
实现(N)New Game功能、(E)Exit功能、(R)Resume功能、(L)Low Level功能、(H)High Level功能、(P)Pause功能。
5 .Game Panel类:功能:画出Snake,Food,Ground,并实现重新显示。
2.2模块之间的关系:3.模块1(标识符)设计说明3.1模块描述1.目的和意义:该部分以窗体上的按钮或键盘上的快捷键为用户提供友好的控制手段。
为工作量繁大的用户提供一个简单而有趣的小游戏。
2. 特点说明:1) 程序交互性好,操作性强。
2) 易操作。
简单而有趣。
3) 功能全面,如:开始新游戏、暂停、继续、设置初级、设置高级、查看历史成绩、查看游戏说明、退出游戏。
4)对于每次不可选的按钮设置为灰显,避免了用户的错误操作。
3.2功能3.3性能本游戏在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
游戏主界面应该力求美观,赏心悦目。
游戏控制模块应做到易懂、易操作,而且准确率高,不易出错。
3.4输入项用户的按钮操作,如点击New Game、Pause、Resume、Low Level、High Level、 High Score、Description、Exit。
或者选择键盘上的方向键和游戏设置的快捷键。
快捷键有:N(New Game)、P(Pause)、R(Resume)、L(Low Level)、H(High Level)、 S(High Score)、D(Description)、E(Exit)。
3.5输出项时间、分数,以及将石头、食物、等级、分数、时间、蛇每个节点的坐标信息。
3.6设计方法(算法)1.蛇、石头、食物的表示方法:把显示区看做一个大大的表格,里面的格子就是组成蛇的基本单位,一个格子就表示一块石头或代表一个事物。
几个连在一起的格子就可以代表一条蛇。
使用坐标来区分这些格子。
2. 蛇的移动方式 蛇每移动一步,可以看做蛇头增加一个节点,蛇尾删去一个节点。
去掉3. 保存蛇的数据结构因为要区分蛇头和蛇尾,这就要求这个数据结构是有序的,还要经常的访问最后一个和第一个节点,所以Link List 最适合。
移动前移动后4.蛇的移动方向根据原来蛇头的坐标和方向计算新蛇头的坐标5.格子的坐标和像素坐标由于画蛇、食物、石头我们只是填充一个矩形,或者在相应位置显示一张图片,所以我们要知道每个格子的坐标。
3.7流程逻辑3.8接口Snake Listener:V oid SankeMoved(Snake)3.9存储分配该游戏软件运行时,Snake、Food、Ground三个对象一致同时存在,直到戏结束。
其中蛇移动方法长期占用资源,改变方向、吃到食物及石头都是瞬发动作,只是瞬间占用系统资源。
3.10注释设计Snake类中1) private int oldDirection,newDirection; 用于判断newDirection 和oldDirection是否为相反方向,用于选取有效方向。
2) private Point oldTail; 用于判断蛇头是否和蛇身的某个节点的坐标重合,即蛇是否吃到自己。
3) Private bool life=TRUE;进程的控制条件3.11限制条件1. 每个选项New Game、Pause、Resume、Low Level、High Level、Exit不能连续点击。
2. 每次要点击Exit退出游戏才能保存游戏。
3. 所运行机器必须装有JVM3.12测试计划1. 对这几个主要功能NewGame、Pause、Resume、LowLevel、HighLevel、Exit逐个进行测试。
2. 由于程序较小,测试时间预计为1小时。
3. 预期的结果:1) 在开始游戏后,按键盘上的方向键蛇会相应的改变方向。
2) 吃掉食物后蛇身的长度增加一节,分数增加。
3) 蛇碰到石头或碰到自己后游戏结束。
4) 选择Pause后,停止计时,蛇停止移动。
5) 选择Resume后,蛇在Pause时的地方继续移动,时间继续计时。
如果程序在Pause后,选择了Exit,再次运行程序时,选择Resume,也可以继续上次的游戏。
6) 选择LowLevel、HighLevel鹰相应改变石头的布局及蛇移动的时间间隔。
3.13尚未解决的问题由于水平有限,可能最终只能完成该游戏的部分功能,一些复杂的问题有待研究。