/*忘记了在那里找到的,希望原作者大度😄,不和我这个菜鸟计较*/
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>//windows编程头文件
#include <time.h>
#include <conio.h>//控制台输入输出头文件
/******************************************************/
#define SNAKESIZE 100//蛇的身体最大节数
#define MAPWIDTH 30 //宽度
#define MAPHEIGHT 30//高度
/******************************************************/
//绘制游戏边框
void drawMap();
//随机生成食物
void createFood();
//按键操作
void keyDown();
//蛇的状态
bool snakeStatus();
//从控制台移动光标
void gotoxy(int x, int y);
/******************************************************/
int key = 72;//表示蛇移动的方向,72为按下“↑”所代表的数字
//用来判断蛇是否吃掉了食物,这一步很重要,涉及到是否会有蛇身移动的效果以及蛇身增长的效果
int changeFlag = 0;
int sorce = 0;//记录玩家的得分
/*****************************************************/
//食物的坐标
struct {
int x;
int y;
}food;
//蛇的相关属性
struct {
int speed;//蛇移动的速度
int len;//蛇的长度
int x[SNAKESIZE];//组成蛇身的每一个小方块中x的坐标
int y[SNAKESIZE];//组成蛇身的每一个小方块中y的坐标
}snake;
//将光标移动到控制台的(x,y)坐标点处
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void drawMap()
{
//打印上下边框
for (int i = 0; i <= MAPWIDTH; i += 2)//i+=2是因为横向占用的是两个位置
{
//将光标移动依次到(i,0)处打印上边框
gotoxy(i, 0);
printf("■");
//将光标移动依次到(i,MAPHEIGHT)处打印下边框
gotoxy(i, MAPHEIGHT);
printf("■");
}
//打印左右边框
for (int i = 1; i < MAPHEIGHT; i++)
{
//将光标移动依次到(0,i)处打印左边框
gotoxy(0, i);
printf("■");
//将光标移动依次到(MAPWIDTH, i)处打印左边框
gotoxy(MAPWIDTH, i);
printf("■");
}
//随机生成初试食物
while (1)
{
srand((unsigned int)time(NULL));
food.x = rand() % (MAPWIDTH - 4) + 2;
food.y = rand() % (MAPHEIGHT - 2) + 1;
//生成的食物横坐标的奇偶必须和初试时蛇头所在坐标的奇偶一致,因为一个字符占两个字节位置,若不一致
//会导致吃食物的时候只吃到一半
if (food.x % 2 == 0)
break;
}
//将光标移到食物的坐标处打印食物
gotoxy(food.x, food.y);
printf("");
//初始化蛇的属性
snake.len = 3;
snake.speed = 200;
//在屏幕中间生成蛇头
snake.x[0] = MAPWIDTH / 2 + 1;//x坐标为偶数
snake.y[0] = MAPHEIGHT / 2;
//打印蛇头
gotoxy(snake.x[0], snake.y[0]);
printf("■");
//生成初试的蛇身
for (int i = 1; i < snake.len; i++)
{
//蛇身的打印,纵坐标不变,横坐标为上一节蛇身的坐标值+2
snake.x[i] = snake.x[i - 1] + 2;
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
printf("■");
}
//打印完蛇身后将光标移到屏幕最上方,避免光标在蛇身处一直闪烁
gotoxy(MAPWIDTH - 2, 0);
return;
}
void keyDown()
{
int pre_key = key;//记录前一个按键的方向
if (_kbhit())//如果用户按下了键盘中的某个键
{
fflush(stdin);//清空缓冲区的字符
//getch()读取方向键的时候,会返回两次,第一次调用返回0或者224,第二次调用返回的才是实际值
key = _getch();//第一次调用返回的不是实际值
key = _getch();//第二次调用返回实际值
}
/*
*蛇移动时候先擦去蛇尾的一节
*changeFlag为0表明此时没有吃到食物,因此每走一步就要擦除掉蛇尾,以此营造一个移动的效果
*为1表明吃到了食物,就不需要擦除蛇尾,以此营造一个蛇身增长的效果
*/
if (changeFlag == 0)
{
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 (pre_key == 72 && key == 80)
key = 72;
if (pre_key == 80 && key == 72)
key = 80;
if (pre_key == 75 && key == 77)
key = 75;
if (pre_key == 77 && key == 75)
key = 77;
/**
*控制台按键所代表的数字
*“↑”:72
*“↓”:80
*“←”:75
*“→”:77
*/
//判断蛇头应该往哪个方向移动
switch (key)
{
case 75:
snake.x[0] -= 2;//往左
break;
case 77:
snake.x[0] += 2;//往右
break;
case 72:
snake.y[0]--;//往上
break;
case 80:
snake.y[0]++;//往下
break;
}
//打印出蛇头
gotoxy(snake.x[0], snake.y[0]);
printf("■");
gotoxy(MAPWIDTH - 2, 0);
//由于目前没有吃到食物,changFlag值为0
changeFlag = 0;
return;
}
void createFood()
{
if (snake.x[0] == food.x && snake.y[0] == food.y)//蛇头碰到食物
{
//蛇头碰到食物即为要吃掉这个食物了,因此需要再次生成一个食物
while (1)
{
int flag = 1;
srand((unsigned int)time(NULL));
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)
{
flag = 0;
break;
}
}
//随机生成的食物不能横坐标为奇数,也不能在蛇身,否则重新生成
if (flag && food.x % 2 == 0)
break;
}
//绘制食物
gotoxy(food.x, food.y);
printf("");
snake.len++;//吃到食物,蛇身长度加1
sorce += 10;//每个食物得10分
snake.speed -= 5;//随着吃的食物越来越多,速度会越来越快
changeFlag = 1;//很重要,因为吃到了食物,就不用再擦除蛇尾的那一节,以此来造成蛇身体增长的效果
}
return;
}
bool snakeStatus()
{
//蛇头碰到上下边界,游戏结束
if (snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)
return false;
//蛇头碰到左右边界,游戏结束
if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH)
return false;
//蛇头碰到蛇身,游戏结束
for (int i = 1; i < snake.len; i++)
{
if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])
return false;
}
return true;
}
int main()
{
drawMap();
while (1)
{
keyDown();
if (!snakeStatus())
break;
createFood();
Sleep(snake.speed);
}
gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);
printf("Game Over!\n");
gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 + 1);
printf("本次游戏得分为:%d\n", sorce);
Sleep(5000);
return 0;
}
相关推荐
VC++6.0游戏源代码
用VC++6.0做的一款俄罗斯方块游戏,不管是自己解闷还是学习都是很好的一个实例
VC6.0 MFC 单文档 贪吃蛇游戏 基础入门
贪吃蛇游戏 一、整体思路 1、贪吃蛇对大家来说并不陌生,既然要设计贪吃蛇,那么我们首先要定义蛇和食物这样两个对象,并给它们添加一些成员变量。 2、添加虚函数OnInitialUpdate()做一些初始化工作。 3、添加消息响应句柄WM_KEYDOWN实现蛇的运动。 4、添加WM_TIMER消息,最重要最核心的就是如何在OnTimer里去实现。 5、判断蛇撞屏幕边界以及撞自身,吃了食物后蛇如何变长等等,是我们设计的难点。 那么接下来,我们一起去探索吧! 二、实现步骤(前期) 1、新建一个MFC单文档应用程序,
flowable工作流源码解析-DB访问
Flowable用了mybatis组件,又实现了自己的command和interceptor机制。具体是怎么实现的呢? 我们以Deployment操作为例,来看看它的调用链 调用端是Service接口, 它委托自己的commandExecutor去执行具体的Command. Command最终会调用到EntityManager,然后委托给ibatis的sqlsession来完成操作。 其中CommandExcutor调用command的地方有些复杂,我们展开看: CommandExecutor会维护一系
C语言小游戏(flappy bird),附带源码及素材
课程设计—用C语言编码一个小游戏(flappy bird)前言一、系统简介二、函数模块图三、具体代码头文件 前言 完成该程序需要用到easy-x库数据,建议用vc6或vs2013版本以上等支持安装easy-x库的软件 一、系统简介 该游戏名为FLIP 滑稽,改自flappy bird。游戏实现了按空格键跳跃,越过障碍无得分,触碰障碍物边界或游戏窗口上下边界游戏结束的功能。其中图片、音效、文件写入...
kaggle——销量预测的baseline(M5 Forecasting - Accuracy)
前言 在刚刚结束的kaggle比赛M5 Forecasting - Accuracy中,因为是第一次参加,笔者也是花了大量的时间和精力在上面,最终拿到一块银牌(所以我拿到了大学第一个考试挂科。。。求求电磁场老师高抬贵手给点平时分放我一马吧。。。早上看到kaggle成绩异常兴奋,中午考完直接爆炸=。=),当然运气占了很大因素,这次比赛private leadboard的shake up非常大,排名波动几千名都存在的。笔者运气不错,是向上的shake:)。这里总结一下销量预测的基本流程。 从下图可以看到这次比
Zabbix 简介、优缺点、基础原理
(8条消息) Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型 --------------------------------------------------------------------------------------------------------------------------- 一、Zabbix 简介 Zabbix是由A...
c语言贪吃蛇添加排行榜,用C语言写贪吃蛇笔记-1
贪吃蛇设计思想要求:1.学完C语言大部分基础知识2.能坚持看完本文3.本文发布的只是思想,详细代码请关注本博客下一篇文章(要等博主自己写完哦)目的:1.学了一年C语言,也是博主对自己的一次考验吧2.激发广大网友对编程的兴趣(能帮到大家是我的荣幸)3.增加网站收录量,提升网站排名程序功能介绍贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘...
机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践
在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾
【笔记】用vs2017 c语言写 贪吃蛇 小游戏
c语言,vs2017,贪吃蛇
Zemax单模光纤耦合仿真避坑指南:数值孔径、模式匹配与镀膜影响详解
本文详细解析了Zemax单模光纤耦合仿真中的关键避坑要点,包括数值孔径的多重定义与换算、模式匹配度评估及镀膜影响分析。通过实际案例和技术公式,帮助工程师避免常见仿真误差,提升激光通信和光纤传感系统的设计精度。特别针对OpticStudio用户提供了实用的参数设置建议和优化策略。
【MicroPython编程-ESP32篇:设备驱动】-BNO08X系列传感器驱动
BNO08X 系列(BNO085/BNO086)是一款系统级封装 (SiP),集成了三轴加速度计、三轴陀螺仪、磁力计以及运行 CEVA SH-2 固件的 32 位 ARM® Cortex™-M0+ 微控制器。SH-2 包含 MotionEngine™ 软件,该软件提供复杂的信号处理算法来处理传感器数据,并提供精确的实时 3D 姿态、航向、校准加速度和校准角速度,以及更高级的上下文输出。BNO08X 集成在一个 28 引脚 LGA 封装中,尺寸为 3.8mm x 5.2mm x 1.1mm。它兼容 Andro
贪吃蛇c语言实验报告,用C语言写贪吃蛇笔记-2
接着上篇文章写首先分析一下贪吃蛇游戏中的元素,继而得出与它们对应的在程序中的描述:蛇:基本描述:长度,颜色,位置。对应数据与数据类型:长度—虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位—节数,以固定长度的每节描述;坐标 -- 整型;颜色 -- 整型; 位置-- X,Y坐标。增加的描述:蛇运动的方向,蛇的生命。对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏...
【异常】XXL-JOB提示异常ERROR com.xxl.job.core.util.XxlJobRemotingUtil - connect timed out
打开XXL-JOB的ELK,发现一堆报错。
用C语言实现经典贪吃蛇游戏的开发笔记
这个经典贪吃蛇实现涵盖了游戏开发的基础要素,包括界面渲染、用户输入、碰撞检测等。通过这个项目可以深入理解游戏循环机制和状态管理。后续可以扩展多人对战、特殊道具、关卡设计等进阶功能。在InsCode(快马)平台上,我们可以直接运行这个贪吃蛇游戏,无需配置复杂环境。平台提供完整的代码编辑器和实时预览功能,修改参数后立即看到效果变化,非常适合快速验证游戏逻辑。
国科大作业考试资料-人工智能原理与算法-2024新编-第十一次作业整理
1、有一位教授想知道学生是否睡眠充足。每天,教授观察学生在课堂 上是否睡觉,并观察他们是否有红眼。教授获得如下的领域知识: (1)没有观察数据时,学生睡眠充足的先验概率为0.7。 (2)给定学生前一天睡眠充足为条件,学生在晚上睡眠充足的概率是0.8;如果前一天睡眠不充足,则是0.3。 (3)如果学生睡眠充足,则红眼的概率是0.2,否则是0.7。 (4)如果学生睡眠充足,则在课堂上睡觉的概率是0.1,否则是0.3。 将这些信息形式化为一个动态贝叶斯网络,使教授可以使用这个网络从观察序列中进行滤波和预
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
c语言贪吃蛇代码_C/C++学习笔记丨用C++语言编写贪吃蛇!
游戏描述如下:1. 贪吃蛇可以自动直线前进,或者玩家可以通过方向键操纵贪吃蛇上下左右前进,每次前进一格。2. 贪吃蛇在规定的区域内活动,当: ①贪吃蛇触碰到墙壁时; ②贪吃蛇的蛇头触碰到蛇身或者蛇尾时; ③玩家的键盘输入不是方向键时; 命令行显示“Game Over!”并且退出游戏。3. 贪吃蛇活动的区域内每次随机产生一颗“豆豆”,当贪吃蛇吃到“豆豆”后蛇身增长一格,自动前进时间缩...
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
C语言实现经典贪吃蛇游戏开发笔记
控制台特性利用:Windows环境下需要包含和,注意跨平台兼容性问题输入处理技巧getch()实现无回显输入需处理回车(13)、退格(\b)等特殊按键性能优化方向可改用链表结构动态扩展蛇身引入双缓冲技术减少闪烁添加游戏难度递增机制平台体验建议:在InsCode(快马)平台测试时,可以直接看到实时运行效果。实际使用中发现其控制台模拟器能完美支持gotoxy等Windows API调用,一键部署后通过网页就能玩到自己写的贪吃蛇,特别适合快速验证游戏逻辑。
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
C语言贪吃蛇初学笔记
1.1.1构造小蛇 首先建立边框,利用二维函数组canvas[High][width]对应的元素,值为0输出空格,值为一1输出边框符号#,值为1输出蛇头@,值为1的输出蛇身*。 在startp()函数中初始化蛇头在画布的中间位置(canvas[ Higb/2] int ivji[Width/2]=1; 蛇头向左依次生成4个蛇身(for(i=1;i<-4;i++)canvas[High/2][Width/2-i]=i+1;),元素值分别为2、3、4、5。 代码开头引用 #include<
【贪吃蛇】C语言笔记(鹏哥)上课板书+课件汇总
使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇。实现基本的功能:贪吃蛇地图绘制、蛇吃⻝物的功能(上、下、左、右⽅向键控制蛇的动作)、蛇撞墙死亡、蛇撞⾃⾝死亡、计算得分、蛇⾝加速、减速、暂停游戏。技术要点: C语⾔函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32API等。项⽬适合:C语⾔学完的同学,有⼀定的代码能⼒,初步接触数据结构中的链表。
C语言学习笔记(7)——C总结与贪吃蛇小游戏实现
C语言学习笔记(7)——C总结与图形化贪吃蛇小游戏实现知识点总结:贪吃蛇小游戏: 知识点总结: 内存管理: 最小单位:bit 最小管理单位:byte main函数开始,一条一条语句从上往下执行 进制转换:数据本身就是数,不同进制只是表现形式不同 数据类型:int char float double unsigned signed short long 数据占内存段大小 数据存储方...
贪吃蛇c语言自动寻路,C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!...
前几天有个同学加我QQ私聊我说他们老师布置了一个贪吃蛇,他不知道怎么写所以来找我求解,我给他简单讲解了思路和一些难点之后他也能够自己独立将项目完成了!考虑到更多同学可能有贪吃蛇上的问题,今天有时间就来写一下题解。我将分几步来教大家写一个贪吃蛇小游戏。由于大家可能C语言未学完,这个教程只涉及数组和函数等知识点。一、画地图首先我们使用宏定义来定义两个常数,地图的高(H)和地图的宽(W)#defineH...
贪吃蛇统计分数的c语言代码,C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!...
接上文《C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!》如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三、蛇的运动上次我已经教大家画出蛇了,现在我就教大家让蛇动起来。为了让大家更好理解,蛇的移动就用最简单的办法,这里就不用链表,顺序队列什么的了。蛇的移动就是头往前移动,然后后面的身体移动到前一节身体原来的位置上。就像这样: 那蛇头怎么办呢?为了...
【C语言学习笔记】终端下贪吃蛇游戏
一直渴望写一个自己的贪吃蛇游戏,看完国外友人的代码后发现,自己的能力还是不足以“手写”出这样一个属于自己的程序。这段代码存在github上已经3周了,尽管我想等自己完全能够手写出自己的程序,但却还是不想把这篇早该完成的博客留在明年。 整个程序如下: #include #include #include #include struct Snack { int x[100
c语言贪吃蛇自动寻路代码,C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!...
C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!接上文《C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!》如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧!那蛇头怎么办呢?为了确定蛇头的位置,我们定义一个变量原来存储蛇现在的方向。intdirection; //蛇的方向我们可以通过direction的值来标记现在蛇的方向。比如0代...
c++贪吃蛇_C/C++编程笔记:C语言链表实现贪吃蛇游戏,项目源码分享
本文是阅读学习了一些其他的贪吃蛇源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读。程序可在VS2013下编译运行。源码如下:#include以上就是本文的全部内容,希望对大家的学习有所帮助!自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!文章福利C语言C++编程学习:点击领取C/C++编程学习资料jq.qq.com微信公众号:C语言编程学习...
C/C++编程笔记:C语言链表实现贪吃蛇游戏,项目源码分享
本文是阅读学习了一些其他的贪吃蛇源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读。 程序可在VS2013下编译运行。 源码如下: #include<stdio.h> #include<time.h> #include<windows.h> #include<stdlib.h> #define U 1 #define D 2 #define L 3 #define R 4 //蛇的状态,U:上
6481



被折叠的 条评论
为什么被折叠?



