介绍:

比普通的贪吃蛇游戏增加了 蛇的加速的,蛇节数越多速度越大。
增加了柱子,随机出现在地图里,个数也随机
采用跳转打印方法,不会闪屏!不会闪屏!不会闪屏!
玩到后面会很刺激哦

代码:
/*1、数据设计2、模块化设计3、实现过程
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> //光标设计API
#include <time.h>    //食物随机
#include <conio.h>   //按键监控#define MAPWIDTH 60  //地图宽x
#define MAPHEIGHT 25 //地图高y
#define SNAKESIZE 100 //蛇的最大节数//数据设计
/
//          食物的结构体
struct
{//坐标定位int x;int y;
}food;//            蛇的结构体
struct
{//蛇每一节的坐标int x[SNAKESIZE];int y[SNAKESIZE];int len;  //蛇的长度int speed; //蛇的移动速度
}snake;//           柱子的结构体
struct
{int x[10];int y[10];int len;
}column;//全局变量
int key = 'w';      //初始化移动方向
int changefalg = 0; //蛇的变化标记
int score = 0;     //得分//模块化设计
/
//          1、绘制地图  ■  ⑨  ★
void drawMap(); void createFood(); void keyDown(); int snakeStatus(); void gotoxy(int, int);
void drawMap()
{srand((unsigned int)time(NULL));//1、圈地//1.1左右边框for (int i = 0; i <= MAPHEIGHT; i++){gotoxy(0, i);printf("★");gotoxy(MAPWIDTH, i);printf("★");}//1.2上下边框for (int i = 0; i <= MAPWIDTH; i += 2){gotoxy(i, 0);printf("★");gotoxy(i, MAPHEIGHT);printf("★");}//2、画蛇//2.1确定蛇的属性snake.len = 3;snake.speed = 330;//开始蛇头在屏幕中央snake.x[0] = MAPWIDTH / 2;snake.y[0] = MAPHEIGHT / 2;//2.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("■");}//3、画食物//3.1确定坐标int falg = 1;while (falg){falg = 0;food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;for (int i = 0; i < snake.len; i++){if (snake.x[i] == food.x&&snake.y[i] == food.y){falg = 1;}}if (food.x % 2 != 0){falg = 1;}}//3.2画出来即可gotoxy(food.x, food.y);printf("⑨");gotoxy(MAPWIDTH + 2, 0);printf("得分:%d", score);//4画柱子falg = 1;column.len = rand() % 6 + 5;while (falg){     falg = 0;for (int i = 0; i < column.len; i++){column.x[i] = rand() % (MAPWIDTH - 4) + 2;column.y[i] = rand() % (MAPHEIGHT - 2) + 1;if (column.x[i] == food.x&&column.y[i] == food.y){falg = 1;break;}for (int j = 0; j < snake.len; j++){if (column.x[i] == snake.x[j]&&column.y[i] == snake.y[j]){falg = 1;break;}}for (int j = i + 1; j < column.len; j++){if (column.x[i] == column.x[j] && column.y[i] == column.y[j]){falg = 1;break;}}if (column.x[i] % 2 != 0){falg = 1;break;}}if (falg == 0){for (int i = 0; i < column.len; i++){gotoxy(column.x[i], column.y[i]);printf("⑩");}}}
}//         2、刷新食物
void createFood()
{//蛇把食物吃了if (snake.x[0] == food.x&&snake.y[0] == food.y){srand((unsigned int)time(NULL));//产生的食物不能在蛇的身上,并且x轴坐标是偶数int falg = 1;while (falg){ falg = 0;food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;//不能刷新在蛇的身上for (int i = 0; i < snake.len; i++){if (snake.x[i] == food.x&&snake.y[i] == food.y){falg = 1;break;}}for (int i = 0; i < column.len; i++){if (column.x[i] == food.x&&column.y[i] == food.y){falg = 1;}}//x坐标必须为偶数if (food.x % 2 != 0){falg = 1;}}gotoxy(food.x, food.y);printf("⑨");snake.len++;changefalg = 1; //蛇的标记score++;gotoxy(MAPWIDTH + 2, 0);printf("得分:%d", score);}
}//         3、按键操作
void keyDown()
{//1、无按键的处理if (_kbhit()){//有按键接受fflush(stdin);int record = _getch();if (record == 'W' || record == 'w' || record == 'S' || record == 's' || record == 'A' || record == 'a' || record == 'D' || record == 'd'){if (key == 'w'&&record == 's' || key == 'w'&&record == 'S' || key == 'W'&&record == 's' || key == 'W'&&record == 'S'|| key == 's'&&record == 'w' || key == 's'&&record == 'W' || key == 'S'&&record == 'w' || key == 'S'&&record == 'W'|| key == 'a'&&record == 'd' || key == 'a'&&record == 'D' || key == 'A'&&record == 'd' || key == 'A'&&record == 'D'|| key == 'd'&&record == 'a' || key == 'd'&&record == 'A' || key == 'D'&&record == 'a' || key == 'D'&&record == 'A'){}else{key = record;}}}if (!changefalg){//擦除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];}//移动方向的处理switch (key){case'w':case'W':snake.y[0]--;break;case's':case'S':snake.y[0]++;break;case'a':case'A':snake.x[0] -= 2;break;case'd':case'D':snake.x[0] += 2;break;}gotoxy(snake.x[0], snake.y[0]);printf("■");changefalg = 0;gotoxy(MAPWIDTH + 10, 0);
}//         4、蛇的状态: 判断是否结束
int snakeStatus()
{if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH || snake.y[0] == 0 || snake.y[0] == MAPHEIGHT){return 0;}for (int i = 1; i < snake.len; i++){if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i]){return 0;}}for (int i = 0; i < column.len; i++){if (column.x[i] == snake.x[0] && column.y[i] == snake.y[0]){return 0;}}return 1;
}//         5、辅助函数: 光标移动
void gotoxy(int x,int y)
{//调用win32 API 去设置控制台的光标位置//1、找到控制台的这个窗口HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//2、光标的结构体COORD coord;//3、设置坐标coord.X = x;coord.Y = y;//4、同步到控制台Set(设置) Console(控制台) Cursor(光标) Position(的位置)SetConsoleCursorPosition(handle, coord);
}int main()
{gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);printf("贪吃蛇游戏1.2版\n\n\t\t     ★:墙   ■:蛇   ⑨:食物   ⑩:柱子\n\n\t    ");printf("1.2版特性:  新增蛇的加速度,节数越多速度越大 更改随机墙壁数为(5-10)\n\t    ");printf("1.1版特性:  新增每次游戏随机墙壁数(1—5)\n\t    ");printf("1.0版特性:  宽30高25的地图 蛇最大节数100 \n\t\t\t      ");system("pause"); // 暂停system("cls"); // 清屏drawMap();int over = 1;int speed = snake.speed;while (over){keyDown();if (snake.speed - snake.len * 10 > 50) // 蛇的速度{speed = snake.speed - snake.len * 10;}Sleep(speed);createFood();over = snakeStatus();}system("cls");gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);printf("GameOver");system("pause");return 0;
}

c语言控制台游戏 贪吃蛇魔改版相关推荐

  1. java 贪吃蛇 控制台_控制台游戏贪吃蛇Java版

    无心间看到的一个贪吃蛇的控制台小游戏,起初只是想copy下来玩玩,没想里面有不少小问题,就顺手解决,固然仍是不完美,可是也勉强能玩了.java import java.util.LinkedList; ...

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

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

  3. C语言制作游戏——贪吃蛇

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:rfhklwt@163.com] 成品图 游戏模块组成 开拓疆土--绘制游戏窗口 上帝造蛇和食物--初始化蛇和食物 自动裁判员--菜单信息 ...

  4. 【C语言项目】贪吃蛇游戏(上)

    00. 目录 文章目录 00. 目录 01. 开发背景 02. 功能介绍 03. 欢迎界面设计 3.1 常用终端控制函数 3.2 设置文本颜色函数 3.3 设置光标位置函数 3.4 绘制字符画(蛇) ...

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

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

  6. 游戏贪吃蛇(c语言)

    游戏贪吃蛇(c语言) 一.项目背景 二.设计目的 三.项目功能需求 1.初始化游戏 2.控制蛇的运行轨迹 3.控制蛇的长度 4.控制食物生成 5.计算分数 6.结束条件 四.系统的功能结构图 五.总体 ...

  7. C 语言实现经典贪吃蛇游戏

    原文链接:C语言 贪吃蛇游戏 文章目录 一.说明 二.效果 2.1 欢迎界面 2.2 游戏规则 2.3 得分排行 2.4 退出游戏 2.5 游戏界面 2.6 游戏结束 三.源码 3.1 cmd.h 3 ...

  8. c语言贪吃蛇打包到桌面,C语言实现桌面贪吃蛇小游戏

    本篇写的是桌面贪吃蛇小游戏,大家自己看吧,感谢大家的支持,谢谢!O(∩_∩)O~~ #define _CRT_SECURE_NO_WARNINGS #include #include #include ...

  9. 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏

    c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...

  10. 好玩的c语言编程游戏,C语言写个贪吃蛇游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言写个贪吃蛇游戏 贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面 ...

最新文章

  1. 我用1台笔记本模拟黑洞引力波,和超算2个月得出的结果只差1%
  2. 第一个Servlet和Jsp
  3. 2019cvpr oral | 实时自适应立体匹配
  4. linux 内存不足时候 应该及时回收page cache
  5. 自动化测试pythontest_自动化测试教程-Pytest的基本应用
  6. Merge into 用法
  7. 【NOIP2013模拟9.29】Mixing Chemicals
  8. Tinux 3.0 内存对齐算法
  9. ROS导航之参数配置和自适应蒙特卡罗定位
  10. redis优化查询的两种方式
  11. Axure+SVN——实现多人团队开发
  12. Rust笔记1 rust基本概念
  13. FPGA内部资源总结
  14. 我的世界java版盔甲架_我的世界盔甲架指令 手机版盔甲架指令
  15. 离散数学经典教材及资料(整理)
  16. 解决U盘写保护,成功擦除
  17. ZEMAX光学设计实践
  18. SQL 求同比 环比
  19. MPU和MCU的区别
  20. 使用DuckDuckGo在命令行中搜索

热门文章

  1. PMSM矢量控制笔记(1.3)——直流电机的旋转原理
  2. 江苏科技大学计算机科学与技术,江苏科技大学计算机科学与技术专业2016年在江苏理科高考录取最低分数线...
  3. 小飞鱼 OA工作流定制设计开发(图文)
  4. Markdown Syntax
  5. sqli-labs-master sql注入靶场(10、11、12)
  6. Mysql的使用记录
  7. TGRS2023/遥感/目标检测:CoF-Net: A Progressive Coarse-to-Fine Framework for Object Detection
  8. android bootload漏洞,利用漏洞解锁锤子T1/2手机的bootloader
  9. vue手写动画效果和animate库的使用
  10. 鼓风机轴承高温润滑脂