Python 如何添加可显示的highscore变量?

Python 如何添加可显示的highscore变量?,python,python-3.x,pygame,Python,Python 3.x,Pygame,在我的游戏中,我创建了一个计分系统,但我正在努力找到一种方法来存储高分,当再次运行gameloop时,高分不会重置。代码如下: import pygame import time import random import timeit pygame.init() display_width = 1600 display_height = 850 speed = [1, -1] black = (0,0,0) white = (255,255,255) red = (255, 0, 0)

在我的游戏中,我创建了一个计分系统,但我正在努力找到一种方法来存储高分,当再次运行
gameloop
时,高分不会重置。代码如下:

import pygame
import time
import random
import timeit


pygame.init()

display_width = 1600
display_height = 850
speed = [1, -1]

black = (0,0,0)
white = (255,255,255)
red = (255, 0, 0)
grey = (177,177,177)
blue = (0,0,255)
green = (0,255,0)

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Kill hitler before he gets trump')

clock = pygame.time.Clock()

crosshairImg = pygame.image.load('crosshair.PNG')
hitlerImg = pygame.image.load('hitler.png')
donaldImg = pygame.image.load('donald.png')

def crosshair(x, y):
    gameDisplay.blit(crosshairImg, (x,y))

def enemy(x, y):
    gameDisplay.blit(hitlerImg, (x,y))

def friendly(x, y):
    gameDisplay.blit(donaldImg, (x,y))
def message_display(text):
    largeText = pygame.font.Font('freesansbold.ttf',45)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2),(display_height/2))
    gameDisplay.blit(TextSurf, TextRect)

    pygame.display.update()

def text_objects(text, font):
    textSurface = font.render(text, True, red)
    return textSurface, textSurface.get_rect()

def status(total, enemy_kills):
    if total == 0:
        status = 0
    else:
        status = round((enemy_kills/total)*100, 2)

    font = pygame.font.SysFont(None, 25)
    text = font.render('Status:'+str(status)+'%', True, blue)
    gameDisplay.blit(text,(0,30))

def score(count):
    font = pygame.font.SysFont(None,25)
    text = font.render('Confirmed Enemy Kills:'+str(count), True, blue)
    gameDisplay.blit(text,(0,0))

def timer(count):
    count = round(count, 1)
    font = pygame.font.SysFont(None,25)
    text = font.render('time left:'+str(count), True, blue)
    gameDisplay.blit(text,(0,45))

def friend_kill(count):
    font = pygame.font.SysFont(None,25)
    text = font.render('Confirmed Friendly Kills:'+str(count), True, blue)
    gameDisplay.blit(text,(0,15))
我认为代码的以下部分需要编辑。我向你展示了前一部分,希望能让下一部分更容易阅读

