哈喽大家好,我是iecne,本期为大家带来的是CPP/C++游戏设计教程的第③期—— 字体的颜色 ,包教包会,快来看看吧!
大家都知道,初学C++或者各种语言,面对枯燥无比的题目,脑子要爆的感觉是十分难受的,不妨会想设计一款游戏玩玩,但是由于能力不足、不知道如何设计而放弃。而这一专栏将会教会你们如何设计一款简单的Cpp游戏,快点赞收藏关注评论支持以下博主,蟹蟹
目录
一.改变的方法
二.运用位置
1.球类游戏
2.扫雷游戏
3.2D生存游戏
三.SetConsoleTextAttribute的用法
1.介绍
2.头文件
3.十进制
四.总结
系列文章目录
比较方便的方法有以下两种:
1. system
2. SetConsoleTextAttribute
SetConsoleTextAttribute比较方便,我建议大家用第二种SetConsoleTextAttribute,所以今天我们来讲讲SetConsoleTextAttribute
SetConsoleTextAttribute是Windows系统中一个可以设置控制台窗口字体颜色和背景色的计算机函数,该函数被广泛应用于软件开发中
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中出场开头的代码
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中的设置地图的代码
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中的画地图的代码
以上代码不难,但是新手难理解,看着头晕,我们下次再讲
很多时候,我们希望编写出能够拥有各种颜色的程序,能够让人眼前一亮,虽然system(color)函数可以设置颜色,但是system(color)函数设置的颜色只能有一种,这显然不是我们想要的结果,我们需要的是一个名为SetConsoleTextAttribute的函数。
SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。参数表中使用两个属性(属性之间用,隔开),不同于system(color),SetConsoleTextAttribute()可以改变界面多种颜色,而system()只能修改为一种!
博主出这一期就是让大家会用,而其他乱七八糟的理论我就不多说,想要知道的BAIDU搜搜就好了,保证让你头晕
头晕地址,直接点进去
然后呢,SetConsoleTextAttribute函数分为十六进制和十进制的用法,我们呢常用十进制,相比大家不想在写数字的时候出现ABCDEF,所以这里博主善良的推荐十进制
只需要按格式来:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),那个数字);
#include
#include
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++保姆级入门教程领域博主
文章存在借鉴,如有侵权请联系修改删除!