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

c++游戏制作指南(二):制作一个炫酷的启动界面(c++绘图)

🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿
       🍟欢迎来到静渊隐者的csdn博文,本文是c++游戏制作指南的一部🍟

 

🍕更多文章请点击下方链接🍕

🍨 c++游戏制作指南🍨


🍜专栏介绍:在这一专栏中,我将循循善诱,带领你,在冷峻的控制台上,种满缤纷,一同走入c++控制台游戏的殿堂。

🥨适宜人群:学习C++语言三个月及以上的爱好者,熟记基础语法(选择、循环两大结构),掌握基础算法(高精度、排序、模拟、贪心、搜索、动规等),知晓基础数据结构(数组、字符串、链表、栈、队列、树、图)。

🌭学习目的:能够自主编写出有趣的c++控制台游戏,并掌握自学的方法。
🥞喜欢的朋友可以关注一下,下次更新不迷路


🥙前言

做游戏,先要玩游戏。

我们先观察一下游戏。

打开游戏,扑面而来的往往是——

启动界面

 启动界面。

那么,就让我们来制作一个炫酷的启动界面吧。

在这启动界面,主要涉及的是绘图

众所周知,c++可以利用图形库:easyX

easyX是什么?

EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。

比如,可以基于 EasyX 图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。

许多人学编程都是从 C 语言入门的,而现状是:

  1. 有些学校以 Turbo C 为环境学习 C 语言,只是 Turbo C 实在太老了,复制粘贴都很不方便。
  2. 有些学校直接拿 VC 来讲 C 语言,因为 VC 的编辑和调试环境都很优秀,并且 VC 有适合教学的免费版本。可惜在 VC 里面只能做一些文字性的练习题,想画条直线或一个圆都很难,例如需要注册窗口类、建消息循环等等,初学者会受严重打击的。初学编程想要绘图就得用 TC,很是无奈。
  3. 还有计算机图形学,这门课程的重点是绘图算法,而不是 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,它接受两个参数hl,默认为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 的坐标轴上。以下是代码的功能解释:

  1. 定义了函数 drawrad,它接受三个参数:hl 和 z,其中 h 表示圆的半径高度,l 表示坐标轴的长度,z 表示输出字体的颜色偏移量。
  2. 初始化变量 x 和 y 为 h 和 l 的一半,用于计算圆心坐标。
  3. 声明了变量 e 和 d,用于计算绘制圆时的相关值。
  4. 声明了一个大小为 17 的双精度浮点数数组 m,用于存储圆在坐标系上的角度值。
  5. 初始化变量 w 为 8.0,用于计算圆在坐标系上的角度。
  6. 使用循环遍历数组 m,计算每个角度对应的值。
  7. 使用两层嵌套的循环,遍历坐标轴的每个位置,并计算该位置对应的圆的极坐标参数 e 和 d
  8. 使用嵌套的循环,遍历每个位置,根据圆在坐标系上的角度判断输出字体的颜色,并设置输出字体的颜色。
  9. 将光标移动到当前位置,输出一个空格。
  10. 返回绘制的结果。

总体而言,这段代码的功能是在指定长度和半径的坐标轴上绘制一个圆,并根据圆在坐标系上的角度确定输出字体的颜色。

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++绘图)

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f35f;欢迎来到静渊隐者的csdn博文&#xff0c;本文是c游戏制作指南的一部&#x1f35f; &#x1f355;更多文章请点击下方链接&#x1f355; &#x1f368; c游戏制作指南&#x1f3…...

spring.config.location 手动指定配置文件文件

–spring.config.locationD:\javaproject\bangsun\ds-admin\ds-oper-mgr\src\main\resources\application.yml...

【uniapp 使用ECharts】

Uniapp可以使用ECharts进行数据可视化&#xff0c;需要按照以下步骤进行操作&#xff1a; 1. 安装ECharts插件 可以使用npm安装echarts插件&#xff0c;命令如下&#xff1a; npm install echarts --save2. 引入ECharts插件 在需要使用ECharts的页面中引入ECharts插件&…...

数据结构--线性表2-2

目录 一、线性表例题&#xff1a; 二、分配动态内存&#xff1a; 1.动态创建一个空顺序表的算法&#xff1a; 2.动态顺序表的插入算法&#xff1a; 3.动态顺序表的删除 三、线性表的链式表示和实现 例题1&#xff1a;创建链表并插入26个字母 例题2&#xff1a;在链表中取…...

利用openTCS实现车辆调度系统(一)系统介绍

