luca95 (Normal User)
Rookie
Messaggi: 47
Iscritto: 20/02/2011
|
Codice sorgente - presumibilmente Delphi |
program tasti; uses crt; var x,y:integer; var a:boolean; var t:char; Begin clrscr; randomize; x:=random(80)+1; y:=random(20)+1; gotoxy(x,y); repeat t:=chr(0); while (t=chr(0)) do t:=readkey; if ord(t)=72 then if y=1 then Begin gotoxy(x,20); write('a'); End else Begin gotoxy(x,y-1); write('a'); End; if ord(t)=75 then if x=1 then Begin gotoxy(80,y); write('a'); End else Begin gotoxy(x-1,y); write('a'); End; if ord(t)=77 then if x=80 then Begin gotoxy(1,y); write('a'); End else Begin gotoxy(x+1,y); write('a'); End; if ord(t)=80 then if y=20 then Begin gotoxy(x,1); write('a'); End else Begin gotoxy(x,y+1); write('a'); End; if ord(t)=13then a:=true; until a=true; readln; 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.
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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 |
|
luca95 (Normal User)
Rookie
Messaggi: 47
Iscritto: 20/02/2011
|
e come potrei modificarlo?
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Semplicissimo!
Ad esempio, invece di
Codice sorgente - presumibilmente Delphi |
if ord(t)=72 then if y=1 then Begin gotoxy(x,20); write('a'); End else Begin gotoxy(x,y-1); write('a'); End; End;
|
scrivi
Codice sorgente - presumibilmente Delphi |
if ord(t)=72 then Begin gotoxy(x, y); write(' '); // cancello il carattere scritto in precedenza y:=y-1; // modifico il valore di y if y<=0 then y:=23; // controllo che y sia maggiore di 0 gotoxy(x, y); write('a'); End; End;
|
Ultima modifica effettuata da Poggi Marco il 24/02/2011 alle 18:52 |
|
giosch (Normal User)
Rookie
Messaggi: 23
Iscritto: 16/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 |
program gestione_movimento; uses crt; var x, y: integer; lett: char; begin x:=1; y:=1; repeat lett:=readkey; clrscr; case lett of (*l'input delle frecce*) 'K' : x:=x-1; 'M' : x:=x+1; 'H' : y:=y-1; 'P' : y:=y+1; end; if x>79 (*i limiti*) then x:=x-1 else if x<1 then x:=x+1; if y>25 then y:=y-1 else if y<1 then y:=y+1; gotoxy(x, y); (*La scritta*) write('a'); until lett='p'; (*è solo un esempio, può essere qualsiasi cosa*) end.
|
ditemi se è un metodo che può essere accettabile.
grazie
Ultima modifica effettuata da giosch il 17/03/2011 alle 14:22 |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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.
|
|
giosch (Normal User)
Rookie
Messaggi: 23
Iscritto: 16/03/2011
|
ma perchè allora fare tutti quei giri di codice nel suo programma??(scusate la mia ignoranza)
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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.
|
|