标题:在控制台窗口中输出颜色方阵 拜托各位大大解决一下哈...
只看楼主
ttttstef
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-28
 问题点数:0 回复次数:8 
在控制台窗口中输出颜色方阵 拜托各位大大解决一下哈...

一、题目:在控制台窗口中输出颜色方阵
二、目的与要求
1. 目的
通过在控制台中输出颜色方阵,培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计,并对Windows平台下的控制台进行深入的了解。
2. 基本要求
(1) 要求用C++语言编程,在Visual C++环境下调试完成;
(2) 要求划分功能模块,各个功能分别使用函数来完成;
(3) 源代码程序要求必要的注释。
三、设计方法和基本原理
1. 课题功能描述
设计一个能够在控制台窗口中输出彩带的程序,要求实现的功能包括:根据用户的输入选择来输出规则颜色阵列和随机颜色阵列两种阵列形式(参见下图)。


2. 问题详细描述
设计一个在控制台输出彩带的程序,要求首先提示用户选择颜色阵列的类型(规则颜色、随机颜色或退出),然后根据用户的输入,输出相应的阵列。然后再次要求用户选择阵列类型或退出程序。
要求编写多个函数分别实现上述功能,而后在main函数中进行调用。
3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。首先输出颜色阵列的过程是个循环过程,当用户的输入满足循环的退出条件时结束程序的运行(在示例程序中,循环的退出条件是用户输入了0和1之外的数值)。

用户输入了相应的选择后,在屏幕上输出阵列。因为控制台只支持16种颜色,所以输出的阵列应该是16*16的阵列。对于规则的颜色阵列,各行前景色颜色不同,各列背景色不同,每个阵列元素输出的字符均是大写的‘Z’。而对于随机阵列来说16*16的阵列中的每个元素的前景色、背景色和输出字符都是随机的。
四、主要技术问题的描述
根据三的分析,主要问题在于:
1. 控制台的基本概念
控制台(Console)是一个基于字符界面的交互平台。Windows 2000里面自带的控制台同样也是一个基于字符界面的交互平台。我们本学期实验所编写的程序都是基于控制台的C++程序。
在默认设置下,Windows 2000的控制台能够显示25行80列的字符,我们可以把控制台看作是一个有25行80列的一个矩阵,每个矩阵的元素能够显示一个标准的ASCII字符(汉字需要两个元素来显示)。
2. 控制台的颜色控制
控制台中的每个元素可以使用独立的前景色和背景色。在Windows 2000的控制台中可以使用的颜色有16种,见下图:

上图中的颜色编码自左至右依次是0至15,0为黑色,15为白色。前景色和背景色都只有这16种颜色。
3. 控制台颜色的控制时机
因为控制台不能更改已经输出字符的颜色设置,所以要想更改输出的字符的颜色设置,必须在输出之前更改控制台的颜色配置。
要改变控制台的颜色设置需要调用两个Windows操作系统的API函数。GetStdHandle函数用来获得当前控制台的句柄,用SetConsoleTextAttribute函数来改变选中控制台的颜色控制。这两个函数的声明存在于<windows.h>文件中。可以将这两个调用封装到SetColor函数中:

例如:如果需要改变当前的控制台输出颜色为白底红字,则可以书写如下代码:

这段代码就可以输出白底红字的“Hello World”字符串了。
4. cout的缓冲区刷新
cout对象默认情况下并不会将用户的输出送到控制台,而是暂时存在输出缓冲区里面,而控制台的颜色控制只在向控制台输出的时候才生效。所以只有强制刷新输出缓冲区的时候颜色设置才会生效。例如我们要输出两个字符A,第一个是白底红字,第二个是红底白字,那么下面的代码:

输出的将是两个红底白字的字符“A”。因为虽然输出第一个“A”之前把控制台设置为白底红字,但是此时并没有把第一个“A”输出到控制台,而只是存放于输出缓冲区里面。然后控制台的颜色被设置为红底白字,然后输出“A”。最终程序结束的时候自动强制刷新控制台,把输出缓冲区里面的两个字符“A”都发送给控制台,因为此时的控制台颜色是红底白字,所以两个“A”都被显示为红底白字。
为了强制刷新控制台,可以使用endl和flush两个操作符,endl表示先换行然后强制刷新,flush表示直接强制刷新而不换行,所以上面的代码只要在每个cout语句的最后加上“<< flush”就可以把输出两个不同颜色配置的字符“A”了(参看下面的代码)。

5. 随机数的产生
随机数的产生可以使用rand函数,该函数的具体使用方法请查阅MSDN。
五、创新要求
在基本要求达到后,进行创新设计:
1. 使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;
2. 增加斜向条纹等各种形状的输出。
搜索更多相关主题的帖子: 颜色方阵 窗口中 控制台 源代码 
2007-06-28 17:28
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
得分:0 

for(int i=0;i<无穷大;i++){我问牛鬼蛇神:我这样快乐好???答曰:你不快乐吗??}
2007-06-28 19:07
RainyFoggy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-6-27
得分:0 
哈 你直接就copy过来了 图片也没有
2007-06-29 08:41
ttttstef
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-28
得分:0 
哎  图片不会整啊   怎么样  这道题有没有结果....??
2007-06-29 11:36
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
得分:0 
其实真的做起来应该不难吧,只是对这块不熟
看到第一段话就知道肯定是什么作业之类的

Viva,espana!
2007-06-29 12:03
ttttstef
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-28
得分:0 
岂止是不熟,压根就没学.....哎.....
2007-06-29 16:19
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
得分:0 
隶属于GDI图形编程的范畴吗?

Viva,espana!
2007-06-29 20:03
RainyFoggy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-6-27
得分:0 

好象不是吧 就是用一个函数 来改变控制台的前景色和背景色

2007-07-01 17:31
天空の城
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-7-1
得分:0 
http://wfpb.blogbus.com/logs/6167342.html
这是我收集的一个帖子,你看了应该就会了。

2007-07-01 19:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-151093-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.501379 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved