最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

【趣味程序】C++使用键盘控制物体移动

XAMPP案例 admin 168浏览 0评论

前言

在前面几篇文章中,学习了键盘事件和光标移动,在这篇文章中,我们要使用键盘的上下左右键控制在控制台中出现的角色

原理

因为我们要通过移动键盘控制光标位置,那么在此之前需要提前获取到光标位置,然后再捕获键盘事件,根据按键给gotoxy函数参数,让光标移动到参数位置,然后刷新控制台,就可以实现“移动”的效果。

获取光标当前位置函数

通过下面这个函数可以获取到当前光标。

void getXY() 
{ 
    HANDLE hStdout;
    CONSOLE_SCREEN_BUFFER_INFO pBuffer; 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    GetConsoleScreenBufferInfo(hStdout, &pBuffer); 
    cout << pBuffer.dwCursorPosition.X << pBuffer.dwCursorPosition.Y <<endl; 
}

注意:这个函数不是必须用,只是为了保险起见,在移动之前可以先获取一下光标的位置。而且,经过实际测试发现一个小问题,比如我当前gotoxy(5,5),然后我打印一个字符‘a’,再获取光标位置,这个时候光标的位置肯定是变化了,不再是5,5了。

通过键盘控制图形移动

我们上一篇说过,gotoxy和二维数组类似,但是实际上有区别。

实际操作中发现了一些问题,

上是 (x,y-d)

下是 (x,y+d)

左是 (x-d,y)

右是 (x+d,y)

也就是符合下面这个规律:

最终发现getXY不是很好用,于是就用了自增自减的方法,而且把按键改成WASD了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<conio.h>
#include<windows.h> 
int X,Y; //光标位置 
//移动函数
void gotoxy(int x, int y) {
    COORD pos = {x,y};
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
    SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
}
//获取当前光标坐标 
//void  getXY()   //弃用,不好用 
//{ 
//    HANDLE hStdout;
//    CONSOLE_SCREEN_BUFFER_INFO pBuffer; 
//    hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
//    GetConsoleScreenBufferInfo(hStdout, &pBuffer); 
//    X=pBuffer.dwCursorPosition.X;
//    Y=pBuffer.dwCursorPosition.Y;
//}
using namespace std;
int main()
{
    system("cls");
    gotoxy(10,10); 
    X=10;
    Y=10;
    printf("★");
      int ch;
    while (1){
        if (_kbhit()){//如果有按键按下,则_kbhit()函数返回真
            ch = _getch();//使用_getch()函数获取按下的键值
            if (ch == 119){  //上键 38  
                  system("cls"); 
                 gotoxy(X,Y-1);
                 printf("★");
                 Y-=1;    
            }; 
            if (ch == 115){ //下键  40 
             system("cls"); 
             gotoxy(X,Y+1);
             printf("★");
             Y+=1;
            };
            if (ch == 97){  //左  37 
             system("cls"); 
             gotoxy(X-1,Y);
             printf("★");
             X-=1;
            };
            if (ch == 100){   //39
             system("cls"); 
             gotoxy(X+1,Y);
             printf("★");
             X+=1;
            };
        }
    }
    return 0;
} 

注:本文章由《师享空间》收集整理

转载请注明:XAMPP中文组官网 » 【趣味程序】C++使用键盘控制物体移动

您必须 登录 才能发表评论!