Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: salvare partita gioco

Hybrid View

  1. #1

    salvare partita gioco

    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

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

  3. #3
    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

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Mi lascia molto perplesso il tuo concetto di

    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Prova a spiegare meglio

    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

  5. #5
    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

  6. #6
    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

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

  8. #8
    Come devo fare per salvare la partita in modo corretto? Cioe senz usare GetContenetPane()

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da Andrea_95 Visualizza il messaggio
    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.

  10. #10
    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

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.