SetConsoleCursorPosition含义
写这个文章的根源是这段代码:
《贪吃蛇》游戏中,游戏舞台的尺寸设定为高度height,宽度width,但本节案例的实际执行稍有偏差。以舞台的第i行为例,左墙的坐标为(0,i),右墙坐标为(width-1,i),实际舞台的宽度为width-2。该情况可能会为后续蛇的移动判定带来困扰。请尝试设计一种舞台的游戏数值表达方案,使得舞台左右墙体和贪吃蛇舞台坐标的表示,不会出现混乱。
//光标位置设定函数,让舞台坐标XY与屏幕坐标xy关联,让用户不用去考虑屏幕的物理坐标
void setPos(int X, int Y)
{
COORD pos;
//COORD是windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。
//这一句定义了一个结构体变量pos,它的两个成员是X和Y
pos.X = CORNER_X + X + THICHKNESS;
//结构体变量里面的成员:pos的横坐标X是,x+宽度+角落
pos.Y = CORNER_Y + Y + THICHKNESS;
//同上
SetConsoleCursorPosition(h, pos);
//setconsoleCursorPosition函数需要调用:handle 和coord两个参数。
}
for (int i = 0; i < height; i++)
{
setPos(-THICHKNESS, i);//绘制左右的墙
for (int j = 0; j < width+THICHKNESS*2; j++)
{
if (j == 0)
cout << "#";
else if (j == width + THICHKNESS)
cout << "#";
else
cout << " ";
}
cout << endl;
}
舞台坐标XY与屏幕坐标xy关联,让用户不用去考虑屏幕的物理坐标?
这句话我直接看不懂。
先理解一下,
#include<stdio.h>
#include<Windows.h>//需要这个头文件
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x; //=6
pos.Y = y; //=10
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
int main(void)
{
gotoxy(6, 10);// 即gotoxy(x,y)里面xy的参数。
printf("这位置就是(6,10)\n");
return 0;
}
GetStdHandle是获得输入、输出或错误的屏幕缓冲区的句柄。其参数如下:
STD_INPUT_HANDLE标准输入的句柄STD_OUTPUT_HANDLE标准输出的句柄STD_ERROR_HANDLE标准错误的句柄
SetConsoleCursorPosition()来自于文件"windows.h",使用时记得引用此头文件。
首先说一下,这个函数的功能即是字面意思,即移动命令行中光标的位置。这里要注意的是,每次调用这个函数都是默认从左上角开始偏移,而与当前光标停留的位置无关。
调用这个函数需要传入两个参数,都是自定义类型,分别为 HANDLE 和 COORD。
SetConsoleCursorPosition(
In HANDLE hConsoleOutput,
In COORD dwCursorPosition
);
https://blog.csdn.net/weixin_30901729/article/details/97362127?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control