Я собираю систему инвентаря для игры-одевалки (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)
Итак, пока все идет хорошо. Но очень важная часть вышесказанного - это теги «места», которые устанавливаются внутри каждого объекта одежды. Причина в том, что, предположим, игрок был одет в джинсы (место: ноги) и футболку (место: торс), и он хотел надеть платье , им сначала нужно было бы снять джинсы и футболку. (другими словами, мне нужна функция, которая просматривает эти теги мест и отправляет предметы с любым подходящим тегом от игрока в гардероб, прежде чем они наденут новый предмет ...
И у меня есть почти сделал это (ну, я говорю «я» - многое из следующего было фактически предложено доброй душой на другом форуме). Но я чувствую, что моя добрая воля на исходе, и я ооочень близок к Это работает. Итак, вот что у меня есть:
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
И это почти полностью функционально. Как и предполагалось, он сканирует теги и отправляет предметы обратно в гардероб . Единственная проблема в том, что он отправляет обратно только один элемент, первый элемент с совпадающим тегом, с которым он сталкивается. Я знаю, что должен быть действительно базовый c простой способ получить код l oop через пункты в этом p суставной секции, переместите каждую из них в шкаф, а затем продолжайте работу с остальными. Но я не могу понять, что это такое! Я пробовал сделать "if matching_tags in item.place:" еще один для l oop, но это, казалось, приводило к возникновению самых разных странных, напуганных непреднамеренных вещей!
(Пожалуйста, имейте в виду, что я собрал инвентарь из нескольких разных примеров, которые я нашел в Интернете, и прошел то, что похоже на интенсивный курс sh в Python на выходных, но Я все еще новичок и действительно не в себе! Я просто хочу, чтобы мой инвентарь работал, пока у меня еще есть волосы на голове!) Итак, кто-нибудь, пожалуйста - есть ли способ убедиться, что эта функция try_on работает как задумано, и отправляет каждый предмет с соответствующим тегом «место» обратно в шкаф, а не только первый, с которым сталкивается?
Заранее спасибо и извините за стену текста. Я действительно не знал, как более лаконично объяснить эту загадку! х