WIP: Add new role witch #2

Manually merged
yoxu merged 6 commits from dev into main 2025-09-06 20:59:12 +02:00
2 changed files with 49 additions and 2 deletions
Showing only changes of commit 798b4ce276 - Show all commits

Added role witch

yoxu 2025-09-04 21:05:15 +02:00
Signed by: yoxu
GPG key ID: CC1DC0EBE5E7D4E8

5
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,5 @@
{
"cSpell.words": [
"potionchoice"
]
}

46
main.py
View file

@ -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)
anavoi marked this conversation as resolved Outdated

Why would this be announced now?

Why would this be announced now?
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")
anavoi marked this conversation as resolved Outdated

"Choose a potion to help the village."

"Choose a potion to help the village."
print(self.players)
anavoi marked this conversation as resolved Outdated

Why print the players?

Why print the players?
while True:
potionchoice = input("What do you want to use Revive or Death potion: ")
anavoi marked this conversation as resolved Outdated

"Do you want to use your Revive or Death potion?"

"Do you want to use your Revive or Death potion?"
if potionchoice == "Revive" and "Revive" not in self.used_potions:
anavoi marked this conversation as resolved Outdated

no fuzzy matching? could have used what was added earlier

no fuzzy matching? could have used what was added earlier
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.")
anavoi marked this conversation as resolved Outdated

"Didn't died?"
Hasn't died or didn't die??

"Didn't died?" Hasn't died or didn't die??
elif "Revive" not in self.used_potions:
log.info("This potion is already used.")
anavoi marked this conversation as resolved Outdated

was

was
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")
anavoi marked this conversation as resolved Outdated

The potion is sprayed in the air now??

The potion is sprayed in the air now??
return
elif potionchoice in self.used_potions:
log.info("You already used all of your potions")
yoxu marked this conversation as resolved

So we first ask the user to choose a potion then we tell them that they have no choice.

Would you mind adding a check before asking?

So we first ask the user to choose a potion then we tell them that they have no choice. Would you mind adding a check before asking?
return
else:
log.info("Please write Revive or Death")
# -------------------------
# game flow
anavoi marked this conversation as resolved

potionchoice = self.choose_between(options).capitalise()

`potionchoice = self.choose_between(options).capitalise()`
@ -245,6 +285,8 @@ class Game:
log.info("All the villagers fall asleep.")
self.cupidon()
self.savior()
self.witch()