def gameloop():
    thing_startx = (display_width/2)
    thing_starty = (display_height/2)
    thing_xspeed = 0
    thing_yspeed = 0

    enemy_startx = random.randrange(0, (display_width-20))
    enemy_starty = random.randrange(0, (display_height-20))
    enemy_xspeed = 0
    enemy_yspeed = 0

    friend_startx = random.randrange(0, (display_width-40))
    friend_starty = random.randrange(0, (display_height-40))
    friend_width = 40
    friend_height = 40
    friend_xspeed = 0
    friend_yspeed = 0

    ammo = 5

    kills = 0

    total_kills = 0

    friendly_kills = 0

    gameExit = False

    start = time.time()

    elapsed = 0

    while not gameExit and elapsed < 30:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.MOUSEMOTION:
                thing_startx = event.pos[0]-37
                thing_starty = event.pos[1]-37

        thing_startx += thing_xspeed
        thing_starty += thing_yspeed

        gameDisplay.fill (grey)
        score(kills)
        status(total_kills, kills)
        friend_kill(friendly_kills)
        timer((30-elapsed))

        enemy(enemy_startx, enemy_starty)
        friendly(friend_startx, friend_starty)
        crosshair(thing_startx, thing_starty)
        pygame.display.update()
        pygame.mouse.set_visible(0)


        if event.type == pygame.MOUSEBUTTONDOWN:
            if (event.pos[0] > enemy_startx and event.pos[0] < enemy_startx+45) and event.pos[1] > enemy_starty and event.pos[1] < enemy_starty+60:
                enemy_startx = random.randrange(0, (display_width-45))
                enemy_starty = random.randrange(0, (display_height-60))
                friend_startx = random.randrange(0,(display_width-40))
                friend_starty = random.randrange(0,(display_height-40))
                kills += 1
                total_kills += 1



        if event.type == pygame.MOUSEBUTTONDOWN:
            if (event.pos[0] > friend_startx and event.pos[0] < friend_startx+60) and event.pos[1] > friend_starty and event.pos[1] < friend_starty+80:
                friend_startx = random.randrange(0,(display_width-40))
                friend_starty = random.randrange(0,(display_height-40))
                enemy_startx = random.randrange(0, (display_width-45))
                enemy_starty = random.randrange(0, (display_height-60))
                friendly_kills += 1
                total_kills += 1
                message_display('you killed a friendly')
                time.sleep(1)

        if (kills>=5 and kills<10) or (kills>=15 and kills<20):
            if enemy_startx+45<display_width and enemy_xspeed not in (1, -1):
                enemy_xspeed += 1
            if friend_startx+60<display_width and friend_xspeed not in (1,-1):
                friend_xspeed += 1

            if enemy_startx>0 and enemy_xspeed not in (-1, 0):
                enemy_xspeed = 1
            if friend_startx>0 and friend_xspeed not in (-1, 0):
                friend_xspeed = 1


        elif kills>=10 and kills<20:
            if enemy_starty+60<display_height and enemy_yspeed not in (1, -1):
                enemy_yspeed += 1
            if friend_starty+80<display_width and friend_yspeed not in (1,-1):
                friend_yspeed += 1

            if enemy_starty>0 and enemy_yspeed not in (-1, 0):
                enemy_yspeed = 1
            if friend_starty>0 and friend_yspeed not in (-1, 0):
                friend_yspeed = 1

        elif kills>=20:
            if enemy_startx+45<display_height and enemy_xspeed not in (2, -2):
                enemy_xspeed = 2
            if friend_startx+60<display_height and friend_xspeed not in (2, -2):
                friend_xspeed = 2


            if enemy_starty>0 and enemy_yspeed not in (2, -2):
                enemy_yspeed = -2
            if friend_starty>0 and friend_yspeed not in (2, -2):
                friend_yspeed = -2

        else:
            enemy_xspeed = 0
            enemy_yspeed = 0
            friend_xspeed = 0
            friend_yspeed = 0





        if enemy_startx+45>display_width or enemy_startx<0:
            enemy_xspeed *= -1
        if enemy_starty+60>display_height or enemy_starty<0:
            enemy_yspeed *= -1

        if friend_startx+40>display_width or friend_startx<0:
            friend_xspeed *= -1
        if friend_starty+40>display_height or friend_starty<0:
            friend_yspeed *= -1



        enemy_starty += enemy_yspeed        
        enemy_startx += enemy_xspeed
        friend_startx += friend_xspeed
        friend_starty += friend_yspeed

        pygame.display.update()
        clock.tick(100)
        elapsed = time.time() - start
        msg = 'you got',kills,'enemy kills amd',friendly_kills,'enemy kills'
    message_display('you got '+str(kills)+' enemy kills and '+str(friendly_kills)+' friendly kills')
    time.sleep(2)
    gameloop()



