1、C语言贪吃蛇程序设计说明书C语言贪吃蛇程序设计说明书题 目:贪吃蛇游戏 学 校: 系 别: 专 业 班 级: 姓 名: 学 号: 指导老师: 日 期: 一、设计题目: 贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。 二、功能设计: 本游戏要求实现以下几个功能: (1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长; (2) 用户可以调节蛇的运行速度来选择不同的难度; (3) 游戏分多个难度级别; (4) 用户可自选颜色;
2、 (5) 记录成绩前五名的游戏玩家; (6) 增加背景音乐; (7) 提高障碍物和游戏级别。 三、程序模块图: 贪吃蛇游戏 初画控设帮始图制置助模模模模化 块 块 块 块 墙蛇食移食死变成等音体 身 物 动 物 亡 长 绩 级 效 2 四、算法流程图: 开 始 初始化界面和蛇身 放置食物 获取按键 开始运动 碰到边界 是 否 否 蛇吃到食 是 蛇长大 蛇死亡 是 继续 否 结束 3 五、函数原型与功能 1.主函数:void main() 启动程序,触动其他函数。 2.初始化:void init () 设置背景框大小、蛇体初始值,随机产生食物。 3.随机产生食物:void setfoodcrd(
3、) 设置食物生成坐标,0表示食物被吃。 4.画食物:void showfood() 用矩形框来画食物 5.画蛇:void showsnake() 根据蛇的坐标和节数,循环用矩形框来画蛇。 6.蛇移动:void snakemove() 根据按键,重设坐标 7.改变蛇的方向:void changeskdir() 响应用户的运动方向 8.判断蛇是否死亡:void judgeslod 判断蛇是否碰到自己或墙。 9.判断蛇是否吃到食物:void judgefood() 判断是否吃到食物,吃食后变0,蛇增长一节。 10.结束游戏:void gameover() 结束话语,并执行下一步。 六、基本代码 #i
4、nclude #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_sna
5、kelen; /*蛇的长度*/ 4 int isfood=1; /*食物状态*/ int isover=0; /*游戏状态*/ int ispause=1; /*暂停状态*/ int 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);
6、 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键暂停音乐); ou
7、ttextxy(615,170,k键继续播放); outtextxy(730,250,str); outtextxy(620,250,蛇当前长度); void init() /*初始化蛇函数*/ int i; IMAGE img; snake0.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; 5 loadimage(&img, 2
8、.jpg); putimage(snakei.x-lm,snakei.y-lm, &img); void showsnake() /*画蛇函数*/ int i; IMAGE img; loadimage(&img, 1.jpg); putimage(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() /*检测游
9、戏结束函数*/ int i; if(snake0.x30*len-lm|snake0.y30*len-lm) return 1; for(i=1;isnakelen;i+) 6 if(snake0.x=snakei.x&snake0.y=snakei.y) return 1; return 0; int foodinsnake() /*检测食物是否在蛇上函数*/ for(int i=0;isnakelen;i+) if(food.x=snakei.x&food.y=snakei.y) return 1; else return 0; void showfood() /*画食物函数*/ IMAG
10、E 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
11、() /*播放背景音乐函数*/ mciSendString(open 超级玛丽.mp3 alias mymusic, NULL, 0, NULL); mciSendString(play mymusic repeat, NULL, 0, NULL); void playgame() /*玩游戏函数*/ c=d; /蛇开始向右移动 isover=0; 7 snakelen=Min_snakelen; dir=d; IMAGE img; MyTimer t; /定义精确延时对象 int T=200; / 延长时间 drawmap(); /画游戏地图 init(); /画小蛇初始位置 while(!
12、isover) if(ispause) snakemove(); FlushBatchDraw(); /批量绘图 EndBatchDraw(); /结束批量绘图 if(snake0.x=food.x&snake0.y=food.y) snakelen+; isfood=1; if(isfood) showfood(); if(snakelen260&m.x250&m.y260&m.x250&m.y320) mciSendString(close mymusic, NULL, 0, NULL); /关闭音乐 playbkmusic(); cleardevice(); playgame(); 10 break; default: break; if(isover=1) break; void main() initgraph(initlen+160,initlen); HWND hWnd=GetHWnd(); SetWindowText(hWnd,贪吃蛇游戏-郭栋); gamebegin(); gameover(); getch(); closegraph(); 11
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1