2017-12-27 7 views
-1

Hallo Ich habe an einem Text-Abenteuer in Python gearbeitet und das Spiel hat zu groß, nur in einer Sitzung zu tun, also habe ich versucht, eine Speicherfunktion mit Essiggurke zu machen, so würde es meine wichtigsten Variablen wie speichern Speicherort, Gold und Inventar zu einer .TXT-Datei , aber ich kann es nicht bekommen, um die neuen Variablen laden die Lade-und speichern Funktionen sind am unteren Rand des Codes. Vielen Dank im Voraus.Python Text Spiel speichern Funktion

def do_save(self, arg): 
    savegame = open('savegame.txt', 'w') 
    pickle.dump(inventory, savegame) 
    pickle.dump(gold, savegame) 
    pickle.dump(location, savegame) 




def do_load(self,arg): 
    loadgame = open('savegame.txt', 'r') 
    inventory = pickle.load(loadgame) 
    location = pickle.load(loadgame) 
    gold = pickle.load(loadgame) 
+0

Haben Sie versucht, die Daten in der gleichen Reihenfolge zu laden, in der Sie sie in die Datei ausgegeben haben? – Tekay37

+0

Wird nach dem Aufruf der Ladefunktion eine Fehlermeldung angezeigt? – yarwest

Antwort

1

ist, dass man nie schließen Sie die Datei, die kann (und wird) zu Speicherproblemen führt, weil der Strom offen bleiben, so nie vergessen, um es zu schließen savegame.close()

Das zweite Problem liegt mit in der Art, wie die Datei geöffnet wird. Pickle liest und schreibt binär, so dass die Datei im Binärmodus gelesen und geschrieben werden sollte (wb und rb anstelle von w und r).

Als nächstes, das Beizen, ist dieser Abschnitt eher ein Vorschlag und ist nicht notwendig, um das Problem zu lösen, das Sie haben. Es ist möglich, mehrere Artikel in eine Datei beizen, aber eine einfachere Lösung könnte nur sein, um sie in ein Objekt zu setzen, zum Beispiel ein Tupel alle drei Werte enthält:

def do_save(self, arg): 
    saveGame = open('savegame.txt', 'wb') 
    saveValues = (inventory, gold, location) 
    pickle.dump(saveValues, saveGame) 
    saveGame.close() 

def do_load(self, arg): 
    loadGame = open('savegame.txt', 'rb') 
    loadValues = pickle.load(loadGame) 
    inventory = loadValues[0] 
    gold = loadValues[1] 
    location = loadValues[2] 
    loadGame.close() 

Diese Lösung weniger Ressourcen schwer nur wenn man bedenkt es ist liest und schreibt einmal in die Datei und ermöglicht, dass der Dateistrom für eine kürzere Dauer geöffnet ist.

0

Machen Sie nur ein Beizen für alle Ihre gespeicherten Daten.

savegameDict['inventory'] = inventory 
savegameDict['gold'] = gold 
savegameDict['location'] = location 
pickle.dump(savegameDict, savegame) 

Und einfach das ganze Diktat zum Laden einlegen.

savegameDict = pickle.load(loadgame) 

auch öffnen Sie Ihre Datei mit Binär-Modus mit wb und rb als Beize schreibt und liest binären und nicht Text. Die erste Ausgabe mit diesem Code