贪吃蛇详细设计说明书

合集下载

C语言贪吃蛇程序设计说明书

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. 概述幼儿园教育是孩子成长过程中至关重要的一部分,而益智游戏在幼儿园教学中扮演着重要的角色。

而其中,贪吃蛇益智游戏因其简单易懂的规则和寓教于乐的特点,被广泛应用于幼儿园教学中。

本文将针对幼儿园贪吃蛇益智游戏进行详细介绍和教案共享,帮助老师更好地利用这一游戏进行教学。

2. 游戏规则幼儿园贪吃蛇益智游戏是一款在幼儿园教学中广泛使用的游戏。

游戏规则简单:孩子扮演一条小蛇,通过操作键控制小蛇的方向,吃食物并长大,但不能碰到墙壁或者自己的身体。

这款游戏不仅能培养孩子的操作能力,还可以培养孩子对空间的感知能力,并且在游戏过程中,孩子还会学会控制自己的情绪和思维。

3. 游戏目的幼儿园贪吃蛇益智游戏的目的在于通过游戏的方式引导幼儿学习,让他们在快乐的氛围中掌握知识,培养他们的逻辑思维能力和动手能力。

通过这款游戏,孩子们能够在愉快的氛围中学习,培养他们的观察力和逻辑思维能力,使得教学更加生动有趣,并且能够提高孩子们的学习积极性。

4. 游戏教学在教学中,老师可以结合幼儿园的实际情况,设计不同的游戏场景。

可以设计成果园中的一颗果树,小蛇需要吃水果变长,同时要躲避掉不断移动的障碍物。

老师可以利用这些游戏场景引导幼儿学习有关水果、形状、颜色等知识。

通过这样的游戏教学,能够让孩子们在快乐的氛围中学到更多的知识,增强他们的记忆力和学习能力。

5. 个人观点作为一名教学者,我个人非常看重幼儿园益智游戏在教学中的应用。

而对于幼儿园贪吃蛇益智游戏,我认为它不仅能够让孩子们从中获得乐趣,还能够在游戏过程中培养他们的思维能力和动手能力。

通过这样的方式,能够有效提高孩子们的学习兴趣,让他们在愉快的氛围中掌握更多的知识。

6. 总结幼儿园贪吃蛇益智游戏作为一款益智游戏,在幼儿园教育中起着重要的作用。

通过游戏的方式,能够培养孩子们的思维能力和动手能力,让他们在快乐的氛围中学习知识。

老师们可以结合实际情况,设计场景化的教学内容,让幼儿在游戏中学习,享受成长的乐趣。

课程方案贪吃蛇编制

课程方案贪吃蛇编制

课程设计成果说明书题目:贪吃蛇游戏的编制学生姓名:杜恩荣学号: 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)用户在界面菜单的操作有点击“开始”、“暂停”、“结束”、“重新开始”、“初级”、“中级”、“高级”。

单片机课程设计贪吃蛇说明书

单片机课程设计贪吃蛇说明书

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

贪吃蛇游戏程序的设计说明

贪吃蛇游戏程序的设计说明

测控技术与仪器专业课程设计题单班级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语言编程和程序调试的基本技能。

贪吃蛇游戏-概要设计

贪吃蛇游戏-概要设计

《项目名称》概要设计说明书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个实体类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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尚未解决的问题由于水平有限,可能最终只能完成该游戏的部分功能,一些复杂的问题有待研究。

相关文档
最新文档