#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<dos.h>
#include<math.h>
//
int m=0;
//int flag=0;
char ch = 's', di;
int score = 0; //分數
long gamespeed =100 ;//遊戲速度
int a[400][400];//蛇身長度
struct Food //食物
{
int X; //食物座標
int Y;
int yes; //判斷食物是否被幹掉
}food;
struct Snake //定義蛇的結構體
{
int fx[205];//蛇身子數組儲存各節所在的座標
int fy[205];
int node; //蛇的節數
int life; //設置蛇的死活
}snake;
//
int map();
void gamePlay();
//
int map()
{
system("cls");
int i,j,k=0;
for(i=0;i<20;i++)
{
printf("/t/t");
for(j=0;j<20;j++)
{
int flag = 0;
//flag
for(int z=0;z<snake.node;z++)
{
if(i==snake.fx[z]&&j==snake.fy[z])
{
if(z==0)
printf("¤");
else
printf("Θ");
flag = 1;
break;
}
}
if (flag == 1)
{
continue;
}
if(i==0)
{
printf("劉");
}
else if(i==19)
{
printf("澎");
}
else if(i!=0&&i!=19&&j==0)
printf("鑄");
else if(i!=0&&i!=19&&j==19)
printf("鑄");//▕
else if(i==food.X&&j==food.Y&&food.yes==0)
printf("★");
else
printf(" ");
}
printf("/n");
}
_sleep(gamespeed);
printf("/t/t/t/t/t/t/t得分:%d/n",score);
return 0;
}
void gamePlay()
{
int n;
food.yes = 1;
snake.life = 0; //蛇是活着的
snake.fx[0] = 10;//前三節蛇的座標
snake.fy[0] = 10;
snake.fx[1] = 11;
snake.fy[1] = 10;
snake.fx[2] = 12;
snake.fy[2] = 10;
snake.node = 3;
srand((int)time(NULL));;
while(1)
{
if(food.yes==1)//食物出現隨機出現位置
{
m=0;
while (m==0)
{
food.X=rand()%(18-1+1)+1;
food.Y=rand()%(18-1+1)+1;
for(int f=0;f<snake.node;f++)//判斷食物是否出現在蛇身,有則返回從先產生隨機
{
if(food.X==snake.fx[f]&&food.Y==snake.fy[f])
{
m=0;
break;
}
else
{
m=1;
}
}
}
food.yes = 0;
}
di = ch;
if(kbhit())//控制 接受
ch = getch();//接受 方向鍵
if(di =='w' && ch == 's' )
ch = 'w';
else if(di == 'a'&&ch == 'd')
ch = 'a';
else if(di == 'd'&&ch == 'a')
ch = 'd';
else if(di == 's'&&ch == 'w')
ch = 's';
else if(di =='W' && ch == 'S' )
ch = 'W';
else if(di == 'A'&&ch == 'D')
ch = 'A';
else if(di == 'D'&&ch == 'A')
ch = 'D';
else if(di == 'S'&&ch == 'W')
ch = 'S';
else if(di == 's'&&ch == 'S')
ch = 's'; //以上是控制蛇不能走相反的方向
if(ch=='w'||ch=='W')
{
snake.fx[0] = (snake.fx[0]-1);
}
if(ch=='s'||ch == 'S')
{
snake.fx[0] = (snake.fx[0]+1);
}
if(ch=='a'||ch == 'A')
{
snake.fy[0] = (snake.fy[0]-1);
}
if(ch=='d'||ch == 'D')
{
snake.fy[0] = (snake.fy[0]+1);
} //蛇轉彎的控制
if(snake.fx[0]==0||snake.fx[0]==19||snake.fy[0]==0||snake.fy[0]==19)//是否撞牆
{
snake.life=1; //蛇死
}
for(int i=3;i<snake.node;i++)//判斷蛇是否撞到自己
{
if(snake.fx[i]==snake.fx[0]&&snake.fy[i]==snake.fy[0])
{
snake.life=1;
break;
}
}
if(snake.fx[0]==food.X && snake.fy[0]==food.Y)
{
snake.node++; //蛇增加一節
food.yes=1; //食物沒有了
score+=5;//分數增加
if(gamespeed>=0)
{
gamespeed-=2;//速度提高兩個單位
}
}
if(snake.life==1)
{
printf("/n/t/t/t/t遊戲結束!!!/n/t/t/t/t 得分爲%d/n",score);
break;
}
map();
for(n=snake.node;n>0;n--) //控制蛇身總體前進一步
{
snake.fx[n]=snake.fx[n-1];
snake.fy[n]=snake.fy[n-1];
}
}
}
int main()
{
system("title 貪喫蛇 Powered by 劉鑄澎");//標題
system("color fd");//顏色 紅
food.yes = 0;
gamePlay();
return 0;
}