小言_互联网的博客

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

964人阅读  评论(0)

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

网上也有他其他的语言爱心源码,但都不是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站。https://space.bilibili.com/1827181878?spm_id_from=333.788.0.0

源码获取处:源码获取、问题解答https://jq.qq.com/?_wv=1027&k=D22WxKDq


转载:https://blog.csdn.net/yx5666/article/details/127788428
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场