C语言实现心形表白程序

发布于 / 程序猿 / 3 条评论

觉得用C语言实现心形表白功能的程序还挺有趣的,最简单的做法就是printf一行一行直接输出,但是那样也太没意思了,所以,得提升一下逼格,至少得用上循环吧。

这些代码都是从网上收集而来,实现的效果,一个比一个炫酷。ヾ(๑╹◡╹)ノ”


一、最简单心形代码

代码:

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    system("title Heart"); // please ignore it
    for (float y = 1.5f; y > -1.5f; y -= 0.1f) 
    {
        for (float x = -1.5f; x < 1.5f; x += 0.05f) 
        {
            float a = x * x + y * y - 1;
            putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' ');
        }
        putchar('\n');
    }
    return 0; 
}

效果图:

二、花纹效果心形代码

代码:

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    system("title Heart"); // please ignore it
    for (float y = 1.5f; y > -1.5f; y -= 0.1f) 
    {
        for (float x = -1.5f; x < 1.5f; x += 0.05f) 
        {
            float z = x * x + y * y - 1;
            float f = z * z * z - x * x * y * y * y;
            putchar(f <= 0.0f ? ".:-=+*#%@"[(int)(f * -8.0f)] : ' ');
        }
        putchar('\n');
    }
    return 0;
}

效果图:

其实没觉得有很大区别,但是还是有的(~ ̄▽ ̄)~

三、3D效果心形代码

代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

float f(float x, float y, float z) 
{
    float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
    return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}

float h(float x, float z) 
{
    for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
        if (f(x, y, z) <= 0.0f)
            return y;
    return 0.0f;
}

int main() 
{
    system("title Heart"); // please ignore it
    for (float z = 1.5f; z > -1.5f; z -= 0.05f) 
    {
        for (float x = -1.5f; x < 1.5f; x += 0.025f) 
        {
            float v = f(x, 0.0f, z);
            if (v <= 0.0f) 
            {
                float y0 = h(x, z);
                float ny = 0.01f;
                float nx = h(x + ny, z) - y0;
                float nz = h(x, z + ny) - y0;
                float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
                float d = (nx + ny - nz) * nd * 0.5f + 0.5f;
                putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
            }
            else
                putchar(' ');
        }
        putchar('\n');
    }
    return 0;
}

效果图:

四、动态效果心形代码(心跳)

代码:

#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <stdlib.h>
#include <tchar.h>

float f(float x, float y, float z) 
{
    float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
    return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}

float h(float x, float z) 
{
    for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
        if (f(x, y, z) <= 0.0f)
            return y;
    return 0.0f;
}

int main() 
{
    system("title Heart"); // please ignore it

    HANDLE o = GetStdHandle(STD_OUTPUT_HANDLE);
    _TCHAR buffer[25][80] = { _T(' ') };
    _TCHAR ramp[] = _T(".:-=+*#%@");

    for (float t = 0.0f;; t += 0.1f) 
    {
        int sy = 0;
        float s = sinf(t);
        float a = s * s * s * s * 0.2f;
        for (float z = 1.3f; z > -1.2f; z -= 0.1f) 
        {
            _TCHAR* p = &buffer[sy++][0];
            float tz = z * (1.2f - a);
            for (float x = -1.5f; x < 1.5f; x += 0.05f) 
            {
                float tx = x * (1.2f + a);
                float v = f(tx, 0.0f, tz);
                if (v <= 0.0f) 
                {
                    float y0 = h(tx, tz);
                    float ny = 0.01f;
                    float nx = h(tx + ny, tz) - y0;
                    float nz = h(tx, tz + ny) - y0;
                    float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
                    float d = (nx + ny - nz) * nd * 0.5f + 0.5f;
                    *p++ = ramp[(int)(d * 5.0f)];
                }
                else
                    *p++ = ' ';
            }
        }

        for (sy = 0; sy < 25; sy++) 
        {
            COORD coord = { 0, sy };
            SetConsoleCursorPosition(o, coord);
            WriteConsole(o, buffer[sy], 79, NULL, 0);
        }
        Sleep(33);
    }
    return 0;
}

效果图:

图一:

图二:

动态效果图片形式不好演示,还是自己编译运行吧。◕ᴗ◕。

五、变色心形代码(动态)

代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define I 20
#define R 340

int main()
{
    int i,j,e;
    int a;
    long time;
    system("title Heart");
    for(i=1,a=I;i<I/2;i++,a--)
    {
        for(j=(int) (I-sqrt(I*I-(a-i)*(a-i)));j>0;j--)
            printf(" ");
        for(e=1;e<=2*sqrt(I*I-(a-i)*(a-i));e++)
            printf("\3");
        for(j=(int)(2*( I-sqrt(I*I-(a-i)*(a-i))));j>0;j--)
            printf(" ");
        for(e=1;e<=2*sqrt(I*I-(a-i)*(a-i));e++)
            printf("\3");
        printf("\n"); 
    }
    for(i=1;i<80;i++)
    {
        if(i==25)
        {
            printf("     欢迎到访太傅的网站     ");
            i+=30;
        }
        printf("\3");
    }
    printf("\n");
    for(i=1;i<=R/2;i++)
    {
        if(i%2||i%3)
            continue;
        for(j=(int) ( R-sqrt(R*R-i*i) );j>0;j--)
            printf(" ");
        for(e=1;e<=2*( sqrt(R*R-i*i) - (R-2*I) );e++)
            printf("\3");
        printf("\n");
    }

    for(; ; )
    {
        system("color a");
        for(time=0;time<99999999;time++); 
            system("color b");
        for(time=0;time<99999999;time++); 
            system("color c");
        for(time=0;time<99999999;time++); 
            system("color d");
        for(time=0;time<99999999;time++); 
            system("color e");
        for(time=0;time<99999999;time++); 
            system("color f");
        for(time=0;time<99999999;time++);
            system("color 0"); 
        for(time=0;time<99999999;time++);
            system("color 1"); 
        for(time=0;time<99999999;time++);
            system("color 2"); 
        for(time=0;time<99999999;time++);
            system("color 3"); 
        for(time=0;time<99999999;time++);
            system("color 4");
        for(time=0;time<99999999;time++); 
            system("color 5");
        for(time=0;time<99999999;time++); 
            system("color 6");
        for(time=0;time<99999999;time++); 
            system("color 7");
        for(time=0;time<99999999;time++); 
            system("color 8");
        for(time=0;time<99999999;time++); 
            system("color 9");
        for(time=0;time<99999999;time++); 
            system("color ab");
        for(time=0;time<99999999;time++); 
            system("color ac");
        for(time=0;time<99999999;time++); 
            system("color ad");
        for(time=0;time<99999999;time++); 
            system("color ae");
        for(time=0;time<99999999;time++); 
            system("color af");
        for(time=0;time<99999999;time++); 
    }
    return 0;
}

效果图

图一:

图二:

图三:

这么多种颜色还是自己偷偷看吧٩(๑>◡<๑)۶


以上所有的代码在Windows平台下都可正常编译运行,我测试使用的IDE是Dev-C++,自己一个一个编译运行吧,还挺好玩的。


The end.
2017-08-25 星期五

转载原创文章请注明,转载自: 太傅 » C语言实现心形表白程序
  1. 老王

    程序猿用这个表白会被打么。

  2. miaopashi

    第一个代码编译说不是C99的标准,非要先定义变量。

    1. TaiFu_S
      @miaopashi

      这个呀,把float y放在for循环外边就好啦 ?