贪吃蛇

  • 1.游戏界面
  • 2.游戏说明
  • 3.程序源代码

1.游戏界面

2.游戏说明

贪吃蛇游戏按键说明:

按方向键上下左右,可以实现蛇移动方向的改变:

3.程序源代码

代码如下(示例):

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <time.h>#define width 60
#define hight 25
#define SNAKESIZE 200   //蛇身的最长长度int key = 72;           //初始化蛇的运动方向,向上
int changeflag = 1;     //用来标识是否生成食物,1表示蛇还没吃到食物,0表示吃到食物
int speed = 0;          //时间延迟
struct {int len;//用来记录蛇身每个方块的坐标int x[SNAKESIZE];int y[SNAKESIZE];int speed;
}snake;struct
{int x; int y;
}food;
void gotoxy(int x, int y)//调用Windows的API函数,可以在控制台的指定位置直接操作,这里可暂时不用深究
{COORD coord;coord.X = x;coord.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
//■○
void drawmap()
{//打印图框for (int _y = 0; _y < hight; _y++){for (int x = 0; x < width; x += 2){if (x == 0 || _y == 0 || _y == hight - 1 || x == width - 2){gotoxy(x, _y);printf("■");}}}//打印蛇头snake.len = 3;snake.x[0] = width / 2;snake.y[0] = hight / 2;gotoxy(snake.x[0], snake.y[0]);printf("■");//打印蛇身for (int i = 1; i < snake.len; i++){snake.x[i] = snake.x[i - 1];snake.y[i] = snake.y[i - 1] + 1;gotoxy(snake.x[i], snake.y[i]);printf("■");}//初始化食物的位置food.x = 20;food.y = 20;gotoxy(food.x, food.y);printf("○");
}/**控制台按键所代表的数字*“↑”:72*“↓”:80*“←”:75*“→”:77*/
void snake_move()       //按键处理函数
{int history_key = key;if (_kbhit()){fflush(stdin);key = _getch();key = _getch();}if (changeflag == 1)//还没吃到食物,把尾巴擦掉{gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf("  ");}for (int i = snake.len - 1; i > 0; i--){snake.x[i] = snake.x[i - 1];snake.y[i] = snake.y[i - 1];}if (history_key == 72 && key == 80)    key = 72;if (history_key == 80 && key == 72)    key = 80;if (history_key == 75 && key == 77)    key = 75;if (history_key == 77 && key == 75)    key = 77;switch (key){case 72:snake.y[0]--; break;case 75:snake.x[0] -= 2; break;case 77:snake.x[0] += 2; break;case 80:snake.y[0]++; break;}gotoxy(snake.x[0], snake.y[0]);printf("■");gotoxy(0, 0);changeflag = 1;
}
void creatfood()
{if (snake.x[0] == food.x && snake.y[0] == food.y)//只有蛇吃到食物,才能生成新食物{changeflag = 0;snake.len++;if (speed <= 100)speed += 10;while (1){srand((unsigned int)time(NULL));food.x = rand() % (width - 6) + 2;//限定食物的x范围不超出围墙,但不能保证food.x为偶数food.y = rand() % (hight - 2) + 1;for (int i = 0; i < snake.len; i++){if (food.x == snake.x[i] && food.y == snake.y[i])//如果产生的食物与蛇身重合则退出break;}if (food.x % 2 == 0)    break;//符合要求,退出循环}gotoxy(food.x, food.y);    printf("○");}
}bool Gameover()
{//碰到围墙,OVERif (snake.x[0] == 0 || snake.x[0] == width - 2)return false;if (snake.y[0] == 0 || snake.y[0] == hight - 1)  return false;//蛇身达到最长,被迫OVERif (snake.len == SNAKESIZE)              return false;//头碰到蛇身,OVERfor (int i = 1; i < snake.len; i++){if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i])return false;}return true;
}
int main()
{system("mode con cols=60 lines=27");drawmap();while (Gameover()){snake_move();creatfood();Sleep(350 - speed);//蛇的移动速度}return 0;
}

感谢阅读,如有不足之处,欢迎来指正。谢谢!

C语言小游戏——贪吃蛇相关推荐

  1. C语言小游戏————贪吃蛇.c

    1.主函数框架的搭建 int main (void) {starup();//数据初始化while(1){show();//打印画面updateWithoutInput();//与用户输入无关的更新u ...

  2. 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释

    系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...

  3. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  4. Python命令行小游戏—贪吃蛇

    Python命令行小游戏-贪吃蛇 前言 一.贪吃蛇游戏初始界面及地图 1.游戏初始界面 2.游戏地图 二.命令符的设置.输出刷新和按键检测 1.库支持 2.c语言代码 3.Python代码(变量初始化 ...

  5. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  6. 微信小游戏——贪吃蛇

    博客简介 本篇博客介绍的是微信小游戏贪吃蛇的案例,详细的开发过程,并且提供代码压缩包下载. 案例简介 布局 构建对象 响应事件 蛇头对象的移动 蛇身的移动 食物刷新 绘制得分 碰撞检验 开始界面和结束 ...

  7. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  8. 小游戏贪吃蛇的c++源代码

    小游戏贪吃蛇的c++源代码,快来看看,还带解释 #include #include #include #include #include <conio.h> #include #inclu ...

  9. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  10. 我的小游戏——贪吃蛇

    我的小游戏--贪吃蛇 简介 最近学习了Java的GUI编程写一个贪吃蛇的游戏来玩玩. 游戏主要涉及到Java的GUI编程和多线程等技术. 游戏一共有两种模式:窗墙模式和撞墙模式,默认是窗墙模式,选择不 ...

最新文章

  1. mysql 40101
  2. python在哪下载-2018版Python教程从哪儿下载
  3. Spark1.x和2.x如何读取和写入csv文件
  4. ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
  5. 【C++】C++11 新特性(auto,decltype,nullptr,快速遍历,【Lambda表达式详解】)
  6. js获取字符串出现最多的字符和次数
  7. 电压转换速率(Slew Rate,SR)
  8. c语言sqlist结构体,数据结构的一个题目,有什么问题吗?问什么一直显示Sqlist结构体没定义...
  9. CATIA软件基础操作及知识工程
  10. 迅雷下载提示:应版权方要求/包含违规内容, 文件无法下载
  11. h30-t10 android phone,荣耀3C移动2G版(H30-T10)官方完整版ROM全合集!!!
  12. 什么是依赖注入(DI)
  13. Android 插件化换肤方案
  14. Excel如何将一个单元格数据拆分为多行单元格
  15. 优秀网页设计:20个国外大学网站设计欣赏
  16. XSS(跨站脚本攻击)理论知识
  17. 让图片填满Word表格里的单元格
  18. 不同大小硬盘对拷oracle,大小不一样的硬盘怎么实现对拷?
  19. 577-冒泡排序算法的思想和性能分析
  20. 送20本纸质书籍,包邮

热门文章

  1. 饮冰三年-人工智能-Python-11之HelloWorld
  2. Android单元测试Junit的配置
  3. CROC 2016 - Elimination Round Mischievous Mess Makers
  4. Matlab中struct的用法
  5. input checkbox 选中问题
  6. EXTJS4:如何改变grid某一个单元格的背景颜色
  7. 数据挖掘:计算边的中介中心值 edge_betweenness value
  8. OpenCV2:Mat属性type,depth,step
  9. yaws mysql_MySQL入门之C语言操作MySQL
  10. C#调用matlab,matlab图形Figure嵌入Winform窗体