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

上传人:b****8 文档编号:12678695 上传时间:2023-06-07 格式:DOCX 页数:14 大小:18.19KB
下载 相关 举报
C语言贪吃蛇程序设计说明书.docx_第1页
第1页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第2页
第2页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第3页
第3页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第4页
第4页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第5页
第5页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第6页
第6页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第7页
第7页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第8页
第8页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第9页
第9页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第10页
第10页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第11页
第11页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第12页
第12页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第13页
第13页 / 共14页
C语言贪吃蛇程序设计说明书.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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

#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

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2