DOS简易版C语言贪吃蛇分享!

本文实例为大家分享了C语言实现贪吃蛇的具体代码,供大家参考,具体内容如下

  #include <stdio.h>  #include <stdlib.h>  #include <conio.h>  #include <time.h>  #include <windows.h>           #define WALL_LENGTH 22     #define LEFT 0x4b   #define RIGHT 0x4d   #define DOWN 0x50   #define UP 0x48      struct Snakes{   int x;   int y;   struct Snakes *prev;   struct Snakes *next;  };     struct Food{   int x;   int y;  };        struct Snakes *header;   struct Snakes *tailer;   struct Food *food;      int wall[WALL_LENGTH][WALL_LENGTH];  int direction = RIGHT;           /**/  void init();  void draw();  void move();  void doMove(int x1, int y1);  void eat();     void keydown();     void foods();  int isOver();  int isDrawSnake(int x, int y);  int isDrawFood(int x, int y);        int main(){   init();      while(1){            if(isOver()){   break;   }             move();    eat();   draw();    _sleep( 100 );   keydown();            }      printf("GAME OVER!");      system("pause");  }        void init(){   int y, x;      for(y=0; y < WALL_LENGTH; y++){    for(x=0; x < WALL_LENGTH; x++){   if(y == 0 || y == WALL_LENGTH - 1 || x == 0 || x == WALL_LENGTH - 1){    wall[y][x] = 1;   }   }   }         header=(struct Snakes *)malloc(sizeof(struct Snakes));   header->x=10;   header->y=10;   header->prev=NULL;         tailer=(struct Snakes *)malloc(sizeof(struct Snakes));   tailer->x=9;   tailer->y=10;   tailer->next=NULL;   tailer->prev=header;      header->next=tailer;      foods();     }     void draw(){   int y, x;      system("cls");   for(y=0; y < WALL_LENGTH; y++){    for(x=0; x < WALL_LENGTH; x++){      if(wall[y][x] == 1){   printf("[]");   }else if(isDrawSnake(x, y)){   printf("[]");   }else if(isDrawFood(x, y)){   printf("()");   }else{   printf(" ");       }   }   printf("n");   }     }     void move(){      switch(direction){   case LEFT :    doMove(-1, 0);    break;   case RIGHT :    doMove(1, 0);    break;   case UP :    doMove(0, -1);    break;   case DOWN :    doMove(0, 1);    break;   }     }     void doMove(int x1, int y1){      struct Snakes *temp_tailer = tailer->prev;      tailer->x=header->x + x1;   tailer->y=header->y + y1;      tailer->next=header;   tailer->prev->next = NULL;   tailer->prev = NULL;      header->prev=tailer;      header = tailer;   tailer = temp_tailer;      }     void eat(){      if(header->x == food->x && header->y == food->y){   int x1=0, y1 =0;   struct Snakes *temp_tailer = tailer;    tailer=(struct Snakes *)malloc(sizeof(struct Snakes));      switch(direction){   case LEFT :    x1 = -1;   y1 = 0;   break;      case RIGHT :    x1 = 1;   y1 = 0;   break;      case UP :    x1 = 0;   y1 = -1;   break;      case DOWN :    x1 = 0;   y1 = 1;   break;   }      tailer->x=temp_tailer->x + x1;   tailer->y=temp_tailer->y + y1;   tailer->next=NULL;   tailer->prev=temp_tailer;      temp_tailer->next = tailer;    foods();   }     }        void foods(){      int y,x;    struct Snakes *temp = header;      _sleep(20);    srand((unsigned)time(NULL));    y=rand()%WALL_LENGTH;    x=rand()%WALL_LENGTH;       if(y == 0 || y == WALL_LENGTH - 1 || x == 0 || x == WALL_LENGTH - 1 ){    return foods();   }      do{   if(temp->x == x && temp->y == y){   return foods();   }   temp = temp->next;   }while(temp != NULL);            if(food == NULL){   food=(struct Food *)malloc(sizeof(struct Food));   }   food->x = x;   food->y = y;     }     void keydown(){   char keycode;    if(_kbhit()&&(keycode =_getch())) {      switch(keycode) {    case LEFT:    if(RIGHT!=direction) {    direction=LEFT;   // move();   // draw();   }   break;       case RIGHT:    if(LEFT!=direction) {    direction=RIGHT;   // move();   // draw();   }   break;       case UP:    if(DOWN!=direction) {    direction=UP;   // move();   // draw();   }   break;       case DOWN:    if(UP!=direction){    direction=DOWN;   // move();   // draw();   }   break;        }    }      }        int isDrawSnake(int x, int y){   struct Snakes *temp = header;   do{   if(temp->x == x && temp->y == y){   return 1;   }   temp = temp->next;   }while(temp != NULL);   return 0;  }     int isDrawFood(int x, int y){   if(food->x == x && food->y == y){   return 1;   }   return 0;  }     int isOver(){   int x1=0, y1 =0;   switch(direction){   case LEFT :    x1 = -1;   y1 = 0;   break;      case RIGHT :    x1 = 1;   y1 = 0;   break;      case UP :    x1 = 0;   y1 = -1;   break;      case DOWN :    x1 = 0;   y1 = 1;   break;   }      if(header->x + x1 <= 0 || header->x + x1 >= WALL_LENGTH - 1    || header->y + y1 <= 0 || header->y + y1 >= WALL_LENGTH - 1){      return 1;   }   return 0;     } 

好久没写过C语言了,随便写个贪吃蛇玩一玩,BUG不少,当记录了。

DOS简易版C语言贪吃蛇

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解DOS简易版C语言贪吃蛇分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483334.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