C画心形,跳动不停息;黑白字间,情意相随。
前言
- 心形代码
- 控制台输出
- 跳动的效果
- 增加有趣的功能
- 总结
最近看到电视剧心形代码,于是想着我也自己弄一个,于是查找相关资料后,不断尝试,终于弄出来啦。让我们看看怎么实现心形!
心形代码
首先,我们需要一个心形形状,同时可以使用 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画心形,跳动不停息;黑白字间,情意相随。相关推荐
- C# GDI+ 画心形 跳动动画
先看看效果: 话不多说直接上代码 public Form1(){DoubleBuffered = true; //首先窗体记得设置双缓冲SetStyle(ControlStyles.ResizeRed ...
- C++ 实现命令行画心形代码,有多个爱心代码,简单可调数据和字符,可装X,也可用于浪漫的表白,可实现跳动、保存等功能
绘制一个简易爱心 #include <stdio.h> #include <Windows.h>int main() {for (float y = 1.5f; y > ...
- CSS画心形的三种方法,超级简单
CSS画心形的三种方法,超级简单 一.一颗div一颗心 用一个div画出一个心,核心的方法就是使用伪元素 首先,我们在页面上先写出一个div 使用CSS,将这个div变为一个橘红色的正方形: 接着我们 ...
- css画心形原理,CSS画心形的三种方法
下面,介绍三种CSS画心形的方法.实现过程都非常简单,保证你一看就会. 1.一颗div一颗心 用一个div画出一个心,核心的方法就是使用伪元素. 首先,我们在页面上先写出一个div: 使用CSS,将这 ...
- 小白学习adobe illustrator——掌握画心形的几种方法
学习过PS的按钮操作后,发现AI还是比较简单的,因为不会涉及到PS那么多的图层. 下面就通过画心形,来掌握一些菜单的使用,同时通过画心形,来学习画一个形状的思路,例如拆解.合并等. 这里一共用到了四种 ...
- 第四次画心形流水灯,并且选封装
第四次画心形流水灯,并且选封装 一.再次检查自己画的PCB 致命问题 1.电源引入口和PCB的封装不对应 2. 原理图和封装不对应 3. 封装一定要标准命名!!!要不然怎么去根据封装选对应的元器件 二 ...
- python画心形代码大全_情人节锦囊:简单的python表白程序(动画效果)
今年这个特殊的情人节,如何优雅而又高大上地对自己的心爱女神表白? ? ? 猫老师给你送上锦囊,试试python表白的实现方式吧,是动画版的哦,保证可以如你所愿 ! ! ! 1.动态玫瑰花 代码如下图: ...
- 用 CSS3 画心形和搜索放大镜图标
用 CSS3 画心形 1.先来个class="heart"的div <div class="heart"></div> 2.讲上面的 d ...
- Mr.J--心形跳动demo
最近学了一点CSS动画的属性,看了课程之后,重新做了一下心跳跳动的小demo. 属性 position absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元 ...
最新文章
- JQuery插件,轻量级表单模型验证(续 二)
- 【C++】google gtest 详解
- jmeter全链路压测
- python3 RSA加解密
- python多进程共享内存
- freeImage图像旋转滤波
- 实现一个简单的文件上传进度条
- No space left on device 解决 Cydia 安装应用错误
- python实际应用方面的材料_python应用于哪些方面
- 从WildFly 9(子系统)中运行OkHttpClient
- [图论]最短路计数(spfa)
- 随想录(elf文件)
- CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布
- Django实战(一)——教育网站
- Python中 sys.argv[]
- 墨菲定律和海恩法则、事故调查“四不放过”原则--运维
- PBI Report Builder 报表设计与可视化
- Intel Barefoot Academy - P4实战特训营
- 【Jaya算法解决柔性作业车间调度问题(附代码)】
- 新周刊:放弃北上广的10个理由