GetAsyncKeyState()不起作用,制作控制台游戏

时间:2016-04-24 11:20:29

标签: c++ winapi

我正在尝试制作一个c ++控制台游戏 - 有一个带有'#'作为边框的地图和一个可以通过键盘移动的'@'。但是当按下按钮时,没有任何反应......无法弄清楚可能导致此行为的原因。

      #include <iostream>
      #include <windows.h>

      using namespace std;

        char Map[10][10]={  "#########", 
                               "#       #",  
                                 "#       #",
                                "#       #",
                                 "#       #",
                                 "#       #",
                                "#       #",
                                 "#       #",
                                "#@      #",
                                 "#########"};

     int Gamespeed=100;
     int lvl=0;
     bool stopgame=false;


  int main()
  {
    while (stopgame==false)
    {
            system("cls");
            for (int y=0; y<10; y++)
            {
                cout<<Map[y]<<endl; //rows
    }


    for (int y=0; y<10; y++)   //rows
        for (int x=0; x<10; x++)   //columns
                {
                        switch (Map[y][x])
                        {
                        case '@':
                            {  cout<<"@ here";
                                if (GetAsyncKeyState(VK_UP)!=0)
                                {   cout<<"Key up";
                                    int y2=y-1;
                                    switch (Map[y2][x])
                                    {
                                    case ' ':
                                        {
                                            Map[y][x]=' ';
                                            y--;
                                            Map[y][x]='@';
                                        }
                                        break;
                                    }
                                }

                                if (GetAsyncKeyState(VK_DOWN)!=0)
                                {
                                            switch (Map[y+1][x])
                                                {
                                                case ' ':
                                                    {
                                                            Map[y][x]=' ';
                                                            y++;
                                                            Map[y][x]='@';
                                                    }
                                                    break;
                                                }

                                }

                                if (GetAsyncKeyState(VK_RIGHT)!=0)
                                {
                                    switch (Map[y][x+1])
                                    {
                                    case ' ':
                                        {
                                            Map[y][x]=' ';
                                            x++;
                                            Map[y][x]='@';
                                        }
                                        break;
                                    }
                                }

                                if (GetAsyncKeyState(VK_LEFT)!=0)
                                {
                                    switch (Map[y][x-1])
                                    {
                                    case ' ':
                                        {
                                            Map[y][x]=' ';
                                            x--;
                                            Map[y][x]='@';
                                        }
                                        break;
                                    }
                                }
                            }
                        }


                }






return 0;
 }

1 个答案:

答案 0 :(得分:1)

哦,糟糕的格式和代码风格,但对我来说,如果你为while周期添加紧密支撑它是有效的:

int main()
{
    while (stopgame == false)
    {
        // your code here
    } // <- you don't have this brace
    return 0;
}