from random import randint # Her ligger detaljene (som ikke er viktige for hovedprogrammet) skjult i klassene class Dragon: # her gir vi hint til hva slags type variablene har # dette er frivillig i Python (men obligatorisk i f.eks. Java) # # name: str parameter som heter name og forventes å ha type str # -> None returverdien forventes å være None (dvs. ingen return) def __init__(self, name: str) -> None: self._name = name self._defense = 15 # alle drager har samme forsvar # siden self._name er en privat instansvariabel, # lager vi en funksjon som returner verdien av denne til hovedprogrammet def name(self) -> str: return self._name def defense(self) -> int: return self._defense class Barbarian: def __init__(self, name: str) -> None: self._name = name self._attack_die = 20 # alle barbarer har samme angrepsterning self._attack_bonus = 5 # (osv.) self._damage_die = 12 self._damage_bonus = 3 # i tillegg til å printe til skjermen, har vi også sørget for at metoden returnere # hvor mye skade barbaren gjør, slik at programmet kan lagre det i en variabel def attack(self, monster: Dragon) -> int: attack_roll = randint(1, self._attack_die) # tilfeldig tall på terningen attack_total = attack_roll + self._attack_bonus if attack_total >= monster.defense(): damage_roll = randint(1, self._damage_die) # tilfeldig tall på terningen damage_total = damage_roll + self._damage_bonus print(self._name, "hits", monster.name(), "for", damage_total, "damage") return damage_total else: print(self._name, "misses", monster.name()) return 0 # Dette er hovedprogrammet (lite og oversiktelig) # (ideen vi vil formidle her er at innkapsling gjør det lett å forstå hva programmet gjør) barbarian = Barbarian("Karsk") dragon = Dragon("Trogdor the Burninator") total_damage = 0 for i in range(3): # repeter 3 ganger total_damage = total_damage + barbarian.attack(dragon) print() print("Total damage:", total_damage)