C语言贪吃蛇之BUG满天飞

C语言贪吃蛇之BUG满天飞

今天无意间翻到了大一用C语言写的贪吃蛇,竟然还标注着BUG满天飞,留存一下做个纪念,可能以后就找不到了

在这里插入图片描述

/*
此程序 -->
贪吃蛇3.0  Sur_流沐 当前版本: Bug满天飞 
*/
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<time.h>#define Wide 88//边框宽 
#define High 44//边框高 #define snack_HP 3//初始生命 #define snack_Length 3  //蛇的初始长度 
#define snack_Sleep 500  //蛇的移动速度 #define Bomb_snack_Length 6 //出现炸弹时的蛇长 
#define Bomb_num 0//初始炸弹个数 #define GoTo gotoxy(Wide+2,High+1)//将光标移至边框外 struct food{//食物 int x;int y;
}food;struct snack{//蛇 int x[100];int y[100];int sleep;//蛇移动速度 int length;//蛇长 int HP;//蛇的命数 int sum_score;//分数 
}snack;struct bomb{int x[500];int y[500];int num;//炸弹个数 
}bomb; int snack_x,snack_y; //保存蛇头位置的变量 // 用于蛇头位置的改变 int i , e , k , m ; // ‘i’多用于循环 //      ‘e’ 通常传递判断条件是否成立 //  'k 'm  用法类似 char ch = 'a';//初始化移动方向为向 左 void gotoxy(int x,int y);//坐标函数 void come();//初始化游戏 void menu();//封面 void rim();//边框void DarwSnack();//画蛇void DarwFood();//画食物void move();//移动蛇身坐标 void DarwSnack_move();//蛇移动 void eat();//吃食物 void score();//评分系统 void DarwBomb();//产生炸弹void Bomb_eat();//检查是否吃到炸弹 int main(){come();//初始化 return 0;} void gotoxy(int x,int y){ //坐标函数HANDLE handle = GetStdHandle (STD_OUTPUT_HANDLE);COORD  coord;coord.X = x;coord.Y = y;SetConsoleCursorPosition (handle,coord);
}void come(){//初始化 蛇 及 炸弹 信息 k = 500 , snack.sum_score = 0 , snack.HP = snack_HP;snack.length = snack_Length;//初始蛇长 snack.sleep = snack_Sleep;//初始蛇速度 snack.x[0] = Wide/2,snack.y[0] = High/2;//初始蛇头位置 for (i = 1;i<snack.length;i++)//使用循环初始化蛇身 {      snack.x[i] = snack.x[i-1]+2;//初始蛇身坐标 snack.y[i] = snack.y[i-1]; }bomb.num = Bomb_num ;//初始化炸弹个数 menu(); 
}void menu(){//封面 system("color 3E");system("mode con cols=140 lines=50");//改变窗口宽高 //  cols 宽  lines 高 gotoxy(6,3);printf("贪吃蛇3.0终极版!  ——Sur流沐");gotoxy(12,6);system("pause"); system("cls");rim();DarwSnack();//第一次调用‘画蛇函数’目的是初始化蛇 DarwFood();//第一次调用‘画食物函数’母的初始化食物 DarwSnack_move();//游戏开始 } void rim(){//边框 for (i = 0;i<=Wide;i+=2){gotoxy(i,0);printf("■");gotoxy(i,High);printf("■");}for (i = 0;i<=High;i++){gotoxy(0,i);printf("■");gotoxy(Wide,i);printf("■");}gotoxy(Wide+4,40);printf("按任意键暂停!!");gotoxy(Wide+4,30);printf("tip:当蛇长超过5时随机产生炸弹!");gotoxy(Wide+4,32);printf("吃到炸弹会扣除蛇长及分数哦!!"); gotoxy(Wide+4,34);printf("如果蛇长大于12,将无视炸弹带来的生命伤害");gotoxy(Wide+4,44);printf("BUG太多,不想修复了!!");gotoxy(Wide+30,2);printf("W-上");gotoxy(Wide+25,4);printf("A-左      D-右");gotoxy(Wide+30,6);printf("S-下");GoTo;//将光标移到框外 。见宏定义 
}void DarwFood(){//画食物 srand((int)time(NULL));for(i = 1;i!=0;){food.x = rand()%10*4 + rand()%10*4 ;food.y = rand()%10*2 + rand()%10*2 ;if((food.x != 0 && food.y != 0) && (food.x!=snack.x[0] && food.y !=snack.y[0]) && (food.x < Wide && food.y < High)){i=0;}}gotoxy(food.x,food.y);printf("◆");} void DarwSnack(){//画蛇gotoxy(snack.x[0],snack.y[0]);//光标移至蛇头位置 printf("◎");//打印蛇头 for (i = 1;i<snack.length;i++)//使用循环打印蛇身 {   	gotoxy(snack.x[i],snack.y[i]);//光标移至某段蛇身 printf("○");//打印蛇身 }}void move(){//移动蛇身坐标 gotoxy(snack.x[snack.length-1],snack.y[snack.length-1]);//光标移至蛇尾, printf(" ");//在蛇尾打印空格,使蛇有向前移动的状态之一 for (i = snack.length-1;i>0;i--)//依次改变蛇身的坐标 {snack.x[i] = snack.x[i-1];snack.y[i] = snack.y[i-1];}snack.x[0] = snack_x , snack.y[0] = snack_y;//将上次位置改变后的蛇头位置给蛇头///   即 变换后的蛇头的位置 DarwSnack();//画出蛇 score();Sleep(snack.sleep);if(snack.sleep!=snack_Sleep-450)snack.sleep-=5;} void DarwSnack_move(){//移动蛇 while(1){snack_x = snack.x[0] , snack_y = snack.y[0]; if(kbhit()){ //kbhit   检测键盘是否有输入,//有返回  //用ch接收输入 ch=getch();}switch(ch){case 'A':case 'a':snack_x-=2;  eat();if(e){snack.x[snack.length-1] = snack.x[snack.length-2] + 2;snack.y[snack.length-1] = snack.y[snack.length-2];}move();break;case 'W':case 'w':snack_y--;  eat();if(e){snack.x[snack.length-1] = snack.x[snack.length-2];snack.y[snack.length-1] = snack.y[snack.length-2] + 1;}move();break;case 'S':case 's':snack_y++;  eat();if(e){snack.x[snack.length-1] = snack.x[snack.length-2];snack.y[snack.length-1] = snack.y[snack.length-2] - 1;}move();break;case 'D':case 'd':snack_x+=2;  eat();if(e){snack.x[snack.length-1] = snack.x[snack.length-2] - 2;snack.y[snack.length-1] = snack.y[snack.length-2];}move();break;}					}}void eat(){//吃食物 Bomb_eat();//检查是否吃到了炸弹 e = 0; if(snack.x[0] == food.x && snack.y[0] == food.y)//如果吃到食物 {snack.length++;//蛇长增1 e = 1;snack.sum_score += 40 ;//分数增加 DarwFood();if(snack.length >= Bomb_snack_Length)//如果蛇长满足产生炸弹的条件 {DarwBomb();//产生炸弹 } }if(snack.x[0] == 0 || snack.y[0] == 0 || snack.x[0] == Wide || snack.y[0] == High || snack.HP == 0)//游戏结束条件 {system("cls");score();gotoxy(Wide/2,High/2);printf("你over了。。。。。。。\n\n\n\t\t\t");system("pause");system("cls");menu();}
}void score(){ //计分版及公告 gotoxy(Wide+4,2);printf("Sur_流沐__制作!");gotoxy(Wide+4,4);printf("贪吃蛇3.0终极版!");gotoxy(Wide+4,6);printf("速度范围0~%d",snack_Sleep-50);gotoxy(Wide+4,10);printf("当前分数:%d",snack.sum_score);gotoxy(Wide+4,12);printf("当前速度:%d",snack_Sleep-snack.sleep) ;gotoxy(Wide+4,14);printf("当前蛇长:%d",snack.length);gotoxy(Wide+4,16);printf("剩余炸弹:%d",500 - bomb.num);	gotoxy(Wide+4,18);printf("你还有%d条生命!",snack.HP); 
} void DarwBomb(){//产生炸弹 bomb.num ++ ;//炸弹个数增加 m = 1;srand((int)time(NULL));for(i = bomb.num -1; m!=0 ; )//随机产生炸弹 {for(m = 1;m!=0;){bomb.x[i] = rand()%10*4 + rand()%10*4 + rand()%10*2 ;bomb.y[i] = rand()%10*2 + rand()%10*2 ;if((bomb.x[i] != 0 && bomb.y[i] != 0) && (bomb.x[i] != snack.x[0] && bomb.y[i] !=snack.y[0]) && (bomb.x[i] < Wide && bomb.y[i] < High) && (bomb.x[i] != food.x)&&(bomb.y[i] != food.y)){m = 0;}}gotoxy(bomb.x[i],bomb.y[i]);printf("※");}}void Bomb_eat(){//吃到炸弹?????? for(i = 0 ; i < bomb.num ; i++){if(snack.x[0] == bomb.x[i] && snack.y[0] == bomb.y[i])//如果吃到炸弹 {snack.sum_score-=100 ;//分数减去100 if(snack.length <= 11)//如果蛇长过短 {snack.HP--;//扣除生命值 for( m = 0 ; m < bomb.num ; m++ )//扣除生命值的同时清除现存所有炸弹 {gotoxy(bomb.x[m],bomb.y[m]);printf(" ");bomb.x[m] = Wide + 1 ;bomb.x[m] = High + 1 ;//将炸弹坐标清除 }}//适于当蛇长大于11 //如果吃到炸弹 bomb.x[i] = Wide + 1 ;bomb.x[i] = High + 1 ;//将被吃到的炸弹坐标清除 k = snack.length - 1;snack.length-=5;	//蛇长减5 if(snack.length >= 1)//清除蛇尾 {for(m = k ; m > k - 5 ; m-- ){gotoxy(snack.x[m] , snack.y[m]);printf(" ");}}if(snack.length <= 1)//保持蛇长大于1 {snack.length = 1 ;snack.sleep += 100;if(snack.sleep <= 50)//控制蛇速范围 {snack.sleep = 20 ;}}}}} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【补充篇】AUTOSAR多核OS介绍(下)

文章目录 前文回顾1 AUTOSAR OS1.1 AUTSOAR OS元素1.1.1 操作系统对象1.1.2 操作系统应用程序1.1.3 AUTOSAR OS裁剪类型1.1.4 AUTOSAR OS软件分区1.2 AUTOSAR OS自旋锁1.3 AUTOSAR OS核间通信1.4 AUTOSAR OS多核调度前文回顾 在上篇文章【补充篇】AUTOSAR多核OS介绍(上)中,…

OpenMax算法详解:深度学习中的高效开集识别技术

OpenMax算法详解&#xff1a;深度学习中的高效开集识别技术 在深度学习领域&#xff0c;模型的识别能力往往受限于其训练数据集的范畴。传统的分类模型&#xff0c;如卷积神经网络&#xff08;CNN&#xff09;或循环神经网络&#xff08;RNN&#xff09;&#xff0c;通常被设计…

算法5:位运算

文章目录 小试牛刀进入正题 没写代码的题&#xff0c;其链接点开都是有代码的。开始前请思考下图&#xff1a; 小试牛刀 位1的个数 class Solution { public:int hammingWeight(int n) {int res 0;while (n) {n & n - 1;res;}return res;} };比特位计数 class Solution…

关于我的生信笔记开通《知识星球》

关于知识星球 1. 为什么到现在才开通《知识星球》 从很早关注我的同学应该了解小杜的知识分享历程&#xff0c;小杜是从2021年11月底开始进入此“坑”&#xff0c;一直坚持到现在&#xff0c;马上3年了&#xff08;24年11月底到期&#xff09;。自己也从一个小青年&#xff0…

查看U盘的具体信息,分区表格式、实际容量和分区状态

查看U盘的具体信息&#xff0c;分区表格式、实际容量和分区状态 前言&#xff1a; 利用windows自带的命令行窗口就可以 1、使用命令提示符查看MBR和GPT分区类型 &#xff08;1&#xff09;按“Windows R”键&#xff0c;在弹出的运行对话框中输入“diskpart”&#xff0c;并按…

redis面试(十九)读写锁ReadLock

读写锁ReadLock 简单来说就是互斥锁和非互斥锁。多个客户端可以同事加的锁叫读锁&#xff0c;只能有一个客户端加的锁叫写锁。这个理论应该是从数据库中来的&#xff0c;放在这里也是同样的解释。 多个客户端同时加读锁&#xff0c;是不会互斥的&#xff0c;多个客户端可以同…

YOLOv8_det/seg/pose/obb推理流程

本章将介绍目标检测、实例分割、关键点检测和旋转目标检测的推理原理,基于onnx模型推理,那么首先就需要了解onnx模型的输入和输出,对输入的图片需要进行预处理的操作,对输出的结果需要进行后处理的操作,这部分内容在我的另一个专栏《YOLOv8深度剖析》中也有介绍,如果对YO…

canal数据同步工具介绍与应用

canal服务 canal介绍canal版本与环境canal 服务集canal应用场景&#xff1a; canal常见问题xml配置问题连接认证问题jar版本问题连接问题 canal介绍 ‌1、Canal是‌阿里巴巴开源的‌MySQL增量数据订阅和消费工具&#xff0c;通过模拟MySQL的‌slave与‌master交互&#xff0c;捕…

一文搞懂微服务架构之降级

前置知识 比如双十一之类的大促高峰&#xff0c;平台是会关闭一些服务的&#xff0c;比如退款服务。这就是降级的典型应用&#xff0c;不过它是一种手动的跨服务降级&#xff0c;对于整个系统来说&#xff0c;提供了一部分服务&#xff0c;但是没有提供另外一部分服务&#xf…

InternLM2_PracticalCamp_L2_task3_LMDeploy量化部署进阶实践

1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 点选开发机&#xff0c;自拟一个开发机名称&#xff0c;选择Cuda12.2-conda镜像。 我们要运行参数量为7B的InternLM2.5&#xff0c;由InternLM2.5的码仓查询InternLM2.5-7b-chat的config.json文件可知&#xff0c;…

数据库多表设计:深入理解一对多、一对一、多对多关系 【后端 12】

数据库多表设计&#xff1a;深入理解一对多、一对一、多对多关系 在数据库设计中&#xff0c;表之间的关系决定了如何组织和存储数据。常见的表关系包括一对多、一对一和多对多。在不同的业务场景下&#xff0c;我们会选择不同的关系模式进行数据库设计。本文将通过具体案例介绍…

企业高性能web服务器

目录 一、web服务介绍 1.1 Web 服务访问流程 1.2 Web 服务器类型 1.3 Apache常用工作模式 1.3.1 Apache prefork 模型 1.3.2 Apache worker 模型 1.3.3 Apache event 模型 【补充】 子进程角色主要负责以下&#xff1a; 二、Nginx 架构和安装 2.1 Nginx 编译安装示例…

Maven的依赖范围

依赖的jar包&#xff0c;默认情况下&#xff0c;可以在任何地方使用&#xff0c;可以通过scope来设置作用范围 作用范围&#xff1a; 主程序范围有效&#xff08;main文件夹范围内&#xff09;测试程序范围有效&#xff08;test文件夹范围内&#xff09;是否参与打包运行&…

投资伦敦银一般看什么点位做单?

伦敦银的价格走势不断变化&#xff0c;无论投资者选择做多还是做空&#xff0c;进场的点位都不是一成不变的&#xff0c; 如果投资者想找到胜率比较高的进场点位&#xff0c;可以尝试在走势图中找出银价的支撑与压力位所在&#xff0c;然后在压力位附近布局空单&#xff0c;在…

fastadmin 安装

环境要求&#xff0c;大家可以参考官方文档的&#xff0c;我这里使用的是phpstudy&#xff0c;很多已经集成了。 注意一点&#xff0c;PHP 版本&#xff1a;PHP 7.4 。 第二步&#xff1a;下载 下载地址&#xff1a;https://www.fastadmin.net/download.html 进入下载地址后…

SpringBoot依赖之Spring Data Redis 实现地理坐标(Geospatial)

Spring Boot 项目中使用 Spring Data Redis 实现地理坐标(Geospatial) 概念 Spring Data Redis (AccessDriver) 依赖名称: Spring Data Redis (AccessDriver)功能描述: Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Sup…

如何制作统信UOS启动盘?

如何制作统信UOS启动盘&#xff1f; 一、下载UOS系统安装镜像二、在UOS系统环境下制作启动盘步骤一&#xff1a;准备U盘步骤二&#xff1a;打开启动盘制作工具步骤三&#xff1a;选择ISO镜像文件步骤四&#xff1a;选择安装介质并格式化步骤五&#xff1a;等待制作完成 三、在W…

Redis 技术详解

一、Redis 基础 &#xff08;一&#xff09;为什么使用 Redis 速度快&#xff0c;因为数据存在内存中&#xff0c;类似于 HashMap&#xff0c;查找和操作的时间复杂度都是 O(1)。支持丰富数据类型&#xff0c;支持 string、list、set、Zset、hash 等。支持事务&#xff0c;操…

AScript 的UI asui模板的导入

两种方案&#xff1a; 第一种直接在web端&#xff0c;右击UI文件夹 第二种在pycharm&#xff0c;也是右击UI文件夹 调用UI&#xff0c;在init类中直接调用即可

Transformer微调实战:通过低秩分解(LoRA)对T5模型进行微调(LoRA Fine Tune)

scient scient一个用python实现科学计算相关算法的包&#xff0c;包括自然语言、图像、神经网络、优化算法、机器学习、图计算等模块。 scient源码和编译安装包可以在Python package index获取。 The source code and binary installers for the latest released version ar…