Salve, sto creando un gioco in java e devo inserire la funzione salva e carica partita. Ho provato con ObjectInputStream e ObjectOutputStream ma quando carico la partita non succede nulla. HELP
Salve, sto creando un gioco in java e devo inserire la funzione salva e carica partita. Ho provato con ObjectInputStream e ObjectOutputStream ma quando carico la partita non succede nulla. HELP
Molto vago, niente codice, "non succede nulla".
Prova a spiegare meglio... e verifica eventuali 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
codice:import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.stream.Stream; import javax.swing.JOptionPane; public class SaveGame implements MouseListener { public SaveGame () { } public void mouseClicked(MouseEvent arg0) {} public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} public void mousePressed(MouseEvent arg0) { NewGame3 a = new NewGame3(); int risposta = JOptionPane.showConfirmDialog(null, "Vuoi salvare il gioco ?", "Save Game", 0); if(risposta==JOptionPane.YES_OPTION){ ObjectOutputStream save = null; try { save = new ObjectOutputStream(new FileOutputStream("salvataggio.sav")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { save.writeObject(a); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void mouseReleased(MouseEvent arg0) {} }
Ultima modifica di LeleFT; 09-12-2015 a 18:19 Motivo: Aggiunti i tag CODE
Mi lascia molto perplesso il tuo concetto di
Tutto ciò che ti si può dire in merito a quel codice è che non fai un flush() per forzare la scrittura degli eventuali byte bufferizzati e non chiudi il file, quindi molto probabilmente non verrà scritto nulla nel file.
Punto.
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
scusami ma mi sto scervellando comunque sono riuscito a salvare la partita ma ora non riesco a caricare la partita:
ecco le classi:
SALVA:
codice:public class SaveGame implements MouseListener,Serializable { public SaveGame () { } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { NewGame3 a = new NewGame3(); int risposta = JOptionPane.showConfirmDialog(null, "Vuoi salvare il gioco ?", "Save Game", 0); if(risposta==JOptionPane.YES_OPTION){ ObjectOutputStream save = null; try { save = new ObjectOutputStream(new FileOutputStream("salvataggio.txt")); save.writeObject(a.frame3.getContentPane()); save.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } }
CARICA:
codice:public class LoadGame implements MouseListener,Serializable { @Override public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { ObjectInputStream save; NewGame3 a = new NewGame3(); try { save = new ObjectInputStream(new FileInputStream("C:/Users/andrea/Desktop/Gioco/"+"salvataggio"+".sav")); save.readObject(); } catch (IOException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }
Ultima modifica di LeleFT; 10-12-2015 a 10:19 Motivo: Aggiunti i tag CODE
ciao.
per formattare il codice usa i tag
[code]
your code here
[/code]
in questa maniera la comprensione è più complicata
Ciao.
I computer sono incredibilmente veloci, accurati e stupidi.
Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
Insieme sono una potenza che supera l'immaginazione.
A.Einstein
codice:save.readObject();
Questa istruzione legge l'oggetto dal file e... lo butta via.
La documentazione va letta:
codice:Object readObject(): Reads an Object from the ObjectInputStream Returns: the object read from the stream
Quindi, se chiami readObject() e non assegni il valore di ritorno a nulla, l'oggetto letto lo butti via.
Ci si aspetta che quel metodo venga usato in questo modo:
codice:variabile = (cast) save.readObject();
Dove "variabile" è la variabile a cui assegnare l'oggetto letto e il cast serve a castare la lettura al tipo corretto (visto che readObject() restituisce un Object).
Ad ogni modo, salvare su file il content-pane di un componente grafico non ha gran ché senso. Dovresti ri-pensare il tutto profondamente. Quello che andrebbe salvato è lo "stato" del tuo gioco, che poi andrebbe ri-letto dal file e ricostruito in base alle informazioni lette.
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
Come devo fare per salvare la partita in modo corretto? Cioe senz usare GetContenetPane()
Te l'ha spiegato Lele, tu dovresti salvare solo la parte relativa allo stato del gioco, non relativa all'interfaccia grafica.
Il modo in cui lo fai dipende esclusivamente dall'architettura delle classi che hai ideato che, come suggerisce Lele, dovresti molto probabilmente ripensare.
Ha senso infatti che in un linguaggio orientato agli oggetti i vari compiti della tua applicazione siano divisi tra varie classi, quindi la parte grafica e il gioco in sé dovrebbero essere modellati da classi diverse.
Per fare un esempio immagina che il tuo gioco siano gli scacchi: nulla ti impedisce di gestire tutto il programma con una singola classe: la parte grafica, le caselle della scacchiera, i pezzi, le mosse del giocatore e qualsiasi altra cosa ti venga in mente.
Ma tutto questo fa schifo, è molto incasinato,per niente mantenibile etc...!
Ciò che ha senso è ad esempio definire una classe Scacchiera, una classe Casella, una classe Pezzo che potrebbe avere volendo delle classi figlie che modellano i diversi tipi di pezzo etc...
In questo modo il frame dove fisicamente si sviluppa il gioco potrebbe avere una variabile di tipo Scacchiera di cui legge le posizioni, i pezzi mangiati, le mosse effettuate ... e le utilizza per creare/aggiornare l'interfaccia.
Quindi quando tu salvi una partita che poi vuoi riprendere salvi solo la scacchiera, poi quando carichi una partita rileggerai lo stato della scacchiera da file e poi la userai per ricomporre graficamente lo stato della partita al momento del salvataggio.
Questo lo devi progettare tu.
Fosse un gioco di strategia ti consiglierei di salvare il livello, la posizione del tuo/tuoi personaggi, il numero di vite ad esempio ecc.
Poi non sappiamo bene che tipo di gioco è, ad ogni modo devi salvare i parametri che ti servono per ricaricare il tuo savegame.
Ciao.
I computer sono incredibilmente veloci, accurati e stupidi.
Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
Insieme sono una potenza che supera l'immaginazione.
A.Einstein