【七夕要来了】分享程序猿表白神器

koala112233 2015-08-14 02:22:29
加精
七夕节要到了~在网上看到篇文章很有意思,现在分享给大家~

用C语言打印会跳动的心,送给最爱的那个她!

这篇文章中的代码可以完成几个不同的爱心图案,其中有一个例子甚至可以在黑色背景的控制台上打印出跳动的3D爱心动画,效果相当震撼!说不定可以给她一个惊喜(吓?)噢~

情人节送什么给她- =大家可以一起探讨噢!

一、普通的爱心图案

c语言代码是这样子的:

#include "stdafx.h"
#include <math.h>
#include <stdio.h>
int main()
{
float y, x, a;
for (y = 1.5f;y > -1.5f;y -= 0.1f)
{
for (x = -1.5f;x < 1.5f;x += 0.05f)
{
a = x*x + y*y - 1;
putchar(a*a*a - x*x*y*y*y <= 0.0f ? '*' : ' ');
}
putchar('\n');
}
return 0;
}

二、带花纹的爱心图案

C语言代码是这样子的:

#include "stdafx.h"
#include <math.h>
#include <stdio.h>


int main()
{
float y, x, z,f;
for (y = 1.5f;y > -1.5f;y -= 0.1f)
{
for (x = -1.5f;x < 1.5f;x += 0.05f)
{
z = x*x + y*y - 1;
f = z*z*z - x*x*y*y*y;
putchar(f <= 0.0f ? ".:-=+*#%@"[(int)(f*-8.0f)] : ' ');
}
putchar('\n');
}


getchar();
return 0;
}

#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.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() {
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);
}
}

三、跳动的心形图案

c语言代码是这样的

#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <windows.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() {
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);
}
}
...全文
7525 56 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2015-10-30
  • 打赏
  • 举报
回复
yanghao0 2015-09-14
  • 打赏
  • 举报
回复
引用 3 楼 yuyang00000 的回复:
用钻石摆成心形绝对比这个成功率大得多
不用钻石,用金条也可以凑合
  • 打赏
  • 举报
回复
kuangniaokuang 2015-09-02
  • 打赏
  • 举报
回复
引用 23 楼 fox64194167 的回复:
http://www.waitingfy.com/html5/snake/ 能不能打开?第一个观察模式是表白模式,很久以前做的。
我竟然看完了
  • 打赏
  • 举报
回复
studyarea 2015-08-26
  • 打赏
  • 举报
回复
引用 48 楼 chenggongdeziji 的回复:
代码有错,用vc6.0执行不成功,哈哈哈哈
这个是C++程序
你家人养牛 2015-08-25
  • 打赏
  • 举报
回复
送礼物这种事,还是要投其所好的,不然达不到预想的效果
你家人养牛 2015-08-25
  • 打赏
  • 举报
回复
哎,七夕都过了。。。。
  • 打赏
  • 举报
回复
代码有错,用vc6.0执行不成功,哈哈哈哈
cyseria 2015-08-25
  • 打赏
  • 举报
回复
首先,要有妹子
董小姐_123 2015-08-25
  • 打赏
  • 举报
回复
天命王子 2015-08-24
  • 打赏
  • 举报
回复
楼主,那个第三个跳动的心,为什么文件后缀名是.c就老是编译出错,改成.C就不会了呢?
天命王子 2015-08-24
  • 打赏
  • 举报
回复
引用 31 楼 sinbas 的回复:

还可以试试这两种
1.
#include <stdio.h>
#include <math.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() {
    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');
    }
}







2.

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#include <math.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() {
    FILE* fp = fopen("heart.ppm", "w");
    int sw = 512, sh = 512;
    fprintf(fp, "P3\n%d %d\n255\n", sw, sh);
    for (int sy = 0; sy < sh; sy++) {
        float z = 1.5f - sy * 3.0f / sh;
        for (int sx = 0; sx < sw; sx++) {
            float x = sx * 3.0f / sw - 1.5f;
            float v = f(x, 0.0f, z);
            int r = 0;
            if (v <= 0.0f) {
                float y0 = h(x, z);
                float ny = 0.001f;
                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) / sqrtf(3) * nd * 0.5f + 0.5f;
                r = (int)(d * 255.0f);
            }
            fprintf(fp, "%d 0 0 ", r);
        }
        fputc('\n', fp);
    }
    fclose(fp);
}




