网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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;
}
}
}
}
话说代码有点烦人哈,结果如下
如我们要黑底黑字
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0);
我们要白底黑字
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
按照这个程序的结果来就行
四.总结
本节课主要是讲解了SetConsoleTextAttribute函数,至此SetConsoleTextAttribute的思想博主已经彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下
包教包会,帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!
系列文章目录
本期收录于博主的专栏——C++游戏设计教程,感兴趣的朋友们可以订阅,查看其它专栏。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
402)]
[外链图片转存中…(img-MVArWHig-1715821334403)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新