c语言贪吃蛇游戏实验报告(急求 设计贪吃蛇实验报告)

:暂无数据 2026-07-01 06:50:02 :0

c语言贪吃蛇游戏实验报告(急求 设计贪吃蛇实验报告)

各位老铁们好,相信很多人对c语言贪吃蛇游戏实验报告都不是特别的了解,因此呢,今天就来为大家分享下关于c语言贪吃蛇游戏实验报告以及急求 设计贪吃蛇实验报告的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

急求 设计贪吃蛇实验报告

  学生课程设计(论文)
  题 目: 贪吃蛇游戏程序设计指导
  学生姓名: 学 号:200910801001
  所在院(系): 计算机学院
  专 业: 计算机科学与技术
  班 级: 2009级一班
  指导教师: 何春燕 职称: 讲 师
  2010年06月 18日
  目录
  摘要…………………………………………………………6
  1、设计要求………………………………………………….7
  2、所用仪器设备…………………………………………….7
  3、具体设计过程…………………………………………….8.
  3.1、程序功能……………………………………………8
  3.2设计思想………………………………………………8
  3.3.设计的具体实现……………………………………8.
  3.4 总体流程图………………………………………….14
  3.5、程序代码编写及注释………………………………..15
  3.6调试问题及解决方法…………………………………21
  3.7调试结果…………………………………………….22.
  4设计心得体会………………………………………………25.
  5、参考文献………………………………………………..26
  摘 要
  编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。作为一个完整的程序,尤其是一个完整的游戏,必须考虑人机交流与用户体验。游戏的界面不能太丑,更不能连个简单的界面都没有。游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣,最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
  关键词 贪吃蛇 流程图 c语言 源程序 turbo C
  贪吃蛇游戏程序设计
  1、设计要求
  通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。
  (1).收集资料,分析课题,分解问题,形成总体设计思路;
  (2).深入分析各个小问题,列出大纲,编写各部分程序模块;
  (3).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;
  (4).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;
  (5).完成课程设计报告,并进行答辩
  C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。
  制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。
  通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。
  2、所用仪器设备
  1、能正常工作的计算机一台; 2、WindowsXP;
  3、TC程序; 4、Microsoft Word2003;
  3、具体设计过程
  3.1、程序功能
  贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体叉蛇头撞倒自己身体游戏结束。
  3.2 设计思想
  程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。
  3.3.设计的具体实现
  (1)函数定义
  函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用
  #define N 200
  #include 《graphics.h》/*图形头文件*/
  #include 《stdlib.h》/*包含rand等函数*/
  #include 《dos.h》/*包含bios函数*/
  #define LEFT 0x4b00/*光标左键值*/
  #define RIGHT 0x4d00/*光标右键值*/
  #define DOWN 0x5000/*光标下键值*/
  #define UP 0x4800/*光标上键值*/
  #define ESC 0x011b/*ESC的ASCII码*/
  int i,key;/*图形坐标变量及按键变量*/
  int score=0;/*得分*/
  int gamespeed=10000;/*游戏速度自己调整*/
  struct Food
  {
  int x;/*食物的横坐标*/
  int y;/*食物的纵坐标*/
  int yes;/*判断是否要出现食物的变量*/
  }food;/*食物的结构体*/
  struct Snake
  {
  int x;/*蛇的横坐标*/
  int y;/*蛇的纵坐标*/
  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)/*主函数*/
  (2)主函数main( )
  主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序
  void main(void)/*主函数*/
  {
  Init();/*图形驱动*/
  DrawK();/*开始画面*/
  GamePlay();/*玩游戏具体过程*/
  Close();/*图形结束*/
  }
  void Init(void)/*图形驱动*/
  {
  int gd=DETECT,gm;
  initgraph(&gd,&gm,"c:\\tc"); /*第一个参数表示图形适配器的类型,第二个为在该类型下图形的显示模式,第三个参数指定驱动程序所在目录。*/
  cleardevice();
  }
  (3) 画界面函数DrawK( )
  主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。
  void DrawK(void)/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
  {
  setbkcolor(0);/*设置当前背景颜色*/
  setcolor(YELLOW);/*设置当前画线颜色*/
  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);/*右边*/
  }
  }
  (4)游戏具体过程函数GamePlay( )
  这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。
  void GamePlay(void)/*玩游戏具体过程*/
  {
  randomize();/*随机数发生器*/
  food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
  snake.life=0;/*活着*/
  snake.direction=1;/*方向往右*/
  snake.x=100;/*蛇头*/
  snake.x=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;i》0;i--)/*蛇的每个环节往前移动,贪吃蛇的关键算法*/
  {
  snake.x;
  snake.y;
  }
  switch(snake.direction) /*定义1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
  {
  case 1:snake.x+=10;break;
  case 2: snake.x-=10;break;
  case 3: snake.y-=10;break;
  case 4: snake.y+=10;break;
  }
  for(i=3;i《snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
  {
  if(snake.x)
  {
  GameOver();/*显示失败*/
  snake.life=1;
  break;
  }
  }
  if(snake.x》455)/*蛇是否撞到墙壁*/
  {
  GameOver();/*本次游戏结束*/
  snake.life=1; /*蛇死*/
  }
  if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
  break;
  if(snake.x==food.y)/*吃到食物以后*/
  {
  setcolor(0);/*把画面上的食物东西去掉*/
  rectangle(food.x,food.y,food.x+10,food.y-10);
  snake.x=-20; /*-20表示尾巴长一节*/
  /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
  snake.node++;/*蛇的身体长一节*/
  food.yes=1;/*画面上需要出现新的食物*/
  score+=10;
  PrScore();/*输出新得分*/
  }
  setcolor(4);
  for(i=0;i《snake.node;i++)/*画出蛇*/
  rectangle(snake.x+10,
  snake.y-10);
  delay(gamespeed);
  setcolor(0);/*用黑色去除蛇的的最后一节*/
  rectangle(snake.x,
  snake.x-10);
  } /*endwhile(!kbhit)*/
  if(snake.life==1)/*如果蛇死就跳出循环*/
  break;
  key=bioskey(0);/*接收按键*/
  if(key==ESC)/*按ESC键退出*/
  break;
  else
  if(key==UP&&snake.direction!=4)
  /*判断是否往相反的方向移动*/
  snake.direction=3;
  else
  if(key==RIGHT&&snake.direction!=2)
  snake.direction=1;
  else
  if(key==LEFT&&snake.direction!=1)
  snake.direction=2;
  else
  if(key==DOWN&&snake.direction!=3)
  snake.direction=4;
  }/*endwhile(1)*/
  }
  (5)游戏结束函数GameOver( )
  游戏结束,清除屏幕,输出分数,显示游戏结束信息。
  void GameOver(void)/*游戏结束*/
  {
  cleardevice();
  PrScore();
  setcolor(RED);
  settextstyle(0,0,4);
  outtextxy(200,200,"guojian");
  getch();
  }
  void PrScore(void)/*输出成绩*/
  {
  char str;
  setfillstyle(SOLID_FILL, WHITE);
  bar(50,15,200,35);
  setcolor(6);
  settextstyle(0,0,2);
  sprintf(str,"score:%d",score);
  outtextxy(55,20,str);
  }
  void Close(void)/*图形结束*/
  {
  getch();
  closegraph();
  }
  3.4 总体流程图
  }
  3.5、程序代码编写及注释
  #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;
  int y;
  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=100;/*蛇头*/
  snake.x=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;i》0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
  {
  snake.x;
  snake.y;
  }
  /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
  switch(snake.direction)
  {
  case 1:snake.x+=10;break;
  case 2: snake.x-=10;break;
  case 3: snake.y-=10;break;
  case 4: snake.y+=10;break;
  }
  for(i=3;i《snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
  {
  if(snake.x)
  {
  GameOver();/*显示失败*/
  snake.life=1;
  break;
  }
  }
  if(snake.x《55||
  snake.y》455)/*蛇是否撞到墙壁*/
  {
  GameOver();/*本次游戏结束*/
  snake.life=1; /*蛇死*/
  }
  if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
  break;
  if(snake.x==food.y)/*吃到食物以后*/
  {
  setcolor(0);/*把画面上的食物东西去掉*/
  rectangle(food.x,food.y,food.x+10,food.y-10);
  snake.x=-20;
  /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
  snake.node++;/*蛇的身体长一节*/
  food.yes=1;/*画面上需要出现新的食物*/
  score+=10;
  PrScore();/*输出新得分*/
  }
  setcolor(4);/*画出蛇*/
  for(i=0;i《snake.node;i++)
  rectangle(snake.x+10,
  snake.y-10);
  delay(gamespeed);
  setcolor(0);/*用黑色去除蛇的的最后一节*/
  rectangle(snake.x,
  snake.x-10);
  } /*endwhile(!kbhit)*/
  if(snake.life==1)/*如果蛇死就跳出循环*/
  break;
  key=bioskey(0);/*接收按键*/
  if(key==ESC)/*按ESC键退出*/
  break;
  else
  if(key==UP&&snake.direction!=4)
  /*判断是否往相反的方向移动*/
  snake.direction=3;
  else
  if(key==RIGHT&&snake.direction!=2)
  snake.direction=1;
  else
  if(key==LEFT&&snake.direction!=1)
  snake.direction=2;
  else
  if(key==DOWN&&snake.direction!=3)
  snake.direction=4;
  }/*endwhile(1)*/
  }
  /*游戏结束*/
  3.6调试问题及解决方法
  将已改好的程序复制到Turbo C时,由于软件的内容过多会出现右移,以致大部分的内容无法复制到Turbo C的界面上,最后导致软件无法运行。解决方法:在改程序时应该把格式设置好,注意左对齐,同时一行的语句尽量的短,最好是一个语句占一行。
  在将程序输入到TC中,对源程序进行编译、运行,发现程序存在的多处错误, 如下图所示:
  可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。
  3.7调试结果
  1. 下图为程序调试编译结果:
  2下图为程序调试运行结果(即贪吃蛇游戏界面)
  4设计心得体会
  经过短短两星期的计算机软件技术实习,让我对C程序有了一个更深的了解,以前总认为C语言很枯燥,认为那些我们所设计的程序没有什么用处,但现在通过设计贪吃蛇游戏这个程序使我懂得了如何将所学的知识运用于生活当中。虽然在刚开始设计程序时不太明白如何去设计这程序,但当我看完《C语言课程设计案例精编》并用C语言做出这个贪吃蛇程序后,让我深深感受到C程序的神奇。
  在设计这个程序中我主要学会了如何运用以下有关C语言的知识
  1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序
  十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增
  加了程序的可读性。
  2) 分析函数先从main()函数入手。Main()函数是C源程序编译时的开始,
  从main()函数开始读函数可将其他函数的功能理解得更透彻。
  3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出
  来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。
  4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行
  处理的函数,起功能我都有所了解。
  同时我也获得了许多宝贵的经验:
  1) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解,
  知道所设计的题目和内容包含那些资源。
  2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路
  和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。
  3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改
  进”是程序设计的必经之路,发现错误也是取得成绩的一种。
  4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而
  应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
  5、参考文献
  1.郭翠英,《C语言课程设计案例精编》,中国水利水电出版社,2004.3
  2徐金梧,杨德斌等,《TURBO C实用大全》,机械工程出版社,1996.5
  3李丽娟 《C语言程序设计教程》 人民邮电出版社
  4林华聪 《C语言程序设计思想与实践》 冶金工业出版社
  5张继温 《C语言程序设计教程》 高等教育出版社
  6 潘云鹤,董金祥等著.计算机图形学——原理、方法及应用.北京:高等教育出版社,2003.12
  7 孙家广等,计算机图形学(第三版),清华大学出版社,2004
  8 陈元琰编著.计算机图形学实用技术.北京:科学出版社,2000
  9和青芳著.计算机图形学原理及算法教程.北京:清华大学出版社
  10 陆润民.C语言绘图教程.北京:清华大学出版社,1996

