用c语言写个贪食蛇代码
时间: 2023-05-23 19:02:36 浏览: 110
好的,以下是C语言贪吃蛇的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#define UP 72
#define LEFT 75
#define RIGHT 77
#define DOWN 80
int length=3;//初始长度为3
int point=0;//初始得分为0
int speed=150;//初始速度(毫秒)
int flag=0;//检测是否死亡
int head_x,head_y,tail_x,tail_y,food_x,food_y;//蛇头坐标,蛇尾坐标,食物坐标
int snake[30][2];//蛇的位置,最大长度为30
char dir=RIGHT;//初始方向为向右
void init();//初始化函数
void gotoxy(int x,int y);//光标移动函数
void hideCursor();//隐藏光标
void createFood();//生成食物
void showSnake();//输出蛇的位置
void updateSnake();//更新蛇的位置
int main()
{
init();//进行初始化
while (1)//游戏循环
{
if (_kbhit())//判断是否有按键输入
{
char c=_getch();//读取按键
dir=c;//改变方向
}
updateSnake();//更新蛇的位置
if (flag==1)//判断是否死亡
{
gotoxy(30,15);
printf("YOU ARE DEAD!");//输出游戏结束
break;//退出游戏循环
}
Sleep(speed);//延时,控制速度
}
return 0;
}
void init()
{
srand((unsigned)time(NULL));//设置随机数种子
head_x=15;
head_y=15;
tail_x=12;
tail_y=15;//确定蛇的初始位置
for (int i=0;i<length;i++)
{
snake[i][0]=tail_x+i;
snake[i][1]=tail_y;
}//初始化蛇的位置
createFood();//生成食物
hideCursor();//隐藏光标
showSnake();//显示蛇的位置
}
void gotoxy(int x,int y)
{
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void hideCursor()
{
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle,&CursorInfo);
CursorInfo.bVisible=false;
SetConsoleCursorInfo(handle,&CursorInfo);
}
void showSnake()
{
gotoxy(head_x,head_y);
printf("@");//输出蛇头
for (int i=0;i<length-1;i++)
{
gotoxy(snake[i][0],snake[i][1]);
printf("#");//输出蛇身
}
gotoxy(tail_x,tail_y);
printf("#");//输出蛇尾
gotoxy(food_x,food_y);
printf("*");//输出食物
}
void updateSnake()
{
int next_x,next_y;
switch (dir)//根据方向计算下一步位置
{
case UP:
next_x=head_x-1;
next_y=head_y;
break;
case DOWN:
next_x=head_x+1;
next_y=head_y;
break;
case LEFT:
next_x=head_x;
next_y=head_y-1;
break;
case RIGHT:
next_x=head_x;
next_y=head_y+1;
break;
}
if (next_x==0||next_x==30||next_y==0||next_y==30)
{
flag=1;//检测是否撞墙死亡
return;
}
if (next_x==food_x&&next_y==food_y)
{
length++;//吃到食物,蛇长度+1
point++;//得分+1
createFood();//生成新的食物
}
else
{
gotoxy(tail_x,tail_y);
printf(" ");//删除蛇尾
for (int i=0;i<length-1;i++)
{
snake[i][0]=snake[i+1][0];
snake[i][1]=snake[i+1][1];//更新蛇的位置
}
}
head_x=next_x;
head_y=next_y;//更新蛇头位置
for (int i=0;i<length-1;i++)
{
if (head_x==snake[i][0]&&head_y==snake[i][1])
{
flag=1;//检测是否撞到自己死亡
return;
}
}
snake[length-1][0]=head_x;
snake[length-1][1]=head_y;//更新蛇身位置
gotoxy(0,0);
printf("Point:%d",point);//输出得分
showSnake();//显示蛇的位置
}
void createFood()
{
int x,y;
do
{
x=rand()%28+1;
y=rand()%28+1;
} while (x==head_x&&y==head_y||x==tail_x&&y==tail_y);//生成随机位置
food_x=x;
food_y=y;
}
```
希望能帮到你,如果还有其他问题,可以随时问我。
阅读全文