DOMANDA Tamagotchi in Java

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed

pabloski

Utente Èlite
2,868
916
Ci sono tanti modi per disegnare in Java. E dipende anche da cosa disegnare. Una GUI la disegni in genere con Swing o JavaFX se vuoi usare un toolkit più nuovo.

Nel caso di un gioco non so se questa sia la strada migliore. Dovrai manipolare sprite, per cui è più logico orientarsi verso uno strumento per lo sviluppo di videogiochi.

Detto questo, con Swing puoi sottoclassare JPanel e usare i metodi paint per disegnare il gioco. Ogni aggiunta ( tipo collisioni, fisica, ecc... ) va implementata manualmente. Non il più semplice dei modi, ma comunque http://zetcode.com/tutorials/javagamestutorial/

In alternativa una libreria specifica come Lwjgl o Libgdx è preferibile.
 

Akrilix

Nuovo Utente
145
32
Vi ringrazio per le risposte @pabloski e @DispatchCode, ma alla fine userò la JOptionPane come richiesto dal mio professore.

Avrei invece un altro quesito che continuerò in questo 3D dato che si tratta sempre del Tamagotchi: nel codice qui sotto raffigurante un metodo di una classe figlia dovrei far tornare un valore diverso per ogni possibile azione:
Vaccino: ripristina la salute;
LSD: diminuisce la salute a 20/100 ma rende più fortunati in gioco (altro metodo);
Veleno: uccide il pet.
Per ogni scelta dovrebbe tornarmi un valore specifico, ma mi da questo errore:
/------------------------------------------------------------------------\
This method must return a result of type String
\------------------------------------------------------------------------/

Io il ritorno lo faccio, non capisco perché tale errore.
Inoltre, alcune domande:
1- Vanno bene i return così? O è meglio non scrivere niente nei metodi?
2- Che valore ha il pulsante "Annulla" nella JOptionPane?

Java:
public String modificaSalute () {
     
        String input;
     
        Object [] scelte = {"VACCINO", "LSD", "VELENO"};

        Object scelteInput = JOptionPane.showInputDialog (null, "COSA VUOI USARE:", "CURA", JOptionPane.INFORMATION_MESSAGE, null, scelte, scelte[0]);
     
        input = scelteInput.toString();
     
        switch (input) {
     
            case "VACCINO":
                super.salute = 100;
                return "LA SALUTE E' STATA RIPRISTINATA: " + this.salute;
             
            case "LSD":
                super.salute = 20;
                return "LA SALUTE E' BASSA MA AVRAI PIU' FORTUNA NEL GIOCO: " + this.salute;
         
            case "VELENO":
                super.salute = 0;
                return "ESCI";
             
        }
     
        //return input; QUI E' DOVE ME LO FA METTERE IN AUTOMATICO.
     
    }
 
Ultima modifica da un moderatore:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Immaginavo vi facesse utilizzare Swing.

Dovresti solo settare i valori. La cosa migliore sarebbe richiedere l'input e passare al metodo la scelta fatta (e fare ciò che devi, come settare le variabili).

Il problema deriva dall'utilizzo di un tipo di ritorno String, senza aver tuttavia gestito tutti i casi. Il case gestisce 3 casi... e negli altri?
Dovresti mettere un "default" o al termine dello swing fare un return di un valore, che è dove te lo fa mettere in automatico.

Ma appunto, considerando il tipo di operazione che devi fare, scriverei tutto come detto sopra.
 

Akrilix

Nuovo Utente
145
32
Immaginavo vi facesse utilizzare Swing.

Dovresti solo settare i valori. La cosa migliore sarebbe richiedere l'input e passare al metodo la scelta fatta (e fare ciò che devi, come settare le variabili).

Il problema deriva dall'utilizzo di un tipo di ritorno String, senza aver tuttavia gestito tutti i casi. Il case gestisce 3 casi... e negli altri?
Dovresti mettere un "default" o al termine dello swing fare un return di un valore, che è dove te lo fa mettere in automatico.

Ma appunto, considerando il tipo di operazione che devi fare, scriverei tutto come detto sopra.
Ha detto che swing è troppo avanzato per la situazione in cui ora siamo.

Non capisco cosa tu intenda per "settare i valori", i valori li richiede nel metodo mediante JOptionPane a tendina, e i casi sono quelli poi, non vi è un default, l'utente non è libero di inserire ciò che vuole...
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
JOptionPane fa parte del pacchetto javax.swing.

Il set è ciò che deve fare il metodo: settare il valore di salute a 0, 20 o 100.
Tu hai però dichiarato quel metodo come String, il che significa che deve sempre restituire una stringa (o un riferimento ad un oggetto null). Ed il compilatore giustamente si lamenta in quanto in uno di quei casi non restituisci alcun valore.

Visto però il compito che dovrebbe svolgere quel metodo, non dovresti restituire il messaggio (la stringa) in quel modo. Andrebbe gestita separatamente; in caso avessi bisogno della stringa da più parti, cosa fai? Duplichi quella parte di codice? E se cambia il messaggio, modifichi le stringhe in tutti i metodi?

Chiaramente in questo caso è solo un esercizio, quindi avrai più libertà. :)

Per quanto riguarda i valori restituiti quando premi i bottoni, puoi consultare l'API, e fare riferimento a questo https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
 

Akrilix

Nuovo Utente
145
32
Ciao @DispatchCode, ho sistemato la cosa e ho anche quasi finito di svilupparlo. Secondo te, dovrei farmi un account e poi caricarlo su GitHub?
Vero, è molto semplice come programma, ma sono comunque più di 500 righe di codice e ci sono molte cose carine. Tu che ne dici?
 

pabloski

Utente Èlite
2,868
916
Ciao @DispatchCode, ho sistemato la cosa e ho anche quasi finito di svilupparlo. Secondo te, dovrei farmi un account e poi caricarlo su GitHub?
Vero, è molto semplice come programma, ma sono comunque più di 500 righe di codice e ci sono molte cose carine. Tu che ne dici?

Perchè no? Poi un repository remoto ti salva in caso dovessi perdere i dati che hai in locale. I dischi mica sono eterni. E gli errori sono dietro l'angolo.

p.s. siccome Github è stata comprata da MS, un bel pò di gente sta migrando su Gitlab...chiusa parentesi :D
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ciao @DispatchCode, ho sistemato la cosa e ho anche quasi finito di svilupparlo. Secondo te, dovrei farmi un account e poi caricarlo su GitHub?
Vero, è molto semplice come programma, ma sono comunque più di 500 righe di codice e ci sono molte cose carine. Tu che ne dici?

Bravo!
Prima di caricarlo devi avere le basi di un VCS, Git. Alla fine Github è solo un host.
Comunque se vuoi puoi farlo. ;)
Post unito automaticamente:

p.s. siccome Github è stata comprata da MS, un bel pò di gente sta migrando su Gitlab...chiusa parentesi :D

Io non sono Microsoft fanboy, ma nemmeno contro. È un buon servizio come prima, ed inoltre ci sono anche i repo privati gratuiti ora. :P
 

Akrilix

Nuovo Utente
145
32
Perchè no? Poi un repository remoto ti salva in caso dovessi perdere i dati che hai in locale. I dischi mica sono eterni. E gli errori sono dietro l'angolo.

p.s. siccome Github è stata comprata da MS, un bel pò di gente sta migrando su Gitlab...chiusa parentesi :D
Come mai vanno su questo GitLab?
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Come mai vanno su questo GitLab?

Perché non è di Microsoft. :P
Io ho l'account anche di là, ma solo perché offrivano è offrono i repo privati in maniera gratuita.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
No, non è a pagamento. Sino a qualche mese fa erano free i repo pubblici, se li volevi privati pagavi (cifre comunque basse).
Ora invece hanno reso free anche i repo privati.

Puoi far riferimento al materiale che trovi qui https://git-scm.com/doc :)
Quello che hai linkato va bene, ma verifica che sia l'ultima versione.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili