前言

  • 心形代码
  • 控制台输出
  • 跳动的效果
  • 增加有趣的功能
  • 总结

最近看到电视剧心形代码,于是想着我也自己弄一个,于是查找相关资料后,不断尝试,终于弄出来啦。让我们看看怎么实现心形!

心形代码

首先,我们需要一个心形形状,同时可以使用 ANSI 颜色代码来增强其外观。下面是一个示例心形代码:

char heart[] = "\033[31m       **      **\n""    **    **    **    **\n""  **         **        **\n"" **                      **\n""**                        **\n""**         兮兮          **\n"" **                    **\n""   **                **\n""     **            **\n""        **       **\n""           **  **\n""             **\n\033[0m";

这个代码使用了 ANSI 颜色代码来设置红色文本,并在心形上方添加了一行闪烁的星号。

那什么是ANSI呢?

ANSI 表示美国国家标准协会(American National Standards Institute),它是一个非营利组织,致力于制定各种标准,包括计算机和通信方面的标准。ANSI 转义序列是一种由 ANSI 标准委员会定义的字符序列,用于控制文本终端的显示效果。

在计算机中,文本终端是一种与计算机交互的界面,用户可以通过终端输入命令,计算机则输出相应的结果。ANSI 转义序列最初是为了在终端中控制文本的显示效果而设计的,例如改变文本的颜色、背景色、加粗、下划线等。后来,由于计算机的发展,ANSI 转义序列也被广泛应用于其他领域,例如在编程语言中输出彩色文本、在邮件中添加格式等。

当我们使用 printf() 函数输出文本时,可以使用 ANSI 转义序列来改变文本的颜色、背景色等。其中,\033 是转义序列的起始符号,后面跟着的 [ 和参数组成了转义序列的格式。在 ANSI 转义序列中,数字参数用分号 ; 分隔,而字母参数则直接跟在数字参数后面。

下表列出了一些常用的 ANSI 转义序列,以及它们对应的颜色和效果:

序列 描述
\033[30m 黑色
\033[31m 红色
\033[32m 绿色
\033[33m 黄色
\033[34m 蓝色
\033[35m 紫色
\033[36m 青色
\033[37m 白色
\033[40m 黑色背景
\033[41m 红色背景
\033[42m 绿色背景
\033[43m 黄色背景
\033[44m 蓝色背景
\033[45m 紫色背景
\033[46m 青色背景
\033[47m 白色背景
\033[0m 恢复默认颜色
\033[1m 加粗
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 隐藏

例如,printf("\033[31mHello, world!\033[0m"); 将在控制台中输出红色的 “Hello, world!”,然后恢复默认颜色。

需要注意的是,不是所有的控制台都支持 ANSI 转义序列。在 Windows 的默认控制台中,只有一部分转义序列被支持。如果需要在 Windows 中使用更多的 ANSI 转义序列,可以考虑使用其他的终端模拟器,例如 cmder、ConEmu 等。

控制台输出

我们可以使用 printf() 函数在控制台中输出心形。以下是一个示例输出函数:

void printHeart(int x, int y) {system("cls"); // 清屏for (int i = 0; i < y; i++)printf("\n"); // 输出y行空格printf("%s", heart); // 输出心形for (int i = 0; i < y; i++)printf("\n"); // 输出y行空格
}

该函数将屏幕清空,然后在输出心形之前输出一些空行。这将使心形出现在屏幕中央,同时还会留出一些空白区域,使其更加突出。

跳动的效果

为了使心形能够跳动,我们可以使用一个无限循环,在每次循环中移动心形的位置,并重新输出它。以下是一个示例循环:

int x = 40; // 初始位置为屏幕中央
int y = 10;
while (1) // 无限循环
{ printHeart(x, y); // 输出心形Sleep(200); // 延时0.2秒x--; // 每次向左移动1个字符位置if (x < -40)x = 80; // 如果移出屏幕左侧,重置位置到屏幕右侧
}

该循环在每次迭代中调用 printHeart() 函数来输出心形,然后使用 Sleep() 函数来延迟0.2秒,以使心形看起来跳动起来。每次迭代都将心形向左移动一个字符位置,如果它移出屏幕左侧,则将其重置到屏幕右侧。

增加有趣的功能

我们可以增加一些有趣的功能来使这个程序更加有趣。例如,我们可以使用 GetAsyncKeyState() 函数检测用户是否按下了某个键,并在用户按下键时播放一个声音。以下是一个示例函数:

void playSound() {Beep(523, 100); // 发出一个频率为523Hz的声音,持续100毫秒
}

该函数使用 Beep() 函数发出一个指定频率和持续时间的声音。我们可以将其与 GetAsyncKeyState() 函数一起使用,以便在用户按下某个键时播放声音。以下是一个示例循环:

while (1) // 无限循环
{ printHeart(x, y); // 输出心形if (GetAsyncKeyState('A') & 0x8000)playSound(); // 如果用户按下A键,则播放声音Sleep(200); // 延时0.2秒x--; // 每次向左移动1个字符位置
if (x < -40)x = 80; // 如果移出屏幕左侧,重置位置到屏幕右侧
}

该循环在每次迭代中调用 printHeart() 函数来输出心形,并使用 GetAsyncKeyState() 函数检测用户是否按下了’A’键。如果用户按下了该键,则播放一个声音。然后,使用 Sleep() 函数延迟0.2秒,并将心形向左移动一个字符位置。如果心形移出屏幕左侧,则将其重置到屏幕右侧。

除了播放声音外,我们还可以增加其他有趣的功能,例如更改心形的颜色、在屏幕上添加文本等等。这些功能可以通过修改代码中的 ANSI 颜色代码和 printf() 函数来实现。

总结

在本篇博客中,我们展示了如何使用 C 语言在控制台中输出跳动的心形。我们还介绍了如何增加一些有趣的功能,例如播放声音、更改颜色和添加文本。希望这篇博客能够帮助大家了解如何在控制台中使用 C 语言创建有趣的程序。
效果运行图:

完整代码附上:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>char heart[] = "\033[31m       **        **\n"
"    **    **     **   **\n"
"  **         **        **\n"
" **                      **\n"
"**                        **\n"
"**         兮兮          **\n"
" **                    **\n"
"   **                **\n"
"     **            **\n"
"        **       **\n"
"           **  **\n"
"             **\n\033[0m";void printHeart(int x, int y) {system("cls"); // 清屏for (int i = 0; i < y; i++)printf("\n"); // 输出y行空格printf("%s", heart); // 输出心形for (int i = 0; i < y; i++)printf("\n"); // 输出y行空格
}
void playSound() {Beep(523, 100); // 发出一个频率为523Hz的声音,持续100毫秒
}int main()
{int x = 40; // 初始位置为屏幕中央int y = 10;while (1) // 无限循环{printHeart(x, y); // 输出心形if (GetAsyncKeyState('A') & 0x8000)playSound(); // 如果用户按下A键,则播放声音Sleep(200); // 延时0.2秒x--; // 每次向左移动1个字符位置if (x < -40)x = 80; // 如果移出屏幕左侧,重置位置到屏幕右侧}return 0;
}

这是拓展的哦,可自拿

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>void printHeart(int x, int y, int color);
void playSound();int main() {int x = 40, y = 10, color = 12;int dx = 1, dy = 1;int heartsCount = 10;int heartsX[10], heartsY[10], heartsDX[10], heartsDY[10], heartsColor[10];// 初始化随机数生成器srand(time(NULL));// 初始化心形数组for (int i = 0; i < heartsCount; i++) {heartsX[i] = rand() % 80;heartsY[i] = rand() % 20;heartsDX[i] = rand() % 3 - 1;heartsDY[i] = rand() % 3 - 1;heartsColor[i] = rand() % 15 + 1;}while (1) {// 输出心形printHeart(x, y, color);// 检测用户是否按下了空格键if (GetAsyncKeyState(VK_SPACE) & 0x8000) {playSound(); // 播放声音color = rand() % 15 + 1; // 改变心形颜色}// 输出多个随机位置和颜色的心形for (int i = 0; i < heartsCount; i++) {printHeart(heartsX[i], heartsY[i], heartsColor[i]);heartsX[i] += heartsDX[i];heartsY[i] += heartsDY[i];// 碰到边界则反弹if (heartsX[i] < 0 || heartsX[i] > 79) {heartsDX[i] = -heartsDX[i];heartsColor[i] = rand() % 15 + 1;}if (heartsY[i] < 0 || heartsY[i] > 24) {heartsDY[i] = -heartsDY[i];heartsColor[i] = rand() % 15 + 1;}}// 移动心形x += dx;y += dy;// 碰到边界则反弹if (x < 0 || x > 75) {dx = -dx;color = rand() % 15 + 1; // 改变心形颜色}if (y < 0 || y > 22) {dy = -dy;color = rand() % 15 + 1; // 改变心形颜色}// 清空屏幕system("cls");// 延时Sleep(50);}return 0;
}// 输出一个心形
void printHeart(int x, int y, int color) {HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, color);printf("  ***   ***\n");printf(" *   * *   *\n");printf("*     *     *\n");printf("*           *\n");printf(" *         *\n");printf("  *       *\n");printf("   *     *\n");printf("    *   *\n");printf("     ***\n");SetConsoleTextAttribute(handle, 7);COORD pos = { x, y };SetConsoleCursorPosition(handle, pos);
}// 播放声音
void playSound() {Beep(523, 100);
}

C画心形,跳动不停息;黑白字间,情意相随。相关推荐

  1. C# GDI+ 画心形 跳动动画

    先看看效果: 话不多说直接上代码 public Form1(){DoubleBuffered = true; //首先窗体记得设置双缓冲SetStyle(ControlStyles.ResizeRed ...

  2. C++ 实现命令行画心形代码,有多个爱心代码,简单可调数据和字符,可装X,也可用于浪漫的表白,可实现跳动、保存等功能

    绘制一个简易爱心 #include <stdio.h> #include <Windows.h>int main() {for (float y = 1.5f; y > ...

  3. CSS画心形的三种方法,超级简单

    CSS画心形的三种方法,超级简单 一.一颗div一颗心 用一个div画出一个心,核心的方法就是使用伪元素 首先,我们在页面上先写出一个div 使用CSS,将这个div变为一个橘红色的正方形: 接着我们 ...

  4. css画心形原理,CSS画心形的三种方法

    下面,介绍三种CSS画心形的方法.实现过程都非常简单,保证你一看就会. 1.一颗div一颗心 用一个div画出一个心,核心的方法就是使用伪元素. 首先,我们在页面上先写出一个div: 使用CSS,将这 ...

  5. 小白学习adobe illustrator——掌握画心形的几种方法

    学习过PS的按钮操作后,发现AI还是比较简单的,因为不会涉及到PS那么多的图层. 下面就通过画心形,来掌握一些菜单的使用,同时通过画心形,来学习画一个形状的思路,例如拆解.合并等. 这里一共用到了四种 ...

  6. 第四次画心形流水灯,并且选封装

    第四次画心形流水灯,并且选封装 一.再次检查自己画的PCB 致命问题 1.电源引入口和PCB的封装不对应 2. 原理图和封装不对应 3. 封装一定要标准命名!!!要不然怎么去根据封装选对应的元器件 二 ...

  7. python画心形代码大全_情人节锦囊:简单的python表白程序(动画效果)

    今年这个特殊的情人节,如何优雅而又高大上地对自己的心爱女神表白? ? ? 猫老师给你送上锦囊,试试python表白的实现方式吧,是动画版的哦,保证可以如你所愿 ! ! ! 1.动态玫瑰花 代码如下图: ...

  8. 用 CSS3 画心形和搜索放大镜图标

    用 CSS3 画心形 1.先来个class="heart"的div <div class="heart"></div> 2.讲上面的 d ...

  9. Mr.J--心形跳动demo

    最近学了一点CSS动画的属性,看了课程之后,重新做了一下心跳跳动的小demo. 属性 position absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元 ...

最新文章

  1. JQuery插件,轻量级表单模型验证(续 二)
  2. 【C++】google gtest 详解
  3. jmeter全链路压测
  4. python3 RSA加解密
  5. python多进程共享内存
  6. freeImage图像旋转滤波
  7. 实现一个简单的文件上传进度条
  8. No space left on device 解决 Cydia 安装应用错误
  9. python实际应用方面的材料_python应用于哪些方面
  10. 从WildFly 9(子系统)中运行OkHttpClient
  11. [图论]最短路计数(spfa)
  12. 随想录(elf文件)
  13. CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布
  14. Django实战(一)——教育网站
  15. Python中 sys.argv[]
  16. 墨菲定律和海恩法则、事故调查“四不放过”原则--运维
  17. PBI Report Builder 报表设计与可视化
  18. Intel Barefoot Academy - P4实战特训营
  19. 【Jaya算法解决柔性作业车间调度问题(附代码)】
  20. 新周刊:放弃北上广的10个理由

热门文章

  1. table中的内容超过2行自动显示Tooltip
  2. vivo X23发布:双涡轮引擎是亮点,Jovi物联成惊喜
  3. Django 使用定时任务的多种姿势对比
  4. p22 021 lambda表达式
  5. Unity2018接入高德地图
  6. php判断一个数组是否存在在另一个数组中
  7. 工作,你需要注意的20个规则
  8. 数据池,集合及深浅拷贝
  9. Python对Excel的常规操作 之 读取,写入(保留原格式写入)
  10. 收藏:团队应该提倡和反对的约章几则