2016-04-24 9 views
-2

私はC++コンソールゲームを作ろうとしています。ボーダーとして '#'があり、キーボードで移動できる '@'があります。しかし、ボタンを押すと、何も起こりません...この現象を引き起こした原因を突き止めることはできません。GetAsyncKeyState()は動作しません。コンソールゲームを作成します。

 #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; 
} 
+3

キーが押されているかどうかをテストするための正しい方法は、if( 'ですGetAsyncKeyState(...)<0) 'を返します。あなたのコードのロジックに何が間違っているかについては、字下げのために読みにくいです。あなたは本当にそのようなコードをインデントしていますか?あなたのプログラムのデバッグを考えましたか?それが何を意味するのか分からなければ、より多くのコードを書くのを止め、デバッグの仕方を学び始める必要があります。他の活動はあなたの時間を無駄にするだけです。 –

+0

私のコードではありません。このビデオのコードで遊んでいます。https://www.youtube.com/watch?v=kfRjvvgjTNQ&list=PLGxFit7OrNc5jjF5rHPZSCaovAw_FvUiI&index=2 私の主な関心事は、とにかく記号を動かす。 – parsecer

+0

GetAsyncKeyStateを使用すると、コンソールアプリケーションから気になることがあります。ユーザ32のその部分およびその付随機能は、すべて、メッセージループによって管理されるキー構成を処理する。 –

答えて

1

ああ、悪いフォーマットとコードのスタイルが、あなたがwhileサイクルの閉じかっこを追加する場合、私のためにそれが働いている:

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

これは "ループ"と呼ばれています。 –

+0

ええ、ええ、ありがとう、ちょうどタイプミス。 – sashadereh

+0

質問には実際のコードが含まれていないことは明らかです。そうした場合、適切にインデントされ、適切な数の中カッコが作成されます。 –

関連する問題