SetConsoleCursorPosition

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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值