用C语言怎么做贪吃蛇游戏

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

贪吃蛇c++代码及实验报告,详细

#include《stdio.h》
#include《windows.h》
#include《stdlib.h》
#include《time.h》
#include《conio.h》
intfood_x,food_y;//食物的坐标
structsneak
{
int x,y;
struct sneak *next;
};//蛇的结构体
voidSetpos(int i,int j)
{
COORD pos={i-1,j-1};
HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pos);
}//定位在什么地方输出
voidbeginsneak(struct sneak *head)
{
struct sneak *temp1,*temp2;
temp1=(structsneak*)malloc(sizeof(struct sneak));
temp2=(structsneak*)malloc(sizeof(struct sneak));
temp1-》x=6;
temp1-》y=5;
temp2-》x=6;
temp2-》y=4;
head-》next=temp1;
temp1-》next=temp2;
temp2-》next=NULL;
}//初始化蛇的身体
voidmap()
{
int i;
for(i=0;i《50;i++)
{
Setpos(i,1);
printf("-");
Setpos(i,25);
printf("-");
}
for(i=1;i《25;i++)
{
Setpos(1,i);
printf("|");
Setpos(50,i);
printf("|");
}
}//画地图
voidfood(struct sneak *head)
{
struct sneak *p;
p=head;
int foodexist=0;//食物标记
srand((int)time(0));
while(foodexist==0)
{
food_x=rand()%48+2;
food_y=rand()%23+2;

while(p!=NULL)//判断食物生成是否在蛇的身体里
{
if(p-》x==food_x&&p-》y==food_y)
{
foodexist=1;
break;
}
p=p-》next;
}

if(foodexist==0)//如果没有,则生成食物
{
Setpos(food_x,food_y);
printf("¥");
break;
}
}
}
voidpaint(struct sneak *head)//画出蛇的身体
{
struct sneak *p;
int ifhead=0; //判断是否是蛇头
p=head;
while(p!=NULL)
{
if(ifhead==0)//如果是,画出蛇头
{
Setpos(p-》x,p-》y);
printf("#");
ifhead=1;
}
else//其他部分
{
Setpos(p-》x,p-》y);
printf("*");
}

p=p-》next;
}
}
structsneak *moveresult(struct sneak *head)//蛇的移动
{
struct sneak *new1;
new1=(structsneak*)malloc(sizeof(struct sneak));
static int direction=4;
char x;
if(_kbhit())
{
x=_getch();
if((x==’w’||x==’W’)&&direction!=2)
direction=1;
if((x==’s’||x==’S’)&&direction!=1)
direction=2;
if((x==’a’||x==’A’)&&direction!=4)
direction=3;
if((x==’d’||x==’D’)&&direction!=3)
direction=4;
while(_kbhit())
_getch();
}//控制方向

switch(direction)//每移动一步都要增加一个蛇身
{
case 1:
new1-》x=head-》x;
new1-》y=head-》y-1;
new1-》next=head;
head=new1;
break;
case 2:
new1-》x=head-》x;
new1-》y=head-》y+1;
new1-》next=head;
head=new1;
break;
case 3:
new1-》x=head-》x-1;
new1-》y=head-》y;
new1-》next=head;
head=new1;
break;
case 4:
new1-》x=head-》x+1;
new1-》y=head-》y;
new1-》next=head;
head=new1;
break;
}
return head;
}
intover(struct sneak *head)//判断是否结束
{
struct sneak *p;
p=head-》next;
int gameover=0;
if((head-》x)》=50||(head-》x)《=1||(head-》y)》=25||(head-》y)《=1)//撞墙
{
gameover=-1;
}
while(p!=NULL)//撞到自己
{
if((head-》x==p-》x)&&(head-》y==p-》y))
{
gameover=-1;
break;
}
p=p-》next;
}
return gameover;
}
voiddecrease(struct sneak *head)//删减一个蛇身
{
struct sneak *p,*pre;
p=head;
while(p-》next!=NULL)
{
pre=p;
p=p-》next;
}
Setpos(p-》x,p-》y);
printf(" ");
free(p);
pre-》next=NULL;
}
voidgame()
{
system("cls");
Setpos(54,3);//定位。以后的也是
printf("-贪吃蛇游戏-");
int count=3;//蛇身的长度
int speed=0;//当前速度
struct sneak *head;//初始化蛇头
head=(structsneak*)malloc(sizeof(struct sneak));
head-》x=6;
head-》y=6;

map();//地图
beginsneak(head);//初始化蛇
food(head);//初始化食物
paint(head);//画蛇身
while(1)
{
if(speed==9)//判断是否通关
{
system("cls");
Setpos(30,7);
printf("666666.恭喜通关");
break;
}
Setpos(54,5);
printf("蛇的长度为:%d",count);
Setpos(54,7);
printf("当前等级:%d",speed);
head=moveresult(head);//移动蛇,同时每一次蛇身加一

if(over(head)==-1)//是否失败
{
system("cls");
Setpos(30,7);
printf("失败了......");
Setpos(30,9);
printf("最终长度:%d",count);
break;
}

if(head-》x==food_x&&head-》y==food_y)//吃到食物,蛇身不减一
{
count++;
food(head);
}
else//没吃到食物,蛇身减一
{
decrease(head);
}
paint(head);
speed=(int)(count/10);//当前速度
Sleep(150-speed*15);
}
}
intmain()
{
printf("------------------ 欢迎玩家 -----------------\n");
printf("------------------ w,a,s,d控制 --------------\n");
printf("------------------ 输入任意键开始 -------------\n");
_getch();
game();
return 0;
}

