一只名叫"阿红"的戏精球的千层饼式自恋

13 阅读5分钟

先上代码,需要看程序的运画效果,请自挪到下面的网址里。

//本程序动画网址: https://www.douyin.com/video/7603283479270296867
#include "sprites.h"          //包含C++精灵库 
using namespace std;
Screen screen{"绘3D红球再滚动",480,720};   //建立屏幕对象
Sprite r{"blank"};           //建立角色叫r,无造型(没有真身)

int main(){        //主功能块
    int d= 100; 
    float step = 3.14159535897932*d/360.0;  //每次红球移动的距离
    r.bgcolor("black").hide().speed(0).color("red").pu(); //一开始角色诞生到背景为黑色的并且自身隐藏的环境之中
    
    //塑造自己的真身,重复100次画一个模拟的3D红球
    for(int i=0;i<100;i++) r.penshade(i).dot(d-i).wait(0.05); 
    
    r.pencolor("black").write("8",36);  //画笔颜色设为黑并且写8字
    
    string filename = "res/3dball.png"; //设立要保存的png文件名
    screen.savepng(filename, {-d/2, d/2, d,d},true);//截取所画图形,保存
    r.clear().shape(filename).show().wait(1);  //清除所画图形把角色设为filename
    int k= 1;
    while(true){       //不断重复,让角色滚动,
       r.right(1*k).addx(step*k).wait(0.01);
       //下面是碰到边缘就反弹
       if(r.xcor()+d/2>=240 || r.xcor()-d/2<=-240)k=-k;
    }
   r.done();     //完成了  (不过这句代码永远不会执行)
   return 0;    //返回0
}

从前,有一个叫阿红的家伙(角色r),天生是个戏精。它所在的舞台叫screen,是个480×720的剧场,老板给这个剧场取个名叫名:"绘3D红球再滚动"。( 对应代码:Screen screen{"绘3D红球再滚动",480,720}; )

阿红一开始是隐形人.hide()),行动快如闪电speed(0)),手里拿着一支红色画笔color("red"),还把笔抬在空中pu()),一副"我要搞事情"的架势。

第一幕:给自己画张脸(千层饼式自恋)

阿红决定给自己画一张3D的脸。它有个强迫症:要画100层!每层都比上一层小一号,颜色还越来越深(penshade(i))。就像个美妆博主,一层粉底不够,要叠一百层,越叠越觉得自己立体。

for(int i=0;i<100;i++) —— 这循环就是阿红的自恋循环,每0.05秒就自恋一下:dot(d-i),画个小圆点。100层下去,硬是把一个平面图P成了"拟3D"效果。阿红看着镜子说:"哎呀,这光影,这立体感,我都快相信自己是真3D了!"

人生哲理①:有时候,我们层层包裹自己,以为叠得越多越立体,其实可能只是在自我感动。

第二幕:在脑门上写个"8"(强行卖萌)

画完脸,阿红觉得还不够,拿黑笔在脑门上写了个"8"字write("8",36))。字体还挺大(36号)。

为啥是8?因为8躺着就是∞,立着就是发财,横竖都不亏。阿红心想:"我这叫商标意识,以后大家看到红球带8,就知道是我!"

人生哲理②:人人都想在世界上留下自己的记号,哪怕只是个简单的符号,也想被记住。

第三幕:咔嚓!自拍发朋友圈

画完了,得保存成果啊!阿红让摄影师Screen给它截了个图screen.savepng),存成3dball.png,还特意加了透明背景true),显得高级。

然后它洗掉脸上的妆clear()),把刚才的自拍设为新头像shape(filename)),闪亮登场show())!

人生哲理③:我们精心打造形象,截图保存,然后活成了自己P过的样子。

第四幕:在边界反复横跳(社畜日常)

现在阿红开始表演核心才艺一边转圈一边跑

它给自己设了个step,每步都要右转1度right(1*k)),同时横着挪一步addx(step*k)),0.01秒一次,跑得飞快。

关键是那个k变量!一开始k=1,阿红往右冲;一旦冲到舞台右边(xcor()+d/2>=240),立马k=-k,掉头往左;冲到左边(xcor()-d/2<=-240),又k=-k,掉头往右……

就这样,阿红在这个480像素的舞台上,永无止境地左右横跳,像极了一只被框住的仓鼠,或者说——

像极了在996和躺平之间反复横跳的当代年轻人。

while(true) —— 这行代码最狠,真·无限循环,没有break,没有return,阿红要跑到天荒地老,直到程序被强制关闭(或者电脑没电)。

人生哲理④:人生如while(true),看似自由奔跑,其实不过是在既定边界里反复碰撞。那个k=-k,就是我们每次说要"改变人生",其实只是换个方向继续撞墙。

尾声:那个永远到不了的r.done()

你注意到没?代码最后写了r.done()return 0,但这两个命令永远执行不到!因为while(true)是个死循环,阿红永远困在"转圈-移动-撞墙-反弹"的闭环里。

这像极了我们的人生:总以为"等我XXXX就解脱了",但那个done(),可能只是个永远无法抵达的注释


🎯 终极哲理总结

这个程序告诉我们:

人生就像阿红,一开始花大力气给自己画皮(100层for循环),然后在脸上贴标签(写8),把自己活成一张PNG图片(社会化身份),最后在一个虚空的舞台上,用while(true)表演"自由奔跑",其实只是在if(边界)处反复k=-k

那个k=-k,是反弹的物理公式,也是生活的黑色幽默——你以为掉头就是改变,其实只是在反向继续原来的轨迹

而真正的done(),可能需要我们主动按下Ctrl+C,或者——重新定义自己的screen大小