• 光标定位,隐藏光标


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

    方法一:

     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 }
  • 相关阅读:
    MySql控制台命令
    MySql笔记
    Unity打包android时会出的一些问题
    Unity3D2017.3.0基于Vuforia 开发AR流程(1)
    基于Unity开发广州幻境的Handy结合HTC Tracker的开发坑
    基于Unity 关于SteamVR中 手柄/Tracker不显示的问题
    使用Socket对序列化数据进行传输(基于C#)
    7. 整数反转
    6. Z 字形变换
    53. 最大子序和
  • 原文地址:https://www.cnblogs.com/heyonggang/p/2816675.html
Copyright © 2020-2023  润新知