您的位置:首页 > 其它

贪吃蛇

2015-12-05 23:09 381 查看
开通博客有些日子了,突然想贴上自己大一上做的小项目了,纯c语言写的,用的数组。

用devc直接运行的话呢,会有些闪屏,但是用vs稍微处理下就好了。

直接贴代码啦。

#include<stdio.h>
#include<conio.h>    //方向键输入的读取函数头文件
#include<stdlib.h>   //随机函数的头文件
#include<time.h>
#include<string.h>
const int m=20;  //行数, 欲阻止一个变量被改变,可以使用const关键字
const int n=60;   //列,定义长宽
const char head='@';
const char body='#';
const char food='$';
char map[m]
;
struct snack
{
int x,y;
int now;
}snack[m*n];
int key;
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
int sum=1,over=0;
void button();
void appear();
void fappear();
void move();
void show();
void eat(int x,int y);
int main()
{
appear();
show();
return 0;
}
void button()   //游戏过程输入方向的判断
{
if(kbhit()!=0)//在执行时,检测是否有按键按下,有按下返回非0值,一般是1,没有按下返回0;是非阻塞函数
{
while(kbhit()!=0)
key=getch();//取出所有的按键
switch(key)
{
case 75: snack[0].now=0; break;  //left  //75,77,72,80 is ascll值
case 77: snack[0].now=1; break;//right
case 72: snack[0].now=2; break;//up
case 80: snack[0].now=3; break;//down
}
}
}
void appear()
{
int sx,sy,i,j;
sx=3;
sy=5;
snack[0].x=sx;       //***  must initialize
snack[0].y=sy;
snack[0].now=1 ;
system("title  贪吃蛇");
memset(map, ' ', sizeof(map));  //以‘ ’清零
system("cls");  //qing屏
printf("                   c语言  贪吃蛇\n");
map[sx][sy]=head;
fappear();
for(i=0;i<m;i++)   //地图
{
for(j=0;j<n;j++)
{
if(i==0||j==0||i==m-1||j==n-1)map[i][j]='*';
printf("%c",map[i][j]);//头和食物已经包含进去了
}
printf("\n");
}
//	getch();// 在执行时,检测按下什么键,如果不按键该函数不返回;是阻塞函数
button();
}
void fappear()
{
int fx,fy;
while(1)
{	srand(time(0));  //种子
fx=rand()%(m-2)+1;
fy=rand()%(n-2)+1;
if(map[fx][fy]==' ')
{
map[fx][fy]=food;
break;
}
}
}
void show()
{
int i,j;
while(1)
{
_sleep(100);
button();
move();
if(over)
{
printf("                   gameover >_<");
getchar();
break;
}
system("cls");
printf("                   c语言  贪吃蛇\n");
for(i=0;i<m;i++)   //刷新后地图
{
for(j=0;j<n;j++)
{
if(i==0||j==0||i==m-1||j==n-1)map[i][j]='*';
printf("%c",map[i][j]);
}
printf("\n");
}
}
//getch();
button();
}
void move()
{
int x,y,i;
x=snack[0].x;   y=snack[0].y;//保存蛇头dang前位置 ,后来变成脖子的位置
map[x][y]=' ';
snack[0].x=snack[0].x+dx[snack[0].now];
snack[0].y=snack[0].y+dy[snack[0].now];//蛇头先移动
if(map[snack[0].x][snack[0].y]=='$')
eat(x,y);//吃到食物,及处理
if(map[snack[0].x][snack[0].y]=='*'||map[snack[0].x][snack[0].y]=='#')
over=1;
if(map[snack[0].x][snack[0].y]==' ')
{
map[snack[0].x][snack[0].y]='@';
for(i=1;i<sum;i++)
{
if(i==1)  //i=1是尾巴,让尾巴为‘ ’
{
map[snack[i].x][snack[i].y]=' ';
}
if(i==sum-1)  //蛇头紧跟着的那一节,即脖子
{
snack[i].x=x;
snack[i].y=y;
snack[i].now=snack[0].now;
}
else
{
snack[i].x=snack[i+1].x;
snack[i].y=snack[i+1].y;
snack[i].now=snack[i+1].now;
}
map[snack[i].x][snack[i].y]=body;
}
}
}
void eat(int x,int y)
{
sum++;
map[snack[0].x][snack[0].y]='@';
snack[sum-1].x= x;
snack[sum-1].y= y;
snack[sum-1].now=snack[0].now;
map[snack[sum-1].x][snack[sum-1].y]='#';
fappear();
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: