• 《点燃我,温暖你》理工男神李峋同款C语言版本爱心


    近期很火的《点燃我,温暖你》很火,里面的爱心代码也很惊艳,但是程序员看了觉得尬的扣脚,

    网上也有他其他的语言爱心源码,但都不是C语言的,用语言描述一下,就是好多爱心,然后从内到外,从小到大的显示。今天就给大家分享:爱心代码,边看边用!

    2.实现

    C语言程序的编写就像同将一头大象放到冰箱里。

    1、打开冰箱

    2、放入大象

    3、关上冰箱

    首先就是计算坐标,更新坐标,绘制爱心三步。重复调用,就可以实现。里面的具体细节,可以查看代码。

    3.运行效果

     4.源码

    1. ///
    2. // 程序名称:《点燃我,温暖你》爱心程序
    3. // 编译环境:Mictosoft Visual Studio 2013,+EasyX_20200315(beta)
    4. // 作  者:爱编程的胡桃
    5. // 源码获取加q群:724050348 想学习更多项目、和同行交流学习都可以进来 ~
    6. //
    7. #include<graphics.h>
    8. #include<conio.h>
    9. #include<time.h>
    10. #include<math.h>
    11. #include<sys/timeb.h>
    12. struct MyLove
    13. {
    14. int NUMS; // 编号
    15. double m;
    16. double n;
    17. double size;
    18. bool Is_show;
    19. int x;
    20. int y;
    21. };
    22. MyLove mylove[400];
    23. int CenterX = 320;
    24. int CenterY = 180;
    25. double Size = 60;
    26. void initdata(); // 初始化数据
    27. void updata(); // 更新
    28. void movedata(); // 平移
    29. void showdata(); // 显示
    30. int* GetRand(int* buf, int count, int range); // 随机数的生成
    31. void heart(int x0, int y0, int size, COLORREF C);
    32. void HpSleep(int ms);
    33. int main()
    34. {
    35. initgraph(640, 480);
    36. initdata();
    37. BeginBatchDraw();
    38. while (true)
    39. {
    40. updata();
    41. showdata();
    42. HpSleep(30); // 改为精确延时
    43. FlushBatchDraw();
    44. cleardevice();
    45. }
    46. EndBatchDraw();
    47. _getch();
    48. return 0;
    49. }
    50. void updata()
    51. {
    52. int* buf = (int*)malloc(sizeof(int)* 20);
    53. buf = GetRand(buf, 20, (int)(2 * Size / 0.01));
    54. movedata();
    55. for (int i = 0; i < 20; i++)
    56. {
    57. mylove[i].m = buf[i] * 0.01;
    58. mylove[i].n = (((sin(buf[(int)i] * 0.01) * sqrt(fabs(cos(buf[(int)i] * 0.01)))) / (sin(buf[(int)i] * 0.01) + 1.4142)) - 2 * sin(buf[(int)i] * 0.01) + 2);
    59. mylove[i].size = Size;
    60. mylove[i].NUMS = i / 20;
    61. mylove[i].Is_show = true;
    62. mylove[i].x = (int)(-Size *mylove[i].n * cos(mylove[i].m) + CenterX);
    63. mylove[i].y = (int)(-Size *mylove[i].n * sin(mylove[i].m) + CenterY - mylove[i].size);
    64. }
    65. for (int i = 20; i < 400; i++)
    66. {
    67. mylove[i].size = mylove[i].size + 1;
    68. if (mylove[i].size>80)
    69. {
    70. mylove[i].size = 80;
    71. }
    72. mylove[i].NUMS = i / 20;
    73. mylove[i].x = (int)(-mylove[i].size *mylove[i].n * cos(mylove[i].m) + CenterX);
    74. mylove[i].y = (int)(-mylove[i].size *mylove[i].n * sin(mylove[i].m) + CenterY - mylove[i].size);
    75. }
    76. }
    77. void movedata()
    78. {
    79. for (int i = 399; i > 19; i--)
    80. {
    81. mylove[i] = mylove[i - 20];
    82. }
    83. }
    84. void showdata()
    85. {
    86. settextcolor(RED);
    87. wchar_t c = 0x59; // 0x28 是电话机在 Wingdings 字体中的对应编码
    88. for (int i = 0; i < 400; i++)
    89. {
    90. settextstyle(mylove[i].NUMS + 10, 0, "Webdings");
    91. setbkmode(TRANSPARENT);
    92. outtextxy(mylove[i].x + 20, mylove[i].y + 20, c);
    93. }
    94. }
    95. int* GetRand(int* buf, int count, int range)
    96. {
    97. struct timeb timeSeed;
    98. ftime(&timeSeed);
    99. srand(timeSeed.time * 1000 + timeSeed.millitm); // milli time
    100. for (int i = 0; i < count; i++)
    101. {
    102. int randTmp = rand() % range;
    103. for (int j = 0; j < i; j++)
    104. {
    105. if (buf[j] == randTmp)
    106. {
    107. break;//检查重复。
    108. }
    109. }
    110. buf[i] = randTmp;
    111. }
    112. return buf;
    113. }
    114. void initdata()
    115. {
    116. for (int i = 0; i < 400; i++)
    117. {
    118. mylove[i].NUMS = 0;
    119. mylove[i].m = 0;
    120. mylove[i].n = 0;
    121. mylove[i].size = 0;
    122. mylove[i].Is_show = false;
    123. mylove[i].x = 0;
    124. mylove[i].y = 0;
    125. }
    126. }
    127. // 精确延时函数(可以精确到 1ms,精度 ±1ms)
    128. // by yangw80<yw80@qq.com>, 2011-5-4
    129. void HpSleep(int ms)
    130. {
    131. static clock_t oldclock = clock(); // 静态变量,记录上一次 tick
    132. oldclock += ms * CLOCKS_PER_SEC / 1000; // 更新 tick
    133. if (clock() > oldclock) // 如果已经超时,无需延时
    134. oldclock = clock();
    135. else
    136. while (clock() < oldclock) // 延时
    137. Sleep(1); // 释放 CPU 控制权,降低 CPU 占用率,精度 10~16ms
    138. // Sleep(0); // 更高精度、更高 CPU 占用率,精度 1ms
    139. }

    想学习更多实战项目的可以看看的个人空间_哔哩哔哩_Bilibili,的主页、动态、视频、专栏、频道、收藏、订阅等。哔哩哔哩Bilibili,你感兴趣的视频都在B站。icon-default.png?t=M85Bhttps://space.bilibili.com/1827181878?spm_id_from=333.788.0.0

    源码获取处:源码获取、问题解答icon-default.png?t=M85Bhttps://jq.qq.com/?_wv=1027&k=D22WxKDq

  • 相关阅读:
    提高接口自动化测试效率:使用 JMESPath 实现断言和数据提取
    万字手撕——Java集合源码
    jar打war包
    【前端】简易化看板
    软件架构设计(三) B/S架构风格-层次架构(一)
    【计算机网络】IP协议(下)
    视频播放速度调节的chrome插件,怎么快捷键调节B站播放速度
    VP视频结构化框架
    小程序中用于跳转页面的5个api是什么和区别
    概率统计·概率论的基本概念【事件独立性、随机变量】
  • 原文地址:https://blog.csdn.net/yx5666/article/details/127788428