Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - programma tasti
Forum - Pascal - programma tasti

Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 20:38
Domenica, 20/02/2011
Codice sorgente - presumibilmente Delphi

  1. program tasti;
  2. uses crt;
  3. var x,y:integer;
  4. var a:boolean;
  5. var t:char;
  6. Begin
  7.   clrscr;
  8.   randomize;
  9.   x:=random(80)+1;
  10.   y:=random(20)+1;
  11.   gotoxy(x,y);
  12.   repeat
  13.     t:=chr(0);
  14.       while (t=chr(0)) do t:=readkey;
  15.       if ord(t)=72 then
  16.         if y=1 then
  17.           Begin
  18.           gotoxy(x,20);
  19.           write('a');
  20.           End
  21.                else
  22.           Begin
  23.           gotoxy(x,y-1);
  24.           write('a');
  25.           End;
  26.       if ord(t)=75 then
  27.         if x=1 then
  28.           Begin
  29.           gotoxy(80,y);
  30.           write('a');
  31.           End
  32.                else
  33.           Begin
  34.           gotoxy(x-1,y);
  35.           write('a');
  36.           End;
  37.       if ord(t)=77 then
  38.         if x=80 then
  39.           Begin
  40.           gotoxy(1,y);
  41.           write('a');
  42.           End
  43.                 else
  44.           Begin
  45.           gotoxy(x+1,y);
  46.           write('a');
  47.           End;
  48.       if ord(t)=80 then
  49.         if y=20 then
  50.           Begin
  51.           gotoxy(x,1);
  52.           write('a');
  53.           End
  54.                 else
  55.           Begin
  56.           gotoxy(x,y+1);
  57.           write('a');
  58.           End;
  59.       if ord(t)=13then
  60.         a:=true;
  61.   until a=true;
  62.   readln;
  63. End.


ho fatto questo programma per muovermi con le frecce però non riesco a capire perché non posso andare due volte di fila giù o due volte di fila a destra ecc.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:52
Martedì, 22/02/2011
Ciao!

Ho letto il tuo programma, e posso risponderti che non modifichi il valore memorizzato nelle variabili x e y.
In questo modo, il cursore si posiziona sempre nelle medesime caselle.

Ultima modifica effettuata da Poggi Marco il 22/02/2011 alle 18:57
PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 13:25
Mercoledì, 23/02/2011
e come potrei modificarlo?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:52
Giovedì, 24/02/2011
Semplicissimo!

Ad esempio, invece di
Codice sorgente - presumibilmente Delphi

  1. if ord(t)=72 then
  2.         if y=1 then
  3.         Begin
  4.           gotoxy(x,20);
  5.           write('a');
  6.          End
  7.                else
  8.          Begin
  9.             gotoxy(x,y-1);
  10.             write('a');
  11.           End;
  12. End;


scrivi
Codice sorgente - presumibilmente Delphi

  1. if ord(t)=72 then
  2.         Begin
  3.           gotoxy(x, y);
  4.           write(' '); // cancello il carattere scritto in precedenza
  5.           y:=y-1; // modifico il valore di y
  6.           if y<=0 then y:=23; // controllo che y sia maggiore di 0
  7.           gotoxy(x, y);
  8.           write('a');
  9.          End;
  10. End;



Ultima modifica effettuata da Poggi Marco il 24/02/2011 alle 18:52
PM Quote
Avatar
giosch (Normal User)
Rookie


Messaggi: 23
Iscritto: 16/03/2011

Segnala al moderatore
Postato alle 14:19
Giovedì, 17/03/2011
Salve, sono nuovo del forum.
Io studio il pascal da qualche anno, ma a modo mio, quindi non sò se uso metodi convenzionali...
ad ogni modo quello che volevi fare tu era questo??
E' un programma che fa muovere con le frecce la scritta "a" in giro per la finestra fino a che non so preme p...
Codice sorgente - presumibilmente Delphi

  1. program gestione_movimento;
  2. uses crt;
  3. var
  4. x, y: integer;
  5. lett: char;
  6.  
  7. begin
  8.      x:=1;
  9.      y:=1;
  10.      repeat
  11.            lett:=readkey;
  12.            clrscr;
  13.            case lett of          (*l'input delle frecce*)
  14.            'K' : x:=x-1;
  15.            'M' : x:=x+1;
  16.            'H' : y:=y-1;
  17.            'P' : y:=y+1;
  18.            end;
  19.            if x>79                             (*i limiti*)
  20.            then
  21.                x:=x-1
  22.            else
  23.                if x<1
  24.                then
  25.                    x:=x+1;
  26.            if y>25
  27.            then
  28.                y:=y-1
  29.            else
  30.                if y<1
  31.                then
  32.                    y:=y+1;
  33.            gotoxy(x, y);                                 (*La scritta*)
  34.            write('a');
  35.      until lett='p';                  (*è solo un esempio, può essere qualsiasi cosa*)
  36. end.



ditemi se è un metodo che può essere accettabile.
grazie

Ultima modifica effettuata da giosch il 17/03/2011 alle 14:22
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 15:11
Giovedì, 17/03/2011
Ciao!

Ho letto il tuo programma, e a mio avviso, funziona!
Se proprio vuoi migliorare le prestazioni del programma, non utilizzare l' istruzione clrscr ogni volta per riscrivere il carattere.

PM Quote
Avatar
giosch (Normal User)
Rookie


Messaggi: 23
Iscritto: 16/03/2011

Segnala al moderatore
Postato alle 15:23
Giovedì, 17/03/2011
ma perchè allora fare tutti quei giri di codice nel suo programma??(scusate la mia ignoranza)

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:44
Giovedì, 17/03/2011
Effettivamente, cancellare un singolo carattere sullo schermo, richiede qualche riga in più di codice.

Però, nel caso in cui volessimo una grafica un po più elaborata, cancellare lo schermo e ridisegnare il tutto, è certamente più oneroso.

PM Quote