游戏贪吃蛇计分c语言,C语言实现贪吃蛇游戏(命令行)

2023-11-16

这是一个纯C语言写的贪吃蛇游戏,供大家参考,具体内容如下

#include

#include

#include

#include

#include

#define SNAKE_LENGTH 100//定义蛇的最大长度

#define SCREEN_WIDETH 80

#define SCREEN_HEIGHT 30

//定义每一节蛇的坐标

struct coor{

int x;

int y;

};

//枚举方向

enum CH {

right = VK_RIGHT,

left = VK_LEFT,

up = VK_UP,

down = VK_DOWN

};

//定义蛇的属性

struct snake{

int len;//当前蛇的长度

struct coor coord[SNAKE_LENGTH];//每一节蛇的坐标

enum CH CH;//定义蛇的方向

int SPEED;

int flag;//定义蛇的状态 1表示存活 0表示死亡

}snake;

//光标移动函数

void gotoxy(int x, int y)

{

COORD pos;

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}

//初始化游戏界面

void init_sence()

{

//初始化上下墙

for (int i = 0; i < SCREEN_WIDETH; i += 2)

{

gotoxy(i,0);

printf("■");

gotoxy(i, SCREEN_HEIGHT);

printf("■");

}

//初始化左右墙

for (int i = 0; i <=SCREEN_HEIGHT; i++)

{

gotoxy(0, i);

printf("■");

gotoxy(SCREEN_WIDETH,i);

printf("■");

}

//打印提示信息

gotoxy(SCREEN_WIDETH + 5, 2);

printf("\t\t贪吃蛇");

gotoxy(SCREEN_WIDETH + 5, 6);

printf("2018//12//1");

gotoxy(SCREEN_WIDETH + 5, 8);

printf("作者:小豆芽");

gotoxy(SCREEN_WIDETH + 5, 10);

printf("F1:加速\tF2:减速");

gotoxy(SCREEN_WIDETH + 5, 12);

printf("CTRL:继续\t空格:暂停");

gotoxy(SCREEN_WIDETH + 5, 14);

printf("ESC:退出游戏");

gotoxy(SCREEN_WIDETH + 5, 28);

printf("建议:QQ:2862841130:::");

}

struct foodcoord {

int x;

int y;

int flag;//定义食物的状态

}food;

//**这是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("贪吃蛇");

//初始化蛇

begin:

snake.CH = VK_RIGHT;//初始化方向

snake.len = 5; //初始化长度

snake.SPEED = 300;//初始化蛇的移动速度

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)

{

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>=100)snake.SPEED -= 50;

}

else if (GetAsyncKeyState(VK_F2))

{

if (snake.SPEED <= 3000)snake.SPEED += 100;

}

//根据检测到的方向改变蛇头的位置

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("□");

}

//擦掉尾巴

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);

}

//产生食物

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

