运用c语言做出简单的贪吃蛇程序

来源:互联网 发布:windows jdk环境变量 编辑:程序博客网 时间:2024/06/06 01:45

贪吃蛇想必大家都玩过,c语言更不用提,最近看到各种语言做出的贪吃蛇小游戏突发奇想想用c语言编一个简单的小游戏,毕竟还是菜鸟,环境没能力去改变,不过做出来也是比较吃力的,如果喜欢请点赞鼓励一下,如果讨厌···请不要说出来哈哈哈哈(开个玩笑),如果各位大神觉得在下做的不够好还请多多指教

附:源程序:

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

typedef struct snake
{
 int a;
 int b;
 struct snake *u;
 struct snake *n;
}snake,*snake1;
typedef struct food
{
 int a;
 int b;
}food;
void main()
{  
 char c,c0 = 'd';
 int i,j,k,n=1,t,at;
 snake p,q;
 snake *dd,*dd0,*dd1,*dd2;
 food f;
 srand(time(NULL));
 p.u = NULL;
 p.n = &q;
 p.a = 5;p.b = 6;q.a = 5;q.b = 5;
 q.u = &p;q.n = NULL;
 dd=dd2= &q;
 f.a=(rand()%15+1);
 f.b=(rand()%15+1);
 while(1)
 {
  srand(time(NULL));
  system("cls");
  for(i = 0;i < 17;i ++)
  {
   for(j = 0; j < 17;j++)
   {

    if(i == 0 )
     printf("▁");
    else if(i == 16)
     printf("▔");
    else if(j == 0)
     printf("▕");
    else if(j == 16)
     printf("▏");
    else if(i == p.a && j == p.b)
     printf("■");
    else if(i == f.a && j == f.b)
     printf("★");
    else
    {
     t = 0;
     dd = dd2;
     for(k = 0; k < n ;k++)
     {
      if(i == dd->a && j == dd->b)
      {
       printf("□");
       t = 1;
       break;
      }

      dd = dd->u; 
     }
     if(t == 0)
      printf("  ");
    }

   }printf("\n");
  }
  at = 0;
  dd =dd2;
  for(i=0;i<n;i++)
  {
   if(p.a == dd->a  && p.b == dd->b)
   {
    printf("game over!!\n");
    exit(0);
   }
   dd = dd->u;
  }
  if(p.a == f.a && p.b == f.b)
  {
   dd = dd2;
   at =1;
   f.a = (rand()%15+1);
   f.b = (rand()%15+1);
   for(i=0;i<n;i++)
   {
    if(f.a == dd->a && f.b == dd->b)
    {
     f.a = dd2->a;
     f.b = dd2->b;
     break;
    }
   }
   n++;
  }
  if(kbhit())
  {
   c = getch();
   dd = dd2;
   if(c == 'w' && c0 != 's')
   {
    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    if(p.a == 1)
     p.a = 15;
    else
     p.a = (p.a-1)%15;
   }
   else if(c == 's' && c0 != 'w')
   { 
    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    p.a = (p.a%15)+1;
   }
   else if(c == 'a' && c0 != 'd')
   { 
    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    if(p.b == 1)
     p.b = 15;
    else
     p.b = (p.b-1)%15;
   }
   else if(c == 'd' && c0 != 'a')
   { 
    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    p.b = (p.b%15)+1;
   }   
   else
   {
    goto qq;
   }
   c0 = c;
  }
  else
  {
qq:   if(c0 == 'w')
   {
    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    if(p.a == 1)
     p.a = 15;
    else
     p.a=(p.a-1)%15;
   }
   else if(c0 == 's')
   {
    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    p.a=(p.a%15)+1;
   }
   else if(c0 == 'a')
   {

    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    if(p.b == 1)
     p.b = 15;
    else
     p.b=(p.b-1)%15;
   }
   else if(c0 == 'd')
   {
    if(at == 1)
    {
     dd0 =(snake1)malloc(sizeof(snake));
     dd0->a = dd2->a;dd0->b = dd2->b;
     dd0->n = NULL;dd0->u = dd2;
     dd2=dd0;
    }
    dd = dd2;
    for(i = 0; i<n ; i++)
    {
     dd1 = dd->u;
     dd->b = dd1->b;
     dd->a = dd1->a;
     dd = dd->u;
    }
    p.b=(p.b%15)+1;

   }
  }
  fflush(stdin);
  dd = &q;
  _sleep(200);
 }
}


1 0