Wpis z mikrobloga

#python #programowanie #programista15k

Czy da się stworzyć "dynamiczną" funkcje?
Mam np stworzoną funkcje def fight(warrior,goblin): i to pobiera tylko wartości z obiektów warrior i goblin, a chciałbym żeby funkcja reagowała na to, jaką klasę postaci wybierze gracz na początku i to jaki przeciwnik się wylosuje na danym etapie, bo przecież nie będę tworzył 80 tych samych funkcji ale tylko z innymi zmiennymi bo to robota głupiego i mało wydajna.

def warrior_fight(warrior,goblin):
core = 5 + (warrior.strenght * 2) + (warrior.magic * 2) + (warrior.agility * 1) - (warrior.defense * 2)
crit_chance = ri(0,1)
if crit_chance == 0:
print(goblin.health - core)
if crit_chance == 1:
core = core * 2
print(goblin.health - core)
warrior_fight(warrior,goblin)
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@harnasiek: zastanów się co się zmienia między klasami a co pozostaje takie same. To co pozostaje takie same licz w jednym miejscu (np w klasie abstrakcyjnej po której dziedziczy zarówno Warior jak i Goblin), to co się zmienia zależnie od klas licz w tych klasach, to co się zmienia zależnie od kombinacji klas - licz w oddzielnej funkcji (sugeruję żeby nie należała do żadnej z klas) i w niej rozpisz
  • Odpowiedz
@tell_me_more: znaczy i tak tworząc ten projekt to działam na paru plikach żeby utrzymać porządek w kodzie i same wizualne uporządkowanie. Mam jedną ogólną klase Character ze statystykami i jedynie wypisanie ich oraz pobranie bounty z każdych podklas jeśli chodzi o potwory. A w drugim pliku to stworzenie obiektów, które będa istniały dalej w grze
  • Odpowiedz
ale dlaczego masz w tej funkcji

def warriorfight(warrior,goblin)

konkretnie walczenie z goblinem a nie z dowolnym potworem? Czy te linijki będą inne jak będziesz walczył z wilkiem?
  • Odpowiedz
@harnasiek: osobne klasy robi się jak masz inną logikę. Ta sama logika -> ta sama klasa. Czym różni się młody wilk od starego? Bardzo często zamiast osobnej klasy wystarczą inne parametry przekazane w konstruktorze

No i lepiej poczytać o https://en.wikipedia.org/wiki/Entity_component_system . Generalnie tworzenie klas do wszystkiego to słaby pomysł, bo tak źle modeluje się świat. Lepiej skupić się na tworzeniu klas pozwalających na osiągnięcie jakiegoś efektu (rysowanie na ekranie, zwracanie
  • Odpowiedz
  • 0
@Saly no jedynie to mam dodatkowe klasy z dziedziczeniem klasy Character dla każdego potwora ze względu na różny drop, exp itp, żebykm szybciej mógł Akurat coś zmienić dla tylko np wilka i goblina bez szukania w całym kodzie
  • Odpowiedz
Entity Component System to na później jak już się nauczy jak działa dziedziczenie i polimorfizm, nie ma sensu zaczynać od tego jak gość pisze taki kod :)

Tutaj wystarczy 2 klasy: Character i Monster.

Character by miał metodę

def
  • Odpowiedz