C语言贪吃蛇程序设计说明书.docx
- 文档编号:25297430
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:14
- 大小:18.19KB
C语言贪吃蛇程序设计说明书.docx
《C语言贪吃蛇程序设计说明书.docx》由会员分享,可在线阅读,更多相关《C语言贪吃蛇程序设计说明书.docx(14页珍藏版)》请在冰豆网上搜索。
C语言贪吃蛇程序设计说明书
C语言贪吃蛇程序设计说明书
题目:
贪吃蛇游戏
学校:
系别:
专业
班级:
姓名:
学号:
指导老师:
日期:
一、设计题目:
贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。
每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。
二、功能设计:
本游戏要求实现以下几个功能:
(1)用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;
(2)用户可以调节蛇的运行速度来选择不同的难度;
(3)游戏分多个难度级别;
(4)用户可自选颜色;
(5)记录成绩前五名的游戏玩家;
(6)增加背景音乐;
(7)提高障碍物和游戏级别。
三、程序模块图:
贪吃蛇游戏
初画控设帮
始图制置助
模模模模化
块块块块
墙蛇食移食死变成等音
体身物动物亡长绩级效
2
四、算法流程图:
开始初始化界面和蛇身
放置食物
获取按键
开始运动
碰到边界
是
否
否蛇吃到食
是
蛇长大
蛇死亡是
继续
否
结束
3
五、函数原型与功能1.主函数:
voidmain()
启动程序,触动其他函数。
2.初始化:
voidinit()
设置背景框大小、蛇体初始值,随机产生食物。
3.随机产生食物:
voidsetfoodcrd()
设置食物生成坐标,0表示食物被吃。
4.画食物:
voidshowfood()
用矩形框来画食物
5.画蛇:
voidshowsnake()
根据蛇的坐标和节数,循环用矩形框来画蛇。
6.蛇移动:
voidsnakemove()
根据按键,重设坐标
7.改变蛇的方向:
voidchangeskdir()
响应用户的运动方向
8.判断蛇是否死亡:
voidjudgeslod
判断蛇是否碰到自己或墙。
9.判断蛇是否吃到食物:
voidjudgefood()
判断是否吃到食物,吃食后变0,蛇增长一节。
10.结束游戏:
voidgameover()
结束话语,并执行下一步。
六、基本代码
#include
#include
#pragmacomment(lib,"Winmm.lib")
#include"MyTimer.h"#defineSIZEMAX100/*蛇最大长度*/#defineSPEED100/*初始速度*/#definelen20/*蛇宽度*/
#definelm10/*蛇每次移动距离*/#defineinitlen600/*初始化窗口正方形的长度*/#defineMin_snakelen2/*蛇的最小长度*/
typedefstruct{
intx,y;
}DIR;
intsnakelen=Min_snakelen;/*蛇的长度*/
4
intisfood=1;/*食物状态*/intisover=0;/*游戏状态*/
intispause=1;/*暂停状态*/
intismusic=1;/*音乐播放状态*/chardir;/*记录蛇运动的方向*/charc='d';
DIRsnake[500],food;/*定义蛇节点和食物的类型*/intspeed=SPEED;
voiddrawmap()/*画地图函数*/{
IMAGEimg;
charstr[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,"蛇当前长度");
}
voidinit()/*初始化蛇函数*/{
inti;
IMAGEimg;
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 { snake[i].x=len*(9-i)+lm; snake[i].y=len*4+lm; 5 loadimage(&img,"2.jpg"); putimage(snake[i].x-lm,snake[i].y-lm,&img); } } voidshowsnake()/*画蛇函数*/{ inti; IMAGEimg; loadimage(&img,"1.jpg"); putimage(snake[0].x-lm,snake[0].y-lm,&img); loadimage(&img,"2.jpg"); for(i=1;i putimage(snake[i].x-lm,snake[i].y-lm,&img); } voidsnakemove()/*画动蛇函数*/{ inti; intmx=snake[0].x; intmy=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(); } intceshiover()/*检测游戏结束函数*/{ inti; if(snake[0].x<0||snake[0].x>30*len-lm||snake[0].y<0||snake[0].y>30*len-lm) return1; for(i=1;i 6 { if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y) return1; } return0; } intfoodinsnake()/*检测食物是否在蛇上函数*/{ for(inti=0;i if(food.x==snake[i].x&&food.y==snake[i].y) return1; else return0; } voidshowfood()/*画食物函数*/ { IMAGEimg; 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; } voidkmusic() { if(ismusic==0) mciSendString("pausemymusic",NULL,0,NULL); if(ismusic==1) mciSendString("resumemymusic",NULL,0,NULL); } voidplaybkmusic()/*播放背景音乐函数*/ { mciSendString("open超级玛丽.mp3aliasmymusic",NULL,0,NULL); mciSendString("playmymusicrepeat",NULL,0,NULL); } voidplaygame()/*玩游戏函数*/ { c='d';//蛇开始向右移动 isover=0; 7 snakelen=Min_snakelen; dir='d'; IMAGEimg; MyTimert;//定义精确延时对象 intT=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'){ 8 dir=c; }break; case's': if(dir! ='w'){ dir=c; }break; case27: 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; //判断是否重新再来 HWNDwnd=GetHWnd();//获取窗口句柄 if(isover) if(MessageBox(wnd,"游戏结束。 \n重来一局吗,","询问",MB_YESNO| MB_ICONQUESTION)==IDYES) playgame();//递归判断出口 } EndBatchDraw();//结束批量绘图模式} voidgameover()//游戏结束函数 { IMAGEimg; loadimage(&img,"结束.jpg"); putimage(0,0,&img); setcolor(BLUE); setfont(30,0,"宋体"); settextcolor(YELLOW); outtextxy(280,100,"125042120郭栋"); outtextxy(320,150,"感谢您玩,谢谢"); Sleep(2000); } 9 voidgamebegin()//游戏开始函数 { MOUSEMSGm; IMAGEimg,img2; mciSendString("openbk.mp3aliasmymusic",NULL,0,NULL);//打开音乐 mciSendString("playmymusic",NULL,0,NULL);//播放音乐 loadimage(NULL,"开始.jpg"); putimage(0,0,&img); getimage(&img2,260,250,211,71); settextcolor(BLUE); setfont(70,0,"宋体"); setbkmode(TRANSPARENT);//设置字体背景为透明 outtextxy(260,100,"贪吃蛇"); RECTr={260,250,470,320}; setfont(40,0,"黑体"); setcolor(YELLOW); drawtext("开始游戏",&r,DT_CENTER|DT_VCENTER|DT_SINGLELINE); while (1) { m=GetMouseMsg();//获取鼠标消息 switch(m.uMsg) { caseWM_MOUSEMOVE: //鼠标移动 if(m.x>260&&m.x<470&&m.y>250&&m.y<320){ setfillcolor(RED); fillrectangle(260,250,470,320); drawtext("开始游戏",&r,DT_CENTER|DT_VCENTER| DT_SINGLELINE); } else{ putimage(260,250,&img2); setcolor(YELLOW); drawtext("开始游戏",&r,DT_CENTER|DT_VCENTER| DT_SINGLELINE); }break; caseWM_LBUTTONDOWN: //鼠标左键按下 if(m.x>260&&m.x<470&&m.y>250&&m.y<320){ mciSendString("closemymusic",NULL,0,NULL);//关闭音乐 playbkmusic(); cleardevice(); playgame(); 10 }break; default: break; } if(isover==1) break; } } voidmain() { initgraph(initlen+160,initlen); HWNDhWnd=GetHWnd(); SetWindowText(hWnd,"贪吃蛇游戏-郭栋"); gamebegin(); gameover(); getch(); closegraph(); } 11
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 贪吃 程序设计 说明书