基于关卡系统的关卡系统

时间:2014-02-03 04:24:23

标签: python

我正在尝试建立一个基于点的关卡系统,但它有点太长了代码。如果你能帮我把它变小,我真的很感激它。要描述它想要做的是得到积分并看看它们处于什么水平,如果它们升级,它将告诉它们水平的次数和它们现在的水平。我希望它升到100并且在升高时更加难以升级..这是我到目前为止所拥有的:

 def pointLevel(name):
    point = Point.dPoint[name]
    points, lvl = int(point), int(lvl)
    if points < 500:
      lvl = 1
    elif points < 1500:
      lvl = 2
    elif points < 2500:
      lvl = 3
    elif points < 5000:
      lvl = 4
    elif points < 10000:
      lvl = 5
    elif points < 15000:
      lvl = 6
    elif points < 20000:
      lvl = 7
    elif points < 30000:
      lvl = 8
    elif points < 50000:
      lvl = 9
    elif points < 100000:
      lvl = 10
    elif points < 250000:
      lvl = 11
    notes.store("levels", user.name, "You have leveled up. You are now level "+str(lvl)+"!", int(time.time()))

4 个答案:

答案 0 :(得分:5)

只是缩短代码,您可以将级别保存为列表,然后通过将点数与级别分割进行比较来计算用户已经过多少级别:

levels = [100, 200, 300, 400, 500]
lvl = len([x for x in levels if points > x])

我不担心这里的速度,但使用发电机可以被认为是一种更好的做法(或者不是,在这种情况下是品味问题):

lvl = sum(1 for x in levels if points > x)

答案 1 :(得分:2)

bisect模块适用于查找“此列表中的哪个项目位于正确的范围内”。它返回您的值所属范围的上端的索引号。例如

import bisect

exp_level = [100,200,300,400,500]  # bisect lists need to be sorted
level = bisect.bisect(exp_level, 127)   # = 1

在该示例中,bisect.bisect将返回“1”,因为索引1(即200)是列表中的下一个项目。

答案 2 :(得分:1)

如果你发现自己一遍又一遍地重复相同/相似的代码 两次以上,那么你需要使用循环是一个好兆头:

xp_levels = [500, 1500, 2500, 5000, 10000, 15000, 20000, 30000, 50000, 100000, 250000]

def pointLevel(name):
    points = int(Point.dPoint[name])

    level = -1
    for index, xp in enumerate(xp_levels):
        if points < xp:
            level = index
            break

答案 3 :(得分:-1)

要详细说明@sashkello,这里有一个函数,它将点作为整数接收,并吐出水平:

def getLevel(points):
    levels=[500,1500,2500,5000,10000,15000,20000,30000,50000,100000,250000]
    lvl = len([x for x in levels if points > x])
    return lvl