当前位置: 首页 > news >正文

C++小游戏贪吃蛇源码

graphics.h是针对DOS下的一个C语言图形库 (c++也可以)

目前支持下载此头文件的常用的有两种:

    1. EGE (Easy Graphics Engine)2. EasyX Graphics Library

EGE, 全名Easy Graphics Engine, 是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库

EasyX, 全名EasyX Graphics Library, 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中

我建议Visual Studio用EasyX, Dev-C++可以用EGE

解决的方法:去 EasyX官网 下载EasyX的exe程序,点击后直接对自己使用的VC版本进行安装就行了,很简单。.

在这里插入图片描述

Graphics.h常用用法:

    1.initgraph(width, height)和closegraph()initgraph可以创建一个宽度为width, 高度为height的图形界面窗口运行结束后可以通过closegraph来关闭窗口 注, closegraph之前记得用getch()函数来接收用户输入, 防止程序刚绘画玩就关闭窗口了2.line(x1,y1,x2,y2)从x1,y1坐标画一条直线到x2,y2坐标3.setcolor和RGBsetcolor()可以把line画出来的直线变成另外一种颜色RGB可以返回setcolor的自定义参数RGB(r,g,b)可以修改不同浓度的红, 绿, 蓝EX:setcolor(RGB(200,0,0))可以将line画出来的直线变成红色4.circle(x,y,radius)在x,y坐标点画一个半径为radius的圆EX:circle(200, 200, 100);5.setfillcolor, bar(x1,y1,x2,y2)bar函数可以画出一个矩形范围为:x坐标从50-300,y坐标从100-200setfillcolor()可以改变Bar的填充颜色值,参数也是RGB()函数的自定义颜色6.fillellipse(x,y,xr,yr);画一个在x, y坐标点的实心椭圆x轴上的半径为xry轴上的半径为yr注:setfillcolor也可以改变其填充颜色值7.setfontbkcolor(), setfont(12, 0, "宋体")setfontcolor可以修改创建的文字的背景颜色值setfont(12,0,"宋体")的第一个参数是字体的高度第二个参数是字体的宽度, 如果填0, 那就会使用默认比例值第三个参数是设置文字的字体样式8.outtextxy(x, y, 字符串);这个函数可以在坐标x,y坐标点输出字符串注:字符串也可以是中文EX:outtextxy(100, 150, "中文也是支持的");

小游戏运行效果图:

在这里插入图片描述

贪吃蛇游戏源代码:

