//贪吃蛇
/*
①定义一个蛇的结构体,包含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();
#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();
}
/*
①定义一个蛇的结构体,包含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();
}