#include#pragma comment(lib,"winmm.lib")
void Page();//显示界面
void Mps();//播放音乐
void Check();//检查空格
void Stopm();//停止音乐
void shows2();//画背景
void SetSnake();//设置蛇的位置
void DrawSnake();//画蛇
void SnakeMove();//蛇的移动
void DeleteSnake();//销毁蛇
void ChangeDir();//蛇随方向动起来
bool SnakeDie();//判断蛇是否死亡
void ProduceFood();//随机产生食物
void SnakeGrow();//蛇变长
void Score();//分数
void Page()//显示界面
{
printf("\n\n\n\n");
printf("\t\t\t\t《欢迎来到贪吃蛇世界》\n");
printf("\t\t\t\t 按空格开始游戏\n");
printf("\t\t\t\t w,a,s,d,控制方向\n");
}
/*void Mps()//播放声音
{
PlaySound("E:\\霍旭祥\\st.wav" ,NULL,SND_FILENAME | SND_ASYNC);
}*/
void Check()//检测空格
{
char input;
while(1)
{
input = _getch();//按空格键停止播放音乐
if( ==input) break;
}
}
/*void Stopm()//停止音乐
{
PlaySound(NULL,0,0);//PlaySound(NULL,0,0);
}*/
//画背景
void shows2()
{
int i=0;
for(i=0;i<20;i++)
{
printf("%s",ground2[i]);
}
}
//设置蛇的随机位置
void SetSnake()
{
int x=-1;
int y=-1;
//产生随机数
srand((unsigned int)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();
}
void DrawSnake()//画蛇
{
int i=0;
for(i=0;Snake[i][0]!=0;i++)
{
strncpy(&ground2[Snake[i][0]][Snake[i][1]] ,"█",2);
}
}
void SnakeMove()//蛇的移动
{
int i=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();
}
void DeleteSnake()//销毁蛇
{
int i=0;
for(i=0;Snake[i][0]!=0;i++)
{
strncpy(&ground2[Snake[i][0]][Snake[i][1]] ," ",2);
}
}
void ChangeDir()//蛇随方向动起来
{
if(GetAsyncKeyState(W))
{
if(south!=Snake[0][2])
SnakeDir=north;
}
else if(GetAsyncKeyState(S))
{
if(north!=Snake[0][2])
SnakeDir=south;
}
else if(GetAsyncKeyState(A))
{
if(east!=Snake[0][2])
SnakeDir=west;
}
else if(GetAsyncKeyState(D))
{
if(west!=Snake[0][2])
SnakeDir=east;
}
}
bool SnakeDie()//判断蛇是否死亡
{
if(west==Snake[0][2]||east==Snake[0][2])//判断东西
{
//蛇头的下一个是方块就死亡
if(0==strncmp(&ground2[Snake[0][0]][Snake[0][1]+Snake[0][2]],"█",2))
{
return false;
}
}
else//南北
{
if(0==strncmp(&ground2[Snake[0][0]+Snake[0][2]][Snake[0][1]],"█",2))
{
return false;
}
}
return true;
}
void ProduceFood()//随机产生食物
{
//产生随机目标
int i;//行和列
bool flag=true;
if(false==ProFood)//判断是否产生新的食物;
{
return ;
}
srand((unsigned int)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;
}
void SnakeGrow()//蛇变长
{
//蛇头坐标与食物坐标相同
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];
}
else if(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];
}
else if(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];
}
else if(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++;
}
}
void Score()
{
COORD rd;
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);
}
int main(void)
{
Page();//显示页面
//Mps();//播放音乐
Check();
//Stopm();//按空格键停止播放音乐
system("cls");//清屏;
//游戏界面
SetSnake();//设置蛇的位置
shows2();
while(1)
{
system("cls");
ProduceFood();
SnakeGrow();//蛇变长
ChangeDir();//改变方向;
if(false==SnakeDie())//判断死亡
{
printf("snake die\n");
break;
}
SnakeMove();//蛇动
shows2();//显示
Score();//显示分数
Sleep(1000);
}
//printf("开始游戏\n");
system("pause");
return 0;
}