Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    95

    Mostrare una carta e aspettare 1 secondo

    Ciao a tutti!

    Sto creando in Java il gioco del Sette E Mezzo. Vorrei che quando è il turno del computer, questo mostri una carta alla volta, alla distanza di un secondo l'una dall'altra. Ho provato usando Thread.sleep(1000), ma così si blocca tutto fino alla fine del turno di gioco. Come posso fare? Questo è il mio codice:
    codice:
    fineTurnoComputer = false;
            while (!fineTurnoComputer) {
                if (punteggioComputer < punteggio) {
                    
                    mostraCarta(mazzo[carta]);
                    if (mazzo[carta] == 10) {
                        jollyComputer = true;
                    }
                    else if (mazzo[carta] % 10 == 1)
                        punteggioComputer += 1;
                    else if (mazzo[carta] % 10 == 2)
                        punteggioComputer += 2;
                    else if (mazzo[carta] % 10 == 3)
                        punteggioComputer += 3;
                    else if (mazzo[carta] % 10 == 4)
                        punteggioComputer += 4;
                    else if (mazzo[carta] % 10 == 5)
                        punteggioComputer += 5;
                    else if (mazzo[carta] % 10 == 6)
                        punteggioComputer += 6;
                    else if (mazzo[carta] % 10 == 7)
                        punteggioComputer += 7;
                    else if (mazzo[carta] % 10 == 8 || mazzo[carta] % 10 == 9 || mazzo[carta] % 10 == 0)
                        punteggioComputer += 0.5;
                    fineTurnoComputer = controllaPunteggioComputer();
                    carta++;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) { return; }
                
                } else {
                    fineTurnoComputer = true;
                }
            }
            
            controllaVittoria();
            if (partitaFinita)
                mischiaButton.setEnabled(false);
            else
                mischiaButton.setEnabled(true);
    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Anche se non l'hai detto esplicitamente, quel mischiaButton.setEnabled(...) fa chiaramente subito pensare che stai gestendo una interfaccia utente AWT/Swing. E immagino pure che quel codice lo esegui in risposta ad un qualche evento (es. click di un pulsante o altro). In tal caso lo esegui nel contesto del EDT, "event dispatch thread", che non devi mai bloccare per troppo tempo, pena appunto il "congelamento" dell'intera interfaccia utente.

    Questa si chiama "programmazione ad eventi", in cui non sei tu che decidi quando fare certe operazioni ma sono gli eventi (scatenati dalla interazione dell'utente con la interfaccia grafica) a decidere quando svolgere certe operazioni.
    In sostanza devi smettere di pensare ad un "flusso" ben preciso di operazioni che decidi tu (es. stampo qualcosa ... poi attendo che l'utente prema un tasto ... poi eseguo qualcosa .... ecc...) e devi iniziare a pensare ad "eventi".

    Nel tuo caso specifico vuoi eseguire qualcosa ogni tot di tempo? Bene, allora usa un timer. Ad esempio javax.swing.Timer invia un evento ActionEvent ogni tot di tempo. In risposta a tali eventi farai ciò che devi fare per far "progredire" lo svolgimento del tuo gioco.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.