利用windows.h中的SetConsoleCursorPosition光标位置控制
SetConsoleCursorPosition是一个C语言中的windows.h库函数,声明变量COORD coord,COORD 是一个结构体,X,Y表示列和行,注意:X是列,Y是行(与正常逻辑相反)。
- 通过修改pos.X和pos.Y的值就可以实现光标的位置控制。,其中pos.X=0,pos.Y=0,为控制台左上角。
- printf(“\033[m<==\033[?25l”);其中,格式为printf(“\033[m【定义内容】\033[?25l”);主要用于无光标闪烁打印内容。
效果如下:
实现功能:'w’键向上选择,'s’键向下选择,数字1选择第一行,数字2选择第二行,数字3选择第三行。
代码如下:
代码粗略,可优化。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#define N 1024
//定位箭头
static COORD coord;
void Move(char dir)
{
COORD originCoord = coord;
if (dir == 'w' && coord.Y <= 4 && coord.Y > 2)
{
coord.Y--;
}
else if (dir == 's' && coord.Y < 4 && coord.Y >= 2)
{
coord.Y++;
}
else if (dir == '1')
{
coord.Y = 2;
}
else if (dir == '2')
{
coord.Y = 3;
}
else if (dir == '3')
{
coord.Y = 4;
}
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), originCoord);
printf(" ");
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[m<==\033[?25l");
}
static char menuContent[3][N] = {
{"1.游戏开始"},
{"2.保存文档"},
{"3.退出游戏"}
};
void printMenu() {
coord.X = 10;//列
coord.Y = 2;//行
for (int i = coord.Y,j=0; i <= 4; i++)
{
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
coord.Y++;
printf("%s\n", menuContent[j++]);
}
coord.X = 20;
coord.Y = 2;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[m<==\033[?25l");
}
int main()
{
printMenu();
while (1)
{
if (_kbhit())
{
char Direction = _getch();
if (Direction == 'w' || Direction == 's' || Direction == '1' || Direction == '2' || Direction == '3')
{
Move(Direction);
}
}
}
return 0;
}