一、项目介绍

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

编译环境:VC6

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

二、运行截图

哆啦A梦

哆啦A梦

三、源码思路

1.引入图形库头文件

1
#include <graphics.h>

2.绘制心形气球

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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梦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// 画脸
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);         // 心形气球

四、完整源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// 表白哆啦
// 编译环境: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;
}
点赞(273)

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

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

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

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

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

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

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

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

Dotcpp在线编译      (登录可减少运行等待时间)
#include<stdio.h>
int main()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX