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 - unit windows
Forum - Pascal - unit windows

Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 16:09
Lunedì, 02/04/2012
Ciao, sono nuovo nel forum, volevo chiedere se la unit windows è già presente in free pascal, purtroppo ho fatto un programmino per verificare se funzionano i suoni con la funzione "beep" poichè la funzione "sound" fa sempre lo stesso suono. Ho fatto così:

program suono;
uses windows;
var
x:integer;
begin
readln;
beep(440,1000);
sleep(1000);
beep(263,1000);
sleep(1000);
end.
Ho guardato sul sito di freepascal ma non ho trovato nulla, oppure non ho cercato nella parte giusta, sono stato qui:
http://www.freepascal.org/docs.var
tra le varie librerie che ho trovato li non ho trovato "windows".

Inoltre volevo chiedere anche se c'era qualcosa per eseguire due cose contemporaneamente, intendo dire per esempio sto facendo space invaderes su pascal, anzi l'ho già fatto, e mi serviva che sia i nemici che il personaggio si muovessero contemporaneamente, quindi ho fatto una cosa così:


...
repeat
{movimento del nemico}
until(keypressed);
op:=readkey;
case op of
chr(77):begin
           {movimento del personaggio}
            end;
...

In questo modo funziona però nel repeat quando il nemico si muove c'è un delay per non farlo muovere troppo in fretta, quindi ogni volta che l'utente fa muovere il personaggio questo parte dopo qualche millesimo, sembra niente ma quando si gioca da molto fastidio, perchè  se si preme 5 volte molto velocemente il tasto per spostare il personaggio, dopo che si lascia il tasto lui continua a muoversi finchè non esegue tutti i 5 spostamenti. Ecco volevo solo sapere se c'è qualche soluzione, qualche procedura o funzione, grazie mille e scusa per l'ignoranza, ciao:)


PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 17:16
Lunedì, 02/04/2012
Ciao!
Ho provato il primo programma, e a me funziona. Che sistema operativo e compilatore usi?

Per il secondo problema, bisogna considerare che quando si preme una freccia, o un tasto funzione, nel buffer di tastiera, viene registrato il carattere nullo (con codice ASCII 0) seguito dal codice del tasto premuto.

Prova questo esempio:
Codice sorgente - presumibilmente Delphi

  1. program tasto;
  2. uses windows,crt;
  3. var
  4.  ch:char;
  5.  
  6. begin
  7.  repeat until keypressed;
  8.  ch:=readkey;
  9.  if ord(ch)=0 then ch:=readkey;
  10.  writeln(ord(ch),'  #',ch,'#');
  11.  readln;
  12. end.


si hai ragione sbaglio mio al riguardo del primo problemainfatti funziona, è che avevo spento l'audio ai segnali acustici del sistema, invece per il secondo problema, adesso provo il tuo esempio, comunque grazie mille molto gentile per avermi risposto - gllobal - 02/04/12 17:46
ho provato il tuo esempio ma non ho capito cosa intendi, scusa. - gllobal - 02/04/12 17:52
il mio problema è che nel repeat quando si muove il nemico c'è un delay perciò anche il personaggio si muove al ritmo del delay, tipo se premo 30 volte il tasto destra, lui si sposta ma non al premere del tasto, cioè dopo che io ho premuto 30 volte il tasto sopo che ho smesso di premere lui ancora - gllobal - 02/04/12 18:00
si muove finche non fa 30 spostamenti, questo perchè io gli ho dato gli input, però a me mi serve che lui si sposti al tocco del tasto, non so se mi sono spiegato, scusa se ti faccio perdere tempo e grazie in anticipo e anche per la precedente risposta. - gllobal - 02/04/12 18:02
PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:57
Lunedì, 02/04/2012
Nel mio esempio, il programma attende la pressione di un tasto per continuare.
Tu invece devi verificare l' avvenuta pressione di un tasto, e successivamente agire di conseguenza.

PM