我有一个小问题与文件写在一个简单的无休止的隧道赛车类游戏的高分。你知道吗
如果在我开始游戏之前,文件中没有任何内容,我会写高分。但是在文件中有一个数字之后,它完全忽略了:
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()
在打开同一个文件进行写入之前,可能必须先关闭hf。你知道吗
当您读取hs时,尝试将其转换为int(否则它将是一个字符串)?你知道吗
比较字符串和整数会有点奇怪。。即:
在python解释器中。(Python可能会抛出一个异常。我想不出什么时候你会想要比较int和string)。你知道吗
相关问题 更多 >
编程相关推荐