第二次按下键时光标不动

时间:2015-08-31 21:32:58

标签: c++ cursor

嘿,我在visual studio 2013中有一个c ++代码。 我想将光标向上移动到左下方。但是当我第二次按下相同的按键时它没有移动的问题。

提前致谢 这是我的代码

do
{
    // Get user input (non-blocking) if it exists
    WORD wKeyCode = GetKey();

    // Process input to update application state
    switch(wKeyCode)
    {
    case VK_ESCAPE:
        bExit = true;
    case VK_LEFT:
        if(X >= 0 && X < MAP_WIDTH){
            gotoxy(X - 1, Y);
        }
        break;

    case VK_RIGHT:
        if(X >= 0 && X < MAP_WIDTH){
            gotoxy(X + 1, Y);
        }
        break;
    case VK_UP:
        if(Y >= 0 && Y < MAP_HEIGHT){
            gotoxy(X, Y - 1);
        }
        break;
    case VK_DOWN:
        if(Y >= 0 && Y < MAP_HEIGHT){
            gotoxy(X, Y + 1);
        }
        break;
    case VK_SPACE:
        if(tileMap[X][Y] == WALL){
            tileMap[X][Y] = EMPTY;
        }
        else if(tileMap[X][Y] == EMPTY){
            tileMap[X][Y] = WALL;
        }
        break;
    };

和goto函数

void gotoxy(int X, int Y)
{
    COORD coord;
    coord.X = X;
    coord.Y = Y;
    SetConsoleCursorPosition(
        GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

1 个答案:

答案 0 :(得分:0)

您应该在每种情况下更改XY变量的方式与将其传递给qotoxy的方式相同,(或者如果它们是全局的话,只需在gotoxy中执行) 。如果你想进行相对运动,你需要跟踪光标的位置。

case VK_LEFT的示例:

if(X >= 0 && X < MAP_WIDTH) {
    gotoxy(X - 1, Y);
    X = X - 1; // or --X;
}

简约版:

if(X >= 0 && X < MAP_WIDTH) {
    gotoxy(--X, Y);
}