贪吃蛇项目说明书

合集下载

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, "游戏结束。

拓展游戏-贪吃蛇活动策划书

拓展游戏-贪吃蛇活动策划书

系贪吃蛇团体赛贪吃蛇团体赛一、目的贪吃蛇游戏适合各同学联合开展活动,因为它比拓展训练更具趣味及凝聚力,能更好的把校园文化渗透到每个同学,增进同学与同学之间的亲密感,从中学会团队协作。

另一方面它具有强身健体的作用,对于埋头学习或者游戏的学生来说更具吸引力。

它的竞技性、趣味性及观赏性带给同学们另一种新奇,容易使整个活动形成兴奋、热烈、互动的气氛,应变能力能够进一步的提高。

二、活动对象全体学生三、时间和地点:XXXX年XX月XX日(星期一) 16:45 足球场四、游戏项目细则:1、赛制:每班安排10名同学组成一队,赛前由各班级参赛队伍进行抽签确认场次。

四组同时在赛场中进行比赛,限时十五分钟,根据分值和结束时间进行评定。

1.分值一样的情况,按照时间长短来评定。

2.时间一样的情况,按照分值大小来评定。

3.当分值和时间一样,进行第二轮PK。

2、游戏规则:1.每组成员组成一条小蛇,只有蛇尾的一个人员可以看见东西但不能说话,蛇头看不见但是可以说话,其他人不能看也不能说。

各组在不违反规则的情况下,在划定时间规定区域内找寻放置在地面上的各种“宝物”。

2.贪吃蛇是以队为单位来进行,行进过程中手搭手行进,手不能断开;如若发现有手松开的情况,我们每发现一次将扣除5分的积分;3.行进中不能首尾相连,围成一个圆环;4.除了蛇尾最后一名队友外,其它队友都须戴上眼罩,除了第一个队友可以说话以外,其它队友不可以讲话;再强调一下:第一名队友看不见、但能说话(简单来说就是瞎子),最后一名队友看得见、但不能说话(哑巴);从第二名队友开始到倒数第二名队是既看不见、又不能说话(又瞎又哑的人,但不是耳聋)。

注意是:这是一个君子游戏,如果发现有说话的、偷看的、每发现一次我们将扣除总积分的五分之一分;5.第一队友捡了球之后就停下来,然后从前面往后面传,传到最后一名伙伴,由最后一名伙伴将球放到指定的区域后(传递的时候,其余所有的伙伴都要在原地不动),回到队伍,才能继续下一个任务;当分值符合要求后,由最后一名队员站在本队的指定区域举手示意完成。

_贪吃蛇游戏_说明书

_贪吃蛇游戏_说明书

湖南工业大学课程设计任务书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; //开启软开关}/********显示函数********/。

贪吃蛇游戏说明书

贪吃蛇游戏说明书

贪吃蛇游戏说明书学院:计算机工程系专业班级:学号:学生:指导教师:青岛理工大学琴岛学院教务处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.游戏结束时点击提示对话框里的“确定”,恢复游戏主窗口。

贪吃蛇项目分析文档

贪吃蛇项目分析文档

----项目设计报告书项目名称:贪吃蛇指导老师:顾洪所在系别:计算机系班级:307051项目成员:张炜32007051034孔金蕾32007051053目录第一章引言........................................................... 错误!未定义书签。

1.1编写目的 (1)1.2术语 (1)1.3参考文献 (1)第二章系统概述 (2)2.1实例说明 (2)2.2设计思路 ..................................................... 错误!未定义书签。

2.3技术要点 (2)2.4实现过程 (3)第三章总体设计 (4)3.1项目界面图 (4)3.2 新增功能 (8)第四章程序代码 (10)第一章引言1.1编写目的鉴于日常工作压力太大,闲暇的时间大多比较零碎,为了缓解紧张的情绪,获得更高工作效率,人们在日常的娱乐生活中,经常会玩一些单机版的益智类小游戏,它的特点是使用的内存小,又无需建立网络,更不会使人沉迷,获得了大多数人的喜爱。

1.2术语访问修饰符用于限制对类型或类型成员的访问的关键字,如private、protected、internal 或public。

可访问成员一种可由给定类型访问的成员。

一种类型的可访问成员不一定可由另一种类型访问。

类(class)一种描述对象的数据类型。

类不仅包含数据,还包含作用于数据的方法。

字段(field)类或结构的一个可直接访问的数据成员。

方法一个提供类或结构的行为的命名代码块。

属性(property)通过访问器访问的数据成员。

static声明为静态的类或方法不必首先使用关键字new 进行实例化就可存在。

Main() 就属于静态方法。

1.3参考文献C#范例完全自学手册第二章系统概述2.1实例说明本实例将制作一个贪吃蛇游戏,读者可以根据该实例了解游戏的制作过程,达到举一反三的程度,为以后的开发工作,打下基础。

贪吃蛇概要设计书

贪吃蛇概要设计书

