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

上传人:scccc 文档编号:12532092 上传时间:2021-12-04 格式:DOC 页数:17 大小:178KB
返回 下载 相关 举报
语言贪吃蛇程序设计说明书.doc_第1页
第1页 / 共17页
语言贪吃蛇程序设计说明书.doc_第2页
第2页 / 共17页
语言贪吃蛇程序设计说明书.doc_第3页
第3页 / 共17页
语言贪吃蛇程序设计说明书.doc_第4页
第4页 / 共17页
语言贪吃蛇程序设计说明书.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《语言贪吃蛇程序设计说明书.doc》由会员分享,可在线阅读,更多相关《语言贪吃蛇程序设计说明书.doc(17页珍藏版)》请在三一文库上搜索。

1、贪吃蛇游戏程序设计说明书题目:贪吃蛇游戏学 校: 系 别:班 级:名:学 号: 指导老师:期:设计题目:通过控制贪吃蛇是一款经典的休闲游戏, 一条蛇在密闭的围墙内, 随机出现一个食物, 方向键操作小蛇不停的朝着食物前进,直到吃掉食物。每吃一个食物,小蛇都会长长一截 随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。功能设计:本游戏要求实现以下几个功能:(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2) 用户可以调节蛇的运行速度来选择不同的难度;(3) 游戏分多个难度级别;(4) 用户可自选颜色;(5) 记录成绩前五名的游戏玩家;(6) 增加背景音乐;(7) 提高障碍物

2、和游戏级别。三、程序模块图:11帮 助 模 块四、算法流程图:五、函数原型与功能1. 主函数:void main ()启动程序,触动其他函数。2. 初始化:void in it ()设置背景框大小、蛇体初始值,随机产生食物。3. 随机产生食物: void setfoodcrd ()设置食物生成坐标,0表示食物被吃。4. 画食物:void showfood ()用矩形框来画食物5. 画蛇: void showsnake ()根据蛇的坐标和节数,循环用矩形框来画蛇。6. 蛇移动: void snakemove ()根据按键,重设坐标7. 改变蛇的方向:void changeskdir ()响应用户

3、的运动方向8. 判断蛇是否死亡:void judgeslod判断蛇是否碰到自己或墙。9. 判断蛇是否吃到食物:void judgefood ()判断是否吃到食物,吃食后变0,蛇增长一节。10. 结束游戏: void gameover ()结束话语,并执行下一步。六、基本代码#in clude<graphics.h>#in clude<c oni o.h>#in clude<stdio.h>#pragma comme nt(lib,"Wi nm m.lib") #include "MyTimer.h"#defi ne S

4、IZEMAX 100#defi ne SPEED 100#defi ne len 20#defi ne lm 10#defi ne ini tlen 600#defi ne Min_sn akele n 2/*蛇最大长度*/*初始速度*/*蛇宽度*/*蛇每次移动距离*/*初始化窗口正方形的长度*/*蛇的最小长度*/typedef struct int x,y;DIR;/*蛇的长度*/int sn akele n=Min_sn akele n;int isfood=1; in t isover=0;int ispause=1;in t ismusic=1;char dir;char c='

5、;d'DIR sn ake500,food; int speed=SPEED;/*食物状态*/*游戏状态*/*暂停状态*/*音乐播放状态*/*记录蛇运动的方向*/*定义蛇节点和食物的类型*/void drawmap。IMAGE img;char str10;loadimage(&img,"贪吃蛇.jpg"); putimage(0,0,&i mg);loadimage(&img,"7.jpg"); putimage(600,0,&img);spri ntf(str,"%d",s nakele n

6、);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,"

