使用gotoXY和kbhit在c ++中移动光标

时间:2014-09-10 06:31:46

标签: c++ kbhit

我想移动符号的位置" A"在终端中通过c ++中的以下代码,但终端关闭,似乎它没有进入for循环。我不知道自己哪里错了。如果你帮助我,我将不胜感激:

' W'应该提升它 ' S'应该把它放下来 '一个'并且' d'左右

 #include <iostream>
 #include <conio.h>
 #include <string>
 #include <Windows.h>
 using namespace std;

 void goToXY(int x=0,int y=0)
 {
     HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
     COORD c;
     c.X=x;
     c.Y=y;
     SetConsoleCursorPosition(h,c);
 }

 int main()
 {

     char symbol='A';
     int X=0, Y=0;

     goToXY(X,Y);
     cout<<symbol;

     for(;;)
     {
         if(kbhit())
         {
             char ch = getch();
             switch(ch)
             {
             case 'w':
                 goToXY(X,Y-1);
                 cout<<symbol;

             case 's':
                 goToXY(X,Y+1);
                 cout<<symbol;

             case 'a':
                 goToXY(X-1,Y);
                 cout<<symbol;

             case 'd':
                 goToXY(X+1,Y);
                 cout<<symbol;
             }
         }

         getch();
         return 0;
    }    
}

2 个答案:

答案 0 :(得分:0)

1)您忘记在每个break; - 身体后添加case

2)并且您已将return 0;置于for - 循环体中,因此您的程序会在首次迭代后停止。

试试这个:

for(;;)
{
      if(kbhit())
      {
           char ch = getch();
           switch(ch)
           {
           case 'w':
               goToXY(X,Y-1);
               cout<<symbol;
               break;
           case 's':
               goToXY(X,Y+1);
               cout<<symbol;
               break;
           case 'a':
               goToXY(X-1,Y);
               cout<<symbol;
               break;
           case 'd':
               goToXY(X+1,Y);
               cout<<symbol;
               break;
          }
     }
}
getch();
return 0;

答案 1 :(得分:-1)

你还没有用过休息时间;在switch语句中的每个case之后的语句。希望这会有所帮助。

switch(ch)
               {
               case 'w':
                   goToXY(X,Y-1);
                   cout<<symbol;
                   break;
               case 's':
                   goToXY(X,Y+1);
                   cout<<symbol;
                   break;
               case 'a':
                   goToXY(X-1,Y);
                   cout<<symbol;
                   break;
               case 'd':
                   goToXY(X+1,Y);
                   cout<<symbol;
                   break;
               }