C语言实现贪吃蛇游戏(单人版)

所属分类: 软件编程 / C 语言 阅读数: 105
收藏 0 赞 0 分享

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

相比于第一个:贪吃蛇游戏,功能更加丰富

#include"snake.h"
//蛇的移动
void move_snake();
//画出蛇
void draw_snake();
//产生食物
void creatfood();
//判断蛇是否吃到食物
void eatfood();
//判断蛇是否死掉
void SnakeState();
 
 
 
int main()
{
 //设置窗口大小
 system("mode con cols=110 lines=31");
 //设置标题
 SetConsoleTitleA("贪吃蛇");
 
 //播放bgm
 playmusic();
 
 //初始化蛇
begin:
 snake.CH = VK_RIGHT;//初始化方向
 snake.len = 5; //初始化长度
 snake.SPEED = 100;//初始化蛇的移动速度
 snake.coord[1].x = SCREEN_WIDETH / 2;//初始化蛇头的坐标
 snake.coord[1].y = SCREEN_HEIGHT / 2;
 snake.coord[2].x = SCREEN_WIDETH / 2-2;//初始化蛇头的坐标
 snake.coord[2].y = SCREEN_HEIGHT / 2;
 snake.coord[3].x = SCREEN_WIDETH / 2-4;//初始化蛇头的坐标
 snake.coord[3].y = SCREEN_HEIGHT / 2;
 
 //初始化食物状态
 food.flag = 1;//1表示吃到食物 0表示没有吃到食物
 
     //初始化食物状态
 snake.flag = 1;//1活 0死
 
 
 
 init_sence();//初始化游戏界面
 while (1)
 {
  colormap();
  gotoxy(0, 0);
  printf("■");
  HuiFu();
  setcolor();
 
  draw_snake();//画蛇
  Sleep(snake.SPEED);//蛇的移动速度
  move_snake();//移动蛇
  if(food.flag)
  creatfood();//产生食物
  eatfood();//判断是否吃到食物
  SnakeState();//判断蛇是否死亡
  if (!snake.flag)break;
 }
 system("cls");
 gotoxy(SCREEN_WIDETH/2, SCREEN_HEIGHT/2-4);
 printf(" GAME OVER!!!");
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+2);
 printf("你的得分是:\t\t\t%d ",snake.len-1);
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+4);
 printf("我不服再来:\t\t\tCTRL ");
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+6);
 printf("算了垃圾游戏毁我青春:\t\tESC");
 
 while (1)
 {
  if (GetAsyncKeyState(VK_CONTROL))
  {
   system("cls");
   goto begin;
  }
  else if (GetAsyncKeyState(VK_ESCAPE))
   return 0;
 }
}
 
//蛇的移动
void move_snake()
{
 //判断是否有按键操作
 if (GetAsyncKeyState(up))
 {
  if(snake.CH!=down)snake.CH = up;
 }
 else if (GetAsyncKeyState(down))
 {
  if (snake.CH != up)snake.CH = down;
 }
 else if (GetAsyncKeyState(right))
 {
  if (snake.CH != left)snake.CH = right;
 }
 else if (GetAsyncKeyState(left))
 {
  if (snake.CH != right)snake.CH = left;
 }
 else if (GetAsyncKeyState(VK_F1))
 {
  if(snake.SPEED>=50)snake.SPEED -= 10;
 }
 else if (GetAsyncKeyState(VK_F2))
 {
  if (snake.SPEED <= 100)snake.SPEED += 10;
 }
 //游戏难度设置
 if (snake.len >= 30 && snake.SPEED >= 10)snake.SPEED -= 2;
 //根据检测到的方向改变蛇头的位置
 switch (snake.CH)
 {
 case right:snake.coord[1].x += 2; break;
 case left:snake.coord[1].x -= 2; break;
 case up:snake.coord[1].y -= 1; break;
 case down:snake.coord[1].y += 1; break;
 }
 
 
}
 
