制作高分系统时遇到麻烦

时间:2020-04-24 12:11:58

标签: python pygame

我正在制作我的第一款游戏,我想为其添加一个高分系统。我已经在这里问过这个问题,因为我不知道从哪里开始。我得到了很大的帮助,并认为我已经完成了此操作,但是在测试之后,我遇到了问题。 在解释问题之前,我将首先列出我的代码的有用部分:

library(anytime)
dataset[apply(dataset, 2, function(x) all(grepl(date_patterns, x)))] <- 
  apply(dataset[apply(dataset, 2, function(x) all(grepl(date_patterns, x)))], 2,   
        function(x) format(anydate(x), "%d-%b-%Y"))

这是我最能充分发挥作用的方法,但他有2个问题(1个很大)

首先,当您超过最高分时,您不会收到“您获得了新的最高分!”的消息,它只会显示“得分:(您的分数)”,然后显示“最高得分:(与得分)”

这并没有真正打扰到我,但最大的问题却困扰了我。

最大的问题如下:这段代码会记住高分,并在您每次打败它时对其进行更新,直到您获得10分以上的分数。这样就可以了,直到您获得2位数的分数为止。 这显然是不正确的。我也不知道如何解决这个问题。系统几乎可以完美运行,直到出现两位数,这对我来说毫无意义。

我希望解决方案不会太复杂,并且some1可以帮助我。 我还是编程新手。因此,请尽可能简化说明?

PS:对不起,如果某个地方的英语不好,那不是我的母语...

2 个答案:

答案 0 :(得分:2)

您正在比较字符串:

content = str(content)
if content < str(score):

您可以这样做,但是与比较数字时,它的行为方式不同。 例如,如果您在控制台中键入以下内容:

'13' < '7'

它将返回True。 比较字符串时,将比较第一个字符的ascii值。当然,这不是您通常想要的。

因此,如果在对分数进行逻辑运算时使用int变量,它应该可以工作。仅在打印分数时将其转换为str。

答案 1 :(得分:1)

关于您更大的问题。 您正在比较两个字符串。即使9 <10,“ 9”>“ 10”。

这可能有效

def game_over(): 
    while game_over:
        screen.fill(black)
        text = "Game Over, Press R to restart"
        label = myFont.render(text, 1, white)
        screen.blit(label, (350, 450))
        end_score = "Score:" + str(score)
        label_2 = myFont.render(end_score, 1, white)
        screen.blit(label_2, (350, 250))

    file = open("highscore.txt", "r")
    content = file.read()
    content = int(content)
    if content < int(score):
        file = open("highscore.txt", "w")
            file.write(str(score))
            hs = "You got a new highscore!"
            label_3 = myFont.render(hs, 1, white)
            screen.blit(label_3, (350, 350)) 
            pygame.display.update()
else:
            hs = "Highscore: " + content
            label_3 = myFont.render(hs, 1, white)
            screen.blit(label_3, (350, 350)) 
            pygame.display.update()  
file.close()