C++旧版课程库
C++第 2 期查看课程总览

044 实践 - 绘画

主要内容

本次课中,我们将使用前面学习的知识,做一个趣味练习,那就是“绘画”。

什么是字符画

1. 字符画举例

可以看到这个字符画,其实是由很多不同的字符组成的一个图画。 而且,这些基本字符,都是 ACSII 中的。大家在课后也可以尝试设计一个字符画。 一个设计良好的字符画,可以做的非常精美。 比如,在GUI没有普及的早期,那时候的电脑游戏界面,是这样的。

2. 文字

在生活中,大家不知道有没有注意过,电脑上的文字,究竟是怎么显示的呢? 通过放大,大家注意到了,文字放大之后,出现了一块一块的方块。这个方块,被称为“像素”。 我们的屏幕,其实由很多的像素点组成的。所谓的像素点,大家可以理解成每个位置的像素点,都可选择亮或者灭。 而且,方块上的数值,表示的是这个“灯”的明亮程度。 这样才组成了我们看到的内容。 注意,这里衡量亮度的数值,它的变化范围是 0-255。你能说出它应该属于什么数据类型吗? 除了电脑上文字,我们生活中还经常看到这样的文字出现在广告牌上。 这样的文字,它的像素点就只有“亮和灭”两种状态。你能说出它应该属于什么数据类型吗?

3. 中文编码

大家记得,ASCII编码的字符一共只有128个,这是有历史原因的。 早期,电脑的使用者为英文母语者居多。所以在一开始,电脑只需要显示英文字母和数字等字符就能满足日常使用了。 英文字母和数字的字符数量有限,所以一个126个字符的 ASCII 就完全够用了。 随着时代的发展,非英语用户数量的增加,使得 ASCII 字符已经不够了。 所以,科学家们一起开了个会,每个国家在支持 ASCII 字符以外,又制定了符合各自国家文字的增补标准。 中国,精选了常用的 3000 个文字,先驱科学家们,制作了字模(也就是我们讲的字符画), 并且用两个 char 来表示一个中文字符
  • 注意!用两个 char 来表示一个中文字符
  • 这是很特殊的地方,大家要注意。 下面给出了一个中文的例子。

    练一练

    在动手练习之前,先看一下图像的显示方式,一般是一行一行绘制的。 看到这种显示模式,你应该马上想到,这应该使用一个循环的嵌套结构。 请试一试,显示出这样的一幅画。注意,空白部分应该是一个“空格”。
    
    /*
        请练习后,查看示例代码。
    
    
    
    
    
    */
    
    示例代码
    
    #include < iostream >
    
    int main()
    {
        char str_H[] = {
            ' ','*',' ',' ',' ',' ','*',' ',//0
            ' ','*',' ',' ',' ',' ','*',' ',//1
            ' ','*',' ',' ',' ',' ','*',' ',//2
            ' ','*','*','*','*','*','*',' ',//3
            ' ','*',' ',' ',' ',' ','*',' ',//4
            ' ','*',' ',' ',' ',' ','*',' ',//5
            ' ','*',' ',' ',' ',' ','*',' ',//6
        };
    
        // 1. 显示字符画 
        for(int y=0; y < 7; y++)
        {
            for(int x=0; x < 8; x++)
                std::cout << str_H[x + y*8]; 
            std::cout << std::endl; 
        }
    
        return 0;
    } 
    

    习题

    课后练习