檢查路徑
使用os.path模組的exists(path)方法可檢驗path的檔案或資料夾是否存在,若存在則回傳True,反之則為False。
# 檢查路徑
print(os.path.exists("snake/scoreboard.py"))
print(os.path.exists("snake/highest_score.txt"))
從前面專案資料夾的內容可知,snake資料夾內有scoreboard.py,但沒有highest_score.txt,所以分別回傳True跟False。
True
False
貪食蛇最高分記錄補完
有了以上的預備知識後,就可以來為
上一節的貪食蛇遊戲加上記錄最高分的功能,新增的部分用粗體字顯示。我們在snake資料夾新增一個highest_score.txt檔案,在每次遊戲結束後用於記錄最高分數,若該次遊戲有破紀錄就更新檔案。在初始化函數中,先檢查highest_score.txt檔案是否存在,如果存在,則將分數顯示在畫布上,反之則將最高分初始化為0。在game_over()方法裡面,判斷該次遊戲的分數是否超過最高分,若是,則將分數寫入highest_score.txt裡面。
# scorebaord.py
class Scoreboard(Turtle):
def __init__(self):
super().__init__()
self.score = 0
self.hideturtle()
self.penup()
self.color(SCORE_COLOR)
self.speed("fastest")
self.goto(SCORE_POSITION)
if path.exists("snake/highest_score.txt"):
with open("snake/highest_score.txt", mode='r') as score_file:
self.highest_score = int(score_file.read())
else:
self.highest_score = 0
self.write(f"score: {self.score}, highest_score: {self.highest_score}", False, align="center", font=("Arial", 20, "normal"))
def get_score(self):
self.score += 1
self.clear()
self.write(f"score: {self.score}, highest_score: {self.highest_score}", False, align="center", font=("Arial", 20, "normal"))
def game_over(self):
self.color(GAMEOVER_COLOR)
self.goto(GAMEOVER_POSITION)
self.write("Game Over", False, align="center", font=("Arial", 40, "normal"))
if self.score > self.highest_score:
with open("snake/highest_score.txt", mode='w') as score_file:
score_file.write(str(self.score))
在第一次遊戲結束後,可看到snake資料夾裡面多了一個highest_score.txt,裡面記錄我第一次遊戲的分數。
第二次進行遊戲即可在上方highest_score的位置看到上一次遊戲(也就是目前的最高分)的分數了。
程式範例