Windows.h e gotoxy

di Anonimizzato13128 il
8 risposte
Salve a tutti ho fatto questo programma che con le freccette (w,s,d,a) crea una riga e va dove dico io:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
void gotoxy(int x,int y)
{
     HANDLE stdHandle;
     COORD coord;
     coord.X=x;
     coord.Y=y;
     stdHandle=GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleCursorPosition(stdHandle,coord);
     SetConsoleTextAttribute(stdHandle,FOREGROUND_BLUE | FOREGROUND_GREEN);
}
int main()
{
  int continua=1;
  int x=30,y=10;
  char c;
  gotoxy(x,y);
  putchar(219);
  while(continua==1)
  {
     if(kbhit())
     {
         c=getch();
         switch(c)
         {
               case 'w': case 'W':
                                  y=y-1;
                                  gotoxy(x,y);
                                  putchar(219);
                                  break;
               case 's': case 'S':
                                  y=y+1;
                                  gotoxy(x,y);
                                  putchar(219);
                                  break;
               case 'd': case 'D':
                                  x=x+1;
                                  gotoxy(x,y);
                                  putchar(219);
                                  break;
               case 'a': case 'A':
                                  x=x-1;
                                  gotoxy(x,y);
                                  putchar(219);
                                  break;
         }
      }
   }
   fflush(stdin);
   getchar();
   return 0;
}
il programma funziona senza problemi ma volevo sapere se c'è un modo per far si che la riga non lasci traccia? Mi spiego meglio nel senso che quando uso le freccette il quadratino si sposta ma non lascia traccia di dov'era prima, quindi c'è un singolo quadratino che si muove.
Ho provato con system("cls") ma esce una schifezza perchè bisogna continuare a premere le freccette se no il pallino non si vede e poi system("cls") pulisce tutto lo schermo cosa che non vorrei accadesse. Grazie!

8 Risposte

  • Potresti pensare semplicemente a scrivere
    
             c=getch();
             gotoxy(x,y);
             putchar(32);
    
  • Non funziona, io devo fare un programma con il quadratino e quando premo W il quadratino va su quando S va giù, quando premo A va a sinistra e quando premo D va a destra. L'ho già realizzato questo programma ma lascia il segno tutte le volte che premo w,s,d o a devo solo spostarlo.
  • Veramente funziona ... cosa hai scritto ...
  • Ok ok scusa non avevo ben capito dove andava messo quello che avevi scritto e l'avevo messo nel posto sbagliato grazie mille ora funziona
  • Ok ... ma mi sembrava chiaro ... avevo messo appositamente la

    c=getch();

    Comunque, quello switch va migliorato ...
  • Sì, lo so sto andando in off-topic.
    Stai seguendo qualche guida per l'uso di windows.h? Un libro? In che modo stai studiando tutto questo?
  • @Domenico ... perché non apri un tuo thread ?

    In ogni caso, non si studia windows.h (non puoi studiare da un include), ma le API di Windows ... ci sono tanti libri, il più famoso il Petzold
  • Quali consigli mi dai per migliorare lo switch?
    in risposta a domenico no non sto studiando questo su un libro lo sto facendo a scuola e sul libro di scuola non ci sono queste ce le fa fare il prof nelle ore di pratica.
    Comunque volevo chiedere ho fatto un piccolo gioco con i blocchi che scorrono e un blocchettino che deve saltare tipo line runner o the impossible game, ho scritto questo:
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<windows.h>
    void gotoxy(int x,int y)
    {
         HANDLE stdHandle;
         COORD coord;
         coord.X=x;
         coord.Y=y;
         stdHandle=GetStdHandle(STD_OUTPUT_HANDLE);
         SetConsoleCursorPosition(stdHandle,coord);
         SetConsoleTextAttribute(stdHandle,FOREGROUND_BLUE | FOREGROUND_GREEN);
    }
    int main()
    {
      int continua=1;
      int x=4,y=14;
      char c;
      int j;
      int i;
      int a;
      int b=14;
      gotoxy(x,y);
      putchar(219);
      for(j=0;j<80;j++){
         for(i=15;i<16;i++)
         {
             gotoxy(j,i);
             putchar(219);
         }
      }
      while(continua==1)
      {
         if(kbhit())
         {
             c=getch();
             gotoxy(x,y);
             putchar(32);
             switch(c)
             {
               
                   case 'w': case 'W':
                                      
                                      y=y-2;
                                      x=x+1;
                                      gotoxy(x,y);
                                      putchar(32);
                                      x++;
                                      gotoxy(x,y);
                                      putchar(32);
                                      x++;
                                      gotoxy(x,y);
                                      putchar(32);
                                      x++;
                                      gotoxy(x,y);
                                      putchar(219);
                                      _sleep(80);
                                      gotoxy(x,y);
                                      putchar(32);
                                      y++;
                                      x++;
                                      gotoxy(x,y);
                                      putchar(219);
                                      _sleep(80);
                                      
                                      gotoxy(x,y);
                                      putchar(219);
                                      gotoxy(x,y);
                                      putchar(32);
                                      gotoxy(4,14);
                                      putchar(219);
                                      x=4;
                                      y=14;
                                      for(a=60;a>0;a--){
                                         
                                         gotoxy(a,b);
                                         putchar(219);
                                         _sleep(60);
                                         gotoxy(a,b);
                                         putchar(32);
                                      }
                                      break;
             }
           
          }
       }
       fflush(stdin);
       getchar();
       return 0;
    }
    
    ma c'è un problema il blocco scorre ma nello stesso momento in qui il blocco scorre non posso saltare quindi posso saltare solo dopo che il blocco è passato. Ho provato a mettere le funzioni dello scorrimento dello sblocco fuori dal case ma la cosa non cambia, devo praticamente fare due cose nello stesso momento cioè poter saltare mentre il blocco scorre ma con quello che so non so come fare.
Devi accedere o registrarti per scrivere nel forum
8 risposte