2017-12-27 14 views
-1

안녕하세요 저는 파이썬으로 텍스트 모험을하고 있습니다. 게임은 피클에서 저장 기능을 만들려고 너무 커야 만했습니다. 위치, 금 및 인벤토리 .txt 파일 하지만로드 및 저장 기능을 코드의 맨 아래에 새 변수를로드 할 가져올 수 없습니다. 미리 감사드립니다. 파이썬 텍스트 게임 저장 기능

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

데이터를 파일에 덤프 한 순서대로로드하려고 시도 했습니까? – Tekay37

+0

로드 함수를 호출 한 후 오류 메시지가 표시됩니까? – yarwest

답변

1

이 코드 첫 번째 문제는 결코 스트림이 열려있을 것입니다 때문에 (것) 메모리 문제가 발생할 수 있습니다 파일을 닫습니다, 그래서 결코 savegame.close()

두 번째 문제 거짓말을 사용하여 종료하는 것을 잊지이다 파일이 열리는 방식으로 피클은 이진 파일로 읽고 쓰므로 이진 모드 (wr 대신 wbrb 대신)를 사용하여 파일을 읽고 써야합니다.

다음 절에서는이 절의 제안 사항이 더 많아서 문제를 해결할 필요가 없습니다. 하나 개의 파일에 여러 항목을 피클 할 수 있지만 쉬운 솔루션은 3 개 값을 포함 예를 들어, 하나의 객체로 튜플을 넣어 할 수 있습니다 :이 솔루션은 적은 자원 무거운는 만 고려

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() 

을 파일을 한 번 읽고 읽고 쓸 수 있으며 파일 스트림을 더 짧은 기간 동안 열 수 있습니다.

0

저장 한 모든 데이터에 대해 한 번만 산세로합니다.

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

로딩을 위해 전체 dict을 다시 피클합니다.

savegameDict = pickle.load(loadgame) 

또한 피클 쓰기로 wbrb 이진 모드를 사용하여 파일을 열고 바이너리가 아닌 텍스트를 읽습니다.