c++游戏制作指南(二):制作一个炫酷的启动界面(c++绘图)
🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿
🍟欢迎来到静渊隐者的csdn博文,本文是c++游戏制作指南的一部🍟
🍕更多文章请点击下方链接🍕
🍨 c++游戏制作指南🍨
🍜专栏介绍:在这一专栏中,我将循循善诱,带领你,在冷峻的控制台上,种满缤纷,一同走入c++控制台游戏的殿堂。
🥨适宜人群:学习C++语言三个月及以上的爱好者,熟记基础语法(选择、循环两大结构),掌握基础算法(高精度、排序、模拟、贪心、搜索、动规等),知晓基础数据结构(数组、字符串、链表、栈、队列、树、图)。
🌭学习目的:能够自主编写出有趣的c++控制台游戏,并掌握自学的方法。
🥞喜欢的朋友可以关注一下,下次更新不迷路
🥙前言
做游戏,先要玩游戏。
我们先观察一下游戏。
打开游戏,扑面而来的往往是——

启动界面。
那么,就让我们来制作一个炫酷的启动界面吧。
在这启动界面,主要涉及的是绘图。
众所周知,c++可以利用图形库:easyX
easyX是什么?
EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。
比如,可以基于 EasyX 图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。
许多人学编程都是从 C 语言入门的,而现状是:
- 有些学校以 Turbo C 为环境学习 C 语言,只是 Turbo C 实在太老了,复制粘贴都很不方便。
- 有些学校直接拿 VC 来讲 C 语言,因为 VC 的编辑和调试环境都很优秀,并且 VC 有适合教学的免费版本。可惜在 VC 里面只能做一些文字性的练习题,想画条直线或一个圆都很难,例如需要注册窗口类、建消息循环等等,初学者会受严重打击的。初学编程想要绘图就得用 TC,很是无奈。
- 还有计算机图形学,这门课程的重点是绘图算法,而不是 Windows 编程。所以,许多老师不得不用 TC 教学,因为 Windows 绘图太复杂了,会偏离教学的重点。新的图形学的书有不少是用的 OpenGL,可是门槛依然很高。
所以,我们想给大家一个更好的学习平台,就是 VC 方便的开发平台和 TC 简单的绘图功能,于是就有了这个 EasyX 库。如果您刚开始学 C 语言,或者您是一位教 C 语言的老师,再或者您在教计算机图形学,那么这个库一定会让您兴奋的。
当然,可以用。
但安装起来有点麻烦。
曾有人说过这样的话:
真正的强者,不需要廉价的帮助
——鲁迅(我没说过这句话)
所以,这里提供 仅仅
#include<bits/stdc++.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
这几个头文件就可以编译成功的炫酷开场代码。
开场动画
1.色块升降
先给出两段代码。
int drawbar(int h = 40, int l = 120) { for (int i = 0; i < h; i++) { cursor_to_the_position(i, 0); set_output_font_color(i, 0); for (int to_judge_if_lose = 0; to_judge_if_lose < l; to_judge_if_lose++) { printf(" "); } }
}
int drawbar1(int h = 40, int l = 120)
{ srand(time(NULL)); int s = rand()%4343536+1,missionaries_num;srand(s);for(int i=0; i<h; i++) {missionaries_num=rand()%15+1;cursor_to_the_position(i,0);set_output_font_color(missionaries_num,0);for(int to_judge_if_lose=0; to_judge_if_lose<l; to_judge_if_lose++) printf(" ");}
}
用人话说,就是几条线从天而降,运行一下可知。但第二条,色块更大。
科学的讲,就是这样。
第一段代码是一个函数的定义,名为
drawbar,它接受两个参数h和l,默认为40和120。该函数的作用是在控制台中绘制一行,行高由参数h控制,行长由参数l控制。在函数的内部,使用一个嵌套的for循环来控制行的长度,循环变量to_judge_if_lose从0开始,每次增加1,直到达到l的值。在循环的每次迭代中,使用printf函数输出一个空格字符,从而在行中绘制出一定长度的空白部分。第二段代码是一个修改过的版本,名为
drawbar1,它与前一个函数类似,但是添加了一些额外的功能。首先,在代码的开始处添加了使用srand函数设置随机数种子,以便后续的随机数生成。此处使用了time函数作为种子,以确保每次运行程序时生成的随机数序列不同。然后,在循环内部,新增了一个变量missionaries_num,用于存储每次迭代生成的随机数。该变量的类型为整型,且范围在[1, 4343536]之间。在调用set_output_font_color函数时,将missionaries_num作为第一个参数,以便根据每次迭代生成的随机数来设置输出字体的颜色。总体而言,这两段代码都是用于在控制台中绘制一行,其中第二段代码添加了随机数生成器来设置输出字体的颜色,以增加变化的多样性。
同样,你也可以设计出向上下左右的。
就这样了。
2.花朵绽放
直接贴代码。
int drawrad(int h=40, int l=120, int z=0) { int x = h / 2, y = l / 2; double e, d; double m[17]; double w = 8.0; for (int i = 0; i <= 16; i++) { m[i] = PI * (double)(i - w) / (2 * w); } for (int i = 0; i < h; i++) { for (int to_judge_if_lose = 0; to_judge_if_lose < l; to_judge_if_lose++) { e = (double)(i - x) / (double)(to_judge_if_lose - y) * 2; d = atan(e); for (int k = 0; k < 16; k++) { if (d > m[k] && d < m[k + 1]) { set_output_font_color(k + z, 0); } } cursor_to_the_position(i, to_judge_if_lose); cout << " "; } }
}
功能解释如下:
这段代码实现了一个函数
drawrad,该函数用于绘制一个半径为h的圆在长度为l的坐标轴上。以下是代码的功能解释:
- 定义了函数
drawrad,它接受三个参数:h、l和z,其中h表示圆的半径高度,l表示坐标轴的长度,z表示输出字体的颜色偏移量。- 初始化变量
x和y为h和l的一半,用于计算圆心坐标。- 声明了变量
e和d,用于计算绘制圆时的相关值。- 声明了一个大小为 17 的双精度浮点数数组
m,用于存储圆在坐标系上的角度值。- 初始化变量
w为 8.0,用于计算圆在坐标系上的角度。- 使用循环遍历数组
m,计算每个角度对应的值。- 使用两层嵌套的循环,遍历坐标轴的每个位置,并计算该位置对应的圆的极坐标参数
e和d。- 使用嵌套的循环,遍历每个位置,根据圆在坐标系上的角度判断输出字体的颜色,并设置输出字体的颜色。
- 将光标移动到当前位置,输出一个空格。
- 返回绘制的结果。
总体而言,这段代码的功能是在指定长度和半径的坐标轴上绘制一个圆,并根据圆在坐标系上的角度确定输出字体的颜色。
3.马赛克
int drawbar2(int h=40, int l=120) { srand(time(NULL)); int s = rand() % 4343536 + 1; srand(s); for (int i = 0; i < h; i++) { cursor_to_the_position(i, 0); for (int to_judge_if_lose = 0; to_judge_if_lose < l; to_judge_if_lose++) { int missionaries_num = rand() % 15 + 1; set_output_font_color(missionaries_num, 0); printf(" "); } }
}
自己运行一下,试试看。
显示LOGO
首先,LOGO要居中,因此先确定控制器长宽,再利用换行和空格到达。
然后,将标志转化成可输出的,并输出。
下面给大家看看我的工作室(一个人)的标志如何输出(仅展示中心代码):
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; std::cout << " HH HH LL " << std::endl; std::cout << " HHHHHHH LL " << std::endl; std::cout << " HH HH LL " << std::endl; std::cout << " HH HH LLLLL" << std::endl; std::cout << "\n\n\n "; Sleep(200); string woshinibaba = "火龙游艺"; for (int i = 0; i < woshinibaba.size(); i++) { printf("%c", woshinibaba[i]); Sleep(300); }
效果图如下:
结语
上面只是提供了一些参考,闹着玩的。
具体还要结合更多资料开展学习。
相关文章:
c++游戏制作指南(二):制作一个炫酷的启动界面(c++绘图)
🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 🍟欢迎来到静渊隐者的csdn博文,本文是c游戏制作指南的一部🍟 🍕更多文章请点击下方链接🍕 🍨 c游戏制作指南dz…...
spring.config.location 手动指定配置文件文件
–spring.config.locationD:\javaproject\bangsun\ds-admin\ds-oper-mgr\src\main\resources\application.yml...
【uniapp 使用ECharts】
Uniapp可以使用ECharts进行数据可视化,需要按照以下步骤进行操作: 1. 安装ECharts插件 可以使用npm安装echarts插件,命令如下: npm install echarts --save2. 引入ECharts插件 在需要使用ECharts的页面中引入ECharts插件&…...
数据结构--线性表2-2
目录 一、线性表例题: 二、分配动态内存: 1.动态创建一个空顺序表的算法: 2.动态顺序表的插入算法: 3.动态顺序表的删除 三、线性表的链式表示和实现 例题1:创建链表并插入26个字母 例题2:在链表中取…...
利用openTCS实现车辆调度系统(一)系统介绍
系统介绍 openTCS简介 官方的回答: openTCS(开放式运输控制系统的缩写)是一种免费的控制系统软件,用于协调自动导引车(AGV)和移动机器人车队,例如在生产工厂中。 通常应该可以控制任何具有通信…...
销存管理系统ssm进销存仓库销售java jsp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 销存管理系统ssm 系统有1权限:管理员 二…...
【Axure教程】移动端二级滑动选择器
今天教大家制作移动端二级滑动选择器的原型模板,该原型已全国一二级省市选择器为案例,因为该原型用中继器做的,所以制作完成之后使用也很方便,只需修改中继器表格里的内容即可 一、效果展示 1. 拖动选择 2. 快捷选择 【原型预览…...
PHP操作solr
1,php下载solr(索尔)扩展,phpinfo需要支持solr扩展. 2,安装 Solr。Solr 要求您的系统上有 Java。java –version,Java 的版本大于 1.6 3,下载solr,并安装 D:\solr。 开启solr命令:solr start 关闭solr命令:…...
leetcode 46. Permutations(排列)
返回数组nums中数字的所有可能的排列组合。 思路: 排列组合这种一般会想到DFS。 这个排列中每个数字只能用一次, 可用如下DFS流程 stack.push(num); dfs(nums, num); stack.pop();退出条件: 当stack的size和nums数组一样时,说…...
5、二叉树
二叉树遍历 递归序 public static void f(Node head) {if (head == null) {return;}f(head.left);f(head.right); }前中后遍历_递归 public static void preOrderRecur(Node head) {if (head == null) {return;}System.out.print(head.value + " ");preOrderRecur…...
Doris比MySQL快的原因
简介 在数据存储和数据分析领域,MySQL和Doris是比较流行的数据库管理系统的代表。 在如今的大数据时代,数据量和数据分析的速度是很重要的。 在数据分析和数据处理中,Doris比MySQL快,这个问题一直是许多人关心的问题。 Doris的数…...
Prometheus + Grafana安装
Prometheus是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做…...
二十三种设计模式第二十一篇--解释器模式
解释器模式(Interpreter Pattern)是一种行为设计模式,它用于定义一种语言的语法结构和解释器,使得可以解释并执行特定的语法规则。该模式可以将复杂的语言表达式分解为更小的语法单元,并定义其解释过程。 解释器模式的…...
PHP8的数据类型转换-PHP8知识详解
什么是数据类型转换? 答:数据从一个类型转换成另外一个类型,就是数据类型转换。 在PHP8中,变量的类型就是由赋值决定的,也就是说,如果 string 赋值给 $var,然后 $var 的类型就是 string。之后…...
2023 电赛 E 题 K210 方案
第一章:K210 介绍 K210芯片是一款基于RISC-V架构的嵌入式人工智能芯片,具备低功耗、高性能的特点。它拥有强大的图像处理和机器学习能力,适用于边缘计算设备和物联网应用。为了方便开发者,K210芯片提供了丰富的外设接口ÿ…...
Python的正则表达式re模块的compile()方法有什么作用?
re模块是Python标准库中的正则表达式模块,它提供了对正则表达式的支持。re.compile()是re模块的一个方法,用于将正则表达式编译成可复用的正则对象。 正则表达式是用来匹配和处理文本模式的强大工具。当你需要在字符串中查找、替换或者提取符合特定模式…...
SQL 语句中 left join 后用 on 还是 where,区别大了!
目录 情况 小结 举例 情况 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。 后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显…...
uni-app 微信小程序自定义导航栏
一、效果图 二、导航栏的组成 上面的导航栏主要由状态栏(就是手机电量显示栏)和小程序的导航栏组成,android手机一般为48px,ios手机一般为44px 三、开发步骤 1、设置navigationStyle:custom {"path": "pages/v…...
电缆故障检测仪技术参数
一、电缆故障测试仪的技术参数 1.采样方法:低压脉冲法、冲击闪络法、速度测量法 2.电缆长度:50m、300m、1km、2km、5km、10km、30km、60km 3.波速设置:交联乙烯、聚氯乙烯、油浸纸、不滴油和未知类型自设定 4.冲击高压:35kV及以下…...
固定资产管理软件
固定资产全生命周期管理软件采用先进的RFID技术,从采购、入库、借用、总结、清理到损坏等方面准确统计资产,突破过去手工统计的复杂性,节省资产资源,减少调查时间,确保资产管理工作的准确性和快速性。 固定资产管理软…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