贪吃蛇概要设计书1. 引言1.1.编写目的本文档将对《贪吃蛇》游戏软件功能进行概要描述,本文档的读者是项目策划、设计和评审人员。

1.2.背景本项目作为学生学习软件文档写作和简单游戏编程而提出。

希望学生通过《贪吃蛇》游戏软件设计开发,了解软件文档的相关标准和编写原则,训练并掌握软件各类文档写作的技巧,同时提高学生使用Java开发应用程序的能力。

本项目的名称:贪吃蛇游戏软件。

本项目的开发者:孙俊芳。

1.3.参考资料①《软件需求说明书》②《开发要求说明》③《游戏软件资料》2. 总体设计2.1需求规定游戏者通过键盘的上下左右方向键控制蛇头的移动方向,回车键暂停/继续,通过PAGE UP 加速,PAGE DOWN 减速来控制蛇的移动速度。

游戏的目的是使蛇吃到食物,不可以吃到石头或者自己的身体。

每一次吃到食物蛇的身长加一。

蛇吃到石头或者自己的身体时,游戏结束。

游戏者可以在游戏开始前选择游戏地图。

可以设置游戏背景颜色,蛇头颜色,食物颜色,蛇身颜色,还可以显示网格,同时选择网格的颜色。

点击“恢复默认设置”时,恢复默认设置。

2.2运行环境设备:硬件最低要求:CPU P II以上PC 服务器,内存32MB以上,硬盘15MB以上。

支持软件:操作系统:windows 98.、windows NT、windows 2000、windows XP、windows Server 2003等能安装JA V A 2 的操作系统。

2.3基本设计概念和处理流程启动游戏后进入游戏界面,这时可以设定游戏地图,设置蛇头等的颜色参数。

开始游戏后,通过键盘的上下左右方向键控制蛇头的移动方向,回车键暂停/继续,通过PAGE UP 加速,PAGE DOWN 减速来控制蛇的移动速度。

系统处理流程如下图所示:3.2外部接口本软件需要实现外部接口。

3.3内部接口本软件需要实现的内部接口就是实现各个类之间的接口。

1. 系统出错处理设计4.1出错信息安装游戏后无法运行。

班组长培训贪吃蛇游戏规则

班组长培训贪吃蛇游戏规则

班组长培训贪吃蛇游戏规则
一、贪吃蛇项目介绍
每队排成一路纵队,双手搭在前方队友的肩膀上组成蛇头、蛇身、蛇尾,所有队员佩戴眼罩,只有蛇尾最后一名不戴眼罩。

当蛇头摸到球后,迅速将球装到口袋里,摘下眼罩跑至队尾成为新的蛇尾,而前一名蛇尾这时你需要戴上眼罩成为蛇身,依次循环,直到将球全都捡完。

二、贪吃蛇游戏规则
1、项目全程不允许讲话;
2、君子游戏,不允许偷看;
3、队伍不可以断开。

以上规则违反任意一条,拓展教练将收走一个球,一切评判标准以拓展教练为准。

三、贪吃蛇项目注意事项
1、项目进行中注意脚下场地上的石头、木棍等硬物;
2、学员应穿运动鞋参加活动;
3、在保证安全的前提下完成项目的挑战。

四、贪吃蛇项目目标
1、培养团队高度契合执行力;
2、体验不同的沟通方式,进而达成目标;
3、体会团队的合作力量。

贪吃蛇项目计划书文档.doc

贪吃蛇项目计划书文档.doc

项目组号 11密级公开湖南科技职业学院软件学院二○一四届毕业设计文档项目名称贪吃蛇游戏专业移动应用软件开发指导教师杨夏 ______ 项目组成员罗浩肖凇管萧2015年 1 月前言随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。

更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。

因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。

贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。

而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。

虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。

因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。

可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。

对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。

这样的小游戏刚好迎合了他们的需求目录第1章项目开发计划书 (1)1.1项目范围 (2)1.2客户资料 (2)1.3项目成果 (2)1.4资源需求 (2)1.5项目风险分析 (3)1.6分配任务 (3)第2章需求规格说明书 (4)2.1问题陈述: (5)2.2要达到的目标: (5)2.3具体的分析: (5)第1章项目开发计划书文件修改记录编号状态日期执笔人审核人批准人1 创建文档 1.5 肖凇罗浩杨夏1.1项目范围范围:对项目的功能模块的简单描述。

项目代码:自定项目设计:对项目的功能和需求做简单分析设计,制定一套可行性较高的实施方案。

项目测试:对项目做单元测试和集成测试,针对测试报告,进一步改进,减少bug数。

