【问题标题】:How do I add a high score system to my turtle game?如何在我的海龟游戏中添加高分系统?
【发布时间】:2018-11-19 16:57:26
【问题描述】:

我对 Python 还是很陌生,但我一直在开发一款使用海龟的游戏,在该游戏中,您必须在特定时间范围内单击一堆圆圈才能获得分数。我想创建一个高分系统,人们也可以决定他们的用户名,但是我用谷歌搜索的所有地方都太复杂了,我无法理解,所以我不知道如何在我的代码中实现它。

import turtle
from random import random, randint
import time

CURSOR_SIZE = 20
score=0

while True:
    diffSetting=int(input("Set the difficulty(1-5,1 being easiest and 5 being hardest): "))
    if diffSetting == 1:
        difficulty = 5
        break
    elif diffSetting == 2:
        difficulty = 8
        break
    elif diffSetting == 3:
        difficulty = 12
        break
    elif diffSetting == 4:
        difficulty = 16
        break
    elif diffSetting == 5:
        difficulty = 20
        break
    else:
        print("Please choose a difficulty setting between 1 to 5.")


def addscore():
    global score
    score += 1

def my_circle(color):

    if diffSetting==1:
        radius = (50)
    elif diffSetting==2:
        radius = (40)
    elif diffSetting==3:
        radius = (30)
    elif diffSetting==4:
        radius = (20)
    elif diffSetting==5:
        radius = (10)


    circle = turtle.Turtle('circle', visible=False)
    circle.shapesize(radius / CURSOR_SIZE)
    circle.color(color)
    circle.penup()

    while True:
        nx = randint(2 * radius - width // 2, width // 2 - radius * 2)
        ny = randint(2 * radius - height // 2, height // 2 - radius * 2)

        circle.goto(nx, ny)

        for other_radius, other_circle in circles:
            if circle.distance(other_circle) < 2 * max(radius, other_radius):
                break
        else:
            break

    circle.showturtle()
    circle.onclick(lambda x,y,t=circle: (circle.hideturtle(), addscore()))


    return radius, circle



screen = turtle.Screen()
screen.bgcolor("lightgreen")
screen.title("Speed Clicker")

width, height = screen.window_width(), screen.window_height()

circles = []

gameLength = 30

startTime = time.time()
while True:
    time.sleep(1/difficulty)

    rgb = (random(), random(), random())

    timeTaken = time.time() - startTime

    circles.append(my_circle(rgb))
    screen.title('SCORE: {}, TIME LEFT: {}'.format(score,int(round(gameLength - timeTaken,0))))

    if time.time() - startTime > gameLength:
        for turtle in screen.turtles():
            turtle.reset()
        break


screen.title('GG! FINAL SCORE: {}'.format(score))

screen.mainloop()

我一直在尝试将分数保存在文本文件中,但我将如何保存用户名?

【问题讨论】:

    标签: python python-3.x turtle-graphics


    【解决方案1】:
    1. 您必须将分数存储在您喜欢的数据库或文件中
    2. 完成游戏后,您必须使用存储的分数检查当前分数
    3. 如果您当前的分数低于您存储的分数,则不执行任何操作或重新开始游戏
    4. 否则,您必须使用以前存储的分数更新您的高分

    您必须了解商店数据

    【讨论】:

      【解决方案2】:
      1. 在与此游戏相同的文件夹中创建一个文件。
      2. 打开文件并将高分作为变量存储在 Python 程序中。 (如果文件为空,则为 0)
      3. 每次当前分数大于最高分数时,更新文件。

      【讨论】:

        【解决方案3】:

        我会写一个小sn-p,根据你的意愿扩展它。

        首先,在您的游戏所在的文件夹中创建一个名为“scoreboard.txt”的文件。 在开始游戏之前,请执行以下操作以获取详细信息。

        f = open('scoreboard.txt', 'r')
        name = f.readline()
        high_score = int(f.readline())
        f.close()
        

        检查他们是否获得了高分并获得用户名(新名称):

        if current_score > high_score:
            f = open('scoreboard.txt', 'w')
            f.write(new_name + '\n' + str(current_score))
            f.close()
        

        注意:第一次使用一些随机数据填充文件,例如“BOB”(按 Enter 键)、“24”。

        希望对您有所帮助! 如果有任何疑问,请发表评论!

        【讨论】:

        • 您好,感谢您抽出宝贵时间!但是我收到了这些错误: f.write(name + '\n' + score) TypeError: must be str, not int
        • 我也得到了这个: score = int(f.readline()) ValueError: invalid literal for int() with base 10: ''
        • 使用这个: f.write(name + '\n' + str(score)) 对于下一个,它只是意味着下一行是非字符串(空)。打开该文件并在第二行输入一些随机分数(仅限第一次)。 Lemmie 知道它是否有帮助
        • 非常感谢!现在这似乎工作得很好,但我有一个最后一个问题,那就是这似乎只返回最近分数的值而不是最高分数。有没有办法只显示最高分?
        • 我已经编辑了代码来检查高分。看看!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多