系统介绍 openTCS简介 官方的回答&#xff1a; openTCS&#xff08;开放式运输控制系统的缩写&#xff09;是一种免费的控制系统软件&#xff0c;用于协调自动导引车&#xff08;AGV&#xff09;和移动机器人车队&#xff0c;例如在生产工厂中。 通常应该可以控制任何具有通信…...

销存管理系统ssm进销存仓库销售java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 销存管理系统ssm 系统有1权限&#xff1a;管理员 二…...

【Axure教程】移动端二级滑动选择器

今天教大家制作移动端二级滑动选择器的原型模板&#xff0c;该原型已全国一二级省市选择器为案例&#xff0c;因为该原型用中继器做的&#xff0c;所以制作完成之后使用也很方便&#xff0c;只需修改中继器表格里的内容即可 一、效果展示 1. 拖动选择 2. 快捷选择 【原型预览…...

PHP操作solr

1&#xff0c;php下载solr(索尔)扩展&#xff0c;phpinfo需要支持solr扩展. 2&#xff0c;安装 Solr。Solr 要求您的系统上有 Java。java –version&#xff0c;Java 的版本大于 1.6 3&#xff0c;下载solr,并安装 D:\solr。 开启solr命令&#xff1a;solr start 关闭solr命令:…...

leetcode 46. Permutations(排列)

返回数组nums中数字的所有可能的排列组合。 思路&#xff1a; 排列组合这种一般会想到DFS。 这个排列中每个数字只能用一次&#xff0c; 可用如下DFS流程 stack.push(num); dfs(nums, num); stack.pop();退出条件&#xff1a; 当stack的size和nums数组一样时&#xff0c;说…...

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快的原因

简介 在数据存储和数据分析领域&#xff0c;MySQL和Doris是比较流行的数据库管理系统的代表。 在如今的大数据时代&#xff0c;数据量和数据分析的速度是很重要的。 在数据分析和数据处理中&#xff0c;Doris比MySQL快&#xff0c;这个问题一直是许多人关心的问题。 Doris的数…...

Prometheus + Grafana安装

Prometheus是一款基于时序数据库的开源监控告警系统&#xff0c;非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做…...

二十三种设计模式第二十一篇--解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它用于定义一种语言的语法结构和解释器&#xff0c;使得可以解释并执行特定的语法规则。该模式可以将复杂的语言表达式分解为更小的语法单元&#xff0c;并定义其解释过程。 解释器模式的…...

PHP8的数据类型转换-PHP8知识详解

什么是数据类型转换&#xff1f; 答&#xff1a;数据从一个类型转换成另外一个类型&#xff0c;就是数据类型转换。 在PHP8中&#xff0c;变量的类型就是由赋值决定的&#xff0c;也就是说&#xff0c;如果 string 赋值给 $var&#xff0c;然后 $var 的类型就是 string。之后…...

2023 电赛 E 题 K210 方案

第一章&#xff1a;K210 介绍 K210芯片是一款基于RISC-V架构的嵌入式人工智能芯片&#xff0c;具备低功耗、高性能的特点。它拥有强大的图像处理和机器学习能力&#xff0c;适用于边缘计算设备和物联网应用。为了方便开发者&#xff0c;K210芯片提供了丰富的外设接口&#xff…...

Python的正则表达式re模块的compile()方法有什么作用?

re模块是Python标准库中的正则表达式模块&#xff0c;它提供了对正则表达式的支持。re.compile()是re模块的一个方法&#xff0c;用于将正则表达式编译成可复用的正则对象。 正则表达式是用来匹配和处理文本模式的强大工具。当你需要在字符串中查找、替换或者提取符合特定模式…...

SQL 语句中 left join 后用 on 还是 where,区别大了!

目录 情况 小结 举例 情况 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条&#xff0c;奈何发现还是有两条。 后来发现 join on and 不会过滤结果记录条数&#xff0c;只会根据and后的条件是否显示 B表的记录&#xff0c;A表的记录一定会显…...

uni-app 微信小程序自定义导航栏

一、效果图 二、导航栏的组成 上面的导航栏主要由状态栏&#xff08;就是手机电量显示栏&#xff09;和小程序的导航栏组成&#xff0c;android手机一般为48px&#xff0c;ios手机一般为44px 三、开发步骤 1、设置navigationStyle:custom {"path": "pages/v…...

电缆故障检测仪技术参数

