image-20250831103854765

写在前面

用代码绘制童年记忆中的那个蓝胖子——哆啦A梦,是我对经典角色的一次深情致敬。这段程序不仅是一幅静态图像的生成,更是一次对童年幻想世界的数字重建。通过精确的几何控制与色彩搭配,我将那个圆润可爱、温暖可靠的机器人重新带回眼前,哪怕只是以像素的形式静静伫立在屏幕上,也足以唤起心底最柔软的回忆。

系列文章

序号直达链接
1C/C++李峋同款跳动的爱心
2C/C++跳动的爱心
3C/C++经典爱心
4C/C++满屏飘字
5C/C++大雪纷飞
6C/C++黑客帝国字母雨
7C/C++樱花树
8C/C++奥特曼
9C/C++精美圣诞树
10C/C++俄罗斯方块小游戏
11C/C++贪吃蛇小游戏
12C/C++孤单又灿烂的神
13C/C++闪烁的爱心
14C/C++哆啦A梦
15C/C++简单圣诞树
16C/C++小宇宙
17C/C++冰墩墩
18C/C++七彩花朵
19C/C++玫瑰花
20C/C++小猪佩奇
21C/C++简易爱心
22C/C++流星雨①
23C/C++2048小游戏
24C/C++爱心圣诞树
25C/C++文字跑马灯
26C/C++教师工作量管理系统
27C/C++满天繁星
28C/C++漂浮爱心
29C/C++五子棋小游戏
30C/C++球球大作战小游戏
31C/C++走迷宫小游戏
32C/C++粉色爱心
33C/C++棕色小熊
34C/C++粉色动态爱心
35C/C++炫酷烟花①
36C/C++炫酷烟花②
37C/C++炫酷烟花③
38C/C++炫酷烟花④
39C/C++星空漩涡
40C/C++流星雨②
敬请期待……

技术需求

  1. 图形环境初始化
  • 使用initgraph创建800×600的绘图窗口,提供足够的绘制空间与视觉舒适度。
  • 调用setorigin将坐标原点移至屏幕中心,便于以对称方式构建角色,符合哆啦A梦高度对称的外观特征。
  • 设置白色背景并通过cleardevice清除画面,确保绘图起点干净整洁。
  1. 颜色与填充管理
  • 采用RGB函数自定义颜色值,精准还原哆啦A梦标志性的天蓝色身体(RGB: 7, 190, 234)与铃铛的金黄色(RGB: 245, 237, 38),增强视觉还原度。
  • 使用setfillcolorsetlinecolor分别控制填充与轮廓颜色,实现清晰的图形边界与内部填充效果。
  1. 几何图形绘制能力
  • 利用fillroundrect绘制圆角矩形,用于眼睛、口袋和铃铛绳等细节部位,体现柔和的卡通风格。
  • 通过fillellipsefillcircle绘制脸部、眼球、肚皮和铃铛,确保曲线平滑自然。
  • 使用arc绘制嘴巴的弧形轮廓,结合角度参数精确控制起始与终止位置,还原经典微笑表情。
  1. 路径与线条控制
  • line函数用于绘制胡须、手臂、腿部连接线及铃铛下方的悬挂线条,线条粗细可通过setlinestyle调节,增强细节表现力。
  • 手部与脚部采用圆形与圆角矩形组合,模拟手套与短靴的卡通造型。
  1. 区域填充技术
  • 使用floodfill进行身体主色的大面积填充,从指定点出发自动填充至边界,适用于复杂闭合区域,提升绘制效率。
  • 通过白色矩形覆盖多余部分,巧妙“擦除”超出肚皮范围的填充色,实现精准视觉裁剪。
  1. 结构化与顺序绘制逻辑
  • 按照“脸→身体→铃铛”的顺序分层绘制,符合人类视觉认知习惯,也便于调试与修改。
  • 每个部件独立绘制,结构清晰,便于后期扩展(如添加动画或交互)。

主要代码

#include <graphics.h>
#include <conio.h>const double PI = 3.1415926536;
// 画哆啦A梦
// 主函数
int main()
{// 创建大小为 800 * 600 的绘图窗口initgraph(800, 600);// 设置原点 (0, 0) 为屏幕中央(Y轴默认向下为正)setorigin(400, 300);// 使用白色填充背景setbkcolor(WHITE);cleardevice();……

创作流程

我决定画哆啦A梦的那一刻,脑海里浮现的是小时候守在电视机前等他从四次元口袋掏出神奇道具的画面。那个圆滚滚的蓝色身影,不只是一个动画角色,更像是陪伴我成长的朋友。于是,我想用代码重新创造他,不是为了炫技,而是想把那份温暖用另一种语言表达出来。

一开始,我并没有急于下笔写代码,而是先在纸上画了他的草图,分析他的结构:头部是近乎圆形的轮廓,眼睛对称分布,鼻子小巧红润,嘴巴弯成标志性的弧线。身体部分则更简洁,一个大肚子配上短短的手脚,胸前挂着那个闪闪发光的铃铛。我把这些拆解成一个个几何模块——圆、椭圆、圆角矩形、弧线,思考如何用图形函数去逼近这些形状。

接下来是坐标的规划。我把整个屏幕的中心设为原点,这样左右对称的部分就能用正负坐标轻松实现。比如两只眼睛,只需要一个向左一个向右复制相同的结构;胡须也是一样,六条对称的斜线,方向相反但逻辑一致。这种对称性让代码变得简洁,也更接近哆啦A梦原本的设计美学。

颜色的选择我格外用心。他的蓝色不能太深也不能太浅,我反复调试RGB值,直到找到最接近原作的那种明亮而温暖的天蓝。铃铛的金黄要带一点暖意,像阳光照在金属上的反光,所以我选了偏奶油黄的色调。而胡须的细线则用纯黑,突出那种俏皮的细节感。

最难的是嘴巴的弧度。它不是简单的半圆,而是一个略带倾斜的微笑弧线,从左下到右上缓缓上扬。我用了arc函数,通过调整起始和终止角度,反复预览,终于找到了那个恰到好处的弧度——就像他每次笑着说“别担心,我有道具”时的表情。

身体的绘制更考验整体协调。我先画出手臂和腿的连接线,确定比例关系,再填充肚皮的白色圆形。但问题来了:肚皮和身体的蓝色交界处容易重叠混乱。于是我想了个办法,先用floodfill大面积填充蓝色,再用白色圆形精准覆盖肚子区域,最后用一个小矩形“擦掉”多余部分,让白色肚皮干净利落地呈现出来。

铃铛是点睛之笔。我特意加了三条横线作为装饰纹路,还画了一条细细的悬挂线,让它看起来真的挂在胸前。每一个细节都在告诉我:这不是冷冰冰的代码,而是一次情感的投射。

当我运行程序,看到那个熟悉的蓝胖子完整出现在屏幕上时,心里涌起一种难以言喻的满足。他没有动,也没有说话,但我知道,他回来了。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920975.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920975.shtml
英文地址,请注明出处:http://en.pswp.cn/news/920975.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS入门指南:30字掌握核心技巧

1. CSS初体验 1.1. CSS定义 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09; 用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09; 1.2. CSS引入方式 内部样式表&#xff1a;学习使用 CSS 代码写在head里面的 style标签 里面 外部样式表&…

从实操到原理:一文搞懂 Docker、Tomcat 与 k8s 的关系(附踩坑指南 + 段子解疑)

目录 一、先分清&#xff1a;Docker、Tomcat、k8s 到底是 “干啥的”&#xff1f; 二、它们的 “合作关系”&#xff1a;从 Java 项目到集群部署的全流程 三、实际应用场景&#xff1a;什么时候该用谁&#xff1f; 1. 单独使用场景 2. 组合使用场景&#xff08;最常见&…

测试覆盖率不够高?这些技巧让你的FastAPI测试无懈可击!

url: /posts/0577d0e24f48b3153b510e74d3d1a822/ title: 测试覆盖率不够高?这些技巧让你的FastAPI测试无懈可击! date: 2025-09-02T01:49:10+08:00 lastmod: 2025-09-02T01:49:10+08:00 author: cmdragon summary: FastAPI通过TestClient工具支持单元测试,模拟HTTP请求直接…

Qwen3-Reranker-0.6B 模型结构

模型加载 import torch from modelscope import AutoModel, AutoTokenizer, AutoModelForCausalLMtokenizer AutoTokenizer.from_pretrained("Qwen/Qwen3-Reranker-0.6B", padding_sideleft) model AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-Reranke…

无参 MOS 算法的评估方式

一、无参 MOS 算法 在音频处理和质量评估领域&#xff0c;MOS&#xff08;Mean Opinion Score&#xff09;是一种常用的主观评价指标&#xff0c;用于衡量音频质量。然而&#xff0c;获取主观 MOS 评分通常需要大量的人力和时间。因此&#xff0c;无参 MOS 算法应运而生&#…

Flowable——配置使用Flowable-UI

文章目录 前言 框架选型与版本 flowable-ui 搭建 依赖引入 springboot 主要版本 flowable 相关 log4j 日志配置项 配置文件 log4j配置文件 application.yml 增加启动类并启动程序 项目整体结构 前言 最近对工作流的flowable比较感兴趣,汇总记录一下相关的研究学习知识点。 框…

2025大学生必考互联网行业证书排名​

在互联网行业蓬勃发展的当下&#xff0c;大学生若想毕业后顺利投身其中&#xff0c;提前考取相关高含金量证书不失为明智之举。这些证书不仅能证明专业能力&#xff0c;还能在求职时为你增添竞争优势。接下来&#xff0c;为大家详细介绍 2025 年大学生必考的互联网行业证书排名…

【并发系列-01】高并发系统架构设计原理

【并发系列-01】高并发系统架构设计原理 1. 业务场景&#xff1a;当双11遇上技术挑战 1.1 问题场景描述 想象一下这样的场景&#xff1a;某电商平台在双11期间&#xff0c;短短30分钟内涌入了500万用户&#xff0c;同时发起了超过2000万次商品查询请求和100万次下单操作。而平时…

【Vue2 ✨】Vue2 入门之旅(八):过渡与动画

前几篇我们学习了事件处理。本篇将介绍 过渡与动画&#xff0c;让 Vue 页面更加生动。 目录 transition 组件进入与离开过渡过渡类名结合 CSS 动画JavaScript 钩子小结 transition 组件 Vue 提供了内置组件 <transition>&#xff0c;可以为元素或组件的进入和离开添加动…

【LeetCode】力扣刷题攻略路线推荐!适合新手小白入门~(含各类题目序号)

力扣上有许多数据结构及算法的练习&#xff0c;但是如果由第一题【两数之和】开始刷&#xff0c;会让50%的人倒在起点。所以我们刷题要讲究路线攻略以及技巧~大体路线方向由简入难数学数组链表字符串哈希表双指针递归栈队列树图与回溯算法贪心动态规划刷题技巧 建议刷题的时候分…

Windows 电脑发现老是自动访问外网的域名排障步骤

Windows 电脑发现老是自动访问外网的域名,如何排障 一、基础信息获取与进程定位 1.1、确认进程关键信息 1.2、进程合法性初步验证 二、网络连接深度分析 2.1、目的IP/域名溯源 2.2、端口与协议检查 三、进程行为与系统异常排查 3.1、进程启动与依赖分析 3.2、系统异常行为扫描…

curl、python-requests、postman和jmeter的对应关系

一、初识curlcurl 是一个功能强大的命令行工具&#xff0c;用于传输数据&#xff0c;支持多种协议&#xff08;如 HTTP、HTTPS、FTP 等&#xff09;。分析以下curl&#xff1a;curl "https://$HOST/mon/adm/au/opera" --header "Authorization: $AUTH" -X …

【MySQL】初识数据库基础

【MySQL】初识数据库基础 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;MySQL笔记 文章目录【MySQL】初识数据库基础前言一. 数据库基础&#xff08;重点&#xff09;1.1 什么是数据库1.2 主流数据库1.3 基本使用1.3.1 MySQL安装1.3.2 连接…

微服务Docker-compose之若依部署

目录 1.创建一个文件夹 2.上传压缩包 3.解压 4.执行ry1文件 5.执行ry2文件 6.进入nginx的html目录解压dist文件 7.执行ry3文件 8.访问nacos 9.访问若依 1.创建一个文件夹 2.上传压缩包 3.解压 4.执行ry1文件 5.执行ry2文件 6.进入nginx的html目录解压dist文件 7.执行ry…

《中国棒球》健将级运动员什么水平·棒球1号位

棒球国家健将级の神级科普&#xff5c;国内TOP1%⚾️国际能打吗&#xff1f;1. 什么是"国家健将级"&#xff1f;&#xff5c;What is "Master Sportsman"&#xff1f;中国运动员等级天花板&#xff1a;仅次"国际健将"的最高国家级荣誉&#xff0…

NAT与内网穿透

目录 一、为什么需要NAT&#xff1f; 二、NAT的核心&#xff1a;从“一对一”到“多对一” &#xff08;1&#xff09;静态NAT &#xff08;2&#xff09;动态NAT &#xff08;3&#xff09;NAPT 三、NAPT的双刃剑&#xff1a;安全与局 四、内网穿透 &#xff08;1&…

力扣222 代码随想录Day15 第四题

完全二叉树结点的数量class Solution { public:int countNodes(TreeNode* root) {if(rootNULL) return 0;TreeNode* leroot->left;TreeNode* riroot->right;int ld0;int rd0;while(le){lele->left;ld;}while(ri){riri->right;rd;}if(ldrd) return(2<<ld)-1;i…

Node.js异步编程:Callback/Promise/Async

Node.js异步编程&#xff1a;Callback/Promise/Async引言Node.js以其非阻塞I/O和事件驱动架构而闻名&#xff0c;这使得异步编程成为Node.js开发中的核心概念。在Node.js中&#xff0c;处理异步操作经历了从Callback到Promise再到Async/Await的演进过程。本文将探讨这三种异步编…

野火STM32Modbus主机读取寄存器/线圈失败(一)-解决接收中断不触发的问题

接收中断不触发 前情提要 在自己的开发板上移植了野火的modbus主机程序。 野火主机程序移植 野火主机代码理解与使用 问题背景 我使用STM32显示板作为Modbus主机连接电脑&#xff0c;并在电脑上运行Modbus Slave软件。测试中发现&#xff0c;读取保持寄存器和输入寄存器均失…

5种常见的网络安全漏洞及防护建议

五种常见的网络安全漏洞及防护建议在数字化时代&#xff0c;网络安全已成为个人和企业面临的重要挑战。网络攻击手段不断升级&#xff0c;黑客利用各种漏洞入侵系统、窃取数据或破坏服务。了解常见的网络安全漏洞并采取相应的防护措施&#xff0c;是保障信息安全的关键。本文将…