肯定会有人说这个乱码生成器华而不实,但我有必要在此申明一下,这只是一个好玩的搞怪代码
〇、前言
现在看到一些乱码生成器。
但……
char c;
for (int i = 0; i < 100; i ++)
{
c = rand () % 100000;
if (c != 7) cout << c;
}
cout << endl;
作者作者这太简陋了吧!?
所以有了这篇文章。
一、基础代码
前置知识
1.随机的混沌
随机的字符串源于随机的字符,随机的字符源于随机的数字,随机的数字源于随机的 rand()。
我们只要将随机数取模,得到随机的字符,最后将其输出。
(实现代码)
srand (time (NULL));
while (true) cout << (char)(rand () % 128);
2.参差的每行
显然,前一种方法显示的乱码可谓铺天盖地,美观指数十分糟糕。对于这种情况,我们可以换行解决。
使用双重循环,第一重遍历无数行,第二重遍历每行的随机列,作者个人认为每行取值 至
较为合适。
(实现代码)
srand (time (NULL));
while (true)
{
for (long long i = 1; i <= rand () % 100 + 1; i ++) cout << (char)(rand () % 128);
cout << endl;
}
3.随机换行数
运行之后发现它还是十分紧密,解决的方法就是多换几行。
换的行数值得考虑,作者取的是 至
行。
(实现代码)
srand (time (NULL));
while (true)
{
for (long long i = 1; i <= rand () % 100 + 1; i ++) cout << (char)(rand () % 128);
for (long long i = 1; i <= rand () % 3 + 1; i ++) cout << endl;
}
4.随机空格数
竖向舒展了,但横向照样紧凑。
Dalao:加空格!
没错,再在代码中加入空格的程序。
每行中多加一重循环,每次循环字符与空格出现的几率都为 。
(实现代码)
srand (time (NULL));
while (true)
{
for (long long i = 1; i <= rand () % 100 + 1; i ++)
{
int x = rand () % 2;
if (x == 0)
for (long long i = 1; i <= rand () % 100 + 1; i ++) cout << (char)(rand () % 128);
if (x == 1)
for (long long i = 1; i <= rand () % 10 + 1; i ++) cout << ' ';
}
for (long long i = 1; i <= rand () % 3 + 1; i ++) cout << endl;
}
5.另起一类的数字
旧的问题解决了,新的问题随之而来,数字十分稀少,出现的几率仅为 。
如题,我们可以新建一类,将数字、字符、空格出现的几率都调为 。
(实现代码)
srand (time (NULL));
while (true)
{
for (long long i = 1; i <= rand () % 100 + 1; i ++)
{
int x = rand () % 3;
if (x == 0) cout << rand ();
if (x == 1)
for (long long i = 1; i <= rand () % 100 + 1; i ++) cout << (char)(rand () % 128);
if (x == 2)
for (long long i = 1; i <= rand () % 10 + 1; i ++) cout << ' ';
}
for (long long i = 1; i <= rand () % 3 + 1; i ++) cout << endl;
}
到这里基础代码就解决了,想美化的可以看下一部分。
二、美化
前置知识
1.输出美化
单一的黑白根本就不乱,为了让它更乱一点,我们可以加上鬼畜的颜色。
(功能代码)
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), rand () % 16);
但是这又令人眼花缭乱,为了杜绝这种情况,我们可以根据字符对症下药:
(作者所写)
- `=` 使用淡蓝。
- `#` 使用绿色。
- `<`、`>` 使用紫色。
- `\`、`'`、`"` 使用灰色。
- `+`、`-`、`*`、`/`、`%` 使用湛蓝。
- `!`、`~`、`|`、`&`、`?` 使用青蓝。
- `:`、`;`、`[`、`]`、`{`、`}` 使用红色。
- 数字使用灰色。
- 其它使用白色。
(实现代码)
srand (time (NULL));
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
while (true)
{
for (long long i = 1; i <= rand () % 100 + 1; i ++)
{
int x = rand () % 3;
if (x == 0)
{
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout << rand ();
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
}
if (x == 1)
for (long long i = 1; i <= rand () % 100 + 1; i ++)
{
char s = (char)(rand () % 128);
if (s == '+' || s == '-' || s == '*' || s == '/' || s == '%' || s == '^') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
else if (s == '!' || s == '~' || s == '|' || s == '&' || s == '?') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);
else if (s == '=') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
else if (s == ':' || s == ';' || s == '[' || s == ']' || s == '{' || s == '}') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED);
else if (s == '>' || s == '<') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
else if (s == '\\' || s == '\'' || s == '\"') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
else if (s == '#') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY);
else if (s >= '0' && s <= '9') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
cout << s;
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
}
if (x == 2)
for (long long i = 1; i <= rand () % 10 + 1; i ++) cout << " ";
for (long long i = 1; i <= rand () % 3 + 1; i ++) cout << endl;
}
}
2.时间等待
颜色问题解决了,接下来写延迟输出的代码。
这其实 so easy,因为我们可以直接等待随机毫秒。
(功能代码)
Sleep (rand () % 1000);
最后加入至代码中。
(实现代码)
srand (time (NULL));
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
while (true)
{
for (long long i = 1; i <= rand () % 100 + 1; i ++)
{
int x = rand () % 3;
if (x == 0)
{
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
cout << rand ();
Sleep (rand () % 3);
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
}
if (x == 1)
for (long long i = 1; i <= rand () % 100 + 1; i ++)
{
char s = (char)(rand () % 128);
if (s == '+' || s == '-' || s == '*' || s == '/' || s == '%' || s == '^') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
else if (s == '!' || s == '~' || s == '|' || s == '&' || s == '?') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);
else if (s == '=') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
else if (s == ':' || s == ';' || s == '[' || s == ']' || s == '{' || s == '}') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED);
else if (s == '>' || s == '<') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
else if (s == '\\' || s == '\'' || s == '\"') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
else if (s == '#') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY);
else if (s >= '0' && s <= '9') SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
cout << s;
Sleep (rand () % 3);
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
}
if (x == 2)
{
for (long long i = 1; i <= rand () % 10 + 1; i ++)
{
cout << " ";
Sleep (rand () % 3);
}
}
Sleep (rand () % 10);
}
for (long long i = 1; i <= rand () % 3 + 1; i ++)
{
cout << endl;
Sleep (rand () % 3);
}
}
乱码生成器的教程到这里就结束了,如果觉得还可以,那么请点个赞吧。