// 贪吃蛇小游戏.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <graphics.h>
#include <Windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include "io.h"#define S_LEN	400	//蛇的最大节数 
#define S_SPEED 200	//蛇的速度
#define S_SIZE	20	//蛇的大小//全局变量
int score = 0;typedef enum Direction
{up = 72,down = 80,left = 75,right = 77
};					//蛇的方向//坐标结构体
struct Coordinate
{int x;int y;
};//蛇的结构体 
struct Snake
{Coordinate sCo[S_LEN];	//每一节蛇的坐标int num;				//蛇的节数Direction direction;	//蛇的方向
}snake;//食物的结构体
struct Food
{Coordinate fCo;int flag;				//食物是否被吃
}food;//函数声明
void InitSnake();			//初始化蛇
void Snake_Food();			//食物坐标
void Snake_Food_Paint();	//画食物
void Snake_Paint();			//画蛇
void Snake_Move();			//蛇移动
void Snake_Change();		//方向性移动
void Snake_Eat();			//食物是否被吃 
void Snake_Break();			//判断是否撞自己
void Game_Over();			//结束游戏int main(int argc, char *argv[])
{InitSnake();while (true){while (!_kbhit()){settextcolor(RED);score = (snake.num - 2) * 100;char s[5];sprintf(s, "%d", score);outtextxy(500, 60, s);if (food.flag == 0){Snake_Food();}Snake_Food_Paint();Snake_Break();Snake_Eat();Snake_Move();Sleep(S_SPEED);}Snake_Change();}return 0;
}//初始化蛇
void InitSnake()
{//初始化图形界面initgraph(640, 480);setbkcolor(RGB(168, 168, 168));cleardevice();settextcolor(RED);settextstyle(32, 0, "黑体");outtextxy(510, 20, "贪吃蛇");settextcolor(BLACK);settextstyle(16, 0, "宋体");outtextxy(495, 100, "分数:");outtextxy(500, 400, "By:逃逸的卡路里");setcolor(RGB(46, 85, 6));setfillcolor(RGB(46, 85, 6));fillrectangle(0, 0, 480, 480);setcolor(RGB(199, 177, 163));setfillcolor(RGB(199, 177, 163));fillrectangle(40, 40, 440, 440);setcolor(RGB(102, 86, 0));for (int i = 0; i < 5; i++){rectangle(39 - i, 39 - i, 441 + i, 441 + i);}setcolor(RGB(168, 147, 130));for (int i = 60; i < 440; i += 20){line(i, 40, i, 440);line(40, i, 440, i);}setorigin(40, 40);setcolor(RGB(56, 89, 0));setfillcolor(RGB(91, 193, 45));fillcircle(10, 10, 9);		//第一节蛇setfillcolor(WHITE);fillcircle(8, 5, 2);fillcircle(8, 15, 2);food.flag = 0;			//食物被吃//蛇坐标初始化snake.sCo[0].x = 0 + S_SIZE;snake.sCo[0].y = 0;snake.sCo[1].x = 0;snake.sCo[0].y = 0;snake.num = 2;snake.direction = right;
}//食物坐标			
void Snake_Food()
{int i;srand((unsigned)time(NULL));while (true){int num = 0;food.fCo.x = rand() % (400 / S_SIZE)*S_SIZE;food.fCo.y = rand() % (400 / S_SIZE)*S_SIZE;for (i = 0; i < snake.num; i++){if (snake.sCo[i].x == food.fCo.x&&snake.sCo[i].y == food.fCo.y){num++;}}if (num == 0){break;}}food.flag = 1;
}//画食物
void Snake_Food_Paint()
{setcolor(RED);setfillcolor(RED);fillcircle(food.fCo.x + 10, food.fCo.y + 10, 8);
}//画蛇
void Snake_Paint()
{for (int i = snake.num - 1; i >= 0; i--){setcolor(RGB(56, 89, 0));setfillcolor(RGB(91, 193, 45));fillcircle(snake.sCo[i].x + 10, snake.sCo[i].y + 10, 9);if (i == 0){setfillcolor(WHITE);switch (snake.direction){case up:fillcircle(snake.sCo[i].x + 5, snake.sCo[i].y + 12, 2);fillcircle(snake.sCo[i].x + 15, snake.sCo[i].y + 12, 2);break;case down:fillcircle(snake.sCo[i].x + 5, snake.sCo[i].y + 8, 2);fillcircle(snake.sCo[i].x + 15, snake.sCo[i].y + 8, 2);break;case left:fillcircle(snake.sCo[i].x + 12, snake.sCo[i].y + 5, 2);fillcircle(snake.sCo[i].x + 12, snake.sCo[i].y + 15, 2);break;case right:fillcircle(snake.sCo[i].x + 8, snake.sCo[i].y + 5, 2);fillcircle(snake.sCo[i].x + 8, snake.sCo[i].y + 15, 2);break;}}}setcolor(RGB(199, 177, 163));setfillcolor(RGB(199, 177, 163));fillcircle(snake.sCo[snake.num].x + 10, snake.sCo[snake.num].y + 10, 9);
}//蛇移动
void Snake_Move()
{for (int i = snake.num; i > 0; i--){snake.sCo[i].x = snake.sCo[i - 1].x;snake.sCo[i].y = snake.sCo[i - 1].y;}switch (snake.direction){case up:if (snake.sCo[0].y == 0){snake.sCo[0].y = 400 - S_SIZE;}else{snake.sCo[0].y -= S_SIZE;}break;case down:if (snake.sCo[0].y == 400 - S_SIZE){snake.sCo[0].y = 0;}else{snake.sCo[0].y += S_SIZE;}break;case left:if (snake.sCo[0].x == 0){snake.sCo[0].x = 400 - S_SIZE;}else{snake.sCo[0].x -= S_SIZE;}break;case right:if (snake.sCo[0].x == 400 - S_SIZE){snake.sCo[0].x = 0;}else{snake.sCo[0].x += S_SIZE;}break;}Snake_Paint();
}//方向性移动
void Snake_Change()
{int ch;ch = getch();switch (ch){case 'w':case 'W':case up:if (snake.direction != down){snake.direction = up;}break;case 's':case 'S':case down:if (snake.direction != up){snake.direction = down;}break;case 'a':case 'A':case left:if (snake.direction != right){snake.direction = left;}break;case 'd':case 'D':case right:if (snake.direction != left){snake.direction = right;}break;}
}//食物是否被吃
void Snake_Eat()
{if (snake.sCo[0].x == food.fCo.x&&snake.sCo[0].y == food.fCo.y){snake.num++;food.flag = 0;}
}//判断是否撞自己
void Snake_Break()
{for (int i = snake.num - 1; i > 3; i--){if (snake.sCo[0].x == snake.sCo[i].x&&snake.sCo[0].y == snake.sCo[i].y){Game_Over();}}
}//结束游戏
void Game_Over()
{cleardevice();setcolor(WHITE);outtextxy(200, 160, "GAME OVER!!!");Sleep(10000);closegraph();
}

