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技术,从采购、入库、借用、总结、清理到损坏等方面准确统计资产,突破过去手工统计的复杂性,节省资产资源,减少调查时间,确保资产管理工作的准确性和快速性。 固定资产管理软…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...