光标定位,隐藏光标

简介: 最近写贪吃蛇游戏时,需要用到光标定位,故总结如下。 方法一: 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.

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

方法一:

 1 #include<windows.h>
 2 #include<stdio.h>
 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()函数

 1 #include <stdio.h>
 2 #include <windows.h>
 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 }

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

 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 }

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

 1 #include <windows.h> 
 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"

 1 #include <windows.h>
 2 #include <iostream>
 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 }

 

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
Web App开发 C++
c++ 实现不在同一程序内,在光标处(当前有焦点的窗体输入框)输入字符
c++ 实现不在同一程序内,在光标处(当前有焦点的窗体输入框)输入字符
132 1
模拟京东按键输入案例(无论光标在什么位置,按s键即可将光标定位到搜索框)
模拟京东按键输入案例(无论光标在什么位置,按s键即可将光标定位到搜索框)
模拟京东按键输入案例(无论光标在什么位置,按s键即可将光标定位到搜索框)
|
Shell Android开发
模拟按键,点击,滑动,在光标处输出字符
电脑adb命令 输出文本 adb shell input text 132abc  '不支持中文 模拟按键  adb shell input keyevent 3模拟触摸  adb shell input tap 100 100模拟滑动  adb shell input swipe 100 300 ...
1178 0
Cass环境下光标无显示
先安装CAD2004,十字光标正常显示;再安装CASS7.0,光标就不显示了。现在不清楚是CAD的问题,还是CASS的问题,多半是后者。重新配置了CASS环境也不行。 于是,打开CAD选项,显示,窗口元素,颜色,全部默认,即可。
1037 0

热门文章

最新文章