最后

希望对看到的小伙伴有帮助,有需要改进的地方,欢迎一起讨论学习哦。

相关文章:

C++小游戏贪吃蛇源码

graphics.h是针对DOS下的一个C语言图形库 (c也可以) 目前支持下载此头文件的常用的有两种: 1. EGE (Easy Graphics Engine)2. EasyX Graphics LibraryEGE, 全名Easy Graphics Engine, 是windows下的简易绘图库&#xff0c;是一个类似BGI(graphics.h)的面向C/C语言新手的图形库…...

【密码学】穴居人密码

穴居人密码 文字记载中&#xff0c;有时会把来自古希腊文化之前的各种记录作为密码学的例子&#xff0c;但称它们为密码学一定太不严格了&#xff0c;这是因为那些方法都太原始了。密码学的起源能追溯到多早&#xff0c;取决于你把密码学的相关定义确定得有多宽泛。大多数作者都…...

neo4j的CQL命令实例演示

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

vue3+ts使用antv/x6

使用 2.x 版本 x6.antv 新官网: 安装 npm install antv/x6 //"antv/x6": "^2.1.6",项目结构 1、初始化画布 index.vue <template><div id"container"></div> </template><script setup langts> import { onM…...

wsl1 ubuntu通过宿主机代理连接外网

文章目录 环境变量配置apt换源apt安装&#xff0c;测试是否能通外网可能出现的问题&#xff1a;Temporary failure resolving 参考 背景&#xff1a;公司电脑是局域网&#xff0c;通过走代理来连接外网 wsl1 ubuntu想要通过来连接宿主机的局域网代理&#xff0c;访问外网 可以…...

ubuntu20.04 opencv4.2 安装笔记

参考&#xff1a; https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html Build with opencv_contrib # 1. Install minimal prerequisites&#xff0c; libgtk2.0-dev pkg-config 用来显示图像 sudo apt update && sudo apt install -y cmake g wget un…...

ubuntu安装nginx以及php的部署

目录 1.安装依赖包 2.安装nginx 3.编译nginx 4.启动nginx 5.访问nginx 6.增加源地址 7.安装php 8.配置php-fpm 9.修改权限 10.配置nginx里的php 11.启动php-fpm 12.配置php文件以及权限 13.登陆查看 1.安装依赖包 apt-get install gcc apt-get install libpcre3 l…...

IntelliJ IDEA 2021/2022关闭双击shift全局搜索

我这里演示的是修改&#xff0c;删除是右键的时候选择Remove就好了 IDEA左上角 File-->Settings 找到Navigate -->Search Everywhere &#xff0c;右键添加快捷键。 OK --> Apply应用...

HTML 元素中的name 属性

