乱码生成器

肯定会有人说这个乱码生成器华而不实,但我有必要在此申明一下,这只是一个好玩的搞怪代码


〇、前言

现在看到一些乱码生成器。  
但……

char c;
for (int i = 0; i < 100; i ++)
{
    c = rand () % 100000;
    if (c != 7) cout << c;
}
cout << endl;


作者作者这太简陋了吧!?

所以有了这篇文章。


一、基础代码

前置知识

rand 随机数函数 | ASCII 码

1.随机的混沌

随机的字符串源于随机的字符,随机的字符源于随机的数字,随机的数字源于随机的 rand()。

我们只要将随机数取模,得到随机的字符,最后将其输出。  
(实现代码)

srand (time (NULL));
while (true) cout << (char)(rand () % 128);

2.参差的每行

显然,前一种方法显示的乱码可谓铺天盖地,美观指数十分糟糕。对于这种情况,我们可以换行解决。

使用双重循环,第一重遍历无数行,第二重遍历每行的随机列,作者个人认为每行取值 1100 较为合适。  
(实现代码)
 

srand (time (NULL));
while (true)
{
    for (long long i = 1; i <= rand () % 100 + 1; i ++) cout << (char)(rand () % 128);
    cout << endl;
}

3.随机换行数

运行之后发现它还是十分紧密,解决的方法就是多换几行。

换的行数值得考虑,作者取的是 13 行。  
(实现代码)
 

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:加空格!

没错,再在代码中加入空格的程序。  
每行中多加一重循环,每次循环字符与空格出现的几率都为 \frac{1}{2}。  
(实现代码)
 

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.另起一类的数字

旧的问题解决了,新的问题随之而来,数字十分稀少,出现的几率仅为 \frac{5}{64}

如题,我们可以新建一类,将数字、字符、空格出现的几率都调为 \frac{1}{3}。  
(实现代码)

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);
    }
}

乱码生成器的教程到这里就结束了,如果觉得还可以,那么请点个赞吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值