Windows.h e gotoxy

di il
8 risposte

Windows.h e gotoxy

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

  • Re: Windows.h e gotoxy

    Potresti pensare semplicemente a scrivere
    
             c=getch();
             gotoxy(x,y);
             putchar(32);
    
  • Re: Windows.h e gotoxy

    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.
  • Re: Windows.h e gotoxy

    Veramente funziona ... cosa hai scritto ...
  • Re: Windows.h e gotoxy

    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
  • Re: Windows.h e gotoxy

    Ok ... ma mi sembrava chiaro ... avevo messo appositamente la

    c=getch();

    Comunque, quello switch va migliorato ...
  • Re: Windows.h e gotoxy

    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?
  • Re: Windows.h e gotoxy

    @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
  • Re: Windows.h e gotoxy

    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