贪吃蛇的c语言程序代码全文(简单的c语言代码贪吃蛇)

贪吃蛇的c语言程序代码全文(简单的c语言代码贪吃蛇)

  本篇文章给大家谈谈贪吃蛇的c语言程序代码全文,以及简单的c语言代码贪吃蛇对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

  本文目录一览:

  1、c语言贪吃蛇代码

2、贪吃蛇c语言代码

3、C语言的贪吃蛇源代码

  c语言贪吃蛇代码

  基本思路:

  蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。

  #include stdio.h

  #include conio.h

  #include windows.h

  #define BEG_X 2

  #define BEG_Y 1

  #define WID 20

  #define HEI 20

  HANDLE hout;

  typedef enum {UP, DOWN, LEFT, RIGHT} DIR;

  typedef struct Snake_body

  {

  COORD pos;//蛇身的位置

  struct Snake_body *next;//下一个蛇身

  struct Snake_body *prev;//前一个蛇身

  }SNAKE, *PSNAKE;

  PSNAKE head = NULL;//蛇头

  PSNAKE tail = NULL;//蛇尾

  //画游戏边框的函数

  void DrawBorder()

  {

  int i, j;

  COORD pos = {BEG_X, BEG_Y};

  for(i = 0; i HEI; ++i)

  {

  SetConsoleCursorPosition(hout, pos);

  for(j = 0; j WID; ++j)

  {

  if(i == 0)//第一行

  {

  if(j == 0)

  printf(“┏”);

  else if(j == WID – 1)

  printf(“┓”);

  else

  printf(“━”);

  }

  else if(i == HEI – 1)//最后一行

  {

  if(j == 0)

  printf(“┗”);

  else if(j == WID – 1)

  printf(“┛”);

  else

  printf(“━”);

  }

  else if(j == 0 || j == WID – 1)//第一列或最后一列

  printf(“┃”);

  else

  printf(”  “);

  }

  ++pos.Y;

  }

  }

  //添加蛇身的函数

  void AddBody(COORD pos)

  {

  PSNAKE pnew = (PSNAKE)calloc(1, sizeof(SNAKE));

  pnew-pos = pos;

  if(!head)

  {

  head = tail = pnew;

  }

  else

  {

  pnew-next = head;//新创建蛇身的next指向原先的蛇头

  head-prev = pnew;//原先的蛇头的prev指向新创建的蛇身

  head = pnew;//把新创建的蛇身作为新的蛇头

  }

  SetConsoleCursorPosition(hout, head-pos);

  printf(“◎”);

  }

  //蛇身移动的函数

  void MoveBody(DIR dir)

  {

  PSNAKE ptmp;

  COORD pos = head-pos;

  switch(dir)

  {

  case UP:

  if(head-pos.Y BEG_Y + 1)

  –pos.Y;

  else

  return;

  break;

  case DOWN:

  if(head-pos.Y BEG_Y + HEI – 2)

  ++pos.Y;

  else

  return;

  break;

  case LEFT:

  if(head-pos.X BEG_X + 2)

  pos.X -= 2;

  else

  return;

  break;

  case RIGHT:

  if(head-pos.X BEG_X + (WID – 2) * 2)

  pos.X += 2;

  else

  return;

  break;

  }

  AddBody(pos);//添加了一个新的蛇头

  ptmp = tail;//保存当前的蛇尾

  tail = tail-prev;

  if(tail)

  tail-next = NULL;

  SetConsoleCursorPosition(hout, ptmp-pos);

  printf(”  “);

  free(ptmp);

  }

  int main()

  {

  int ctrl;

  DIR dir = RIGHT;//初始蛇的方向是向右的

  COORD pos = {BEG_X + 2, BEG_Y + HEI / 2};

  system(“color 0E”);

  system(“mode con cols=90 lines=30”);

  hout = GetStdHandle(STD_OUTPUT_HANDLE);

  printf(”    ————贪吃蛇的移动————“);

  DrawBorder();

  //自定义几个蛇的身体

  AddBody(pos);

  pos.X += 2;

  AddBody(pos);

  pos.X += 2;

  AddBody(pos);

  pos.X += 2;

  AddBody(pos);

  pos.X += 2;

  AddBody(pos);

  pos.X += 2;

  AddBody(pos);

  pos.X += 2;

  AddBody(pos);

  //控制蛇的移动

  while(ctrl = getch())

  {

  switch(ctrl)

  {

  case ‘w’:

  if(dir == DOWN)

  continue;

  dir = UP;

  break;

  case ‘s’:

  if(dir == UP)

  continue;

  dir = DOWN;

  break;

  case ‘a’:

  if(dir == RIGHT)

  continue;

  dir = LEFT;

  break;

  case ‘d’:

  if(dir == LEFT)

  continue;

  dir = RIGHT;

  break;

  case ‘q’:

  return 0;

  }

  MoveBody(dir);

  }

  return 0;

  }

  扩展资料:

  实现逻辑

  1,可以设置光标,就能实现制定位置打印制定符号。

  2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。

  3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。

  4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。

  5,食物产生的位置判定,不能越界,也不能与蛇身体重合。

  6,蛇的转向判定,一条规则,不允许倒退。

  7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)

  8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。

  9,加速减速,设置刷新休眠时间实现。

  参考资料来源:百度百科-C语言

  贪吃蛇c语言代码

  #define N 200

  #include graphics.h

  #include stdlib.h

  #include dos.h

  #define LEFT 0x4b00

  #define RIGHT 0x4d00

  #define DOWN 0x5000

  #define UP 0x4800

  #define ESC 0x011b

  int i,key;

  int score=0;/*得分*/

  int gamespeed=50000;/*游戏速度自己调整*/

  struct Food

  {

  int x;/*食物的横坐标*/

  int y;/*食物的纵坐标*/

  int yes;/*判断是否要出现食物的变量*/

  }food;/*食物的结构体*/

  struct Snake

  {

  int x[N];

  int y[N];

  int node;/*蛇的节数*/

  int direction;/*蛇移动方向*/

  int life;/* 蛇的生命,0活着,1死亡*/

  }snake;

  void Init(void);/*图形驱动*/

  void Close(void);/*图形结束*/

  void DrawK(void);/*开始画面*/

  void GameOver(void);/*结束游戏*/

  void GamePlay(void);/*玩游戏具体过程*/

  void PrScore(void);/*输出成绩*/

  /*主函数*/

  void main(void)

  {

  Init();/*图形驱动*/

  DrawK();/*开始画面*/

  GamePlay();/*玩游戏具体过程*/

  Close();/*图形结束*/

  }

  /*图形驱动*/

  void Init(void)

  {

  int gd=DETECT,gm;

  initgraph(gd,gm,”c:\tc”);

  cleardevice();

  }

  /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/

  void DrawK(void)

  {

  /*setbkcolor(LIGHTGREEN);*/

  setcolor(11);

  setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

  for(i=50;i=600;i+=10)/*画围墙*/

  {

  rectangle(i,40,i+10,49); /*上边*/

  rectangle(i,451,i+10,460);/*下边*/

  }

  for(i=40;i=450;i+=10)

  {

  rectangle(50,i,59,i+10); /*左边*/

  rectangle(601,i,610,i+10);/*右边*/

  }

  }

  /*玩游戏具体过程*/

  void GamePlay(void)

  {

  randomize();/*随机数发生器*/

  food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

  snake.life=0;/*活着*/

  snake.direction=1;/*方向往右*/

  snake.x[0]=100;snake.y[0]=100;/*蛇头*/

  snake.x[1]=110;snake.y[1]=100;

  snake.node=2;/*节数*/

  PrScore();/*输出得分*/

  while(1)/*可以重复玩游戏,压ESC键结束*/

  {

  while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

  {

  if(food.yes==1)/*需要出现新食物*/

  {

  food.x=rand()%400+60;

  food.y=rand()%350+60;

  while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

  food.x++;

  while(food.y%10!=0)

  food.y++;

  food.yes=0;/*画面上有食物了*/

  }

  if(food.yes==0)/*画面上有食物了就要显示*/

  {

  setcolor(GREEN);

  rectangle(food.x,food.y,food.x+10,food.y-10);

  }

  for(i=snake.node-1;i0;i–)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/

  {

  snake.x[i]=snake.x[i-1];

  snake.y[i]=snake.y[i-1];

  }

  /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/

  switch(snake.direction)

  {

  case 1:snake.x[0]+=10;break;

  case 2: snake.x[0]-=10;break;

  case 3: snake.y[0]-=10;break;

  case 4: snake.y[0]+=10;break;

  }

  for(i=3;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

  {

  if(snake.x[i]==snake.x[0]snake.y[i]==snake.y[0])

  {

  GameOver();/*显示失败*/

  snake.life=1;

  break;

  }

  }

  if(snake.x[0]55||snake.x[0]595||snake.y[0]55||

  snake.y[0]455)/*蛇是否撞到墙壁*/

  {

  GameOver();/*本次游戏结束*/

  snake.life=1; /*蛇死*/

  }

  if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/

  break;

  if(snake.x[0]==food.xsnake.y[0]==food.y)/*吃到食物以后*/

  {

  setcolor(0);/*把画面上的食物东西去掉*/

  rectangle(food.x,food.y,food.x+10,food.y-10);

  snake.x[snake.node]=-20;snake.y[snake.node]=-20;

  /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/

  snake.node++;/*蛇的身体长一节*/

  food.yes=1;/*画面上需要出现新的食物*/

  score+=10;

  PrScore();/*输出新得分*/

  }

  setcolor(4);/*画出蛇*/

  for(i=0;isnake.node;i++)

  rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

  snake.y[i]-10);

  delay(gamespeed);

  setcolor(0);/*用黑色去除蛇的的最后一节*/

  rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

  snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

  } /*endwhile(!kbhit)*/

  if(snake.life==1)/*如果蛇死就跳出循环*/

  break;

  key=bioskey(0);/*接收按键*/

  if(key==ESC)/*按ESC键退出*/

  break;

  else

  if(key==UPsnake.direction!=4)

  /*判断是否往相反的方向移动*/

  snake.direction=3;

  else

  if(key==RIGHTsnake.direction!=2)

  snake.direction=1;

  else

  if(key==LEFTsnake.direction!=1)

  snake.direction=2;

  else

  if(key==DOWNsnake.direction!=3)

  snake.direction=4;

  }/*endwhile(1)*/

  }

  /*游戏结束*/

  void GameOver(void)

  {

  cleardevice();

  PrScore();

  setcolor(RED);

  settextstyle(0,0,4);

  outtextxy(200,200,”GAME OVER”);

  getch();

  }

  /*输出成绩*/

  void PrScore(void)

  {

  char str[10];

  setfillstyle(SOLID_FILL,YELLOW);

  bar(50,15,220,35);

  setcolor(6);

  settextstyle(0,0,2);

  sprintf(str,”score:%d”,score);

  outtextxy(55,20,str);

  }

  /*图形结束*/

  void Close(void)

  {

  getch();

  closegraph();

  }

  C语言的贪吃蛇源代码

  //******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****

  #include stdio.h

  #include stdlib.h

  #include conio.h

  #include string.h

  #include time.h

  const int H = 8;   //地图的高

  const int L = 16;  //地图的长

  char GameMap[H][L];   //游戏地图

  int  key;  //按键保存

  int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)

  int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向

  int  dy[4] = {-1, 1, 0, 0};

  struct Snake   //蛇的每个节点的数据类型

  {

  int x, y;  //左边位置

  int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下

  }Snake[H*L];

  const char Shead = ‘@’;  //蛇头

  const char Sbody = ‘#’;  //蛇身

  const char Sfood = ‘*’;  //食物

  const char Snode = ‘.’;  //’.’在地图上标示为空

  void Initial();  //地图的初始化

  void Create_Food(); //在地图上随机产生食物

  void Show();   //刷新显示地图

  void Button();  //取出按键,并判断方向

  void Move();   //蛇的移动

  void Check_Border();  //检查蛇头是否越界

  void Check_Head(int x, int y);   //检查蛇头移动后的位置情况

  int main()

  {

  Initial();

  Show();

  return 0;

  }

  void Initial()  //地图的初始化

  {

  int i, j;

  int hx, hy;

  system(“title 贪吃蛇”);  //控制台的标题

  memset(GameMap, ‘.’, sizeof(GameMap));  //初始化地图全部为空’.’

  system(“cls”);

  srand(time(0));   //随机种子

  hx = rand()%H;    //产生蛇头

  hy = rand()%L;

  GameMap[hx][hy] = Shead;

  Snake[0].x = hx;  Snake[0].y = hy;

  Snake[0].now = -1;

  Create_Food();   //随机产生食物

  for(i = 0; i  H; i++)   //地图显示

  {

  for(j = 0; j  L; j++)

  printf(“%c”, GameMap[i][j]);

  printf(“

  ”);

  }

  printf(“

  小小C语言贪吃蛇

  ”);

  printf(“按任意方向键开始游戏

  ”);

  getch();   //先接受一个按键,使蛇开始往该方向走

  Button();  //取出按键,并判断方向

  }

  void Create_Food()  //在地图上随机产生食物

  {

  int fx, fy;

  while(1)

  {

  fx = rand()%H;

  fy = rand()%L;

  if(GameMap[fx][fy] == ‘.’)  //不能出现在蛇所占有的位置

  {

  GameMap[fx][fy] = Sfood;

  break;

  }

  }

  }

  void Show()  //刷新显示地图

  {

  int i, j;

  while(1)

  {

  _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图

  Button();   //先判断按键在移动

  Move();

  if(over)  //自吃或碰墙即游戏结束

  {

  printf(“

  **游戏结束**

  ”);

  printf(”     _

  ”);

  getchar();

  break;

  }

  system(“cls”);   //清空地图再显示刷新吼的地图

  for(i = 0; i  H; i++)

  {

  for(j = 0; j  L; j++)

  printf(“%c”, GameMap[i][j]);

  printf(“

  ”);

  }

  printf(“

  小小C语言贪吃蛇

  ”);

  printf(“按任意方向键开始游戏

  ”);

  }

  }

  void Button()  //取出按键,并判断方向

  {

  if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0

  {

  while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主

  key = getch(); //将按键从控制台中取出并保存到key中

  switch(key)

  {   //左

  case 75:  Snake[0].now = 0;

  break;

  //右

  case 77:  Snake[0].now = 1;

  break;

  //上

  case 72:  Snake[0].now = 2;

  break;

  //下

  case 80:  Snake[0].now = 3;

  break;

  }

  }

  }

  void Move()   //蛇的移动

  {

  int i, x, y;

  int t = sum;  //保存当前蛇的长度

  //记录当前蛇头的位置,并设置为空,蛇头先移动

  x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = ‘.’;

  Snake[0].x = Snake[0].x + dx[ Snake[0].now ];

  Snake[0].y = Snake[0].y + dy[ Snake[0].now ];

  Check_Border();   //蛇头是否越界

  Check_Head(x, y);  //蛇头移动后的位置情况,参数为: 蛇头的开始位置

  if(sum == t)  //未吃到食物即蛇身移动哦

  for(i = 1; i  sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为参照

  {

  if(i == 1)   //尾节点设置为空再移动

  GameMap[ Snake[i].x ][ Snake[i].y ] = ‘.’;

  if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理

  {

  Snake[i].x = x;

  Snake[i].y = y;

  Snake[i].now = Snake[0].now;

  }

  else   //其他蛇身即走到前一个蛇身位置

  {

  Snake[i].x = Snake[i+1].x;

  Snake[i].y = Snake[i+1].y;

  Snake[i].now = Snake[i+1].now;

  }

  GameMap[ Snake[i].x ][ Snake[i].y ] = ‘#’; //移动后要置为’#’蛇身

  }

  }

  void Check_Border()  //检查蛇头是否越界

  {

  if(Snake[0].x  0 || Snake[0].x = H

  || Snake[0].y  0 || Snake[0].y = L)

  over = 1;

  }

  void Check_Head(int x, int y)  //检查蛇头移动后的位置情况

  {

  if(GameMap[ Snake[0].x ][ Snake[0].y ] == ‘.’)  //为空

  GameMap[ Snake[0].x ][ Snake[0].y ] = ‘@’;

  else

  if(GameMap[ Snake[0].x ][ Snake[0].y ] == ‘*’)  //为食物

  {

  GameMap[ Snake[0].x ][ Snake[0].y ] = ‘@’;

  Snake[sum].x = x;   //新增加的蛇身为蛇头后面的那个

  Snake[sum].y = y;

  Snake[sum].now = Snake[0].now;

  GameMap[ Snake[sum].x ][ Snake[sum].y ] = ‘#’;

  sum++;

  Create_Food();  //食物吃完了马上再产生一个食物

  }

  else

  over = 1;

  }

  贪吃蛇的c语言程序代码全文的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于简单的c语言代码贪吃蛇、贪吃蛇的c语言程序代码全文的信息别忘了在本站进行查找喔。

贪吃蛇的c语言程序代码全文(简单的c语言代码贪吃蛇)

关于 贪吃蛇的c语言程序代码全文(简单的c语言代码贪吃蛇) 的问题,嗨壳技术分享网(www.heikehao.com)小编就分享到这里吧!如果大家有疑问欢迎留言询问。

原创文章,作者:语言我知,如若转载,请注明出处:https://www.heikehao.com/765.html

(0)
语言我知语言我知
上一篇 2020年1月4日
下一篇 2020年1月4日

相关推荐

  • c语言乘方怎么表示

    C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它…

    2023年11月28日 C语言
  • 国二c语言视频讲解

    针对国二c语言视频讲解的内容, 嗨壳技术分享网今天给大家作出详细的解答吧!   国二c语言包括什么   1、国二C语言指全国计算机等级考试中的c语言考试项目。包括以下十二个方面。C…

    2020年4月20日
  • c语言字符数组编程习题

    针对c语言字符数组编程习题的内容, 嗨壳技术分享网今天给大家作出详细的解答吧!   c语言的字符数组编程题,求改错或正解   思路:按题意,用指针遍历字符串st,使用标识变量fla…

    2020年8月29日
  • c语言中字符串变量

    今天,嗨壳技术分享网给大家整理一些c语言中字符串变量内容。   本篇文章给大家谈谈c语言中字符串变量,以及c语言中字符串变量的符号对应的知识点,希望对各位有所帮助,不要忘了收藏本站…

    2021年12月31日
  • c语言文件使用的注意事项(c语言文件使用的注意事项包括)

    今天,嗨壳技术分享网给大家整理一些c语言文件使用的注意事项(c语言文件使用的注意事项包括)内容。   本篇文章给大家谈谈c语言文件使用的注意事项,以及c语言文件使用的注意事项包括对…

    2020年10月6日
  • 随机数c语言

    随机数c语言 大家并不陌生,借来给大家详细说说吧!   怎么用C语言生成随机数   x0dx0ax0dx0a在工程应用时,我们一般将系统当前时间(Unix时间)作为种子,这样生成的…

    2020年1月6日
  • 求一个c语言50行的和解析

    求一个c语言50行的和解析   求一个50行左右的C语言编程。   这是一个玩五子棋的例子:   #include iostream.h   #include process.h …

    2020年4月21日
  • 科学计算器c语言代码(科学计算器c语言代码怎么用)

    今天,嗨壳技术分享网给大家整理一些科学计算器c语言代码(科学计算器c语言代码怎么用)内容。   今天给各位分享科学计算器c语言代码的知识,其中也会对科学计算器c语言代码怎么用进行解…

    2020年2月29日
  • 复合型法c语言程序,c语言复合类型

    今天,嗨壳技术分享网给大家整理一些复合型法c语言程序,c语言复合类型内容。   c语言中空语句的一般形式是为,还有复合语句的形式为。50分。好好回答…   1、表达式语…

    2020年9月25日
  • 数字图像处理实验报告c语言,数字图像处理编程语言

    数字图像处理实验报告c语言,数字图像处理编程语言 大家并不陌生,借来给大家详细说说吧!   各位大哥救命,两道C语言数字图像处理作业!大虾救命   1、作业1非常简单,楼本不是楼上…

    2020年3月30日

网上怎么找黑客帮忙多少钱

怎么网上找到的黑客?黑客的收费标准是什么呢?找黑客一般费用是多少?


找黑客帮忙一般要多少钱

黑客服务的价格范围很广,主要取决于服务的类型和难度。根据提供的信息如下:


1.攻击服务:


攻击范围:这包括了通过扫描入侵、种植木马等方式对他人计算机实施非法控制,并利用被控制的计算机对网站、App等服务器发起攻击


。1

2.特定账户的售价:


账户信息:如垂钓者、而勒索软件,显示市场对特定黑客工具的需求和价格波动。

3.攻击工具:

“RIG”攻击工具包的租用费用,提供了不同时长的选择。

4.远程访问木马(RAT)的价格:

相比去年有所下降,显示出市场价格的波动。

5.DDOS攻击的报价:

DDOS攻击服务按不同时长定价选择。

黑客服务的价格因服务类型、难度、以及市场需求的不同而有很大的差异。这些价格反映了黑客服务市场的复杂性和多样性,同时也提醒人们网络安全的重要性。