李峋同款的C语言动态爱心代码来了,彩色闪动,附源码

1.前言

最近一部电视剧《点燃我,温暖你》可火啦,大家纷纷在搞男主阿瑟的同款爱心代码,但是虽然网上有它的源码,但都不是 C 语言的,看不懂。我看了一下这个视频,大致分析了一下它的运行过程。用语言描述一下,就是好多爱心,然后从内到外,从小到大的显示。

2.实现

对于这个程序的编写,我的思路是这样的。就如同将一头大象放到冰箱里。就是打开冰箱,放入大象,关上冰箱。编写程序也是如此。

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

3.效果展示

在这里插入图片描述

4.编译环境:VS2019+easyx图形库插件

5.代码展示:

#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<math.h>
#include<sys/timeb.h>struct MyLove
{int NUMS;  //  编号double m;double n;double size;bool Is_show;int x;int y;
};MyLove mylove[400];
int CenterX = 320;
int CenterY = 180;
double Size = 60;
void initdata();  // 初始化数据
void updata();    // 更新
void movedata();  // 平移
void showdata();  // 显示
int* GetRand(int* buf, int count, int range);  // 随机数的生成
void heart(int x0, int y0, int size, COLORREF C);
void HpSleep(int ms);int main()
{initgraph(640, 480);initdata();BeginBatchDraw();while (true){updata();showdata();HpSleep(30);    // 改为精确延时FlushBatchDraw();cleardevice();}EndBatchDraw();_getch();return 0;
}void updata()
{int* buf = (int*)malloc(sizeof(int) * 20);buf = GetRand(buf, 20, (int)(2 * Size / 0.01));movedata();for (int i = 0; i < 20; i++){mylove[i].m = buf[i] * 0.01;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);mylove[i].size = Size;mylove[i].NUMS = i / 20;mylove[i].Is_show = true;mylove[i].x = (int)(-Size * mylove[i].n * cos(mylove[i].m) + CenterX);mylove[i].y = (int)(-Size * mylove[i].n * sin(mylove[i].m) + CenterY - mylove[i].size);}for (int i = 20; i < 400; i++){mylove[i].size = mylove[i].size + 1;if (mylove[i].size > 80){mylove[i].size = 80;}mylove[i].NUMS = i / 20;mylove[i].x = (int)(-mylove[i].size * mylove[i].n * cos(mylove[i].m) + CenterX);mylove[i].y = (int)(-mylove[i].size * mylove[i].n * sin(mylove[i].m) + CenterY - mylove[i].size);}
}void movedata()
{for (int i = 399; i > 19; i--){mylove[i] = mylove[i - 20];}
}void showdata()
{settextcolor(RED);wchar_t c = 0x59;    // 0x28 是电话机在 Wingdings 字体中的对应编码for (int i = 0; i < 400; i++){settextstyle(mylove[i].NUMS + 10, 0, "Webdings");setbkmode(TRANSPARENT);outtextxy(mylove[i].x + 20, mylove[i].y + 20, c);}
}int* GetRand(int* buf, int count, int range)
{struct timeb timeSeed;ftime(&timeSeed);srand(timeSeed.time * 1000 + timeSeed.millitm);  // milli timefor (int i = 0; i < count; i++){int randTmp = rand() % range;for (int j = 0; j < i; j++){if (buf[j] == randTmp){break;//检查重复。}}buf[i] = randTmp;}return buf;
}void initdata()
{for (int i = 0; i < 400; i++){mylove[i].NUMS = 0;mylove[i].m = 0;mylove[i].n = 0;mylove[i].size = 0;mylove[i].Is_show = false;mylove[i].x = 0;mylove[i].y = 0;}
}// 精确延时函数(可以精确到 1ms,精度 ±1ms)
// by yangw80<yw80@qq.com>, 2011-5-4
void HpSleep(int ms)
{static clock_t oldclock = clock();    // 静态变量,记录上一次 tickoldclock += ms * CLOCKS_PER_SEC / 1000;  // 更新 tickif (clock() > oldclock)          // 如果已经超时,无需延时oldclock = clock();elsewhile (clock() < oldclock)      // 延时Sleep(1);            // 释放 CPU 控制权,降低 CPU 占用率,精度 10~16ms//      Sleep(0);            // 更高精度、更高 CPU 占用率,精度 1ms
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/181960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高校学生宿舍公寓报修维修生活管理系统 微信小程序b2529

本课题要求实现一套基于微信小程序宿舍生活管理系统&#xff0c;系统主要包括&#xff08;管理员&#xff0c;学生、维修员和卫检员&#xff09;四个模块等功能。 使用基于微信小程序宿舍生活管理系统相对传统宿舍生活管理系统信息管理方式具备很多优点&#xff1a;首先可以大幅…

系列八、编程式事务

一、概述 编程式事务是指程序员手动的在业务代码中控制事务执行的流程&#xff0c;业务方法正常执行提交事务&#xff0c;业务方法执行过程中出现异常则回滚事务。 二、编程式事务环境搭建 2.1、项目概览 2.2、pom.xml <dependencies><!--spring基本依赖--><d…

被DDoS攻击了怎么办?为什么要选择高防ip?

在当今互联网高度发达的时代&#xff0c;许多企业都依赖于网络来开展业务、推广产品、提供服务。然而&#xff0c;网络攻击&#xff0c;尤其是分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;已经成为一种日益严重的威胁。面对这种攻击&#xff0c;如何保护您的业…

电脑微信多开怎么操作?电脑微信多开bat代码

电脑微信多开怎么操作&#xff1f; 方法一&#xff1a;电脑微信多开bat代码方法二 微信是我们日常使用率很高的社交软件&#xff0c;在工作中因工作需要可能会用到两个微信号&#xff0c;如果是只登录一个微信&#xff0c;另外一个微信的聊天信息很容易漏看&#xff0c;这时候微…

【同一局域网下】两台电脑之间互ping

两台电脑互ping 首先需要连接同一网咯关闭需要ping的电脑的防火墙 关闭防火墙步骤&#xff08;以win11系统为例&#xff09;&#xff1a; 设置 --> 隐私和安全性 --> Windows 安全中心 打开Windows安全中心 防火墙和网络保护 --> 选择正在使用的网络 关闭 ping其他…

嵌入式LCD软件驱动流程与调试

前言 LCD屏在嵌入式中是应用比较广泛的&#xff0c;很多电子产品都是需要用到它来进行人机交互&#xff0c;那么工作中我们就少不了要对lcd进行软件驱动和调试。调试LCD需要掌握的学问有很多&#xff0c;没有一定的调试经验就很难对问题进行分析并解决。 博文推荐 LCD屏接口与…

Vue3 反应性全套基础知识都单独附带实例

在Vue3中&#xff0c;反应性&#xff08;Reactivity&#xff09;是其核心特性之一&#xff0c;它使得数据和视图之间的同步变得非常简单。以下是Vue3反应性的全套基础知识以及相应的实例&#xff1a; 响应式对象&#xff1a;在Vue3中&#xff0c;我们可以使用reactive函数来创…

shell脚本完成内容筛选并下载

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

【题解】洛谷 CF11D A Simple Task

CF11D 题目解题思路A Simple Task题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 分析Code更多方法 题目 原题链接 解题思路 A Simple Task 题面翻译 求无向图中的简单环个数&#xff0c;保证不存在重边和自环。 简单环&#xff1a;除起点外&#…

Linux:虚拟机安装Ubuntu系统

一、下载Ubuntu 地址&#xff1a;https://cn.ubuntu.com/download/desktop 二、安装 以上配置完成后&#xff0c;点击完成按钮&#xff0c;接下来就是一段较长时间的等待安装过程。 安装完成后&#xff0c;还有一些系统性配置。 系统配置非常简单&#xff0c;全部next即可。…

使用Typecho搭建个人博客网站,并内网穿透实现公网访问

使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问 文章目录 使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 …

DHCP协议讲解(含DHCP状态机)

加个目录 一、概述 大家都知道&#xff0c;为了使用TCP/IP协议族&#xff0c;每台主机和路由器需要一定的配置信息。 下面是一个简单的例子&#xff1a; 某学校的教学办公区域将要布置数百台计算机&#xff0c;每台都需要分配IP&#xff0c;如何实现对这些数量巨大的主机进…

fastjson 怎么把List<User> 和 json字符串 相互转换 请提供代码

fastjson 怎么把List 和 json字符串 相互转换 请提供代码 FastJSON&#xff08;阿里巴巴的 JSON 库&#xff09;可以轻松实现 List<User> 和 JSON 字符串之间的相互转换。以下是一些简单的代码示例&#xff1a; 将 List 转为 JSON 字符串&#xff1a; import com.alib…

哈希_快乐数

//编写一个算法来判断一个数 n 是不是快乐数。 // // 「快乐数」 定义为&#xff1a; // // // 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 // 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 // 如果…

Pytorch:torch.optim详解

本篇笔记主要介绍torch.optim模块&#xff0c;记录学习过程 在深度学习中&#xff0c;我们通常会使用优化算法来调整神经网络的权重和偏差&#xff0c;以便模型能够更好地拟合训练数据。torch.optim是PyTorch中的一个模块&#xff0c;它提供了各种优化算法的实现&#xff0c;用…

Seata简介与常用模式解决方案概述

Seata 是什么? Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。 Seata事务管理中有三个重要的角色&#xff1a; TC (Transaction Coordinator) - 事务协调者&#xff1a;维护全局和分支事务的状态&#xff0c;协调全局事务提…

挑战传统IT:RPA以更低的成本和更高的效率领跑数字化转型

在企业数字化进程中&#xff0c;传统的IT解决方案往往带来高成本和低效率的问题。因此&#xff0c;如何顺利地、平稳地进行数字化转型对企业来说是核心考虑。 为此&#xff0c;本文将深入探讨RPA&#xff08;Robotic Process Automation&#xff09;如何以其独特的优势&#xf…

记一次mysql 3306端口映射到外网 frp

通过下面命令启动被访问机器的frp nohup ./frps -c ./frps.toml & 记一次mysql 3306端口映射到外网 坑 mysql本身没有配置远程访问 frp配置错误&#xff0c;没注意中文单引号和英文单引号的区别 mysql本身没有配置远程访问 问题 navacat 远程链接mysql 出现 Lost c…

Camunda 7.x 系列【58】自定义表单设计器

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2.表单设计器3. 案例演示3.1 引入流程设计器3.2 表单数据存储3.3 测试1. 前言 Camu…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序数据范围&#xff1a; 1 ≤ &#xfffd; ≤ 10001≤n≤1000 &#xff0c;元素大小满足 0 ≤ &#xfffd; &#…