2014-09-10 13 views
0

Je veux déplacer la position du symbole "A" dans le terminal via le code suivant en C++, mais le terminal se ferme et semble ne pas entrer dans la boucle for. Je ne sais pas où j'ai tort. Je serai reconnaissant si vous me aider:déplacer le curseur en C++ en utilisant gotoXY et kbhit

« w » devrait se déplacer vers le haut devrait se déplacer vers le bas « a » et « d » « l » à droite et à gauche

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

Répondre

-1

Vous avez pas utilisé la pause; déclaration après chaque cas dans votre déclaration de commutateur. J'espère que cela t'aides.

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; 
       } 
+0

Merci à tous pour des réponses rapides – SRYZDN

0

1) Vous avez oublié d'ajouter break; après chaque case -Corps.

2) Et vous avez mis return 0; dans le corps de for -loop, donc votre programme s'arrête après la première itération.

Essayez ceci:

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; 
Questions connexes