光标定位,隐藏光标

简介: 最近写贪吃蛇游戏时,需要用到光标定位,故总结如下。 方法一: 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
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
9月前
|
Web App开发 C++
c++ 实现不在同一程序内,在光标处(当前有焦点的窗体输入框)输入字符
c++ 实现不在同一程序内,在光标处(当前有焦点的窗体输入框)输入字符
|
8月前
判断页面滚动条所在位置
判断页面滚动条所在位置
16 0
|
12月前
|
前端开发 程序员
当鼠标光标放在一张图片上,如何显示另一张图片?
当鼠标光标放在一张图片上,如何显示另一张图片?
213 1
模拟京东按键输入案例(无论光标在什么位置,按s键即可将光标定位到搜索框)
模拟京东按键输入案例(无论光标在什么位置,按s键即可将光标定位到搜索框)
模拟京东按键输入案例(无论光标在什么位置,按s键即可将光标定位到搜索框)
EditText把光标放在文本的末尾处
EditText把光标放在文本的末尾处
333 0
NotePad++中如何把横向闪烁光标(&#160;_&#160;)修改成竖向闪烁光标样式(&#160;|&#160;)?
当我们在写代码时出现的光标闪烁(横线闪烁),在键盘上找 Insert ,按这个Insert就可以把横向闪烁光标( _ )修改成竖向闪烁光标样式( | ),横向光标会在你写代码的时候修改前面的代码,把光标移到前面进行修改时,后面的代码也会随之被消除,所以需要把光标修改成竖向显示的样式。
1477 0

热门文章

最新文章