gameloop()
def gameloop():
东西\u startx=(显示\u宽度/2)
物体起点=(显示高度/2)
事物速度=0
速度=0
敌方=随机。随机范围(0,(显示宽度-20))
敌方星空=随机。随机范围(0,(显示高度-20))
敌方速度=0
敌方速度=0
friend_startx=random.randrange(0,(显示宽度-40))
friend\u starty=random.randrange(0,(显示高度-40))
宽度=40
朋友的身高=40
friend_xspeed=0
friend_yspeed=0
弹药=5
kills=0
总死亡人数=0
友好的杀戮=0
gameExit=False
开始=时间。时间()
已用时间=0
在未退出游戏且运行时间<30时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
如果event.type==pygame.MOUSEMOTION:
thing_startx=事件位置[0]-37
thing_starty=事件位置[1]-37
thing_startx+=thing_xspeed
事物开始速度
gameDisplay.fill(灰色)
得分(击杀)
状态(总死亡人数,死亡人数)
友人杀(友人杀)
计时器(30秒)
敌人(敌人之星,敌人之星)
友好的(朋友之星,朋友之星)
十字线(东西开始,东西开始)
pygame.display.update()
pygame.mouse.set_可见(0)
如果event.type==pygame.MOUSEBUTTONDOWN:
如果(事件位置[0]>敌方星和事件位置[0]<敌方星+45)和事件位置[1]>敌方星和事件位置[1]<敌方星+60:
敌方=随机。随机范围(0,(显示宽度-45))
敌方星空=随机。随机范围(0,(显示高度-60))
friend_startx=random.randrange(0,(显示宽度-40))
friend\u starty=random.randrange(0,(显示高度-40))
杀死+=1
总死亡人数+=1
如果event.type==pygame.MOUSEBUTTONDOWN:
如果(event.pos[0]>friend\u startx和event.pos[0]friend\u starty和event.pos[1]=5,kills=15,kills=10,kills=20):
如果敌方星X+450和友方星速度不在(2,-2):
friend_y速度=-2
其他:
敌方速度=0
敌方速度=0
friend_xspeed=0
friend_yspeed=0

如果敌方开始显示+45>宽度或敌方开始显示高度或敌方开始显示宽度或友方开始显示高度或友方开始编辑:先前的答案未能回答问题

在文件顶部,导入pickle模块:

import pickle
在game_loop()函数的开头,编写以下代码:

try:
    with open("var.pickle", "rb") as file:
        high = pickle.load(file)
except (OSError, IOError) as e:
    high = 0
    with open("var.pickle", "wb") as file:
        pickle.dump( high, file)
最后在排队之前

message_display('you got '+str(kills)+' enemy kills and '+str(friendly_kills)+' friendly kills')
    time.sleep(2)
添加以下内容:

if high < kills:
    with open("var.pickle", "wb") as file:
        pickle.dump(high, open("var.pickle", "wb"))
    message_display("New High-score!")
如果高

发生的情况是,如果高分存在,则将其存储或创建为0。完成游戏循环后,如果分数高于高分,则将高分更改为新值。

将高分存储在名为highscore.txt的单独.txt文件中。..txt文件可以存储字符串,但也可以使用d作为不会被删除的数据。请确保您的.txt文件与游戏文件位于同一目录中。若要启动它,请在第一行写上不带撇号的“0”。不需要下载或额外导入。创建.txt文件并在游戏循环中执行此操作:

File = open(highscore.txt, 'r') #Out of game Loop
HighScore = int(File.read())       

if kills > HighScore:              #In game loop
    File.truncate()
    File.close()
    File = open(highscore.txt, 'w')
    File.write(kills)
    File.close()
    File = open(highscore.txt, 'r')

global kills=0
无效语法是的,LPK你是对的。很抱歉,我必须删除
global
关键字。我明白你想让我做什么。但我看不出这有什么帮助。这意味着如果你想再次调用游戏循环函数,kills变量将不受影响。这是否意味着我必须将kills添加到fu中N选项。例如,键入gameloop(杀死)太多代码,但不清楚它有什么问题或与高分相关的部分。@Goyo是的,我理解。之所以这样做是因为我不熟悉编码,并且不100%知道人们需要什么来了解我在做什么。2我在这里: