python文件写入failu

2024-04-29 15:48:06 发布

您现在位置: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()

Tags: 文件eventifrandompygamehsscorefont
2条回答

在打开同一个文件进行写入之前,可能必须先关闭hf。你知道吗

当您读取hs时,尝试将其转换为int(否则它将是一个字符串)?你知道吗

if len(h) > 0:
    hs = int(h)
else:
    hs = 0

比较字符串和整数会有点奇怪。。即:

>>> 12 > "10"
False

在python解释器中。(Python可能会抛出一个异常。我想不出什么时候你会想要比较int和string)。你知道吗

相关问题 更多 >