贪吃蛇

来源:互联网 发布:java 集成开发环境 编辑:程序博客网 时间:2024/04/18 08:24

#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<stdlib.h>

#define MAX_X 20
#define MAX_Y 20
#define NULL 0

struct snake
{
  int x;//蛇体坐标
  int y;
}snake[(MAX_X-2)*(MAX_Y-2)]={0,0};

void main()
{
  FILE *fp;
  int s[MAX_X][MAX_Y]={0};
  int length;//蛇体长度
  int i,j,m=0;//计数器
  int Fx,Fy;//食物坐标
  int stop=0;//结束标识符
  int lr=1,up=0,right=1;//控制方向
  int grade;//游戏得分
  int Time;
   
 printf("/n/n/n/n/n/n/n/n/n/t/t/t贪吃蛇游戏/n");
 printf("/n/t/t/t难度");
 printf("/n/t/t/t1.容易★");
 printf("/n/t/t/t2.中级★★");
 printf("/n/t/t/t3.困难★★★");
 printf("/n/t/t/t退出游戏 请按q/n/t/t/t");
 switch(getch())//选择速度的快慢
 {
   case '1':
    Time=200;
    break;
   case '2':
    Time=100;
    break;
   case '3':
    Time=50;
    break;
   case 'q':
         exit(0);
   default :
    Time=200;
    break;
 }
  system("cls");
  for(i=0;i<MAX_X;i++)//给边界赋值
  {
    for(j=0;j<MAX_Y;j++)
    {
      if(i==0||j==0||i==MAX_X-1||j==MAX_Y-1)
      s[i][j]=1;
    }
  }
  srand((unsigned int)(time(NULL)));
    length=1;
    snake[0].x=9; //初始蛇头坐标
    snake[0].y=9;
   while(1)//产生食物随机坐标
   {
      Fx=1+rand()%(MAX_X-2);
      Fy=1+rand()%(MAX_Y-2);
      if(Fx!=snake[0].x&&Fy!=snake[0].y )
      {
        s[Fx][Fy]=3;//食物的位置记为3
        break;
      }
       else
        continue;
   }
  while(1)
  {
 
      for(i=0;i<MAX_X;i++)
     {
        for(j=0,m=0;j<MAX_Y;m++,j++)
       { 
           for(m=1;m<length;m++)//将蛇身位置的值记为1
           {
             if(i==snake[m].x&&j==snake[m].y)
             s[i][j]=2;
           }
             if(i==snake[0].x&&j==snake[0].y)
             printf("●");
            else if(s[i][j]==1)
            printf("■");
            else if(s[i][j]==3)
              printf("◎");
             else if(s[i][j]==2)
             {
               printf("○");
              s[i][j]=0;
              }
            else
            printf("  ");
           if((j+1)%20==0)//换行判断
          printf("/n");
         } 
 }
     if(Fx==snake[0].x&&Fy==snake[0].y)
     {
        s[Fx][Fy]=0;
      length++;//吃到的食物个数
       snake[length].x=Fx;//记录蛇身坐标
        snake[length].y=Fy;
        Fx=1+rand()%(MAX_X-2);
         Fy=1+rand()%(MAX_Y-2);
       for(m=0;m<length;m++)//食物坐标不能与蛇身冲突
       {
         if(Fx==snake[m].x&&Fy==snake[m].y)
        continue;
        }
  }
  s[Fx][Fy]=3;
     for(m=length-1,i=length;m>=0;i--,m--)//存储蛇头的上一个位置坐标
    {
     snake[i].x=snake[m].x;
     snake[i].y=snake[m].y;   
        if(lr)//控制循环移动 
       {
          if(right)//右移动
         {
           if(snake[m].y<(MAX_Y-2))
             snake[m].y++;
            else
            snake[m].y=1;
           }
           else//左移动
         {
           if(snake[m].y>1)
          snake[m].y--;
          else
          snake[m].y=18;
          }
      }
     else
    {
       if(up)//上移动
      {
        if(snake[m].x>1)
        snake[m].x--;
        else
         snake[m].x=18;
        }
       else//下移动
       {
        if(snake[m].x<(MAX_X-2))
        snake[m].x++;
         else
       snake[m].x=1;
       }
     }
  }
  for(m=1;m<length;m++)
  {
    if(snake[m].x==snake[0].x&&snake[m].y==snake[0].y)
         stop=1;
  }
  if(stop)//蛇咬到自己游戏结束
  {
        _sleep(200);
        system("cls");
        printf("/n/n/n/n/n/n/n/n/n/t/t/tGAME OVER!!!");
      printf("/n/t/t/t级别:");
      switch(Time)
     {
       case 200:
       printf("容易★");
       break;
          case 100:
           printf("中级★★");
           break;
          case 50:
           printf("困难★★★");
           break;
          default:
           break;
         }
         printf("/n/t/t/t你的得分%d/n",10*(length-1));
         printf("/n/t/t/t( ^_^ )不错嘛/n/t/t/t");
          break;
 }
     if(kbhit())//控制方向
  {
   switch(getch())
   {
           case 'w'://向上
             if(lr)
             {
              lr=0;
              up=1;
             }
             break;
           case 's'://向下
             if(lr)
             {
              lr=0;
              up=0;
             }
             break;
           case 'a'://向左
             if(!lr)
             {
              lr=1;
              right=0;
             }
             break;
           case 'd'://向右
             if(!lr)
             {
              lr=1;
               right=1;
             }
            break;
     case 'q':
      exit(0);
       } 
  }
  printf("/n/t/t/t 得分%d/n",10*(length-1));
    _sleep(Time);
    system("cls");
   }
  
}
 

原创粉丝点击