我正在为一个换装游戏(Python/Ren'py)建立一个库存系统,但我被困在了最后一个障碍上。我有 Inventory 对象、 Clothing 对象和 Items 都设置如下:
class Clothing(store.object):
def __init__(self,name,desc,place):
self.name = name
self.desc = desc
self.place = place
place = []
class Inventory(store.object):
def __init__(self, name):
self.name=name
self.wearing=[]
def wear(self,item):
self.wearing.append(item)
return
def is_wearing(self, item):
if item in self.wearing:
return True
else:
return False
def remove(self,item):
if item in self.wearing:
self.wearing.remove(item)
return
def drop(self, item):
self.wearing.remove(item)
def remove_all(self):
list = [item for item in self.wearing]
if list!=[]:
for item in list:
self.wearing.remove(item)
return
player_inv = Inventory("Player")
wardrobe_inv = Inventory("Wardrobe")
jeans = Clothing(name="Jeans", desc="blue jeans", place=["legs"])
tshirt = Clothing(name="T-shirt", desc="white tee", place=["torso"])
boxers = Clothing(name="Boxer shorts", desc="white boxer shorts", place=["crotch"])
dress = Clothing(name="Dress", desc="a pretty pink dress", place=["legs", "torso"])
socks = Clothing(name="Socks", desc="sports socks", place=["shins"])
sneakers = Clothing(name="Sneakers", desc="beat up old sneakers", place=["feet"])
heels = Clothing(name="High Heels", desc="sky high stilettos", place=["feet"])
towel = Clothing(name="Towel", desc="a basic towel", place=["torso", "chest", "legs", "crotch", "shins", "feet"])
wardrobe_inv.wear(towel)
wardrobe_inv.wear(heels)
wardrobe_inv.wear(dress)
player_inv.wear(jeans)
player_inv.wear(tshirt)
player_inv.wear(boxers)
player_inv.wear(socks)
player_inv.wear(sneakers)
所以到目前为止一切顺利。但是上面的一个超级重要的部分是在每个服装对象中设置的“地点”标签。原因是,假设一名球员穿着牛仔裤(位置:腿)和 T 恤(位置:躯干),他们想穿上裙子,他们必须先脱掉牛仔裤和 T 恤(换句话说,我需要一个功能来扫描这些地方标签,并在玩家穿上新物品之前将带有任何标签的物品从玩家发送到衣柜......
而且我几乎做到了(好吧,我说“我”-实际上是由另一个论坛上的好心人提出的许多以下内容)。但我觉得我的善意已经用完了,我离让这个工作很近了。所以,是的,这就是我到目前为止所拥有的:
def try_on(self,item):
for all_clothes in self.wearing:
for matching_tags in all_clothes.place:
if matching_tags in item.place:
wardrobe_inv.wear(all_clothes)
self.remove(all_clothes)
self.wearing.append(item)
wardrobe_inv.remove(item)
return
它几乎可以完全发挥作用。按照预期,它会扫描标签并将物品送回衣柜。唯一的问题是,它只发回一个项目,即遇到的第一个具有匹配标签的项目。我知道必须有一种非常基本的简单方法来让代码循环遍历该特定部分中的物品,将每个匹配的物品移到衣柜,然后继续其余的。但我无法终生弄清楚它是什么!我试过制作“if matching_tags in item.place:”另一个for循环,但这似乎让各种奇怪的、奇怪的、意想不到的事情发生了!
(请记住,我从网上找到的几个不同示例拼凑了清单,并且在周末参加了 Python 强化速成课程,但我仍然是一个初学者,真的超出了我的深度在这里!我只想让我的库存正常工作,而我的头上还剩下一些头发!)所以有人,请 - 有没有办法确保这个 try_on 函数按预期工作并发送每个项目与匹配的“地点” '标签回到衣柜,而不仅仅是它遇到的第一个?
在此先感谢,并为文字墙感到抱歉。我真的不知道如何更简洁地解释这个难题!X