光标定位,隐藏光标

admin
2026-06-21 06:57:35

最近写贪吃蛇游戏时,需要用到光标定位,故总结如下。

方法一:

代码语言:javascript复制 1 #include

2 #include

3

4 HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);

5 COORD coord;

6 void locate(int x,int y)

7 {

8 coord.X=x;

9 coord.Y=y;

10 SetConsoleCursorPosition(hout,coord);

11

12 };

13

14 int main()

15

16 {

17 locate(2,2);

18 printf("hello world\n“);

19 return 0;

20 }方法二:利用goto()函数

代码语言:javascript复制 1 #include

2 #include

3

4 void gotoxy(int x, int y)

5 {

6 COORD coord = {x, y};

7 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

8 }

9

10 void main()

11 {

12 gotoxy(3, 3);

13 printf("Hello World!\n");

14 }在贪吃蛇类的小游戏中经常会用到光标定位和隐藏光标。

代码语言:javascript复制 1 /*** 光标定位 ***/

2 HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);

3 COORD coord;

4 void locate(int x,int y)

5 {

6 coord.X=x;

7 coord.Y=y;

8 SetConsoleCursorPosition(hout,coord);

9 };

10 /*** 隐藏光标 ***/

11 void hide()

12 {

13 CONSOLE_CURSOR_INFO cursor_info={1,0};

14 SetConsoleCursorInfo(hout, &cursor_info);

15 }这样一来,做个字符版的俄罗斯方块或者贪吃蛇一类的小游戏就比较容易了。

代码语言:javascript复制 1 #include

2

3 void HideCursor()

4 {

5 CONSOLE_CURSOR_INFO cursor_info = {1, 0};

6 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

7 }

8

9 函数和结构体都在windows.h中定义,函数用法简单就不说了。

10 CONSOLE_CURSOR_INFO结构体定义如下:

11 typedef struct

12 { DWORD dwSize;

13 BOOL bVisible; //为0时光标不可见

14 }CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

15

16 VC,MinGW中均没问题。 CROOD就是这样的一个玩意:

typedef struct _COORD {

SHORT X;

SHORT Y;

} COORD, *PCOORD;

很明显这个结构可以用来记录坐标

GetStdHandle()函数获得标准输入输出的句柄,参数STD_OUTPUT_HANDLE是个宏,代表标准输出,可以看作显示器

SetConsoleCursorPosition(hout,coord); 看函数名称:设置控制台光标坐标,参数就是设备句柄,坐标,那么把标准输出的句柄传给函数,就可以把光标定位在对应的位置了(左上角位置是0,0然后向左 向下延伸)

下面这段代码可以在屏幕第10行第30列输出"Hello world"

代码语言:javascript复制 1 #include

2 #include

3 using namespace std;

4 int main()

5 {

6 HANDLE hout;

7 COORD coord;

8 coord.X=30;

9 coord.Y=10;

10 hout=GetStdHandle(STD_OUTPUT_HANDLE);

11 SetConsoleCursorPosition(hout,coord);

12

13 cout<<"Hello world!\n";

14 return 0;

15 }