我在一个简单的无尽隧道赛车类游戏中写一个高分的文件有一个小问题。
如果在我开始游戏之前,它会写出高分,文件中没有任何内容。但是在文件中有一个数字之后,它完全忽略了:
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文件中,然后将其写入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()
答案 0 :(得分:2)
尝试将hs转换为int(否则它将成为字符串)?
if len(h) > 0:
hs = int(h)
else:
hs = 0
e.g。你比较字符串和整数有点奇怪..即:
>>> 12 > "10"
False
在python解释器中。 (Python应该抛出异常。我不能想到你想要比较int和字符串的时候。)
答案 1 :(得分:0)
在打开相同的文件进行写作之前,您可能必须关闭hf。