前面输出爱心已经成功了,但是感觉只是白色有点单调啊。要是能加点动态效果,应该更好一点吧。今天,小猫想改变一下输出的爱心的颜色,让它闪动起来。

怎么改变控制台输出的字符颜色呢?可以用这个函数system("color XX"),这个函数在stdlib.h文件中。它可以改变整个控制台的背景颜色和前景颜色。其中的参数是一条字符串"color XX",中间有个空格。XX是两个16进制数,分别代表背景颜色和前景颜色,所以总的颜色有16种。小猫记得0代表黑色,1代表蓝色,等等。这样"color 01"就代表输出背景为黑色,字符为蓝色。如果背景为黑色,第一个0可以不写,因为背景默认为黑色。小猫决定就背景保持黑色,每隔一段时间就将字符颜色改变一次,不就实现闪动效果了吗?

怎样使用较少的语句来实现在多种颜色间切换呢?总不至于每种颜色写条语句吧。小猫注意到改变颜色的代码都是system("color x")的形式,只要改变参数字符串里面的X就可以了。想到这里,小猫马上想到另一个函数sprintf(),它可以向一个字符串中进行格式化输出,就像向屏幕输出一样。例如:

char str[20];
sprintf(str,"hello,world!");  //向str中输出hello,world!
printf("%s",str)  //会输出hello,world!

printf()函数在stdio.h中。

另外,小猫想,让16种颜色随机变化更好一点。所以想到了rand()函数,这个函数同样在stdlib.h中。它可以输出一个随机值。这个随机值在0~RAND_MAX之间变化,通过查看stdlib.h文件,发现这样一行:

#define RAND_MAX 0x7fff  

说明rand()函数输出的随机值在0~32767之间。将rand()函数的输出值对16求余,就可以得到0~15范围内的随机值了。

还需要一个延迟时间的函数,unistd.h文件里面有一个sleep()函数,参数是延迟的秒数。万事俱备,最后的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <conio.h>
int main()
{
	for (float y = 1.5f; y > -1.5f; y -= 0.1f) 
	{
		for (float x = -1.5f; x < 1.5f; x += 0.05f) 
		{
			float a = x * x + y * y - 1;
			putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' ');
		}
		putchar('\n');
	}
	for(;!kbhit();)    //kbhit()位于conio.h中,检测是否有键按下
	{
		char str[10];
		sprintf(str,"color %x",rand() % 16); //形成一条color X的字符串,注意要用%x
		system(str);
		sleep(0.5);
	}
    return 0;
}

看看效果:

效果还不错。开心。

更多推荐

C语言学习日记(10)——给心形加点闪动效果