一、项目介绍

这是一个用C语言绘制的哆啦A梦。

编译环境:VC6

第三方库:Easyx2022  注意需要提前安装easyX,如没有基础可以先了解easyX图形编程

二、运行截图

哆啦A梦

哆啦A梦

三、源码思路

1.引入图形库头文件

#include <graphics.h>

2.绘制心形气球

void heart(int x0, int y0, int size, COLORREF C)
{
	double  m, n, x, y; 
	double i;
	for (i = 0; i <= 2 * size; i = i + 0.01)
	{
		// 产生极坐标点
		m = i;
		n = -size * (((sin(i) * sqrt(fabs(cos(i)))) / (sin(i) + 1.4142)) - 2 * sin(i) + 2);
		// 转换为笛卡尔坐标
		x = n * cos(m) + x0;
		y = n * sin(m) + y0;
		setfillcolor(C);
		solidcircle((int)x, (int)y, 2);
	}
}

3.绘制哆啦A梦

	// 画脸
	setfillcolor(LIGHTBLUE);						// 头
	setlinecolor(BLACK);
	fillroundrect(-135, -206, 135, 54, 248, 248);

	setfillcolor(WHITE);								// 脸
	fillellipse(-115, -144, 115, 46);

	fillroundrect(-63, -169, 0, -95, 56, 56);			// 右眼
	fillroundrect(0, -169, 63, -95, 56, 56);			// 左眼

	setfillcolor(BLACK);
	solidcircle(-16, -116, 6);							// 右眼球
	solidcircle(16, -116, 6);							// 左眼球

	setfillcolor(RGB(201, 62, 0));						// 鼻子
	fillcircle(0, -92, 15);

	line(0, -77, 0, -4);								// 人中
	arc(-108, -220, 108, -4, PI * 5 / 4, PI * 7 / 4);	// 嘴

	line(-42, -73, -90, -91);							// 胡子
	line(42, -73, 90, -91);
	line(-41, -65, -92, -65);
	line(41, -65, 92, -65);
	line(-42, -57, -90, -39);
	line(42, -57, 90, -39);


	// 画身体
	line(-81, 32, -138, 72);					// 手臂(上)
	line(81, 32, 138, 72);
	line(-96, 96, -116, 110);					// 手臂(下)
	line(96, 96, 116, 110);

	line(-96, 85, -96, 178);					// 腿外侧
	line(96, 85, 96, 178);
	arc(-10, 168, 10, 188, 0, PI);				// 腿内侧

	setfillcolor(WHITE);						// 手
	fillcircle(-140, 99, 27);
	fillcircle(140, 99, 27);
	fillroundrect(-2, 178, -112, 205, 24, 24);	// 脚
	fillroundrect(2, 178, 112, 205, 24, 24);

	setfillcolor(LIGHTBLUE);				// 身体填充蓝色
	floodfill(0, 100, BLACK);

	setfillcolor(WHITE);						// 肚皮
	fillcircle(0, 81, 75);
	solidrectangle(-60, 4, 60, 24);				// 用白色矩形擦掉多余的肚皮

	pie(-58, 23, 58, 139, PI, 0);				// 口袋

	// 画铃铛
	setfillcolor(RGB(169, 38, 0));				// 绳子
	fillroundrect(-100, 23, 100, 42, 12, 12);

	setfillcolor(RGB(245, 237, 38));			// 铃铛外形
	fillcircle(0, 49, 19);

	setfillcolor(BLACK);						// 铃铛上的洞
	solidellipse(-4, 50, 4, 57);
	setlinestyle(PS_SOLID, 3);
	line(0, 57, 0, 68);

	setlinestyle(PS_SOLID, 1);					// 铃铛上的纹路
	line(-16, 40, 16, 40);
	line(-18, 44, 18, 44);

	// 气球
	line(-140, 80, -140, -40);					// 气球连接线
	heart(-140, -150, 30, LIGHTRED);			// 心形气球

四、完整源码

// 表白哆啦
// 编译环境:Visual C++ 6.0,EasyX 2022

#include <graphics.h>
#include <conio.h>
#include<math.h>
#define PI acos(-1.0)
double th = PI / 180;

// 绘制心形气球
void heart(int x0, int y0, int size, COLORREF C)
{
	double  m, n, x, y; 
	double i;
	for (i = 0; i <= 2 * size; i = i + 0.01)
	{
		// 产生极坐标点
		m = i;
		n = -size * (((sin(i) * sqrt(fabs(cos(i)))) / (sin(i) + 1.4142)) - 2 * sin(i) + 2);
		// 转换为笛卡尔坐标
		x = n * cos(m) + x0;
		y = n * sin(m) + y0;
		setfillcolor(C);
		solidcircle((int)x, (int)y, 2);
	}
}

// 主函数
int main()
{
	// 创建大小为 800 * 600 的绘图窗口
	initgraph(800, 600);

	// 设置原点 (0, 0) 为屏幕中央(Y轴默认向下为正)
	setorigin(400, 300);

	// 使用白色填充背景
	setbkcolor(WHITE);
	cleardevice();


	// 画脸
	setfillcolor(LIGHTBLUE);						// 头
	setlinecolor(BLACK);
	fillroundrect(-135, -206, 135, 54, 248, 248);

	setfillcolor(WHITE);								// 脸
	fillellipse(-115, -144, 115, 46);

	fillroundrect(-63, -169, 0, -95, 56, 56);			// 右眼
	fillroundrect(0, -169, 63, -95, 56, 56);			// 左眼

	setfillcolor(BLACK);
	solidcircle(-16, -116, 6);							// 右眼球
	solidcircle(16, -116, 6);							// 左眼球

	setfillcolor(RGB(201, 62, 0));						// 鼻子
	fillcircle(0, -92, 15);

	line(0, -77, 0, -4);								// 人中
	arc(-108, -220, 108, -4, PI * 5 / 4, PI * 7 / 4);	// 嘴

	line(-42, -73, -90, -91);							// 胡子
	line(42, -73, 90, -91);
	line(-41, -65, -92, -65);
	line(41, -65, 92, -65);
	line(-42, -57, -90, -39);
	line(42, -57, 90, -39);


	// 画身体
	line(-81, 32, -138, 72);					// 手臂(上)
	line(81, 32, 138, 72);
	line(-96, 96, -116, 110);					// 手臂(下)
	line(96, 96, 116, 110);

	line(-96, 85, -96, 178);					// 腿外侧
	line(96, 85, 96, 178);
	arc(-10, 168, 10, 188, 0, PI);				// 腿内侧

	setfillcolor(WHITE);						// 手
	fillcircle(-140, 99, 27);
	fillcircle(140, 99, 27);
	fillroundrect(-2, 178, -112, 205, 24, 24);	// 脚
	fillroundrect(2, 178, 112, 205, 24, 24);

	setfillcolor(LIGHTBLUE);				// 身体填充蓝色
	floodfill(0, 100, BLACK);

	setfillcolor(WHITE);						// 肚皮
	fillcircle(0, 81, 75);
	solidrectangle(-60, 4, 60, 24);				// 用白色矩形擦掉多余的肚皮

	pie(-58, 23, 58, 139, PI, 0);				// 口袋

	// 画铃铛
	setfillcolor(RGB(169, 38, 0));				// 绳子
	fillroundrect(-100, 23, 100, 42, 12, 12);

	setfillcolor(RGB(245, 237, 38));			// 铃铛外形
	fillcircle(0, 49, 19);

	setfillcolor(BLACK);						// 铃铛上的洞
	solidellipse(-4, 50, 4, 57);
	setlinestyle(PS_SOLID, 3);
	line(0, 57, 0, 68);

	setlinestyle(PS_SOLID, 1);					// 铃铛上的纹路
	line(-16, 40, 16, 40);
	line(-18, 44, 18, 44);

	// 气球
	line(-140, 80, -140, -40);					// 气球连接线
	heart(-140, -150, 30, LIGHTRED);			// 心形气球

	// 按任意键退出
	_getch();
	closegraph();
	return 0;
}
点赞(2)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)