module 7 finished

This commit is contained in:
2026-03-05 15:21:29 +01:00
parent 516ef290a7
commit 6e6df73007
9 changed files with 232 additions and 9 deletions

97
07/ex4/TournamentCard.py Normal file
View File

@@ -0,0 +1,97 @@
from ex0 import Card
from ex2 import Combatable
from .Rankable import Rankable
from typing import Union
class TournamentCard(Card, Combatable, Rankable):
def __init__(
self,
id: str,
name: str,
cost: int,
rarity: str,
damage: int,
health: int,
shield: int,
rank: int,
) -> None:
super().__init__(name, cost, rarity)
self.id = id
self.looses = 0
self.wins = 0
self.damage = damage
self.health = health
self.shield = shield
self.rank = rank
def play(self, game_state: dict) -> dict:
try:
res: dict[str, int | str] = {}
if game_state["mana"] < 2:
raise Exception("Not enough mana")
res["card_played"] = self.name
res["mana_used"] = 2
return res
except Exception as err:
print(err)
return {}
def attack(self, target: str) -> dict:
return {
"attacker": self.name,
"target": target,
"damage_dealt": self.damage,
"combat_type": "melee",
}
def defend(self, incoming_damage: int) -> dict:
res: dict[str, Union[str, int, bool]] = {}
res["defender"] = self.name
if incoming_damage <= self.shield:
res["damage_blocked"] = incoming_damage
res["damage_taken"] = 0
else:
res["damage_taken"] = incoming_damage - self.shield
res["damage_blocked"] = self.shield
self.health -= incoming_damage - self.shield
res["still_alive"] = self.health > 0
return res
def get_combate_stats(self) -> dict:
return {
"damage": self.damage,
"health": self.health,
"shield": self.shield,
}
def calculate_rating(self) -> int:
try:
if self.wins == 0:
return self.rank - self.looses * 10
return self.rank + (int(self.wins / self.looses) * 10)
except ZeroDivisionError:
return self.rank + self.wins * 10
except Exception as err:
print(err)
return self.rank
def get_tournament_stats(self) -> dict:
return {
"Interfaces": "[Card, Combatable, Rankable]",
"Rating": self.calculate_rating(),
"Record": f"{self.wins}-{self.looses}",
}
def update_wins(self, wins: int) -> None:
self.wins = wins
def update_losses(self, losses: int) -> None:
self.looses = losses
def get_rank_info(self) -> dict:
return {
"wins": self.wins,
"looses": self.looses,
"rank": self.rank,
}