{

gotoxy(food.x, food.y);

printf("⊙");

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经典小游戏汇总

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游戏贪吃蛇计分c语言,C语言实现贪吃蛇游戏(命令行) 的相关文章

  • Building Mongodb with Visual Studio 2008

    Building Mongodb with Visual Studio 2008 标签 mongodbpythonjavascriptbuild数据库c 2011 08 27 14 43 938人阅读 评论 0 收藏 举报 分类 VS200
  • C++基础二:模板

    模板 模板的概念 模板就是建立通用的模具 大大提高复用性 例如生活中的模板 模板的特点 模板不可以直接使用 它只是一个框架 模板的通用并不是万能的 函数模板 C 另一种编程思想称为 泛型编程 主要利用的技术就是模板 C 提供两种模板机制 函
  • base64的原理及优缺点

    优点可以加密 减少了HTTTP请求 缺点是需要消耗CPU进行编解码
  • 机器学习总结(一)

    机器学习总结 一 一 基本概念 1 有监督学习 输入数据是带有标签的 称为有监督学习 2 无监督学习 输入数据是不带标签的 称为无监督学习 3 局部最优 函数值空间的一个有限区域内寻找最小值 这个最小值 是小于或等于附近点的函数值 但是有可
  • tinycore的探索

    tinycore的探索 缘起 tinycore的安装 tinycore的持久化 tinycore的初始设置 结语 参考博文 这篇文章会写一些我在学习tinycore的过程中的体会 感兴趣的同学可以了解一下 由于我也是刚开始学习 所以可能会不
  • 【Android】Android工具函数整理

    import android app Activity import android app ActivityManager import android app KeyguardManager import android content
  • TensorRT详细入门指南

    前言 大名鼎鼎的TensorRT有多牛逼就不多说了 因为确实很好用 作为在英伟达自家GPU上的推理库 这些年来一直被大力推广 更新也非常频繁 issue反馈也挺及时 社区的负责人员也很积极 简直不要太NICE 只是TensorRT的入门门槛
  • 比较器参数之Offset voltage(Vos)

    offset voltage 最关键的直流规格参数是输入失调电压 Vos 由于比较器的 Vos产生一个额外的直流电压与串联同相输入 它对比较器的输出阈值改变状态 让我们分析一个非反相具有三个不同 Vos 值的比较器电路更好地理解效果 请记住
  • paddle window10环境下使用conda安装

    话 一开始也是根据别人的文章 疯狂报错 我的建议是自己先根据文档进行搭建 pip 和 conda两种方式都进行了尝试 个人更推荐conda 使用pip好像会出现版本不兼容的问题 其次是会出现要大量手动pip install 的情况 cond
  • 使用coloc 进行 QTL 共定位Colocalization

    GWAS找到显著信号位点后 需要解释显著信号位点如何影响表型 常见的一个解释方法是共定位分析 主流的共定位分析包括 1 GWAS和eQTL共定位 2 GWAS和sQTL共定位 3 GWAS和meQTL共定位 4 GWAS和pQTL共定位 其
  • win7 系统安装图解教程

    链接 http www 360doc com content 10 0720 11 1495415 40258931 shtml
  • 【经典】SpringBoot thymeleaf模板引擎——WEB开发模板引擎

    模板引擎 可以使业务数据和用户界面分离 通过模板引擎自动生成一个HTML文档 简单的说可以理解为 分离数据和界面 简化网页开发 现在主流的模板引擎有Jsp Velocity Beetl Rocker Freemarker thymeleaf
  • ROS学习笔记16:机器人系统建模与仿真

    一 概述 1 机器人系统仿真 是通过计算机对实体机器人系统进行模拟的技术 在 ROS 中 仿真实现涉及的内容主要有三 对机器人建模 URDF 创建仿真环境 Gazebo 以及感知环境 Rviz 等系统性实现 1 仿真优势 低成本 高效 高安
  • Uncaught SyntaxError: Invalid shorthand property initializer at new Function () a

    data options valueField id textField name method get 将method get 等于改为冒号 或者都是一些其他的原因 比如单引号 忘了写逗号
  • Comate: 百度智能云的代码助手

    Comate是什么 Comate是百度智能云推出的一项革命性代码辅助工具 它基于文心大模型的强大理解和推理能力 旨在提高开发者的研发效率 这个全新的工具可以实现代码的快速补齐 自然语言推荐代码和自动查找代码错误等功能 为程序开发提供了全新的
  • vscode安装

    博客 https zhuanlan zhihu com p 106357123 https code visualstudio com download
  • [创业之路-47] :动态股权机制 -2- 多轮融资股权稀释后,大股东保留控制权的常见套路

    正常来说一个蒸蒸日上的公司或者被看好的公司 都要面临融资的问题 融资之后 股权就会发生比较大的变化 多轮融资之后呢 再次引进新的合伙人呢 那时候的股权肯定低于51 甚至低于34 这时候靠什么掌控公司 1 有限合伙平台模式GP VS LP 同
  • windows安装pm2

    pm2是开源的进程管理器 可用于管理您的nodejs项目等 前段时间看到同事使用到此工具 今日特地学习安装使用 安装流程如下 1 确保你电脑安装了npm 可以通过npm v命令查看 npm v 2 安装pm2 命令 npm install
  • 程序员代码打字练习题库

    创建一个新的txt文件 将本文内容全选 粘贴 保存 然后导入金山打字通 即可练习程序员常用词汇 推荐使用金山打字通 英文文章练习 自定义课程 导入txt文件 保存 接下来你就可以联系打字了 path class classpath publ

随机推荐

  • 绕过protected方法的调用(包级共享)

    A类在a包 package a import b B public class A protected void sys System out println A protected sys方法 public static void mai
  • [Activiti 资料]Activiti 画图工具(activiti-designer,actiBPM,activiti-app)

    1 eclipse eclipse的画流程工具 activiti designer 1 1 直接下载Eclipse 或者下载已经安装了activiti designer的eclipse 既然你下载到了 怎么也礼节性的感谢一下哈 链接 htt
  • ENVI入门系列教程---二、图像分析---13. 遥感动态监测

    every blog every motto God helps those who help themselves https blog csdn net weixin 39190382 type blog 0 前言 遥感变化检测就是从不
  • EasyExcel,让excel导入导出更加简单

    EasyExcel EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel github地址 https github com alibaba easyexcel JA
  • 数据降维算法

    文章目录 效果一览 文章概述 部分源码 参考资料 效果一览 文章概述 数据降维算法 Matlab 基于局部费歇尔判别 LFDA 的分类数据降维可视化 部分源码
  • OpenCV Android以及扩展模块opencv_contrib的编译

    OpenCV和OpenCV contrib模块4 5 x版本的编译 环境准备 Ubuntu 16 04 1 环境变量 export ANDROID HOME work android sdk export ANDROID NDK HOME
  • 【allegro 17.4软件操作保姆级教程一】软件操作环境设置

    个人主页 highman110 作者简介 一名硬件工程师 持续学习 不断记录 保持思考 输出干货内容 目录 1操作环境准备 1 1单位设置 1 2画布面积设置 1 3软件显示设置 1 4布局显示设置 1 5格点设置 1 6大十字光标设置 1
  • 什么场景应该用 MongoDB ?

    月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题 有近5000人关注了该话题讨论 这里就 MongoDB 的使用场景做个简单的总结 谈谈什么场景该用 MongoDB 很多人比较关心 MongoDB 的适
  • 华为OD机试(JAVA)真题 2023(汽水瓶\随机数\进制转换)

    系列文章目录 文章目录 系列文章目录 前言 一 1 汽水瓶 二 明明的随机数 前言 一 1 汽水瓶 某商店规定 三个空汽水瓶可以换一瓶汽水 允许向老板借空汽水瓶 但是必须要归还 小张手上有n个空汽水瓶 她想知道自己最多可以喝到多少瓶汽水 数
  • 运维岗位面试被问到的问题

    一 tcp ip 三次握手具体过程 二 静态路由动态路由里面有哪些协议 三 ip地址分类 四 iptabled 五 linu系统和windows系统的区别 六 linux软连接与硬链接的区别 七 Linux命令 八 如何将一个用户添加到某一
  • cocosCreator 之 ScrollView

    版本 3 4 0 参考 ScrollView组件 简介 ScrollView组件作为滚动容器来使用 它的实现通过ScrollBar组件来展示内容的位置和Mask组件显示指定区域 来保证有限的区域内显示更多的内容 它的构成部分 ScrollB
  • 史上功能最全的Java权限认证框架

    文章目录 Sa Token是什么 Sa Token 能做什么 代码示例 官网地址 sa token 使用示例 SpringBoot 环境 1 创建项目 2 设置jar包依赖 3 配置文件 4 启动类 5 运行 Sa Token是什么 sa
  • LeetCode 101:和你一起你轻松刷题(python版) 第 1 章 题目分类

    LeetCode 101 和你一起你轻松刷题 python版 注 作者 高畅 Chang Gao 原书为c 版本 解题思路清晰 知识点全面 是一本好书 翻译成python版本的解法可能未必是最优解法 由于本人是新手小白 算法实现是第一步 优
  • stm32+lwip(四):网页服务器测试

    ST官方有lwip的例程 下载地址如下 https www st com content st com en products embedded software mcus embedded software stm32 embedded
  • ubuntu 22.04 升级openssh9.4p1 ,openssl3.1.2,zlib1.2.13

    参考 https blog csdn net weixin 37534043 article details 120822689 https blog csdn net xujiamin0022016 article details 878
  • C++设计模式---组合模式

    文章目录 使用场景 组合模式的定义 安全组合模式 使用场景 组合模式和类与类之间的组合是不同的概念 组合模式主要用来处理树形结构的数据 如果要表达的数据不是树形结构 就不太适合组合模式 比如我们有一个目录结构 这个目录我们把它绘制成树形结构
  • python中sha1 md5等用法

    import hashlib sha1 hashlib sha1 sha1 update a encode utf 8 sha1 update b encode utf 8 sha1 update c encode utf 8 等同于 sh
  • Linux下more命令高级用法

    我们在 Linux 环境下工作时 每天肯定会跟各种各样的文本文件打交道 这些文件 有时候会非常长 无法在一屏的空间内显示完全 所以 在查看这种文件时 我们需要分页显示 这时 我们就可以使用 more 命令 more 命令基本用法 more
  • 上传文件至svn

    1 软件管理搜索下载tortoiseSVN 2 在D盘新建一个文件夹 重命名 最好与SVN上要上传的目录名字保持一致 自己取也可以 3 选中文件夹右键点击SVN checkout 弹出框标红的填写XXSVN上的地址 拉取远程仓库的文件 完成
  • 游戏贪吃蛇计分c语言,C语言实现贪吃蛇游戏(命令行)

    这是一个纯C语言写的贪吃蛇游戏 供大家参考 具体内容如下 include include include include include define SNAKE LENGTH 100 定义蛇的最大长度 define SCREEN WIDE