7、;l 键暂停音乐”); outtextxy(615,170,"k 键继续播放");outtextxy(730,250,str); outtextxy(620,250,"蛇当前长度”);void in it()/*画地图函数*/*游戏界面*/*侧栏提示*/*初始化蛇函数*/int i;IMAGE img;sn ake0.x=9*le n+lm;sn ake0.y=4*le n+lm;loadimage(&img,"1.jpg");putimage(s nakeO.x-lm,s nake0.y-lm,&i mg); for(i=1;

8、i<s nakele n;i+)sn akei.x=le n*(9-i)+lm;sn akei.y=le n*4+lm;loadimage(&img, "2.jpg");putimage(s nakei.x-lm,s nakei.y-lm, &img);void showsnake()/* 画蛇函数 */int i;IMAGE img;loadimage(&img, "1.jpg");putimage(s nakeO.x-lm,s nake0.y-lm , &img);loadimage(&img, &quo

9、t;2.jpg");for(i=1;i<s nakele n;i+)putimage(s nakei.x-lm,s nakei.y-lm, &img);void snakemove()/* 画动蛇函数 */int i;int mx=s nake0.x;int my=s nake0.y;switch(dir)case 'a':mx-=le n; break;case 'd':mx+=le n;break;case 'w':my-=le n; break;case 's':my+=le n; break;def

10、ault:break;for(i=s nakele n-1;i>=0;i-)sn akei+1.x=s nakei.x;sn akei+1.y=s nakei.y;sn ake0.x=mx;sn ake0.y=my;shows nake();in t ceshiover()/*检测游戏结束函数 */int i;if(sn ake0.x<0|s nake0.x>30*le n-lm|s nake0.y<0|s nake0.y>30*le n-lm) return 1;for(i=1;i<s nakele n;i+)if(sn akeO.x=s nakei.x&

11、amp;&sn akeO.y=s nakei.y) return 1;return 0;/*检测食物是否在蛇上函数*/int foodi nsn ake()for(i nt i=0;i<s nakele n;i+)if(food.x=s nakei.x&&food.y=s nakei.y)return 1;elsereturn 0;/*画食物函数*/void showfood()IMAGE img;dofood.x=(ra nd()%30)*le n+lm;food.y=(ra nd()%30)*le n+lm;while(foodi nsn ake();load

12、image(&img, "3.jpg");putimage(food.x-lm,food.y-lm , &img);isfood=0;void kmusic()if(ismusic=0)mciSe ndStri ng("pause mymusic",NULL,O,NULL);if(ismusic=1)mciSe ndStri ng("resume mymusic",NULL,0,NULL);void playbkmusic()/*播放背景音乐函数*/mciSendString("open 超级玛丽.mp3 a

13、lias mymusic", NULL, 0, NULL);mciSe ndStri ng("play mymusic repeat", NULL, 0, NULL);/*玩游戏函数*/void playgame()c='d'蛇开始向右移动isover=0;sn akele n=Min_sn akele n;dir='d:IMAGE img;MyTimer t;/定义精确延时对象int T=200;/延长时间drawmap();画游戏地图ini t();画小蛇初始位置while(!isover)if(ispause)sn akemove()

14、;FlushBatchDraw();/ 批量绘图En dBatchDraw();/结束批量绘图if(sn ake0.x=food.x&&sn ake0.y=food.y)sn akele n+;isfood=1;if(isfood)showfood();if(s nakele n<35)T=200-3*s nakele n;t.Sleep(T);BeginBatchDraw(); /开始批量绘图模式,防止闪烁问题 drawmap();loadimage(&img, "3.jpg");/ 加载食物图片putimage(food.x-lm,food

15、.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(O); break;/ 游戏退出case 'p': ispa

16、use=O;break;p 暂停case 'o': ispause=1;break;o 继续游戏case T: ismusic=0;break;l 暂停音乐case 'k': ismusic=1;break; /k 继续播放 default:break;kmusic(); II音乐控制播放判断游戏结束if(ceshiover()isover=1;判断是否重新再来HWND wnd = GetHWnd(); II 获取窗口句柄if(isover)if (MessageBox(wnd,"游戏结束。n 重来一局吗?",” 询问", MB_Y

17、ESNO |MB_ICONQUESTION) = IDYES)playgame();II递归判断出口En dBatchDraw();II结束批量绘图模式void gameover()/游戏结束函数IMAGE img;loadimage(&img,"结束.jpg");putimage(0,0,&i mg);setcolor(BLUE);setfont(30,0,"宋体"); settextcolor(YELLOW); outtextxy(280,100,"125042120 郭栋"); outtextxy(320,150

18、,"感谢您玩,谢谢");Sleep(2000);void gamebegi n()游戏开始函数MOUSEMSG m;IMAGE img,img2;mciSe ndStri ng("ope n bk.mp3 alias mymusic", NULL, 0, NULL);/ 打开音乐 mciSe ndStri ng("play mymusic", NULL, 0, NULL);播放音乐loadimage(NULL,"开始.jpg");putimage(0,0,&i mg);getimage(&img2,

19、260,250,211,71);settextcolor(BLUE);setfont(70,0,"宋体");setbkmode(TRANSPARENT);设置字体背景为透明outtextxy(260,100,"贪吃蛇");RECT r = 260,250,470,320;setfont(40,0,"黑体");setcolor(YELLOW);drawtext("开始游戏",&r, DT_CENTER | DT_VCENTER | DT_SINGLELINE); while(1)m=GetMouseMsg()

20、;/获取鼠标消息switch(m.uMsg)case WM_MOUSEMOVE :鼠标移动if(m.x>260&&m.x<470&&m .y>250&&m .y<320)setfillcolor(RED);fillrecta ngle(260,250,470,320);| DT_VCENTERdrawtext("开 始 游戏",&r, DT_CENTERDT_SINGLELINE);elseputimage(260,250, &im g2);setcolor(YELLOW);drawte

21、xt("开始游戏",&r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);break;case WM_LBUTTONDOWN:/ 鼠标左键按下if(m.x>260&&m.x<470&&m.y>250&&m.y<320)mciSe ndStri ng("close mymusic", NULL, 0, NULL); / 关闭音乐playbkmusic();cleardevice();playgame();15break;default: break;if(isover=1)break;void mai n()in itgraph(i nitle n+160,i nitle n);HWND hWnd=GetHWnd();SetWindowText(hWnd,"贪吃蛇游戏-郭栋"); gamebegi n();gameover();getch();closegraph();17

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1