最全【C++游戏设计】 通过函数设置字体的颜色_c+,2024年最新阿里后台开发

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

ce4c26768b2247fbbc3dd785d04a0090.png

如我们要黑底黑字

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0);

我们要白底黑字

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);

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


四.总结

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

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


系列文章目录

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

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

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

402)]
[外链图片转存中…(img-MVArWHig-1715821334403)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值