制作游戏,需要有关库存的建议

时间:2018-12-18 14:11:58

标签: python list

我目前正在开发需要帮助的游戏。 您知道大多数游戏如何具有一种元素,可以像Minecraft一样用已有的东西来制作东西吗? 那就是我要在这里做的:

def craftitem(item):
    if item == 'applepie':
        try:
            inventory.remove('apple')
            inventory.remove('apple')
            inventory.remove('apple')
            inventory.remove('apple')
            inventory.append('applepie')
            print('Item crafted successfully.')
        except ValueError:
            print('You do not have the ingredients to craft this.')

这是一个定义。我使用了try命令来实现可能的效果:使用清单中的东西制作其他东西,并将其作为结果添加回去。

并且由于代码是按顺序运行的,这意味着如果某些内容正确运行,则下一个内容将运行。如果有错误,它将不会运行下一件事。这就是问题所在:如果您没有制作所需的原料,它仍然会把您所有的东西从库存中剔除,并且一无所获。

这是我看到的:

  

工作:

>>>inventory = ['apple','apple','apple','apple']
>>>
>>>craftitem('applepie')
Item crafted successfully.
>>>
>>>>inventory
['applepie']
  

不起作用:

>>>inventory = ['apple','apple','apple'] #Need one more apple
>>>
>>>craftitem('applepie')
You do not have the indredients to craft this.
>>>
>>>inventory
[]

代码重写,修复或建议受到赞赏。

我是python的新手,才开始一个月前。

2 个答案:

答案 0 :(得分:1)

您很快就会意识到,您想使用类来解决这个问题。因此,您的对象将是库存,物料,配方等。

但是要给您实际的小费,您可以尝试通过以下方式进行操作:

recipes = {'applepie': [('apple', 4)],
           'appleorangepie': [('apple', 4), ('orange', 2)]}

inventory = {'apple': 8, 'orange': 1}


def craft_item(item):
    ingredients = recipes.get(item)
    for (name, amount) in ingredients:
        if inventory.get(name, 0) < amount:
            print('You do not have the ingredients to craft this.')
            return
    for (name, amount) in ingredients:
        inventory[name] -= amount
    print('Item crafted successfully.')


craft_item('applepie')
print(inventory)

craft_item('appleorangepie')
print(inventory)

输出:

  

项目制作成功。

     

{'苹果':4,'橙色':1}

     

您没有制作这个的原料。

     

{'苹果':4,'橙色':1}

答案 1 :(得分:0)

您要做的第一件事是计算库存中所需物品的数量,以查看是否有足够的物品可以制作。例如:

num_apples = sum(item == 'apple' for item in inventory)