说真心的,其实有多少女孩会喜欢看Dos 打出来的心形,除非是程序媛才能懂的 其她女生还是喜欢花呀,巧克力 和 钻石
第二个没有什么效果啊,你没有给出那个文件谁知道想表达什么啊。而且第一个心形太大,doc窗口不能完整放下一个。
oWangChuan123456 2015-08-24
  • 打赏
  • 举报
回复
楼主果然是屌丝
我叫小麻 2015-08-24
  • 打赏
  • 举报
回复
可是在编译起来放哪运行呢?电脑屏幕吗?用什么编译啊,我是小白,勿喷
柠檬籽 2015-08-24
  • 打赏
  • 举报
回复
哎,楼主,屌丝才用这玩意表白啊,姑娘看到只会心里默念:这傻逼程序猿,真屌丝。
_明月 2015-08-24
  • 打赏
  • 举报
回复
嗯,感觉楼主忘记附上几张用代码敲出的图片了。哈哈
赵4老师 2015-08-24
  • 打赏
  • 举报
回复
偶也来凑个热闹!
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    PAINTSTRUCT ps;
    HDC hdc;
    HFONT hfont,ohfont;
    RECT r;
    COLORREF oc;

    switch(message) {
    case WM_CLOSE://按Alt+F4退出
        PostQuitMessage(0);
        break;
    case WM_PAINT:
        BeginPaint(hWnd, &ps);
        hdc = ps.hdc; // the device context to draw in
        GetClientRect(hWnd, &r); // Obtain the window's client rectangle
        hfont = CreateFont(720, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, "Webdings");
        ohfont=(HFONT)SelectObject(hdc,hfont);
        oc=SetTextColor(hdc,0x00C080FF);
        SetBkMode(hdc, TRANSPARENT);
        TextOut(hdc,r.left+r.right/2-360, r.top+r.bottom/2-360,"\x59",1);
        DeleteObject(hfont);
        hfont = CreateFont(480, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, "Webdings");
        SelectObject(hdc,hfont);
        SetTextColor(hdc,0x000000FF);
        TextOut(hdc,r.left+r.right/2-360, r.top+r.bottom/2-360,"\x5a",1);
        DeleteObject(hfont);
        hfont = CreateFont(120, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, "Script");
        SelectObject(hdc,hfont);
        SetTextColor(hdc,0x00FFFFFF);
        TextOut(hdc,r.left+r.right/2-480, r.bottom-360,"I love you",10);
        SelectObject(hdc,ohfont);
        SetTextColor(hdc,oc);
        DeleteObject(hfont);
        EndPaint(hWnd, &ps);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    MSG msg             = {0};
    WNDCLASS wc         = {0};
    HBRUSH hbrh;
    hbrh=CreateSolidBrush(0x00000000);
    wc.lpfnWndProc      = WndProc;
    wc.hInstance        = hInstance;
    wc.hbrBackground    = hbrh;
    wc.lpszClassName    = "minwindowsapp";
    wc.hCursor          = LoadCursor(NULL,IDC_ARROW);
    if( FAILED(RegisterClass(&wc)) ) return 1;

    if(FAILED(CreateWindow(wc.lpszClassName,
                        "Minimal Windows Application",
                        WS_POPUP|WS_VISIBLE,
                        0,
                        0,
                        GetSystemMetrics(SM_CXSCREEN),
                        GetSystemMetrics(SM_CYSCREEN),
                        0,
                        0,
                        hInstance,
                        NULL)))
        return 2;

    while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {
        DispatchMessage( &msg );
    }
    DeleteObject(hbrh);
    return 0;
}
studyarea 2015-08-24
  • 打赏
  • 举报
回复
能给个这篇文章出处地址吗?
码隆 2015-08-24
  • 打赏
  • 举报
回复
引用 6 楼 u010668114 的回复:
[quote=引用 5 楼 yuyang00000 的回复:] [quote=引用 4 楼 u010668114 的回复:] [quote=引用 3 楼 yuyang00000 的回复:] 用钻石摆成心形绝对比这个成功率大得多
然而编码难度要大得多[/quote]是啊,然而妹子又不管你会不会编码[/quote] 我是说用钻石这种方式,很难编[/quote] 买钻石 拼成心形,绝对成功
加载更多回复(32)

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