《C语言贪吃蛇程序设计说明书.doc》由会员分享,可在线阅读,更多相关《C语言贪吃蛇程序设计说明书.doc(11页珍藏版)》请在三一办公上搜索。
1、贪吃蛇游戏程序设计说明书题 目:贪吃蛇游戏学 校: 系 别: 专 业 班 级:姓 名: 学 号:指导老师: 日 期:一、 设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。二、 功能设计:本游戏要求实现以下几个功能:(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2) 用户可以调节蛇的运行速度来选择不同的难度;(3) 游戏分多个难度级别;(4) 用户可自选颜色;(5) 记录成绩前五名的游戏玩家;(6) 增加
2、背景音乐;(7) 提高障碍物和游戏级别。三、 程序模块图:贪吃蛇游戏初始化画图模块控制模块设置模块帮助模块墙体蛇身食物移动食物死亡变长成绩等级音效四、 算法流程图:是否否是否是开 始初始化界面和蛇身放置食物获取按键开始运动碰到边界蛇吃到食蛇长大蛇死亡继续结束五、 函数原型与功能1.主函数:void main() 启动程序,触动其他函数。2.初始化:void init () 设置背景框大小、蛇体初始值,随机产生食物。3.随机产生食物:void setfoodcrd() 设置食物生成坐标,0表示食物被吃。4.画食物:void showfood() 用矩形框来画食物5.画蛇:void showsna
3、ke() 根据蛇的坐标和节数,循环用矩形框来画蛇。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#de
4、fine 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
5、 ismusic=1; /*音乐播放状态*/char dir; /*记录蛇运动的方向*/char c=d;DIR snake500,food; /*定义蛇节点和食物的类型*/int speed=SPEED;void drawmap() /*画地图函数*/IMAGE img;char str10;loadimage(&img,贪吃蛇.jpg); /*游戏界面*/putimage(0,0,&img);loadimage(&img,7.jpg); /*侧栏提示*/putimage(600,0,&img);sprintf(str,%d,snakelen);setfont(30,0,宋体);setbkm
6、ode(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;s
7、nake0.x=9*len+lm;snake0.y=4*len+lm; loadimage(&img,1.jpg); putimage(snake0.x-lm,snake0.y-lm,&img);for(i=1;isnakelen;i+)snakei.x=len*(9-i)+lm; snakei.y=len*4+lm; loadimage(&img, 2.jpg); putimage(snakei.x-lm,snakei.y-lm, &img);void showsnake() /*画蛇函数*/int i;IMAGE img; loadimage(&img, 1.jpg); putimage(
8、snake0.x-lm,snake0.y-lm , &img); loadimage(&img, 2.jpg); for(i=1;i=0;i-) snakei+1.x=snakei.x;snakei+1.y=snakei.y; snake0.x=mx;snake0.y=my; showsnake(); int ceshiover() /*检测游戏结束函数*/int i;if(snake0.x30*len-lm|snake0.y30*len-lm)return 1;for(i=1;isnakelen;i+)if(snake0.x=snakei.x&snake0.y=snakei.y)return
9、 1;return 0;int foodinsnake() /*检测食物是否在蛇上函数*/for(int i=0;isnakelen;i+)if(food.x=snakei.x&food.y=snakei.y)return 1;elsereturn 0;void showfood() /*画食物函数*/IMAGE img; dofood.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);i
10、sfood=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() /*玩游戏函数
11、*/ 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(snake0.x=food.x&snake0.y=food.y) snakelen+; isfood=1; if(isfood) showfoo
12、d(); if(snakelen260&m.x250&m.y260&m.x250&m.y320) mciSendString(close mymusic, NULL, 0, NULL); /关闭音乐 playbkmusic(); cleardevice(); playgame(); break; default: break; if(isover=1) break; void main() initgraph(initlen+160,initlen);HWND hWnd=GetHWnd();SetWindowText(hWnd,贪吃蛇游戏-郭栋); gamebegin();gameover(); getch();closegraph();