ich möchte ein Inventarsystem für ein Spiel erstellen. Der Händler im Spiel hat eine unbestimmt Anzahl von Gegenständen, die sich der Spieler anzeigen lassen kann. Dies machen ich über Listen mit statischem Code. Dies möchte ich gerne automatisieren, da ich nicht vorhersagen kann, wie viele Objekte in der Liste sind.
Den kompletten Code vom Spiel schreibe ich jetzt hier nicht rein da es den Rahmen sprengen würde. Ich denke man sieht auch so was ich meine, nämlich die Funktion "bye" am Ende...
Code: Alles auswählen
class Store():
def __init__(self,player,items,weapons,armors):
self.name = "Händler"
self.items = items
self.weapons = weapons
self.armors = armors
def status(self, player):
print(self.name + " wird angesprochen")
self.menu(player)
def menu(self,player):
print("Händler Menü")
print("(K)aufen | (V)erkaufen | (Z)urück")
user_input = player.user_input()
if user_input == "K":
print("Kaufen")
print("Kaufe (G)egenstand | (W)affe | (R)üstung | (ENTER) für Zurück")
user_input = player.user_input()
if user_input == "G":
print("Kaufe Gegenstand")
self.buy(player,self.items,player.items)
elif user_input == "W":
print("Kaufe waffe")
self.buy(player,self.weapons,player.weapons)
elif user_input == "R":
print("Kaufe Rüstung")
self.buy(player,self.armors,player.armors)
elif user_input == "V":
print("Verkaufen")
print("Verkaufe (G)egenstand | (W)affe | (R)üstung | (ENTER) für Zurück")
user_input = player.user_input()
if user_input == "G":
print("Veraufe Gegenstand")
self.sell(player,self.items,player.items)
elif user_input == "W":
print("Verkaufe Waffe")
self.sell(player,self.weapons,player.weapons)
elif user_input == "R":
print("Verkaufe Rüstung")
self.sell(player,self.armors,player.armors)
elif user_input == "Z":
print(player.name + " geht fort...")
else:
self.menu(player)
def buy(self,player,store_obj_list,player_obj_list):
print(player.name + " kauft")
i = 0
for obj in store_obj_list:
i += 1
print(f'{str(i)} - {obj.name} (Schaden: {obj.dmg_value}, Rüstung: {obj.ar_value}, Gold: {str(obj.gp_value)})')
print(f'Welche Nummer möchtest Du kaufen 1-{str(len(store_obj_list))}')
user_input = player.user_input()
try:
if user_input == "1":
if player.gold >= store_obj_list[0].gp_value:
print("Kaufe " + store_obj_list[0].name)
player.gold -= store_obj_list[0].gp_value
player_obj_list.append(store_obj_list[0])
store_obj_list.remove(store_obj_list[0])
else:
print("Nicht genug Gold")
if user_input == "2":
if player.gold >= store_obj_list[1].gp_value:
print("Kaufe " + store_obj_list[1].name)
player.gold -= store_obj_list[1].gp_value
player_obj_list.append(store_obj_list[1])
store_obj_list.remove(store_obj_list[1])
else:
print("Nicht genug Gold")
if user_input == "3":
if player.gold >= store_obj_list[2].gp_value:
print("Kaufe " + store_obj_list[2].name)
player.gold -= store_obj_list[2].gp_value
player_obj_list.append(store_obj_list[2])
store_obj_list.remove(store_obj_list[2])
else:
print("Nicht genug Gold")
except:
print("Nichts da...")
self.menu(player)
Also quasi so:
if user_input == "1" --> store_obj_list[0]
if user_input == "2" --> store_obj_list[1]
if user_input == "3" --> store_obj_list[2]
Es ändert sich ja nur der Listenindex entsprechend dem User input. der Rest ist ja immer das selbe. Kann man so etwas nicht auch mit einer Schleife oder dergleichen machen? Ich steh grad auf dem Schlauch und komm leider nicht drauf.