add saveState management
This commit is contained in:
+20
-1
@@ -1,9 +1,28 @@
|
|||||||
###############################################
|
###############################################
|
||||||
Prompt to Kiro AI (Default):
|
Prompt to Kiro AI (Default):
|
||||||
|
|
||||||
|
from now on, I will mostly be asking questions about approach, so please do not perform any actions or code edits unless explicitly requested. also, please be less verbose - I want nice, quick answers that provide the necessary context. How can I check if a file exists/isreadable for my loadSave function?
|
||||||
|
|
||||||
Response:
|
Response:
|
||||||
|
|
||||||
|
Two clean options:
|
||||||
|
|
||||||
|
os.path.exists(path) — checks the file is there before opening.
|
||||||
|
|
||||||
|
python
|
||||||
|
|
||||||
|
import os
|
||||||
|
if os.path.exists(path):
|
||||||
|
# open and read
|
||||||
|
try/except — just attempt to open and catch the failure. This is the more Pythonic approach and also handles the "exists but unreadable/corrupt" case in one shot:
|
||||||
|
|
||||||
|
python
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(path) as f:
|
||||||
|
...
|
||||||
|
except (FileNotFoundError, IOError):
|
||||||
|
return defaultState()
|
||||||
|
For loadSave, the try/except is the better fit since you also want to catch bad JSON — wrap json.load in the same block and catch json.JSONDecodeError too, falling back to a fresh default state on any failure.
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
from cmu_graphics import *
|
from cmu_graphics import *
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
@@ -44,19 +45,31 @@ def loadCreatures(path="creatures.tsv"):
|
|||||||
return creatures
|
return creatures
|
||||||
|
|
||||||
|
|
||||||
def loadSave(path):
|
def loadSave(path="save.json"):
|
||||||
# Load save.json and return the player's saved state (money, owned baits,
|
# Load save.json and return the player's saved state (money, owned baits,
|
||||||
# owned upgrades, current bait, caught log, etc.). If the file is missing
|
# owned upgrades, current bait, caught log, etc.). If the file is missing
|
||||||
# or unreadable, return a fresh default-state dict so a first-time player
|
# or unreadable, return a fresh default-state dict so a first-time player
|
||||||
# starts cleanly. This is the only place that reads the save file.
|
# starts cleanly. This is the only place that reads the save file.
|
||||||
pass
|
defaultState = {
|
||||||
|
"cash": 0,
|
||||||
|
"owned_baits": [],
|
||||||
|
"owned_upgrades": [],
|
||||||
|
"current_bait": "worm",
|
||||||
|
"catch_log": []
|
||||||
|
}
|
||||||
|
try:
|
||||||
|
with open(path, "r") as f:
|
||||||
|
return json.load(f)
|
||||||
|
except (FileNotFoundError, IOError):
|
||||||
|
return defaultState
|
||||||
|
|
||||||
|
|
||||||
def writeSave(path, saveState):
|
def writeSave(saveState, path="save.json"):
|
||||||
# Serialize the current player state to save.json. Call this at key moments
|
# Serialize the current player state to save.json. Call this at key moments
|
||||||
# (after a sale, after a purchase, on quit) so progress persists between
|
# (after a sale, after a purchase, on quit) so progress persists between
|
||||||
# sessions. Keep the written structure identical to what loadSave expects.
|
# sessions. Keep the written structure identical to what loadSave expects.
|
||||||
pass
|
with open(path, "w") as f: #overwrite existing
|
||||||
|
f.write(json.dumps(saveState))
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user