用C语言画一个Q版奥特曼

有一天原本平静的村庄突然受到不明寄生生命体的袭击!“快逃!”“可是……” 快找出怪兽玛格尼亚的弱点,欢迎收看迪迦奥特曼的下集大雾来了。

今天分享一个用C语言画Q版奥特曼的源码~

用到的是easyx图形库绘图功能,所以需要下载安装easyx图形库,直接官网搜索下载即可,devC++用不了,需要另外配置哦!适用于Visual C++与Visual Studio

要用到的头文件

#include<conio.h>
#include<graphics.h>
#include<math.h>

宏定义

#define PI acos(-1.0)
double th = PI / 180;

然后就是黑科技

// 绘制斜的椭圆
void DrawEllipse(int x0, int y0, int a, int b, int k, int color);
// 绘制心形
void heart(int x0, int y0, int size, COLORREF C);

int main()
{
    initgraph(640, 640);
    setbkcolor(WHITE);
    cleardevice();
    // 设置线的宽度
    setlinestyle(PS_SOLID, 5);
    setlinecolor(BLACK);
    setfillcolor(RGB(238, 238, 238));
    // 左耳朵
    fillrectangle(175, 266, 190, 325);
    fillrectangle(159, 281, 175, 315);
    // 右耳朵
    fillrectangle(393, 268, 410, 324);
    fillrectangle(410, 286, 423, 311);
    fillellipse(187, 196, 397, 402);
    setfillcolor(WHITE);
    fillroundrect(288, 146, 302, 242, 10, 20);
    // 绘制左右眼睛
    DrawEllipse(243, 297, 38, 30, -30, BLACK);
    DrawEllipse(350, 297, 38, 30, 30, BLACK);
    setfillcolor(RGB(248, 245, 143));
    floodfill(243, 297, BLACK);
    floodfill(350, 297, BLACK);
    line(296, 422, 249, 394);
    line(296, 422, 336, 394);
    setfillcolor(RGB(235, 110, 69));
    floodfill(295, 410, BLACK);
    setfillcolor(RGB(137, 211, 211));
    fillcircle(294, 432, 10);
    // 绘制身体
    arc(222, 399, 286, 591, 145.0 / 180 * PI, PI + 145.0 / 180 * PI);
    arc(305, 413, 364, 591, PI + 35.0 / 180 * PI, 55.0 / 180 * PI);
    line(224, 485, 359, 485);
    line(224, 511, 278, 549);
    line(278, 549, 312, 549);
    line(312, 549, 360, 515);
    setfillcolor(RGB(235, 110, 69));
    floodfill(294, 517, BLACK);
    setfillcolor(RGB(238, 238, 238));
    floodfill(252, 554, BLACK);
    floodfill(334, 559, BLACK);
    // 绘制左边胳膊
    arc(189, 387, 353, 647, 109.0 / 180 * PI, PI);
    arc(189, 480, 223, 537, 10.0 / 180.0 * PI + PI, 0);
    line(196, 471, 222, 491);
    setfillcolor(RGB(235, 110, 69));
    floodfill(207, 501, BLACK);
    // 绘制右胳膊
    arc(230, 319, 424, 455, 110.0 / 180 * PI + PI, 5.0 / 180 * PI);
    arc(392, 360, 424, 395, -5.0 / 180 * PI, PI + PI / 2);
    arc(310, 286, 402, 394, 70.0 / 180 * PI + PI, 150.0 / 180 * PI + PI);
    line(372, 390, 394, 431);
    setfillcolor(RGB(235, 110, 69));
    floodfill(399, 402, BLACK);
    // 给身体颜色
    setfillcolor(RGB(238, 238, 238));
    floodfill(296, 458, BLACK);
    // 连接气球
    line(463, 187, 422, 365);
    heart(464, 67, 30, BLACK);
    setfillcolor(RGB(235, 110, 69));
    floodfill(464, 70, BLACK);
    setfillcolor(RGB(255, 232, 201));
    solidcircle(508, 70, 6);
    _getch();
    return 0;
}

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);
    }
}

void DrawEllipse(int x0, int y0, int a, int b, int k, int color)
{
    double i;
    double x, y, tx, ty;
    for (i = -180; i <= 180; i = i + 0.5)
    {
        x = a * cos(i * th);
        y = b * sin(i * th);
        tx = x;
        ty = y;
        x = tx * cos(k * th) - ty * sin(k * th) + x0;
        y = y0 - (ty * cos(k * th) + tx * sin(k * th));
        setfillcolor(color);
        solidcircle((int)x, (int)y, 2);
    }
}

来看看效果图!

 其实有点像咸蛋超人,大家觉得呢

需要完整代码文件的可以点击下方链接领取哦!

点击链接+群领取代码~

拜拜,我们下期见

发文助手说我内容有点少,那附加一个爱心表白代码吧!

效果图

 颜色可以换哟~要想生活过得去。。

 源码在这

#include <stdio.h>
#include <Windows.h>

int main()
{
	system("color 02");
	int  i, j, k, l, m;
	char c = 3;	//ASCII码里面 3 就是一个字符小爱心 

	for (i = 1; i <= 5; i++)				printf("\n");	//开头空出5行 

	for (i = 1; i <= 3; i++) {	//前3行中间有空隙分开来写 
		for (j = 1; j <= 32 - 2 * i; j++)		printf(" ");	//左边的空格,每下一行左边的空格比上一行少2个 //8*n-2*i 
		for (k = 1; k <= 4 * i + 1; k++)		printf("%c", c);//输出左半部分字符小爱心 
		for (l = 1; l <= 13 - 4 * i; l++)		printf(" ");	//中间的空格,每下一行的空格比上一行少4个 
		for (m = 1; m <= 4 * i + 1; m++)		printf("%c", c);//输出右半部分字符小爱心
		printf("\n");		//每一行输出完毕换行 
	}

	for (i = 1; i <= 3; i++) {	//下3行中间没有空格 
		for (j = 1; j <= 24 + 1; j++)			printf(" ");	//左边的空格 //8*(n-1)+1
		for (k = 1; k <= 29; k++)			printf("%c", c);//输出字符小爱心
		printf("\n");		//每一行输出完毕换行
	}

	for (i = 7; i >= 1; i--) {	//下7行 
		for (j = 1; j <= 40 - 2 * i; j++)		printf(" ");	//左边的空格,每下一行左边的空格比上一行少2个//8*(n+1)-2*i
		for (k = 1; k <= 4 * i - 1; k++)		printf("%c", c);//每下一行的字符小爱心比上一行少4个(这个循环是i--) 
		printf("\n");		//每一行输出完毕换行
	}

	for (i = 1; i <= 39; i++)				printf(" ");	//最后一行左边的空格 
	printf("%c\n", c);		//最后一个字符小爱心 

	for (i = 1; i <= 5; i++)				printf("\n");	//最后空出5行 

	return 0;
}

感谢观看!

猜你喜欢

转载自blog.csdn.net/kxtxdy/article/details/127307332
今日推荐