From 798b4ce2761f57e93f58b20484d8c278e0826a27 Mon Sep 17 00:00:00 2001 From: yoxu Date: Thu, 4 Sep 2025 21:05:15 +0200 Subject: [PATCH] Added role witch --- .vscode/settings.json | 5 +++++ main.py | 46 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0455c60 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "potionchoice" + ] +} \ No newline at end of file diff --git a/main.py b/main.py index 9ab617f..b5185b9 100644 --- a/main.py +++ b/main.py @@ -21,6 +21,11 @@ class Game: # lovers self.lovers: Optional[Tuple[str, str]] = None + # Dead this night + self.dead_this_night: [List[str]] = [] + + # Used potions + self.used_potions: [list[str]] = [] # ------------------------- # setup / I/O # ------------------------- @@ -95,7 +100,7 @@ class Game: Prompt the user to enter a player name until a valid one is entered. Returns None on EOF/KeyboardInterrupt. """ - prompt = prompt or "Enter the name of the player: " + prompt = prompt or "Enter the name of the player: " while True: selected = input(prompt).strip() @@ -157,15 +162,18 @@ class Game: for p in self.lovers: # kill them and their lover log.debug("Killed %s", p) + self.dead_this_night.append(p) p.alive = False return # else just kill them - log.debug("Killed %s" % p) + log.info("Killed %s" % player) + self.dead_this_night.append(player) target.alive = False def revive(self, player: str) -> None: """Revive a player.""" + log.info("Players that will die this night are: %s", self.dead_this_night) if player not in self.players: log.error("Tried to revive unknown player: %s", player) return @@ -237,6 +245,38 @@ class Game: self.players[protected].protected = True log.debug("Protected: %s", protected) + @role + def witch(self) -> None: + """Interactively choose to kill or revive someone""" + log.info("Choose if you want to use your revive potion") + print(self.players) + while True: + potionchoice = input("What do you want to use Revive or Death potion: ") + if potionchoice == "Revive" and "Revive" not in self.used_potions: + player = self.select_someone() + if player in self.dead_this_night: + self.used_potions.append("Revive") + self.revive(player) + return + elif player not in self.dead_this_night: + log.info("This player didn't died this night.") + elif "Revive" not in self.used_potions: + log.info("This potion is already used.") + elif potionchoice == "Death" and "Death" not in self.used_potions: + player = self.select_someone() + if self.players[player]: + self.used_potions.append("Death") + self.kill(player) + return + elif not self.players[player]: + self.used_potions.append("Death") + return + elif potionchoice in self.used_potions: + log.info("You already used all of your potions") + return + else: + log.info("Please write Revive or Death") + # ------------------------- # game flow @@ -245,6 +285,8 @@ class Game: log.info("All the villagers fall asleep.") self.cupidon() self.savior() + self.witch() +