C++流星蝴蝶剑+萍乡C++创意编码精灵库案例
这段视频展示了一个使用 C++ 编写的图形化演示程序,名为"C++ 流星蝴蝶剑"。视频主要分为三个部分:最终效果展示、生成"光剑"的代码解析、以及生成背景飞舞文字的代码框架解析。
以下是详细的视频与程序描述:
1. 视频视觉效果
- 核心画面: 屏幕中央横亘着一把由蓝、绿、紫色光条组成的"能量剑"。这把剑并非静止,而是呈现出一种流动的、类似波浪或噪声的扭曲动态效果,仿佛在呼吸或充能。
- 背景画面: 在黑色星空背景下,无数种计算机编程语言的名称(如 Python, C++, Java, Rust, Go, SQL, Assembly Language 等)以不同的颜色、大小和速度,从屏幕中心向四周(或从远处向屏幕)飞速"奔袭"而来。随着文字移动,它们的字号逐渐变大,营造出一种3D空间飞行的纵深感。
2. 程序代码解析
视频展示了两段核心代码,均使用了一个名为 sprites.h 的 C++ 图形库(看起来类似于 Python 的 Turtle 库的 C++ 封装)。
第一部分:"剑"的生成代码 (00:17 - 00:31)
这段代码负责绘制屏幕中央那把动态的光剑。
- 数学建模: 程序没有使用图片,而是通过数学公式实时计算每一个像素点。
- 它使用了一个双重循环遍历屏幕坐标
x(-400 到 400) 和y(-50 到 50)。 - 噪声函数 (
noise): 通过叠加三个不同频率和相位的正弦波 (sin),生成了一个复杂的波形数据。这赋予了剑身不规则的、流动的纹理。 - 颜色与亮度: 根据
y轴的距离计算val,进而动态设置笔触颜色 (pencolor) 和阴影 (penshade),模拟出剑身中心亮、边缘暗或者金属光泽的效果。
- 它使用了一个双重循环遍历屏幕坐标
- 绘制逻辑:
- 通过
if (y - 100 * noise < 0)这个条件判断来决定是否在某个坐标点点上像素 (dot(2))。这实际上是在绘制一个受正弦波调制的形状。 - 代码中
t.go(x, y+50).dot(2)和t.go(x, -y-50).dot(2)实现了上下对称绘制,构成了剑身的主体。
- 通过
- 动画循环:
phase -= 10这一行代码让正弦波的相位随时间变化,从而让剑身的波形产生"流动"的动画效果。
第二部分:背景字幕程序框架 (00:32 - 00:47)
这段代码负责处理背景中那些飞舞的编程语言名称。
- 面向对象设计 (
class Language):- 程序定义了一个
Language类来管理每一个飞舞的文字。 - 属性: 每个对象拥有自己的文本内容 (
txt)、坐标 (x,y)、大小 (size)、颜色 (color) 以及移动速度 (dx,dy)。 - 初始化 (
init): 随机生成初始位置、颜色、大小和速度方向。 - 移动 (
move): 每一帧更新坐标。关键点在于this->size++,这意味着文字离"镜头"越近(随着时间推移),字号越大,从而模拟出物体从远处飞来的透视效果。如果文字飞出屏幕边界,则调用init()重置,形成循环。 - 渲染 (
render): 使用全局的rocket精灵在指定坐标写出文字。
- 程序定义了一个
- 主函数 (
main):- 定义了一个包含大量编程语言名称的字符串向量
languages。 - 利用
vector<Language*> objs存储所有语言对象的指针。 - 在主循环
while(true)中,不断清空屏幕,遍历所有对象执行move()(移动)和render()(绘制),最后更新屏幕并短暂延时,形成流畅的动画。
- 定义了一个包含大量编程语言名称的字符串向量
总结
这是一个典型的创意编码 (Creative Coding) 示例。作者利用 C++ 和简单的图形库,通过数学函数(正弦波叠加)生成了酷炫的光剑特效,并利用面向对象编程(OOP)和简单的物理模拟(位置、速度、缩放)实现了具有纵深感的背景文字流。