//画出蛇
void draw_snake()
{
 //画出蛇头
 gotoxy(snake.coord[1].x, snake.coord[1].y);
 printf("□");
 
 //画出蛇身,直接一个for循环实现
 for (int i = 2; i < snake.len; i++)
 {
  gotoxy(snake.coord[i].x, snake.coord[i].y);
  printf("□");
 }
 //擦掉尾巴
 HuiFu();
 gotoxy(snake.coord[snake.len].x, snake.coord[snake.len].y);
 printf(" ");
 
 //遍历每一节蛇
 for (int i = snake.len; i >1; i--)
 {
  snake.coord[i].x = snake.coord[i - 1].x;
  snake.coord[i].y = snake.coord[i - 1].y;
 }
 
 gotoxy(0, 0);
 printf("■");
 gotoxy(85, 25);
 printf("得分:%d ", snake.len-1);
 gotoxy(85, 22);
 printf("速度:%dms/步 ", snake.SPEED);
 
}
 
//产生食物
void creatfood()
{
 //随机种子生成
 srand((unsigned)time(NULL));
 if(food.flag)
 while (1)
 {
  food.x = rand() % 80;
  food.y = rand() % 30;
  if (food.x % 2 == 0 && food.x >= 2 && food.x <= 78 && food.y > 1 && food.y < 30)
  {
   int flag = 0;
   //判断产生的食物可不可能在蛇的身体上
   for (int i = 1; i <= snake.len; i++)
   {
    if (snake.coord[i].x == food.x&&snake.coord[i].y == food.y)
    {
     flag = 1;
     break;
    }
   }
   if (flag)continue;
   //绘制食物
   else
   {
    colorfood();
    gotoxy(food.x, food.y);
    printf("⊙");
    HuiFu();
    food.flag = 0;
    break;
   }
  }
 }
 food.flag = 0;
}
 
//判断蛇是否吃到食物
void eatfood()
{
 //只需要判断蛇头是否与食物重合
  if (food.x == snake.coord[1].x&&food.y == snake.coord[1].y)
  {
   snake.len+=1;
   food.flag = 1;
  }
}
 
//判断蛇是否死掉
void SnakeState()
{
 if (snake.coord[1].x < 2 || snake.coord[1].x>78 || snake.coord[1].y < 1 || snake.coord[1].y>29)
  snake.flag = 0;
 
 for (int i = 2; i <= snake.len; i++)
 {
  if (snake.coord[1].x == snake.coord[i].x&&snake.coord[1].y == snake.coord[i].y)
   snake.flag = 0;
 }
 
}

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

利用C语言来求最大连续子序列乘积的方法

这篇文章主要介绍了利用C语言来求最大连续子序列乘积的方法,基本的思路以外文中还附有相关ACM题目,需要的朋友可以参考下
收藏 0 赞 0 分享

用C语言判断一个二叉树是否为另一个的子结构

这篇文章主要介绍了用C语言判断一个二叉树是否为另一个的子结构,是数据结构学习当中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现的阶乘,排列和组合实例

这篇文章主要介绍了C语言实现的阶乘,排列和组合的方法,涉及C语言数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言查找数组里数字重复次数的方法

这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言简单实现计算字符个数的方法

这篇文章主要介绍了C语言简单实现计算字符个数的方法,涉及C语言针对字符串的简单遍历与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

c实现linux下的数据库备份

本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

C++获得文件状态信息的方法

这篇文章主要介绍了C++获得文件状态信息的方法,包括文件状态信息、文件所在磁盘盘符、文件创建时间、访问时间及修改日期等,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言按关键字搜索文件夹中文件的方法

这篇文章主要介绍了C语言按关键字搜索文件夹中文件的方法,涉及C语言文件操作及字符串查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言之字符串模糊查询方法的实现

本篇文章主要为大家介绍字符串模糊查询的C语言程序编写方法,有需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现BMP转换JPG的方法

这篇文章主要介绍了C语言实现BMP转换JPG的方法,涉及C#图片格式转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多