以上就是我们为大家找到的有关“c语言贪吃蛇游戏实验报告(急求 设计贪吃蛇实验报告)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

c语言贪吃蛇游戏实验报告(急求 设计贪吃蛇实验报告)

本文编辑:admin

更多文章:


全民体育欧冠直播(电竞发展成为全民体育活动,合适吗)

全民体育欧冠直播(电竞发展成为全民体育活动,合适吗)

各位老铁们好,相信很多人对全民体育欧冠直播都不是特别的了解,因此呢,今天就来为大家分享下关于全民体育欧冠直播以及电竞发展成为全民体育活动,合适吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月11日 11:10

withdrawal(withdrawal是什么意思)

withdrawal(withdrawal是什么意思)

今天给各位分享withdrawal是什么意思的知识,其中也会对withdrawal是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 07:00

根据流程图怎么编写程序(用c语言根据流程图写程序)

根据流程图怎么编写程序(用c语言根据流程图写程序)

大家好,今天小编来为大家解答以下的问题,关于根据流程图怎么编写程序,用c语言根据流程图写程序这个很多人还不知道,现在让我们一起来看看吧!

2026年10月11日 06:00

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

大家好,关于在from子句中可以出现很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何在from 子句中嵌套查询下面的语句在access中出错!的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望

2026年10月11日 05:20

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

其实countif函数统计个数怎么用的问题并不复杂,但是又很多的朋友都不太了解countif函数怎么用 详解Excel中countif函数的使用方法,因此呢,今天小编就来为大家分享countif函数统计个数怎么用的一些知识,希望可以帮助到大

2026年10月11日 03:30

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

本篇文章给大家谈谈正则匹配数字之前的字符,以及正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问

2026年10月11日 03:00

register语言学(register语言学)

register语言学(register语言学)

“register语言学”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看register语言学(register语言学)!

2026年10月11日 01:40

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

“系统架构设计师可以直接考吗”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)!

2026年10月11日 01:00

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

大家好,如果您还对orlnsertbootmediinselected不太了解,没有关系,今天就由本站为大家分享orlnsertbootmediinselected的知识,包括我电脑开机显示这个是什么意思or insert boot med

2026年10月10日 23:00

display的用法(display是什么意思 详解display的含义和用法)

display的用法(display是什么意思 详解display的含义和用法)

大家好,如果您还对display的用法不太了解,没有关系,今天就由本站为大家分享display的用法的知识,包括display是什么意思 详解display的含义和用法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 22:00

最近更新

热门文章

标签列表