1.2客户资料客户名:湖南科技职业技术学院1.3项目成果序号内容日期计划时间实际时间状态1 简单分析2015.1.5 1天1天完成2 界面设计2015.1.6 2天未完成3 系统设计2015.1.8 1天未完成4 项目中期检查2015.1.9 1天未完成5 编码开发2015.1.10 4天未完成6 测试2015.1.14 1天未完成7 部署发布2015.1.15 1天未完成8 项目答辩2015.1.16 1天未完成1.4资源需求序号资源作用占用时间当前可用状态获得途径1 Eclipse安卓编程软件项目的开发贯穿整个项目的构造阶段可用学校提供2 参考资料指导项目进行占用项目中的一些环节可用购买3 Office办公软件用于写文档、PPT等贯穿整个项目的构造阶段和走查过程可用购买1.5项目风险分析序号风险概率(%)严重性(%)措施1 时间不够(因为自己在学习,没有足够多的时间)20 80 尽量的腾出时间,可能的话,晚上也加班完成项目。

贪吃蛇游戏-概要设计

贪吃蛇游戏-概要设计

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

[游戏团建]----贪吃蛇-沟通执行力新项目

[游戏团建]----贪吃蛇-沟通执行力新项目

贪吃蛇沟通执行力新项目项目名称:贪吃蛇项目性质:团队沟通合作类项目项目时间:40-60分钟项目人数:10-20人一、项目目标1、在有一定障碍情况下如何进行有效沟通;2、如何集思广益制定适合本团队的计划;3、计划是否简单而且高效,计划形成后考验执行力;4、在执行的过程中能不能找到缺陷改进方法;5、互补互助,形成热烈的团队氛围;6、团队中精诚合作的必要性;二、项目布置项目任务:活动区域内有西瓜球、网球、高尔夫球、弹力球,分别代表不同的分值,有正有负,你们的任务是:在看不见、又不能语言沟通的情况下从活动区域内取出不同分值的球,最后积分最高者获胜。

项目规则:1、活动区域为黄线围成的区域;2、游戏共进行三轮,每轮时间3分钟;3、每队行进过程中手搭前方伙伴肩膀行进,手不能断开,除了蛇尾最后一名队友外,其它队友都须戴上眼罩;4、活动中任何人不能说话、不能触碰黄线,否者本轮宣告失败,不得分;5、第一队友捡了球之后直接放到手里的篮子里,每个球的分值在任务书上,每一轮任务书只有蛇尾的最后一名队友可以看到;6、5分钟讨论时间,5分钟后,石头剪刀布,宣布挑战开始;任务书一:1、本项目中拾起一个西瓜球的积分为:12分;2、本项目中拾起一个网球的积分为:10分;3、本项目中拾起一个高尔夫球的积分为:-5分;4、本项目中拾起一个弹力球的积分为:-7分;任务书二:1、本项目中拾起一个西瓜球的积分为:9分;2、本项目中拾起一个网球的积分-4分;3、本项目中拾起一个高尔夫球的积分-8分;4、本项目中拾起一个弹力球的积分13分;任务书三:1、本项目中拾起一个西瓜球的积分为:-9分;2、本项目中拾起一个网球的积分为:-3分;3、本项目中拾起一个高尔夫球的积分为:14分;4、本项目中拾起一个弹力球的积分为:8分;任务书四:1、本项目中拾起一个西瓜球的积分为:-10分;2、本项目中拾起一个网球皮球的积分13分;3、本项目中拾起一个高尔夫球的积分9分;4、本项目中拾起一个弹力球的积分-2分;小贴士:根据人数情况,这个项目可以几个组一起开始,也可以一个组一个组轮流来,不管是轮流来,还是一起来,同一轮任务书,每组应该是不一样的。

贪吃蛇详细设计说明书

贪吃蛇详细设计说明书

贪吃蛇_详细设计说明书编写人:完成日期: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。

(完整word版)贪吃蛇项目开发计划书

(完整word版)贪吃蛇项目开发计划书

项目编号:S×××-贪吃蛇分类:<模板>使用者:<项目组>文档编号:HD-PP-310 四川华迪信息技术有限公司项目计划Version: 1.0项目承担部门:计算机班第六小组撰写人(签名):许明华(负责人)、黄程、廖浩杰完成日期: 2016年7月18日星期一本文档使用部门:□主管领导□项目组□客户(市场)□维护人员□用户评审负责人(签名):评审日期:标题: 贪吃蛇项目计划书说明书作者: 许明华(负责人)、黄程、廖浩杰创建日期: 2016年7月18日星期一上次更新日期:版本: V1.0部门名称: 软件研发修订文档历史记录日期版本说明作者目录1.前言51.1目的51.2术语与缩略语52.项目概述52.1项目背景和目标52.2项目范围62.3交付的产品错误!未定义书签。

2.4约束和假设63.角色和职责63.1利益相关人角色和职责63.2有关的利益相关人介入计划错误!未定义书签。

4.项目约定错误!未定义书签。

5.项目的已定义过程错误!未定义书签。

5.1项目的生命周期选择错误!未定义书签。

5.2项目阶段划分及主要工作产品75.3本项目采用的过程错误!未定义书签。

5.4裁剪结论错误!未定义书签。

6.工作任务分解87.项目估计错误!未定义书签。

8.项目所需技能和培训计划错误!未定义书签。

8.1项目所需技能错误!未定义书签。

8.2项目培训计划错误!未定义书签。

9.项目相关计划810.开发计划错误!未定义书签。

10.1项目监控计划错误!未定义书签。

10.1.1活动列表错误!未定义书签。

10.1.2改进指标错误!未定义书签。

10.1.3偏差控制(项目计划变更与重估计约定)错误!未定义书签。

10.2风险管理计划错误!未定义书签。

10.3度量与分析计划错误!未定义书签。

10.4质量保证计划错误!未定义书签。

10.5配置管理计划错误!未定义书签。

10.6系统测试计划910.7介入计划错误!未定义书签。

《贪吃蛇》课程案例指导书

《贪吃蛇》课程案例指导书

《贪吃蛇》课程案例指导书项目描述:本项目是对经典的贪吃蛇游戏的模拟和扩展,运用课程中学到的Java 编程知识,采用经典的MVC架构对面向对象编程思想进行训练,并对IDE集成开发工具进行熟练使用。

涉及主要知识点:Java程序的组成和组织、Java编程规范、数据类型和变量、表达式和语句、程序控制结构、数组、Java面向对象技术(类定义、类和对象、继承和多态、抽象类和接口、内部类、枚举类型)、Java集合类、Java数据处理之文件读写、swing界面编程、Java绘图技术、多线程(Timer 定时器)等。

项目分析与设计:贪吃蛇游戏的核心功能包括蛇的创建、吃食物、生长、移动、碰撞检测(边界检查、自身碰撞检查)等,附加功能包括计分、计时、游戏配置、国际化与本地化等。

游戏采用MVC架构:M:model,业务逻辑模块,负责业务处理。

V:view,用户界面模块,负责数据的显示和收集、界面逻辑。

C:control,控制器模块,model和view的中介,主要功能通知业务模块修改和通知界面模块刷新。

实现步骤:1.创建项目SnakeGame,并添加程序入口类GameEntry2.添加业务模型包game.model,并添加如下类:Snake:提供游戏中蛇相关的数据(如节点集和移动方向等)和行为(如蛇的生长、移动、碰撞检测等)的封装。

Node:游戏中最小组成单元,可表示蛇的节点、食物、障碍物。

包含节点位置信息及节点类型,为配合Java集合类的操作需要重写equals方法。

GameServer:业务模型对外公开接口(满足迪米特法则),即提供中介服务,包括蛇的创建和管理、食物的创建、分数监听机制、游戏结束监听机制等。

NodeType:节点类型枚举,分为Node、Food、Rock三种。

Direction:游戏方向枚举,分为Left、Up、Right、Down四个。

OverListener:游戏结束监听接口。

ScoreListener:分数监听接口。

贪吃蛇实验报告

贪吃蛇实验报告

贪吃蛇课程设计说明书目录1.选修课系统概述1.1系统的主要任务1.2 基本要求1.3 主要功能1.4 系统开发的目的2.系统分析2.1分析问题和定义类,给出类的定义和联系2.2程序设计语言的选择3.总体设计3.1系统的结构图(总图)3.2系统的用例图3.3系统的类图3.4系统运行界面截图4.系统评价4.1系统的特点4.2系统的缺点4.3将来可能提出的要求5.总结6.参考文献1.系统概述1.1系统的主要任务模拟贪吃蛇游戏,编写一个C#版的贪吃蛇游戏。

1.2 基本要求能够实现贪吃蛇的移动,吃食物,显示最高分,显示帮助信息,蛇的速度也是改变的1.3 主要功能1.运动时,蛇身后面一节移动到前面一节的位置。

2.蛇头由键盘控制,键盘不操作时,保持原有方向运动;否则要根据所按方向键调整当前蛇的运动方向。

3. 吃到一个食物以后,蛇身会增加一节。

4.如蛇撞墙或头撞身体,它就死了。

5.播放背景音乐,当蛇吃到一个食物时会放一段音乐6.可以储存最高分1.4系统开发的目的通过开发一个简单的游戏,让我们从中可以进一步了解到开发一个实用软件的基本常识和一般步骤。

游戏占GUI编程很大的部分,现在编了,以后不会觉得太陌生2.系统分析2.1分析问题和定义类,给出类的定义和联系该游戏软件可以存储蛇的分数,把分数存储在文件中,贪吃蛇的头和身体看着是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的矩形来表示蛇头或一节蛇身。

为表示连续的多节身体,我使用了ARRAYLIST来表示。

数组中的每个元素记录的是矩形左上角的坐标。

部分类的定义如下:class Food{public Point pos;private Image blockFood = Image.FromFile("images/block01.gif");public Point Pos{get{return pos;}set{pos = value;}}public Food(Snake snake){do{Random randomFood = new Random();pos.X = randomFood.Next(20);pos.Y = randomFood.Next(20);} while (snake.pointConsist(pos));}public void Draw(Graphics g){Rectangle rectFood = new Rectangle(pos.X * Snake.SnakeImageWidth, pos.Y * Snake.SnakeImageHeight, Snake.SnakeImageHeight,Snake.SnakeImageWidth);g.DrawImage(blockFood, rectFood);}enum direction{up,down,left,right}class Snake{public const int SnakeImageWidth = 20;public const int SnakeImageHeight = 20;private direction drn=direction.right;private ArrayList pos=new ArrayList();private Point last;private Image blockImageHead = Image.FromFile("images/block07.gif");private Image blockImageBody = Image.FromFile("images/block14.gif");bool isAlive = true;public Snake(): this(0, 0){}public Snake(int x, int y){pos.Add(new Point(x, y));pos.Add(new Point(x-1, y));pos.Add(new Point(x-2,y));pos.Add(new Point(x-3, y));}public bool IsAlive{get{return isAlive;}set{isAlive = value;}}public direction Direction{get{return drn;}set{drn = value;}}public bool pointConsist(Point p){if (pos.Contains(p))return true;else return false;}public void Draw(Graphics g){Rectangle rectHead = new Rectangle(((Point)pos[0]).X * SnakeImageWidth, ((Point)pos[0]).Y *SnakeImageHeight, SnakeImageHeight, SnakeImageWidth);g.DrawImage(blockImageHead,rectHead);for (int i = 1; i < pos.Count; i++){Rectangle rectBody = new Rectangle(((Point)pos[i]).X * SnakeImageWidth, ((Point)pos[i]).Y * SnakeImageHeight, SnakeImageHeight, SnakeImageWidth);g.DrawImage(blockImageBody, rectBody);}}public void Move(direction dir){int maxX = frmMain.PlayFieldWidth - 1;int maxY = frmMain.PlayFieldHeight - 1;Point pTemp=(Point)pos[0];last = (Point)pos[pos.Count - 1];drn = dir;switch (dir){case direction.up:pTemp.Y --;if (pTemp.Y < 0){isAlive = false;}break;case direction.down:pTemp.Y ++;if (pTemp.Y > maxY){isAlive = false;}break;case direction.left:pTemp.X --;if (pTemp.X < 0){isAlive = false;}break;case direction.right:pTemp.X ++;if (pTemp.X > maxX){isAlive = false;}break;}for (int i = 0; i < pos.Count; i++){Point temp;temp = (Point)pos[i];pos[i] = pTemp;if (i>0 && ((Point)pos[0]).X == pTemp.X && ((Point)pos[0]).Y == pTemp.Y){this.IsAlive = false;}pTemp = temp;}}public void eat(){//Point temp =(Point) pos[pos.Count - 1];//this.Move(drn);//pos.Add(new Point(temp.X,temp.Y));pos.Add(last);}}public partial class frmMain : Form{public const int PlayFieldWidth = 20;public const int PlayFieldHeight = 20;public bool gameState;private int score = 0;private short level = 1;public string playername;private int mark;private direction tempdir=direction.right;Sound eat;Sound back;Snake snake;Food food;public frmMain(){InitializeComponent();picPlayingField.Height = PlayFieldHeight * Snake.SnakeImageHeight;picPlayingField.Width = PlayFieldWidth * Snake.SnakeImageWidth;FileStream f = new FileStream("score.txt", FileMode.OpenOrCreate);StreamReader reader = new StreamReader(f);if((playername = reader.ReadLine()) != null){mark = Convert.ToInt32((reader.ReadLine()));}reader.Close();f.Close();snake = new Snake(8, 3);food = new Food(snake);timer.Enabled = false;eat = new Sound(this);back = new Sound(this);eat.Load("sounds/hit.mp3");back.Load("sounds/music.mp3");back.Loop = true;back.Play();}public void write(){if (score > mark){mark = score;string s;frmName fname = new frmName();fname.ShowDialog();s = fname.PlayerName;//fname.Dispose();mark = score;FileStream file = new FileStream("score.txt",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);StreamWriter writer = new StreamWriter(file);writer.WriteLine(s);writer.WriteLine(mark);//writer.Flush();writer.Close();file.Close();}}private void timer_Tick(object sender, EventArgs e){lblLevel.Text = level.ToString();lblScore.Text = score.ToString();snake.Direction = tempdir;snake.Move(snake.Direction);if (snake.IsAlive == false){timer.Enabled = false;MessageBox.Show("You died");write();}else{picPlayingField.Invalidate();}}protected override bool ProcessCmdKey(ref Message msg, Keys keyData){switch(keyData){case Keys.Up:if (snake.Direction == direction.down ||snake.Direction==direction.up){break;}else{tempdir = direction.up;break;}case Keys.Down:if (snake.Direction == direction.up || snake.Direction == direction.down){break;}else{tempdir = direction.down;break;}case Keys.Left:if (snake.Direction == direction.right || snake.Direction == direction.left){break;}else{tempdir = direction.left;break;}case Keys.Right:if (snake.Direction == direction.left || snake.Direction == direction.right){break;}else{tempdir = direction.right;break;}}return true;}private void picPlayingField_Paint(object sender, PaintEventArgs e){if (snake.IsAlive){if(snake.pointConsist(food.pos)){score += 10;level = (short)(score / 100+1);if (level <= 20){timer.Interval = 600-(level-1)*20;}food=new Food(snake);eat.Play();snake.eat();}else{food.Draw(e.Graphics);}snake.Draw(e.Graphics);}}private void btnStart_Click(object sender, EventArgs e) {btnStart.Text = "重新开始";snake = new Snake(8, 3);snake.IsAlive = true;food = new Food(snake);timer.Interval = 600;timer.Enabled = true;level = 1;score = 0;}private void btnStop_Click(object sender, EventArgs e) {if(snake.IsAlive==true){if (timer.Enabled == true){timer.Enabled = false;btnStop.Text = "恢复游戏";}else{timer.Enabled = true;btnStop.Text = "暂停游戏";}}}private void btnExit_Click(object sender, EventArgs e){write();Application.Exit();}private void btnhelp_Click(object sender, EventArgs e){timer.Enabled = false;btnStop.Text = "恢复游戏";MessageBox.Show("使用↑↓←→控制蛇头方向,吃到食物蛇就增长一点\n 当吃满10个食物时蛇运动的速度会变快一点,当蛇撞到自己或者墙时游戏结束!\n祝你玩的开心");}private void btnLog_Click(object sender, EventArgs e){timer.Enabled = false;btnStop.Text = "恢复游戏";if (playername == ""){MessageBox.Show("没有最高分");}else{MessageBox.Show("姓名" + playername + "\n分数" + mark, "最高分", MessageBoxButtons.OK);}}}2.2程序设计语言的选择C#3.总体设计3.1系统的流程图(总图)3.2系统的用例图3.3系统的类图3.4系统运行界面截图贪吃蛇欢迎界面:游戏界面:帮助界面:最高分界面:4.系统评价4.1系统的特点该游戏可以实现贪吃蛇的基本功能,蛇可以移动,可以吃食物,吃了食物后可以加分,随着分数的增加,蛇的运动速度也会变快。

贪吃蛇程序设计说明书

贪吃蛇程序设计说明书

贪吃蛇程序设计说明书贪吃蛇游戏程序设计说明书题目:贪吃蛇游戏学校:系别:专业班级:姓名:学号:指导老师:日期:一、设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。

每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。

二、功能设计:本游戏要求实现以下几个功能:(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, "游戏结束。

C语言贪吃蛇游戏需求分析说明书

C语言贪吃蛇游戏需求分析说明书

项目需求规格说明书当前版本号:1.0最后更新日期:作者:目录1.引言 (3)1.1. 目的 (3)1.2. 背景 (3)1.3. 参考资料 (3)1.4. 开发人员 (3)2. 任务概述 (3)2.1目标 (3)2.2 假定与约束 (4)3.游戏总体需求说明 (5)3.1. 功能需求 (5)3.2. 性能需求 (5)3.3 界面需求 (6)3.4 运行环境需求 (6)1.引言1.1.目的本文档分析和说明贪吃蛇游戏的总体需求①:展示游戏的结果,以及游戏的价值;②:总结反思,为后续游戏做的更好进行复盘。

③:明确游戏的功能、性能、界面等方面的需求,为游戏的开发和设计提供指导;1.2.背景项目委托单位:开发单位:主管部门:1.3.参考资料1、贪吃蛇游戏现有版本2、相关书籍与文档3、网络上的相关资源和资料4、严蔚敏. 数据结构(c语言版). 清华大学出版. 2007年.5、谭浩强. C程序设计(第4版). 清华大学出版社. 2010年6月.1.4.开发人员2. 任务概述2.1目标①开发的意图:为了提供一款经典有趣的游戏,让玩家可以通过控制蛇的移动来获取食物并不断增加长度,增强反应能力和策略思维。

②应用目标:主要是娱乐和休闲。

通过游戏,玩家可以在放松身心的同时享受游戏带来的挑战和成就感。

③作用范围:贪吃蛇游戏适用于各种游戏平台,包括电脑、手机、平板等。

它可以在个人设备上单人游戏,也可以通过网络连接与其他玩家进行多人对战。

④背景资料:贪吃蛇游戏最早出现于20世纪70年代末期,是一款经典的电子游戏。

最初的贪吃蛇游戏是在黑白屏幕上展示,玩家通过操纵一个小蛇吃食物,并随着吃食物的数量增加而变长。

随着游戏的发展,贪吃蛇游戏在不同的平台上得到了广泛的推广和发展,衍生出了各种版本和变种。

如今,贪吃蛇游戏仍然受到许多玩家的喜爱,并成为了经典的游戏之一。

⑤软件系统与其它系统的关系:贪吃蛇软件系统通常是一个独立的游戏系统,与其他系统没有直接的依赖关系。

贪吃蛇 策划书3篇

贪吃蛇 策划书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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目说明书项目名称:和氏蛇开发人员:沙夫都开发日期:2015.06.13目录一:引言 (1)1:编写目的 (1)2:开发背景 (1)3:定义 (3)4:参考文献 (3)二:任务概述1:目标 (3)2:用户的特点 (3)三:需求规定1.对功能的规定 (4)2.对性能的规定 (4)3.输入输出要求 (4)四:运行环境 (4)1.设备 (5)2.支持软件 (5)3.接口 (5)4.控制 (5)五:项目详细设计方案1.项目涉及知识点 (5)2.项目大体流程与思想 (5)3.控件涉及模块六:实现项目的具体方案 (7)1.第一部分 (7)2.第二部分 (7)一:引言1:编写目的此项目说明书对《和氏蛇游戏》软件做了细致的用户需求分析,明确游戏软件所具备的功能,性能及界面,让系统分析人员和软件开发人员皆能详细了解用户的需求,并在此基础上进一步提出概要设计说明书和后续开发工作。

本说明书指定读者为客户,业务人员,需求分析人员,测试人员,用户文档编写者以及该项目管理人员等。

2:开发背景随着科技进步,如今的通讯设备已经不是简单的接电话和收发短信了。

更多的用户希望在工作学习之余能够通过随身携带的手机进行娱乐休闲。

为了满足众多用户需求并适应现在手机的规模,我决定开发一款适合各阶层人士的具有很强娱乐性和交互性的小游戏。

即使现在市面存在着众多版本的贪吃蛇,但这款游戏的市场还是挺大的,因为它能深入吸引人,让人们爱不释手,而且该游戏简单易行,不论是手机,还是小游戏机,都能很顺利的运行,对于在这个快节奏时代中生活的人,他们没有时间花费在大型游戏这种娱乐中,因此贪吃蛇这样的小游戏就正好满足了他们的需求。

3:定义需求:用户解决问题或达到目的所需的条件或功能,系统或系统部件要满足标准要求,规范或其他正式规定文档所需具备的条件或权能,而且很强的交互性简单易行性,可以让人们在很短的时间内熟悉它的游戏规则,不论用户文化水平如何,都会很轻松的学会使用它。

4:参考文献《VisualC++面向对象与可视化程序设计》第三版清华大学出版社2011年6月二:任务概述1.目标如今的社会,人们的生活节奏越来越快,没有时间去放松一下心情,这款小游戏,可以让你随时随地享受游戏带来的快感,让你从繁重的日常生活中解脱。

游戏的界面力求简单大方,赏心悦目,以提高玩家的兴趣,游戏的控制模块做到易懂,易操作,给用户一个很好的游戏环境。

2.用户的特点由于本程序简单容易操作,交互性好,对用户没什么特别要求,只需花费几分钟就能熟悉规则。

三:需求规定1.对功能的规定本设计所开发的是基于MFC的一个贪吃蛇游戏软件,主要实现游戏的开始,暂停,继续,退出等功能,分为:游戏主界面模块,游戏控制模块两个模块。

游戏主界面模块:主要包括游戏区域界面,游戏开始按钮,暂停按钮,继续按钮,退出按钮。

游戏控制模块:主要完成游戏的开始,暂停,继续,退出功能。

2.对性能的规定本游戏在设计方面本着方便,实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。

游戏主界面力求美观大方,游戏控制模块应做到易懂,易操作,准确率高,不易出错的效果。

3.输入输出要求输入;玩家可以通过点击界面上“游戏”,再点击选择“游戏开始”“游戏结束”“游戏暂停”“游戏退出”进行游戏。

输出:当点击“游戏开始”时界面会显示“游戏3秒后进行”,游戏结束后,显示你的得分。

四:运行环境1.设备:windows XP/7/8.2.支持软件:Eclipse3.接口:snakelistener4.控制:上下左右方向键控制蛇的移动。

五:项目详细设计方案1).项目涉及知识点:1 CView类中的消息响应2 控件的消息响应3 基于CView类内的具体游戏实现4 数组5 游戏图形的实现用CDC类实现。

*:本版游戏的具体实现是在CViewl类中实现,所以其他类不用添加任何代码2).完成项目的基本流程与大体思想:1 定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕的初始位置,长度,以及蛇的行走方向。

食物类的定义包括出现的初始位置,以及食物是否被吃掉的判断。

2 用数组初始化长度为3的贪吃蛇,并且默认食物未出现3 在CView类上运用MFC提供的Windows消息中WM_TIMER消息,运用OnTimer()函数让系统提供一个时钟节拍,更新游戏4 具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其中还包括根据蛇的长度来进行游戏难度的改变。

5 具体键盘游戏操作运用到Windows消息响应中的WM_KEYDOWN,用OnKeyDown()来响应玩家的实际操作。

3).控件设计模块(菜单模块)设计游戏的一些控件来控制“游戏开始” “游戏结束” “游戏暂停”“游戏退出”。

这里我们在“Resource View”的Menu文件夹中把“IDR_MAINFRAME”中默认的控件全部删除,然后建立一“游戏”菜单,并分别建立属性“标明”与对应的ID为:游戏开始IDM_START,游戏暂停IDM_PAUSE,游戏继续IDM_CONTINUE,游戏退出IDM_EXIT的控件,通过建立类向导将“Class name”的默认“CMainFrame”改为“CView类”,并且在“Messages”类型设置中,用“COMMAND”设置为其命令消息即可。

六:实现项目的具体方案1.第一部分:首先在已有工程下的“ClassView”中右键CView类添加以下Windows信息1 WM_KEYDOWN2 WM_RBUTTONDOWN3 WM_TIMER再右键CView类选择“ADD Virtual Funciton”选OnInitialUpdate(),再者还要添加一个成员函数oninit()进行贪吃蛇外观的初始化*注:OnInitialUpdate()的功能如下:视图窗口完全建立后第一个被框架调用的函数。

框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。

时间上,两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生,然后才是视图OnInitialUpDate,一般在这里对视图的显示做初始化。

简单点,就是ONCREATE只是产生VIEW的基本结构和变量而OnInitialUpDate()中,主要初始化视图中控件等。

对各个变量进行初始化操作,所以我们要用这个函数来进行贪吃蛇的初始化工作。

2.第二部分:实现游戏的核心部分:Part1:首先我们在文件开头处分别定义蛇和食物的全局变量struct Snake{int x,y;int len;int direct;}Snake[50];struct Food{int x;int y;}Food;并且初始化贪吃蛇起初有3个节点,长度为3,起始坐标;食物默认为1无0有具体添加代码:Snake[0].x=10;Snake[0].y=10;Snake[1].x=11;Snake[1].y=10;Snake[2].x=12;Snake[2].y=10;Snake[0].direct=3;Snake[0].len=3;Food.isfood=1;Part2:由于之前我们设定了WM_TIMER消息,我们能运用计时器功能用WM_TIMER来设置定时器. 在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,所以我们这里可以只去后3个参数写成SetTimer(1,10,NULL);1000为1秒Part3:对OnDraw()的添加代码:OnDraw()函数众所周知视图类中的输出.视图类的输出基本上都是在视图类的OnDraw 函数中处理的,系统会准备好入参,然后调用OnDraw函数Part4:用画刷画一个背景,并且画出3个矩形区域函数原型:int GetClipBox(HDC hdc, LPRECT lprc);该函数得到一个能够完包含当前可见区域的最小矩形的大小Part5:对OnTime()的添加代码:void CSNAKEView::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();CString soure;if(Snake[0].len==2)SetTimer(1,370,NULL);if(Snake[0].len==3)SetTimer(1,270,NULL);if(Snake[0].len==6)SetTimer(1,200,NULL);if(Snake[0].len==9)SetTimer(1,100,NULL);soure.Format("得分:%d!",(Snake[0].len-3)*10);//撞界判断if(Snake[0].x*20<=37||Snake[0].y*20<=37||Snake[0].x*20>=462||Snake[0].y*20>=462){KillTimer(1);AfxMessageBox(soure);// s=0;}//蛇身相撞判断if(Snake[0].len>3)for(int sn=Snake[0].len-1;sn>0;sn--){if(Snake[0].x*20==Snake[sn].x*20&&Snake[0].y*20==Snake[sn].y*20){KillTimer(1);AfxMessageBox(soure);// s=0;}}///////////////////////////////////////////////////////////////////////////pDC->SelectStockObject(WHITE_PEN);pDC->Rectangle(Snake[Snake[0].len-1].x*20,Snake[Snake[0].len-1].y*20,(Snake[Snake[0].len-1].x+1)*20,(Snake[Snake[0].len-1].y+1)*20);for(int i=Snake[0].len-1;i>0;i--){Snake[i].x=Snake[i-1].x;Snake[i].y=Snake[i-1].y;}//行走方向判断if(Snake[0].direct==1)Snake[0].y--;if(Snake[0].direct==2)Snake[0].y++;if(Snake[0].direct==3)Snake[0].x--;if(Snake[0].direct==4)Snake[0].x++;pDC->SelectStockObject(BLACK_PEN);CBrush DrawBrush=(RGB(100,100,100));CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);pDC->Rectangle(Snake[0].x*20,Snake[0].y*20,(Snake[0].x+1)*20,(Snake[0].y+1)*20); pDC->SelectObject(DrawBrush);//判断吃豆的条件,撞到就吃if(Snake[0].x*20==Food.x*20&&Snake[0].y*20==Food.y*20){Snake[0].len++;Food.isfood=1;Snake[Snake[0].len-1].x=Snake[Snake[0].len-2].x;Snake[Snake[0].len-1].y=Snake[Snake[0].len-2].y;}//如果食物被吃了就生成if(Food.isfood==1){srand((unsigned)time(NULL));do{for(int isfo=Snake[0].len-1;isfo>=0;isfo--)if(Snake[0].x*20==Snake[isfo].x*20&&Snake[0].y*20==Snake[isfo].y*20){Food.x=rand()%;Food.y=rand()%;}}while(Food.x*20<70||Food.y*20<70||Food.x*20>430||Food.y*20>430);pDC->Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20);Food.isfood=0;}CView::OnTimer(nIDEvent); }。

相关文档
最新文档