C++游戏设计教程(3)—— 字体的颜色

 哈喽大家好,我是iecne,本期为大家带来的是CPP/C++游戏设计教程的第③期—— 字体的颜色 ,包教包会,快来看看吧!

大家都知道,初学C++或者各种语言,面对枯燥无比的题目,脑子要爆的感觉是十分难受的,不妨会想设计一款游戏玩玩,但是由于能力不足、不知道如何设计而放弃。而这一专栏将会教会你们如何设计一款简单的Cpp游戏点赞收藏关注评论支持以下博主,蟹蟹


目录

一.改变的方法

二.运用位置

1.球类游戏

2.扫雷游戏

3.2D生存游戏

三.SetConsoleTextAttribute的用法

1.介绍

2.头文件

3.十进制

四.总结

 系列文章目录


一.改变的方法

比较方便的方法有以下两种:

1.    system

2.    SetConsoleTextAttribute

SetConsoleTextAttribute比较方便,我建议大家用第二种SetConsoleTextAttribute,所以今天我们来讲讲SetConsoleTextAttribute


二.运用位置

SetConsoleTextAttribute是Windows系统中一个可以设置控制台窗口字体颜色和背景色的计算机函数,该函数被广泛应用于软件开发中

1.球类游戏

void dudang1() 
{ 
	FILE *fp=fopen("./cundang1.txt","r");
	for(int i=1;i<=SSSM;i++)
	{
	fscanf(fp,"%d",&SSSY[i]); 
	fscanf(fp,"\n");
	}
    fscanf(fp,"%d %d %d %d %d %d \n",&jinbi,&xuanxiuka,&XR,&xingyunzhi,&zongcishu,&yingcishu);
    fclose(fp); 
 }
void color(int a)
{
/*亮白*/    if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
/*蓝色*/    if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
/*绿色*/    if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
/*紫色*/    if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
/*红色*/    if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
/*黄色*/    if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
/*深蓝色*/    if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
/*土黄色or金黄色*/    if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
/*灰色接近白*/    if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
long long numberaio(string n)
{
    for (int i = 0; i < 100000; i++) 
	{
        if(n[i]=='\0')
        {
            return i;
        }
    }
}

以上代码由作者原创小游戏Supreme basketball 2.2.4中出场开头的代码


2.扫雷游戏

	else
	{
		system("cls");//清屏函数,懂得都懂,不懂的看C++游戏设计教程(2)
		for (int i = 1; i <= Y; i++)
		{
			for (int j = 1; j <= X; j++)
			{
				if (map[i][j][2] == 1)
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 255); //通过颜色的不同虚拟地图
					cout << "你"; //输出一个中文大小的位置变换符号成为地图,直接表示出来
				}
				else if (map[i][j][2] == 0 && map[i][j][0] == 0)
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 136); //通过颜色的不同虚拟地图
					cout << "空"; //输出一个中文大小的位置变换符号成为地图,直接表示出来
					//这里选择中文而不表示是因为十进制中的SetConsoleTextAttribute函数字体与单个背景相同
				}
				else if (map[i][j][0] > 0)
				{
					if (map[i][j][2] == 0)
					{
						if (map[i][j][0] == 9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 119); //字体和背景一样,不显示数字
						else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 112); //通过颜色的不同虚拟地图
					}
					if (map[i][j][2] == 1)
					{
						if (map[i][j][0] == 9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 155); //字体和背景一样,不显示数字
						else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 240); //通过颜色的不同虚拟地图
					}
					cout << " " << map[i][j][0]; //输出一个中文大小的位置变换符号成为地图,直接表示出来
					//这里选择中文而不表示是因为十进制中的SetConsoleTextAttribute函数字体与单个背景相同
				}
				else
				{
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0); //调制为初始颜色,否则颜色会溢出,导致满屏 
				}
			}
			cout << endl;
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0); //调制为初始颜色,否则颜色会溢出,导致满屏 这条代码为二层保护
	}
	Console();//马上转到控制函数,造成死循环,让我们可以随时控制

以上代码由作者原创小游戏扫雷_iecne 1.0中的设置地图的代码


3.2D生存游戏

for (int i = 1; i <= 30; i++)
	{
		cout << endl;
		for (int j = 1; j <= 65; j++)
		{
			if (dt[dtcs][i][j] == 1 )                                 
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 136);
				cout << "石";
			}
			else if (dt[dtcs][i][j] == 0)
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),102);
				cout << "土";
			}
			else if (dt[dtcs][i][j] == 100)
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 112);
				cout << "你";
			}
			else if (dt[dtcs][i][j] == 11)
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 170);
				cout << "树";
			}
		}
	}
	pdjp();

以上代码由作者原创小游戏survival 1.0中的画地图的代码

以上代码不难,但是新手难理解,看着头晕,我们下次再讲


三.SetConsoleTextAttribute的用法

1.介绍

很多时候,我们希望编写出能够拥有各种颜色的程序,能够让人眼前一亮,虽然system(color)函数可以设置颜色,但是system(color)函数设置的颜色只能有一种,这显然不是我们想要的结果,我们需要的是一个名为SetConsoleTextAttribute的函数。
SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。参数表中使用两个属性(属性之间用,隔开),不同于system(color),SetConsoleTextAttribute()可以改变界面多种颜色,而system()只能修改为一种!


2.头文件

<windows.h>


3.十进制

博主出这一期就是让大家会用,而其他乱七八糟的理论我就不多说,想要知道的BAIDU搜搜就好了,保证让你头晕

头晕地址,直接点进去

然后呢,SetConsoleTextAttribute函数分为十六进制和十进制的用法,我们呢常用十进制,相比大家不想在写数字的时候出现ABCDEF,所以这里博主善良的推荐十进制

只需要按格式来:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),那个数字);

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
	int i,ss;
	cout << "     ";
	for (i = 1; i <= 255; i++)
	{
		if (i <= 9) ss = 2 + 1;
		else if (i >= 10 && i <= 99) ss = 2;
		else ss = 1;
		for (int j = 1; j < ss; j++)
		{
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), i);
			cout << " ";
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), i);
		cout << i;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0);
			cout << "  ";
		if (i == 15) cout << endl;
		else
		{
				if ((i+1) % 16 == 0 && i!=0)
				{
					cout << endl;
				}
		}
	}
}

话说代码有点烦人哈,结果如下

 如我们要黑底黑字

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0);

我们要白底黑字

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);

按照这个程序的结果来就行


四.总结

本节课主要是讲解了SetConsoleTextAttribute函数,至此SetConsoleTextAttribute的思想博主已经彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下

包教包会,帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!


 系列文章目录

 本期收录于博主的专栏——C++游戏设计教程,感兴趣的朋友们可以订阅,查看其它专栏。

C++游戏设计教程_iecne的博客-CSDN博客

C++游戏设计教程(1) 随机数

C++游戏设计教程(2) Sleep睡眠与常用system

C++游戏设计教程(3) 字体的颜色


 感谢每一个观看本篇文章的朋友,更多精彩敬请期待:iecne的博客_CSDN博客-C++保姆级入门教程领域博主

文章存在借鉴,如有侵权请联系修改删除!

猜你喜欢

转载自blog.csdn.net/CSDN_linyanchen/article/details/126054671
今日推荐