一、电缆故障测试仪的技术参数 1.采样方法&#xff1a;低压脉冲法、冲击闪络法、速度测量法 2.电缆长度&#xff1a;50m、300m、1km、2km、5km、10km、30km、60km 3.波速设置&#xff1a;交联乙烯、聚氯乙烯、油浸纸、不滴油和未知类型自设定 4.冲击高压&#xff1a;35kV及以下…...

固定资产管理软件

固定资产全生命周期管理软件采用先进的RFID技术&#xff0c;从采购、入库、借用、总结、清理到损坏等方面准确统计资产&#xff0c;突破过去手工统计的复杂性&#xff0c;节省资产资源&#xff0c;减少调查时间&#xff0c;确保资产管理工作的准确性和快速性。 固定资产管理软…...

Claude本地化部署终极方案(企业级容器化全栈手册):支持Anthropic API兼容、流式响应、模型热切换与RBAC权限隔离

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Claude本地化部署的架构全景与企业级价值定位 Claude本地化部署并非简单地将模型权重下载后运行&#xff0c;而是一套融合推理引擎优化、安全沙箱隔离、API网关治理与可观测性集成的端到端架构体系。其核心目…...

半导体元件(二极管/三极管/MOS管/IC)损坏诊断全解

半导体元件&#xff08;二极管、三极管、MOS 管、集成电路&#xff09;是 PCB 的核心功能单元&#xff0c;对过压、过流、ESD、高温极度敏感&#xff0c;损坏后直接导致电路功能失效、短路烧板。很多工程师维修时盲目更换芯片&#xff0c;不仅成本高&#xff0c;还易误判。​一…...

2026论文降AI怎么挑?亲测好用工具附免费降AI指南

“您的论文AIGC率为42%&#xff0c;超出学校30%的合格线&#xff0c;请修改后重新提交。”赶毕业论文的同学这段时间估计没少收到这样的提醒。2026年知网、万方、维普等主流平台的AI检测算法持续迭代&#xff0c;把AI生成内容改到符合学校要求&#xff0c;已经成了毕业生的刚需…...

账务台账数据

银行里说的 “账务台账数据”&#xff0c;本质就是按会计规则把每笔业务逐笔、分户、分科目记下来的完整明细流水 余额 辅助信息&#xff0c;核心是 “可逐笔追溯、可对账、可审计” 的一套明细数据。下面用通俗、具体的方式拆开说&#xff1a;一、银行 “账务台账” 到底是什…...

Qri高级功能:如何使用JSON Schema验证和描述数据集结构

Qri高级功能&#xff1a;如何使用JSON Schema验证和描述数据集结构 【免费下载链接】qri youre invited to a data party! 项目地址: https://gitcode.com/gh_mirrors/qr/qri Qri是一个强大的开源数据协作工具&#xff0c;它提供了丰富的功能来帮助用户管理、共享和验证…...

同步带装配工艺要点与损伤防控策略

一、引言在工业精密传动系统中&#xff0c;盖茨同步带凭借高精度、高效率、无滑差的优势&#xff0c;成为自动化设备、精密机床、输送产线的核心传动部件。多数企业在运维中&#xff0c;普遍将同步带异常磨损、断齿、断带等故障归咎于工况恶劣或产品质量问题&#xff0c;却忽略…...

TVA注意力层INT8量化配置技巧

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

Java网络编程基础分享

在学习 Java 的过程中&#xff0c;网络编程是非常重要的一环。无论是后端开发、分布式系统、即时通讯、文件传输&#xff0c;还是游戏服务、物联网设备&#xff0c;都离不开网络通信一、计算机网络基础1.1 什么是计算机网络把不同地理位置、具有独立功能的计算机&#xff0c;通…...

手机也能玩转无人机仿真:用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器

手机也能玩转无人机仿真&#xff1a;用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器 无人机开发者和爱好者们&#xff0c;是否曾想过用手机就能完成整个无人机仿真测试流程&#xff1f;告别笨重的电脑束缚&#xff0c;只需一部安卓设备&#xff0c;就能在沙发上调试飞控算法。…...

基于Arduino UNO的真随机数生成与数据持久化在Tambola游戏机中的应用

1. 项目概述&#xff1a;用Arduino UNO打造一台全自动Tambola游戏机如果你玩过或者听说过Tambola&#xff08;在印度非常流行的游戏&#xff0c;在欧美也叫Bingo或Housie&#xff09;&#xff0c;就知道它的核心玩法是主持人从一个装有数字球的容器中随机抽取号码&#xff0c;玩…...