c语言贪吃蛇制作过程.docx
《c语言贪吃蛇制作过程.docx》由会员分享,可在线阅读,更多相关《c语言贪吃蛇制作过程.docx(13页珍藏版)》请在冰豆网上搜索。
c语言贪吃蛇制作过程
C语言贪吃蛇制作过程
流程图如下:
具体代码如下
#include"head.h"
#include
#include
#include
#include
#include
#include
#pragmacomment(lib,"winmm.lib")
voidPage();//显示界面
voidMps();//播放音乐
voidCheck();//检查空格
voidStopm();//停止音乐
voidshows2();//画背景
voidSetSnake();//设置蛇的位置
voidDrawSnake();//画蛇
voidSnakeMove();//蛇的移动
voidDeleteSnake();//销毁蛇
voidChangeDir();//蛇随方向动起来
boolSnakeDie();//判断蛇是否死亡
voidProduceFood();//随机产生食物
voidSnakeGrow();//蛇变长
voidScore();//分数
voidPage()//显示界面
{
printf("\n\n\n\n");
printf("\t\t\t\t《欢迎来到贪吃蛇世界》\n");
printf("\t\t\t\t按空格开始游戏\n");
printf("\t\t\t\tw,a,s,d,控制方向\n");
}
/*voidMps()//播放声音
{
PlaySound("E:
\\霍旭祥\\st.wav",NULL,SND_FILENAME|SND_ASYNC);
}*/
voidCheck()//检测空格
{
charinput;
while
(1)
{
input=_getch();//按空格键停止播放音乐
if(''==input)break;
}
}
/*voidStopm()//停止音乐
{
PlaySound(NULL,0,0);//PlaySound(NULL,0,0);
}*/
//画背景
voidshows2()
{
inti=0;
for(i=0;i<20;i++)
{
printf("%s",ground2[i]);
}
}
//设置蛇的随机位置
voidSetSnake()
{
intx=-1;
inty=-1;
//产生随机数
srand((unsignedint)time(NULL));//种种子;
x=rand()%19+1;
y=rand()%18+1;
//初始化蛇的位置
Snake[0][0]=y;//行
Snake[0][1]=x*2;//列
Snake[0][2]=west;
Snake[1][0]=y;//行
Snake[1][1]=x*2+2;//列
Snake[1][2]=west;
Snake[2][0]=y;//行
Snake[2][1]=x*2+4;//列
Snake[2][2]=west;
DrawSnake();
}
voidDrawSnake()//画蛇
{
inti=0;
for(i=0;Snake[i][0]!
=0;i++)
{
strncpy(&ground2[Snake[i][0]][Snake[i][1]],"█",2);
}
}
voidSnakeMove()//蛇的移动
{
inti=SnakeLong-1;
//销毁蛇
DeleteSnake();
for(i;i>=1;i--)
{
if(0==Snake[i][1])
{
continue;//过滤非法蛇身
}
//把前一个节点赋值给后一个节点
Snake[i][0]=Snake[i-1][0];
Snake[i][1]=Snake[i-1][1];
Snake[i][2]=Snake[i-1][2];
}
//处理蛇头
Snake[0][2]=SnakeDir;//蛇头方向
if(west==Snake[0][2]||east==Snake[0][2])//判断东西
{
Snake[0][1]+=Snake[0][2];//Snake[0][1]为列
}
else//南北
{
Snake[0][0]+=Snake[0][2];//Snake[0][0]为行
}
DrawSnake();
}
voidDeleteSnake()//销毁蛇
{
inti=0;
for(i=0;Snake[i][0]!
=0;i++)
{
strncpy(&ground2[Snake[i][0]][Snake[i][1]],"",2);
}
}
voidChangeDir()//蛇随方向动起来
{
if(GetAsyncKeyState('W'))
{
if(south!
=Snake[0][2])
SnakeDir=north;
}
elseif(GetAsyncKeyState('S'))
{
if(north!
=Snake[0][2])
SnakeDir=south;
}
elseif(GetAsyncKeyState('A'))
{
if(east!
=Snake[0][2])
SnakeDir=west;
}
elseif(GetAsyncKeyState('D'))
{
if(west!
=Snake[0][2])
SnakeDir=east;
}
}
boolSnakeDie()//判断蛇是否死亡
{
if(west==Snake[0][2]||east==Snake[0][2])//判断东西
{
//蛇头的下一个是方块就死亡
if(0==strncmp(&ground2[Snake[0][0]][Snake[0][1]+Snake[0][2]],"█",2))
{
returnfalse;
}
}
else//南北
{
if(0==strncmp(&ground2[Snake[0][0]+Snake[0][2]][Snake[0][1]],"█",2))
{
returnfalse;
}
}
returntrue;
}
voidProduceFood()//随机产生食物
{
//产生随机目标
inti;//行和列
boolflag=true;
if(false==ProFood)//判断是否产生新的食物;
{
return;
}
srand((unsignedint)time(NULL));
while
(1)
{
g_line=rand()%16+2;
g_row=rand()%18+2;
for(i=0;Snake[i][0]!
=0;i++)
{
if(g_line==Snake[i][0]&&g_row==Snake[i][1])
{
flag=false;
break;
}
}
if(true==flag)
{
break;
}
}
//坐标画食物
strncpy(&ground2[g_line][g_row*2],"★",2);
ProFood=false;
}
voidSnakeGrow()//蛇变长
{
//蛇头坐标与食物坐标相同
if(g_line==Snake[0][0]&&g_row*2==Snake[0][1])
{
if(east==Snake[g_Snakelen][2])
{
Snake[g_Snakelen+1][0]=Snake[g_Snakelen][0];
Snake[g_Snakelen+1][1]=Snake[g_Snakelen][1]-2;
Snake[g_Snakelen+1][2]=Snake[g_Snakelen][2];
}
elseif(west==Snake[g_Snakelen][2])
{
Snake[g_Snakelen+1][0]=Snake[g_Snakelen][0];
Snake[g_Snakelen+1][1]=Snake[g_Snakelen][1]+2;
Snake[g_Snakelen+1][2]=Snake[g_Snakelen][2];
}
elseif(south==Snake[g_Snakelen][2])
{
Snake[g_Snakelen+1][0]=Snake[g_Snakelen][0]-1;
Snake[g_Snakelen+1][1]=Snake[g_Snakelen][1];
Snake[g_Snakelen+1][2]=Snake[g_Snakelen][2];
}
elseif(north==Snake[g_Snakelen][2])
{
Snake[g_Snakelen+1][0]=Snake[g_Snakelen][0]+1;
Snake[g_Snakelen+1][1]=Snake[g_Snakelen][1];
Snake[g_Snakelen+1][2]=Snake[g_Snakelen][2];
}
g_Snakelen++;
ProFood=true;
g_Score++;
}
}
voidScore()
{
COORDrd;
rd.X=55;
rd.Y=8;
//设置光标位置
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);
//打印
printf("分数");
rd.X=56;
rd.Y=9;
//设置光标位置
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),rd);
//打印
printf("%d",g_Score);
}
intmain(void)
{
Page();//显示页面
//Mps();//播放音乐
Check();
//Stopm();//按空格键停止播放音乐
system("cls");//清屏;
//游戏界面
SetSnake();//设置蛇的位置
shows2();
while
(1)
{
system("cls");
ProduceFood();
SnakeGrow();//蛇变长
ChangeDir();//改变方向;
if(false==SnakeDie())//判断死亡
{
printf("snakedie\n");
break;
}
SnakeMove();//蛇动
shows2();//显示
Score();//显示分数
Sleep(1000);
}
//printf("开始游戏\n");
system("pause");
return0;
}