光标定位,隐藏光标

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

方法一:

 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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C# 编程

[C#]使用IFormattable接口来实现字符串格式化

本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:...

26300
来自专栏非典型技术宅

iOS实践:一步步实现星级评分1. 创建星星2. 优化3. 灵异事件

18840
来自专栏跟着阿笨一起玩NET

ZPL打印中文信息

  相信各位在实际的项目中,需要开发打条码模块的也会有不少,很多同行肯定也一直觉得斑马打印机很不错,但是ZPL打印中文字符很麻烦。如果购买字体卡,或者通过COD...

47710
来自专栏mathor

Hanoi(汉诺塔)

14120
来自专栏JackieZheng

漫谈可视化Prefuse(四)---被玩坏的Prefuse API

  这个双12,别人都在抢红包、逛淘宝、上京东,我选择再续我的“漫谈可视化”系列(好了,不装了,其实是郎中羞涩。。。) 上篇《漫谈可视化Prefuse(三)-...

26050
来自专栏跟着阿笨一起玩NET

ASP.NET 存储过程操作

存储过程是存放在数据库服务器上的预先编译好的sql语句。使用存储过程,可以直接在数据库中存储并运行功能强大的任务。存储过程在第一应用程序执行时进行语法检查和编...

16010

.NET中的密钥加密

本教程将演示如何通过System.Security.Cryptography在.NET Framework 1.1中实现对称加密/密钥加密。

63280
来自专栏xingoo, 一个梦想做发明家的程序员

文件上传---动作条

  利用Apache commons fileupload上传文件,直接显示其完成的进度条。----示例代码源自《JAVA WEB王者归来》   1 首先要显示...

26380
来自专栏Java与Android技术栈

Scrypt 不止是加密算法,也是莱特币的挖矿算法

Scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。Scrypt 没有在生...

14740
来自专栏码匠的流水账

聊聊pg jdbc的queryTimeout及next方法

本文主要介绍一下pg jdbc statement的queryTimeout及resultSet的next方法

38910

扫码关注云+社区

领取腾讯云代金券