Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [JAVA] Prova per un GdR

    Ri-Salve a tutti!

    In attesa di iniziare l'universita' sto ancora "smanettando" con Java. Essendo un grande appassionato dei giochi di ruolo (qualcuno ha detto "nerd"? ) stavo provando a crearne uno (molto molto rudimentale) in Java, usando solamente comandi da principiante (ovviamente il tutto senza la minima interfaccia grafica!). L'idea mi e' venuta quest'oggi quando ho studiato le Stringhe. C'e' pero' una cosa (probabilmente una stupidaggine) che proprio non mi riesce.

    Sullo schermo appare: "Sei in una grotta. Davanti a te, verso nord, c'e' un tunnel. Dove vuoi andare?" (domanda abbastanza retorica). A questo punto sulle schermo appare la finestrella per inserire il testo. Se l'utente digita "nord" la trama si spostera' ed e' tutto ok. Ma se digita un altro comando, dopo la schermata "Questo comando non e' stato riconosciuto" come faccio a farlo tornare "indietro", alla possibilita' di inserire il comando? Non riesco a creare un "ciclo" di questo tipo!

    codice:
    System.out.println("Sei in una grotta. Davanti a te, verso nord, c'e' un tunnel. Dove vuoi andare?");
    String s1 = JOptionPane.showInputDialog("Scegli la tua direzione tra nord, sud, est ed ovest", null);
    if (s1 == "nord")
    // Il gioco va tranquillamente avanti.
    else
    System.out.println("Il comando inserito non e' stato riconosciuto. Riprova");
    // A questo punto come faccio perche' il tutto ripata dall'inserimento testo senza dover ri-immettere il tutto manualmente? Non c'e' un comando: vai alla linea x? C'e' un modo piu' elegante?
    Spero che si capisca quello che volevo dire e spero di non aver scritto troppe stupidaggini! Let me know!

    Thanks in advance!
    Alessandro

  2. #2
    Post Scriptum

    Mi sono dimenticato ti aggiungere il tag [JAVA] nel titolo. Ho provato a correggere ma mi fa solamente correggere l'oggetto del mio precedente messaggio. Se qualche moderatore potesse provvedere gliene sarei grato.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Creando, appunto, un ciclo.
    Un esempio può essere un ciclo do/while:

    codice:
    boolean rispCorretta = true;
    System.out.println("Sei in una grotta. Davanti a te, verso nord, c'e' un tunnel. Dove vuoi andare?");
    
    do {
       String s1 = JOptionPane.showInputDialog("Scegli la tua direzione tra nord, sud, est ed ovest", null);
       if (s1.equals("nord")) {
          // Il gioco va tranquillamente avanti.
          rispCorretta = true;
       } else {
          System.out.println("Il comando inserito non e' stato riconosciuto. Riprova");
          rispCorretta = false;
       }
    } while ( !rispCorretta );
    PS1: Gli oggetti si confrontano con il metodo equals() e non con l'operatore ==
    PS2: L'istruzione "vai alla riga..." non è MAI, nemmeno in altri linguaggi di alto livello dove è prevista, una scelta elegante. Al contrario: porta solo a cattive abitudini e codice sporco.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Originariamente inviato da LeleFT
    Creando, appunto, un ciclo.
    Un esempio può essere un ciclo do/while:

    codice:
    boolean rispCorretta = true;
    System.out.println("Sei in una grotta. Davanti a te, verso nord, c'e' un tunnel. Dove vuoi andare?");
    
    do {
       String s1 = JOptionPane.showInputDialog("Scegli la tua direzione tra nord, sud, est ed ovest", null);
       if (s1.equals("nord")) {
          // Il gioco va tranquillamente avanti.
          rispCorretta = true;
       } else {
          System.out.println("Il comando inserito non e' stato riconosciuto. Riprova");
          rispCorretta = false;
       }
    } while ( !rispCorretta );
    PS1: Gli oggetti si confrontano con il metodo equals() e non con l'operatore ==
    PS2: L'istruzione "vai alla riga..." non è MAI, nemmeno in altri linguaggi di alto livello dove è prevista, una scelta elegante. Al contrario: porta solo a cattive abitudini e codice sporco.


    Ciao.
    Grazie, grazie, grazie!
    Capito perfettamente. Avevo provato con un ciclo do - while ma non ci ero riuscito. Non credo che la mia mente sia ancora entrata nell'ottica "programmatore" e spesso fallisco anche quando ho tutti gli strumenti per riuscire (spero sia solamente uno step del processo di apprendimento). A questo punto volevo chiedere un'ultima cosa (che proprio non so): è possibile fare in modo che un "comando" seguente venga iniziato solo quando l'utente preme INVIO? Mettiamo che io abbia due stringhe:

    System.out.println("Sei in un bosco.");
    System.out.print("Appare un gufo.");

    Esiste un modo affinché la seconda scritta compaia solo quando l'utente premio il tasto INVIO (e fin quando non lo fa il programma rimane in stand-by)?

    Come sempre grazie in anticipo!
    Alessandro

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Certo... facendo precedere la seconda scritta da una lettura.

    codice:
    Scanner sc = new Scanner( System.in );
    
    System.out.println("Sei in un bosco")
    
    String nulla = sc.nextLine();
    
    System.out.println("Appare un gufo");
    Il programma stamperà la seconda scritta, poi si fermerà in attesa che l'utente digiti qualcosa (può dicitare tutto quello che vuole, ma l'input termina solo quando preme INVIO). Poi, proseguirà con il resto delle istruzioni.

    PS: Il codice di esempio non fa la gestione delle eccezioni...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Leggendo l'input da tastiera.

    Qui utilizzo BufferedInputStream in questo modo, ma non è l'unico.
    codice:
        BufferedInputStream bis = new BufferedInputStream(System.in);
        int ch = 0;
    
        System.out.println("Attendo pressione invio");
        while((ch = bis.read()) != 13) {
          // Esegue sino a che non viene premuto Invio
        }
        System.out.println("Invio premuto");

    Oppure con Scanner
    codice:
        Scanner scanner = new Scanner(System.in);
        scanner.useDelimiter("\n");
        
        String token = "";
        System.out.println("Attendo pressione invio");
        while((token = scanner.next()).equals("\n")){}
        System.out.println("Invio premuto");

    PS: Anticipato :P
    Comunque con il mio codice ti assicuri venga premuto Invio e non un tasto qualsiasi... in realtà la soluzione di Lele è meglio in quanto è sufficiente la pressione di un tasto.

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.