一、光标
1、隐藏光标
2、获取光标位置
3、移动光标
二、窗口大小
1、调整大小
2、固定大小
三、颜色
1、cmd 命令颜色
2、windows.h 颜色
3、wprintf 颜色
四、控制台
1、标题
2、分离
3、分配新窗口
学习C++刚不久的小萌新,经常会写亿些 控制台上神奇的小游戏。
但是,控制台作为一个黑窗口,固然没有其他UI窗口那么灵活,
所以,这里将介绍用控制台做游戏的必备操作!
本篇文章全程需要:Windows.h 头文件
如果打游戏时有一个光标在屏幕上闪来闪去,总是会影响游戏体验欸!
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
作者觉得这个指令不是很常用,备用吧。
函数返回 COORD 类型的指针位置,用 .x .y 获取 x y 坐标
COORD GetCursorPos()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo);
return bInfo.dwCursorPosition;
}
重要的事情说三遍!非常重要!!!非常重要!!!非常重要!!!
参数分别是目标位置的 x y 坐标
void gotoxy(int x, int y)
{
HANDLE hout;
COORD pos;
pos.X = x;
pos.Y = y;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout, pos);
}
作为一个像样的游戏窗口总有一个合适的大小,不可能用控制台默认的奇怪的大小。
参数分别为窗口行列的数量
void setsize(int col, int row)
{
char cmd[64];
sprintf(cmd, "mode con cols=%d lines=%d", col, row);
system(cmd);
}
调完大小,会发现一个问题:有些不听话的玩家会自行调整窗口大小,于是我们就要固定窗口大小,禁止玩家调整。
这是一行非—————常—————长的代码,直接抄就行了,禁止用户最大化、调整大小
SetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE, GetWindowLongPtrA(GetConsoleWindow(),GWL_STYLE)& ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);
第一种改变输出颜色的方法,就是利用cmd命令改变全部颜色,并不常用。
改变箭头处的数字,得到不同的颜色
system("color 1");
^
第二种改变输出颜色的方法,反正就是亿堆函数、结构体。颜色有限,不是最佳。
具体用法参考:C++ 设置控制台字体主题,颜色和背景颜色_爱学习的蓝调的博客-CSDN博客_setconsolecolor
void color(int fore, int back)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (back << 4) + fore);
}
第三种改变输出颜色的方法,直接用 RGB 颜色,非常好用!
需额外包含头文件:wchar.h
前面6行代码不可删去!!!
具体说明参考:https://blog.csdn.net/heveral/article/details/121220483?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167446686616800180695447%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167446686616800180695447&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-121220483-null-null.blog_rank_default&utm_term=C%2B%2B%20wprintf&spm=1018.2226.3001.4450
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == INVALID_HANDLE_VALUE) return GetLastError();
DWORD dwMode = 0;
if (!GetConsoleMode(hOut, &dwMode)) return GetLastError();
dwMode |= 0x0004;
if (!SetConsoleMode(hOut, dwMode)) return GetLastError();
wprintf(L"\x1b[38;2;%d;%d;%dmHelloworld", 0, 0, 200);
控制台默认的标题是exe程序的文件路径,非常扎眼,所以要改一改
箭头处的字符串更改为标题即可
SetConsoleTitle("title");
^^^^^
FreeConsole();
AllocConsole();
当然,这只是部分操作,或者说是“基础操作”。那就说到这里吧!