c语言贪吃蛇

本文介绍了一个简单的贪吃蛇游戏的实现过程。游戏使用C语言编写,包括地图绘制、蛇的移动、食物生成等功能。玩家可以通过键盘控制蛇的方向,目标是让蛇吃到尽可能多的食物并避免撞墙或自身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//贪吃蛇
/*
①定义一个蛇的结构体,包含x坐标,y坐标,
②定义全局变量蛇的length,已吃到的食物的个数。
③定义一个执行函数的函数
④画地图
⑤随机产生食物
⑥随机产生一条长度为1的蛇
⑦蛇的移动函数
⑧判断蛇是否吃到了食物
⑨判断蛇是否撞到了墙或者本身 
*/ 
#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
void food();
void exe();
void move();
void button();
void map();
void run();
void eat();

void start();

int boom();

//地图的宽和高

#define h  15
#define w   60
char gamemap[h][w];
int length;
int fx;
int fy;
int dx;
int dy;
char key;
int diry[4]={1,-1,0,0};
int dirx[4]={0,0,1,-1};
int runy;
int runx;
int flag=0;
int mark=0;
//定义snake这个对象
typedef struct snake
{
int x;
int y;


}snakes;
snakes snake[h*w];


//画地图函数
void map()
{
int i,j;
if(flag==0)
{
for(i=0;i<h;i++)
for(j=0;j<w;j++)
if(!(i>0&&i<h-1&&j>0&&j<w-1))
{

gamemap[i][j]='*';

}
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
printf("%c",gamemap[i][j]);
printf("\n");
}
}
else
{
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
printf("%c",gamemap[i][j]);
printf("\n");
}
}
printf("Score:%d\n",length-1);
if(length<=10) printf("Grade:小菜鸟\n");
else if(length>10&&length<=20) printf("Grade:中菜鸟\n");
else if(length>20&&length<=30) printf("Grade:老菜鸟\n");
}


//产生食物函数
void food()
{
srand(time(NULL));
fy=rand()%(h-2)+1;
fx=rand()%w+1;
gamemap[fy][fx]='$'; 

}


//移动函数
void move()
{
int i;



for(i=length-1;i>=0;i--)
{
if(i==length-1) 
gamemap[snake[i].x][snake[i].y]=' ';
if(i==0)
{
snake[i].x=snake[i].x+runy;
snake[i].y=snake[i].y+runx;
gamemap[snake[i].x][snake[i].y]='@';
}


else
{
snake[i].x=snake[i-1].x;
snake[i].y=snake[i-1].y;
gamemap[snake[i].x][snake[i].y]='#';
}



}
}


//选择方向函数
void button()
{
  if(kbhit()!=0)
  {
 while(kbhit()!=0)
 {
   key=getch();
switch(key)
{
case 'w': 
runy=-1;
runx=0;
break;
case 's':
runy=1;
runx=0;
break;
case 'a':
runy=0;
runx=-1;
break;
case 'd':
runy=0;
runx=1;
break;
default: break;
}
 }
  }


}


//走动的函数
void run()
{
int o;
 while(1)
{
Sleep(300);
button();
move();
    eat();
    mark=boom();
    if(mark) 
    {
   
    printf("Game over\n");
    Sleep(1000);
printf("是否重新开始游戏?(1:重新开始;0:退出)\n");
printf("请输入:");
scanf("%d",&o);
if(o)
exe();
else  
break;
    
}
    system("cls");
map();


}
}
//判断吃到食物的函数
void eat()
{
if(snake[0].x==fy&&snake[0].y==fx)
{
length++;
food();
}

 } 
 //判断撞到墙或本身的函数
int boom()
 {
  int i;
  int mark=0;
  if(snake[0].x<=0||snake[0].x>=h||snake[0].y<=0||snake[0].y>=w)
  {
 
  mark=1;
}
 
  for(i=1;i<length-1;i++)
  {
  if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y)
  {
 
  mark=1;
}
 
}
 
  return mark;
  } 
  //游戏初始化
void  start()
{
int i,j;
system("cls");
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
if(!(i>0&&i<h-1&&j>0&&j<w-1))
{
gamemap[i][j]='*';
}
else 
gamemap[i][j]=' ';
}
        mark=0;
srand(time(NULL));
fy=rand()%(h-2)+1;
fx=rand()%w+1;
dy=rand()%w+1;
dx=rand()%h+1;
gamemap[fy][fx]='$'; 
snake[0].x=dx;
snake[0].y=dy;
gamemap[snake[0].x][snake[0].y]='@';
length=1;
}
//执行函数
void exe()
{
    start();
map();
flag=1;
    getch();
run();
}




//main函数
int main()
 {
  exe();
 
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值