Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di gokan
    Registrato dal
    Feb 2003
    Messaggi
    262

    [DELPHI:] Pressione di un tasto

    Salve a tutti, come faccio a collegare un insieme di eventi alla pressione di un tasto?
    Mi spiego meglio, ipotizziamo questa procedura:
    codice:
    procedure TTennisForm.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      {La racchetta non deve uscire fuori dal campo}
      case Key of
        'A', 'a':if cpu1=FALSE then
                  if not (pnRacchetta1.Top<=0) then //se é oltre non si muove
                    if (pnRacchetta1.Top-12)<0 then //se continua si ferma al limite
                      pnRacchetta1.Top:=0
                    else                               //normale
                      pnRacchetta1.Top:=(pnRacchetta1.Top-12);
                  //                                   //così anche per gli altri
        'Z', 'z':if cpu1= FALSE then
                  if not ((pnRacchetta1.Top+pnRacchetta1.Height)>=pnCampo.Height) then
                    if (pnRacchetta1.Top+pnRacchetta1.Height+12)>pnCampo.Height then
                      pnRacchetta1.Top:=(pnCampo.Height-pnRacchetta1.Height)
                    else
                      pnRacchetta1.Top:=(pnRacchetta1.Top+12);
        'J', 'j':if cpu2= FALSE then
                   if not (pnRacchetta2.Top<=0) then
                    if (pnRacchetta2.Top-12)<0 then
                      pnRacchetta2.Top:=0
                    else
                      pnRacchetta2.Top:=(pnRacchetta2.Top-12);
        'M', 'm':if cpu2= FALSE then
                  if not ((pnRacchetta2.Top+pnRacchetta2.Height)>=pnCampo.Height) then
                    if (pnRacchetta2.Top+pnRacchetta2.Height+12)>pnCampo.Height then
                      pnRacchetta2.Top:=(pnCampo.Height-pnRacchetta2.Height)
                    else
                      pnRacchetta2.Top:=(pnRacchetta2.Top+12);
         'X','x':Poteri;
    
         'L','l':Poteri2;
    
        end;
    Vorrei che in qualunque parte del codice potessi richiamare la pressione di un tasto. Nella fattispecie sto tentando di realizzare l'intelligenza artificiale, in maniera tale che in determinate condizioni, ad esempio la racchetta "gestita" dalla cpu prema "virtualmente" X (richiamando cosi la procedura POTERI). Volevo insomma evitare di ricopiare del codice presente nella procedura POTERI.
    Spero di essermi spiegato dignitosamente (è più facile a farsi che a dirsi).
    ciao

  2. #2
    piccaweb
    Guest
    Vuoi richiamare all'interno della procedura TTennisForm.FormKeyPress(Sender: TObject; var Key: Char); un'altra funzione che si riferisce alla pressione di un tasto, come se fosse stato l'utente a premerlo ?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333

    Re: [DELPHI:] Pressione di un tasto

    Originariamente inviato da gokan
    Vorrei che in qualunque parte del codice potessi richiamare la pressione di un tasto. Nella fattispecie sto tentando di realizzare l'intelligenza artificiale, in maniera tale che in determinate condizioni, ad esempio la racchetta "gestita" dalla cpu prema "virtualmente" X (richiamando cosi la procedura POTERI). Volevo insomma evitare di ricopiare del codice presente nella procedura POTERI.
    Spero di essermi spiegato dignitosamente (è più facile a farsi che a dirsi).
    Se vuoi gestire la risposta della CPU in base alle tue azioni, credo che sia brutto legare il movimento alla pressione del tasto: in questo modo, quando non premi nulla, il gioco è fermo.

    Credo che tu debba usare come minimo un timer o, per essere performante al massimo e garantire una fluidità basilare al gioco, servirti di un thread.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it L'avatar di gokan
    Registrato dal
    Feb 2003
    Messaggi
    262
    Ragazzi, forse ho risolto, vi faccio sapere......
    Appena posso vi faccio provare la versione "unstable" :gren: del gioco così ci capiamo meglio..

  5. #5
    Utente di HTML.it L'avatar di gokan
    Registrato dal
    Feb 2003
    Messaggi
    262

    Re: Re: [DELPHI:] Pressione di un tasto

    Originariamente inviato da alka
    Se vuoi gestire la risposta della CPU in base alle tue azioni, credo che sia brutto legare il movimento alla pressione del tasto: in questo modo, quando non premi nulla, il gioco è fermo.

    Credo che tu debba usare come minimo un timer o, per essere performante al massimo e garantire una fluidità basilare al gioco, servirti di un thread.

    Ciao!
    Cosa è un thread, nel mio programmino faccio uso di un TTimer per gestire i movimenti delle racchette e della pallina..

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Un thread è un blocco di codice che viene eseguito in modo concorrenziale, trattato dalla CPU in modo simile a come vengono eseguiti i task (le applicazioni) in Windows (alternativamente, selezionandoli in base alla loro priorità).

    Per creare un thread in Delphi, basta selezionare la voce di menu [New|Other...] e successivamente "Thread". Delphi creerà un discendente della classe TThread che incapsula già le funzioni API per attivarlo...l'unica cosa da fare è scrivere il blocco di codice del metodo Execute, che è in definitiva la porzione di codice da eseguire in modo asincrono.

    L'uso dei thread e la loro interazione con la parte grafica (e con i componenti della VCL) richiede comunque qualche accorgimento e un discorso più approfondito a riguardo.

    Sul newsgroup it.comp.lang.delphi, un partecipante ha pubblicato un esauriente tutorial a riguardo. Puoi consultarlo all'indirizzo che segue:
    http://makeashorterlink.com/?V6C0518A5.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.