add ritorno di fiamma
This commit is contained in:
parent
1facfb354d
commit
ed057502d6
@ -1,7 +1,7 @@
|
||||
from typing import List
|
||||
import bang.roles as r
|
||||
import bang.players as pl
|
||||
from bang.cards import Card, Suit, Bang
|
||||
from bang.cards import Card, Suit, Bang, Mancato
|
||||
import bang.expansions.fistful_of_cards.card_events as ce
|
||||
|
||||
class Fantasma(Card):
|
||||
@ -177,17 +177,18 @@ class Poker(Card):
|
||||
# player.game.attack(player, against)
|
||||
return True
|
||||
|
||||
class RitornoDiFiamma(Card):
|
||||
class RitornoDiFiamma(Mancato):
|
||||
def __init__(self, suit, number):
|
||||
super().__init__(suit, 'RitornoDiFiamma', number)
|
||||
super().__init__(suit, number)
|
||||
self.name = 'RitornoDiFiamma'
|
||||
self.icon = '🔥'
|
||||
self.alt_text = "😅 | 💥"
|
||||
|
||||
def play_card(self, player, against, _with=None):
|
||||
#TODO
|
||||
# super().play_card(player, against=against)
|
||||
# player.game.attack(player, against)
|
||||
return True
|
||||
return False
|
||||
|
||||
def use_card(self, player):
|
||||
player.notify_self()
|
||||
|
||||
def get_starting_deck() -> List[Card]:
|
||||
cards = [
|
||||
@ -205,7 +206,7 @@ def get_starting_deck() -> List[Card]:
|
||||
# Fuga(Suit.HEARTS, 3), # evita l'effetto di carte marroni (tipo panico cat balou) di cui sei bersaglio
|
||||
# Mira(Suit.CLUBS, 6),
|
||||
# Poker(Suit.HEARTS, 'J'), # tutti gli altri scartano 1 carta a scelta, se non ci sono assi allora pesca 2 dal mazzo
|
||||
# RitornoDiFiamma(Suit.CLUBS, 'Q'), # un mancato che fa bang
|
||||
RitornoDiFiamma(Suit.CLUBS, 'Q'), # un mancato che fa bang
|
||||
]
|
||||
for c in cards:
|
||||
c.expansion_icon = '👻️'
|
||||
|
@ -426,13 +426,13 @@ class Player:
|
||||
data=f'_turn|{self.name}')
|
||||
print(f'{self.name}: I was notified that it is my turn')
|
||||
self.was_shot = False
|
||||
self.attacker = None
|
||||
self.is_my_turn = True
|
||||
self.is_waiting_for_action = True
|
||||
self.has_played_bang = False
|
||||
self.special_use_count = 0
|
||||
self.bang_used = 0
|
||||
if self.game.check_event(ceh.MezzogiornoDiFuoco):
|
||||
self.attacker = None
|
||||
self.lives -= 1
|
||||
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0:
|
||||
self.gold_nuggets += 1
|
||||
@ -576,7 +576,7 @@ class Player:
|
||||
pickable_cards = 1 + self.character.pick_mod
|
||||
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.FerroDiCavallo)]) > 0:
|
||||
pickable_cards += 1
|
||||
if self.is_my_turn:
|
||||
if self.is_my_turn and self.attacker == None:
|
||||
for i in range(len(self.equipment)):
|
||||
if i < len(self.equipment) and isinstance(self.equipment[i], cs.Dinamite):
|
||||
while pickable_cards > 0:
|
||||
@ -1212,7 +1212,15 @@ class Player:
|
||||
self.molly_discarded_cards = 0
|
||||
self.notify_self()
|
||||
self.game.responders_did_respond_resume_turn(did_lose=False)
|
||||
if isinstance(card, tvosc.RitornoDiFiamma):
|
||||
self.game.attack(self, self.attacker.name, card_name=card.name)
|
||||
self.event_type = ''
|
||||
elif len([c for c in self.hand if (isinstance(c, cs.Mancato) and c.can_be_used_now) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Bang)) or self.character.check(self.game, chd.ElenaFuente)]) == 0 and len([c for c in self.equipment if c.can_be_used_now and isinstance(c, cs.Mancato)]) == 0:
|
||||
self.on_failed_response_cb()
|
||||
if self.game:
|
||||
self.game.responders_did_respond_resume_turn(did_lose=True)
|
||||
if isinstance(card, tvosc.RitornoDiFiamma):
|
||||
self.game.attack(self, self.attacker.name, card_name=card.name)
|
||||
else:
|
||||
self.pending_action = PendingAction.RESPOND
|
||||
self.notify_self()
|
||||
|
@ -297,8 +297,6 @@ def test_SlabTheKiller():
|
||||
g.players[g.turn].play_card(0, g.players[(g.turn+1)%2].name)
|
||||
assert g.players[(g.turn+1)%2].pending_action == PendingAction.RESPOND
|
||||
g.players[(g.turn+1)%2].respond(0)
|
||||
assert g.players[(g.turn+1)%2].pending_action == PendingAction.RESPOND
|
||||
g.players[(g.turn+1)%2].respond(-1)
|
||||
assert g.players[(g.turn+1)%2].pending_action == PendingAction.WAIT
|
||||
assert g.players[(g.turn+1)%2].lives == 3
|
||||
|
||||
|
@ -5,6 +5,7 @@ from tests.dummy_socket import DummySocket
|
||||
from bang.deck import Deck
|
||||
from bang.game import Game
|
||||
from bang.players import Player, PendingAction
|
||||
import bang.cards as cs
|
||||
|
||||
# test UltimoGiro
|
||||
def test_ultimo_giro():
|
||||
@ -69,3 +70,73 @@ def test_fantasma():
|
||||
pl.choose(0)
|
||||
assert pl.pending_action == PendingAction.PLAY
|
||||
assert len(fantasma_guy.equipment) == 1 and isinstance(fantasma_guy.equipment[0], Fantasma)
|
||||
|
||||
# test SerpenteASonagli
|
||||
def test_serpente_a_sonagli():
|
||||
sio = DummySocket()
|
||||
g = Game('test', sio)
|
||||
ps = [Player(f'p{i}', f'p{i}', sio) for i in range(3)]
|
||||
for p in ps:
|
||||
g.add_player(p)
|
||||
g.start_game()
|
||||
for p in ps:
|
||||
p.available_characters = [Character('test_char', 4)]
|
||||
p.set_character(p.available_characters[0].name)
|
||||
p = g.players[g.turn]
|
||||
serp = g.players[(g.turn+1)%3]
|
||||
p.draw('')
|
||||
p.hand = [SerpenteASonagli(0,0)]
|
||||
assert len(p.hand) == 1
|
||||
p.play_card(0, serp.name)
|
||||
assert len(p.hand) == 0
|
||||
assert len(serp.equipment) == 1 and isinstance(serp.equipment[0], SerpenteASonagli)
|
||||
p.end_turn()
|
||||
assert serp.pending_action == PendingAction.PICK
|
||||
g.deck.cards[0] = Bang(Suit.SPADES, 5)
|
||||
serp.pick()
|
||||
assert serp.lives == 3
|
||||
serp.draw('')
|
||||
serp.hand = [SerpenteASonagli(0,0)]
|
||||
serp.play_card(0, g.players[(g.turn+1)%3].name)
|
||||
assert len(serp.hand) == 0
|
||||
serp.end_turn()
|
||||
assert g.players[g.turn].pending_action == PendingAction.PICK
|
||||
g.deck.cards[0] = Bang(Suit.HEARTS, 5)
|
||||
g.players[g.turn].pick()
|
||||
assert g.players[g.turn].lives == 4
|
||||
|
||||
# test RitornoDiFiamma
|
||||
def test_ritorno_di_fiamma():
|
||||
sio = DummySocket()
|
||||
g = Game('test', sio)
|
||||
g.expansions = ['the_valley_of_shadows']
|
||||
ps = [Player(f'p{i}', f'p{i}', sio) for i in range(3)]
|
||||
for p in ps:
|
||||
g.add_player(p)
|
||||
g.start_game()
|
||||
for p in ps:
|
||||
p.available_characters = [Character('test_char', 4)]
|
||||
p.set_character(p.available_characters[0].name)
|
||||
p = g.players[g.turn]
|
||||
p1 = g.players[(g.turn+1)%3]
|
||||
p.draw('')
|
||||
p.hand = [Bang(1, 1)]
|
||||
p1.hand = [RitornoDiFiamma(0,0)]
|
||||
p.play_card(0, p1.name)
|
||||
assert len(p.hand) == 0
|
||||
assert len(p1.hand) == 1
|
||||
p1.respond(0)
|
||||
assert len(p1.hand) == 0
|
||||
assert p.lives == 3
|
||||
p.end_turn()
|
||||
p1.draw('')
|
||||
p1.hand = [Bang(1, 1)]
|
||||
p.equipment = [cs.Barile(0,0)]
|
||||
p.hand = [RitornoDiFiamma(0,0)]
|
||||
p1.play_card(0, p.name)
|
||||
assert p.pending_action == PendingAction.PICK
|
||||
g.deck.cards[0] = Bang(Suit.SPADES, 5)
|
||||
p.pick()
|
||||
assert p.pending_action == PendingAction.RESPOND
|
||||
p.respond(0)
|
||||
assert p1.lives == 3
|
||||
|
Loading…
Reference in New Issue
Block a user