name 属性是 HTML 元素中常用的属性之一。它用于指定表单元素的名称&#xff0c;以便在提交表单时将其值与对应的键关联起来。 每个表单元素&#xff08;例如 <input>、<select> 和 <textarea>&#xff09;都可以具有一个 name 属性&#xff0c;该属性为元素…...

快速上手React:从概述到组件与事件处理

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

K8S系列文章之 离线安装自动化工具Ansible

参考 文档 离线安装 Ansible - DevOps - dbaselife 一、Ansible简介 Ansible是一款开源的IT配置管理工具&#xff0c;常被IT界的小伙伴们用于自动化的场景&#xff0c;多用在服务部署、配置管理方面。配置文件采用最常见的yaml格式&#xff0c;学习起来也是比较容易&#xff…...

mysql8.0.3集群搭建

下载mysql安装包&#xff1a; https://dev.mysql.com/downloads/mysql/5.7.html#downloads 准备环境 1、准备三台服务器并设置hosts 192.168.236.143 mysql1 192.168.236.144 mysql2 192.168.236.145 mysql32、设置免密登陆 #生成秘钥 ssh-keygen -t rsa #一直按Enter即可…...

vue中router路由的原理?两种路由模式如何实现?(vue2) -(上)

平时我们编写路由时&#xff0c;通常直接下载插件使用&#xff0c;在main.js文件中引入直接通过引入vue-router中的Router通过Vue.use使用以后定义一个routeMap数组&#xff0c;里边是我们编写路由的地方&#xff0c;最后通过实例化一个 Router实例 将routes我们定义的routeMao…...

消息队列(3) -封装数据库的操作

前言 上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整 实现封装 在写完上述的接口类 与 xml 后, 我们想要 创建一个类 ,来调用…...

PostgreSQL中根据时间段范围查询数据,如19:29:10到20:29:10范围内的数据,排除年月日

数据格式如下 问题描述 我的SQL语句条件是 WHERE (TO_CHAR(cti.binder_gen_time, YYYY-MM-DD HH:mm:ss) > 19:29:10 AND TO_CHAR(cti.binder_gen_time, YYYY-MM-DD HH:mm:ss) < 20:29:10)为什么我数据的时间是2023-07-20 17:58:29也能被查出来&#xff1f; 问题解决…...

【二分+贪心】CF1665 C

Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a; 一开始想太简单wa6了 只想到先感染大的分量&#xff0c;然后最后把最大的分量剩下的染色 但是可能会有别的分量更大&#xff08;因为最后给最大的染色之后可能不再是最大的&#xff09; 可以用堆维护&#xf…...

【Wamp】安装 | 局域网内设备访问

安装教程&#xff1a; https://wampserver.site/article/1.html 下载 https://www.wampserver.com/en/ 安装路径上不能有中文 安装好之后图标呈绿色 放入网页文件 将网页文件放置于wamp文件夹的www子文件夹 例如&#xff1a;\Wamp\program\www 修改http端口 WAMP服务器…...

【golang】类型推断和变量重声明

类型推断是一种编程语言在编译期自动解释表达式类型的能力。 1.Go语言的类型推断可以带来哪些好处&#xff1f; 在写代码时&#xff0c;我们通过使用Go语言的类型推断会节省敲击次数&#xff0c;而节省下来的键盘敲击次数几乎可以忽略不记。但它真正的好处&#xff0c;往往会…...

“算法详解”系列第3卷贪心算法和动态规划出版

“算法详解”系列图书共有4卷&#xff0c;目前1到3卷已经出版。最新出版的是第3卷—贪心算法和动态规划。 算法详解 卷3 贪心算法和动态规划 “算法详解”系列图书共有4卷&#xff0c;本书是第3卷—贪心算法和动态规划。其中贪心算法主要包括调度、最小生成树、集群、哈夫曼编…...

CSS前端开发指南:创造精美的用户界面

简介&#xff1a; 《CSS前端开发指南&#xff1a;创造精美的用户界面》是一本旨在帮助读者掌握CSS技术&#xff0c;实现令人惊叹的前端用户界面的实用指南。无论您是初学者还是有经验的开发者&#xff0c;本书都将为您提供全面的知识和实用技巧&#xff0c;帮助您创建引人注目…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...