我在一個簡單的無盡的隧道賽車類型的遊戲中寫一個高分的文件有一個小問題。python失敗的文件編寫
如果在我開始遊戲之前寫了高分,文件中沒有任何內容。但文件中的一個號碼後,它完全忽略了:
if score > hs:
hs = score
hsfile = open("hs.txt", "w")
hsfile.write(str(hs))
hsfile.close()
要打開的文件,並檢查,如果事情是寫我的代碼:
hf = open("hs.txt", "r")
h = hf.readline()
if len(h) > 0:
hs = h
else:
hs = 0
重述:
如果在hs.txt中沒有寫入任何內容,則將高分添加到txt文件中,然後寫入該文件。
如果寫入內容(在第一次播放和重新啓動應用程序之後),分數將保留爲文件中的內容。幫幫我?如果需要的話
全碼:
import pygame, sys, time, random
pygame.init()
disw = 640
dish = 480
white = (255,255,255)
black = ( 0, 0, 0)
brown = (193,125, 58)
green = ( 0,220, 0)
gameExit = False
score = 0
speed = -2
spawned = False
hf = open("hs.txt", "r")
h = hf.readline()
if len(h) > 0:
hs = h
else:
hs = 0
if gameExit == True:
h.close()
rockx = 640
rocky = random.randint(0, dish)
rockw = random.randint(10,150)
rockh = random.randint(10,150)
ship = pygame.image.load("ship.png")
bg = pygame.image.load("bg.png")
gameOver = False
def rock(thingx,thingy,thingw,thingh,color):
pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw, thingh])
def rockhit():
global score, spawned, speed, rockx, rocky, rockw, rockh
rockx = 640
rocky = random.randint(0, dish)
rockw = random.randint(10,150)
rockh = random.randint(10,150)
score += 1
spawned = False
speed -= 1
class Ship():
def __init__(self, x, y, w, h):
self.x = x
self.y = y
self.w = w
self.h = h
gameDisplay = pygame.display.set_mode((disw,dish))
pygame.display.set_caption("Tunnel")
Clock = pygame.time.Clock()
def main():
global gameOver, score, spawned, speed, rockx, rocky, rockw, rockh, hs, gameExit
shipdimensions = Ship(200, 10, 60, 40)
xc = 0
yc = 0
def startGame():
gameDisplay.blit(bg, (0, 0))
gameDisplay.blit(ship, (shipdimensions.x, shipdimensions.y))
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
yc = -6
if event.key == pygame.K_s:
yc = 6
if event.key == pygame.K_SPACE:
if gameOver == True:
startGame()
gameOver = False
speed = -2
elif event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s:
yc = 0
shipdimensions.y += yc
rockx += speed
gameDisplay.fill(black)
gameDisplay.blit(bg, (0, 0))
gameDisplay.blit(ship, (shipdimensions.x, shipdimensions.y))
font = pygame.font.SysFont(None, 25)
text = font.render("Score: " + str(score), True, green)
gameDisplay.blit(text, (1,1))
font = pygame.font.SysFont(None, 25)
text = font.render("High Score: " + str(hs), True, green)
gameDisplay.blit(text, (1,20))
if gameOver == True:
font = pygame.font.SysFont(None, 25)
text = font.render("Game Over, press 'Space' to restart.", True, green)
gameDisplay.blit(text, (100,200))
if shipdimensions.y < rocky + rockh:
if shipdimensions.y + shipdimensions.h < rocky:
pass
elif shipdimensions.x > rockx and shipdimensions.x < rockx + rockw or shipdimensions.x + shipdimensions.w > rockx and shipdimensions.x + shipdimensions.w < rockx + rockw:
rockx = 640
rocky = random.randint(0, dish)
rockw = random.randint(10,150)
rockh = random.randint(10,150)
speed = 0
gameOver = True
score = 0
if gameOver == False and spawned == False:
rock(rockx,rocky,rockw,rockh,brown)
if shipdimensions.y <= 0:
shipdimensions.y = 0
if shipdimensions.y + shipdimensions.h >= dish:
shipdimensions.y = dish - shipdimensions.h
if rockx <= 0:
rockhit()
if score > hs:
hs = score
hsfile = open("hs.txt", "w")
hsfile.write(str(hs))
hsfile.close()
pygame.display.update()
Clock.tick(60)
if '__main__' == __name__:
main()
請注意,此代碼永遠不會執行:'如果gameExit == True:h.close()',因爲您在程序的早期將'gameExit'設置爲'False'。而要真正關閉你的文件,你需要'hf.close()'。是的,如果你打開一個帶有「r」的文件,你需要關閉它,然後用''w''重新打開它。 – 2014-12-07 08:28:09
gameExit = False當我退出遊戲時,它在關閉之前運行。它現在適用於別人的修復。 – HKVariant 2014-12-07 11:47:15