add ritorno di fiamma
This commit is contained in:
parent
1facfb354d
commit
ed057502d6
@ -1,7 +1,7 @@
|
|||||||
from typing import List
|
from typing import List
|
||||||
import bang.roles as r
|
import bang.roles as r
|
||||||
import bang.players as pl
|
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
|
import bang.expansions.fistful_of_cards.card_events as ce
|
||||||
|
|
||||||
class Fantasma(Card):
|
class Fantasma(Card):
|
||||||
@ -177,17 +177,18 @@ class Poker(Card):
|
|||||||
# player.game.attack(player, against)
|
# player.game.attack(player, against)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class RitornoDiFiamma(Card):
|
class RitornoDiFiamma(Mancato):
|
||||||
def __init__(self, suit, number):
|
def __init__(self, suit, number):
|
||||||
super().__init__(suit, 'RitornoDiFiamma', number)
|
super().__init__(suit, number)
|
||||||
|
self.name = 'RitornoDiFiamma'
|
||||||
self.icon = '🔥'
|
self.icon = '🔥'
|
||||||
self.alt_text = "😅 | 💥"
|
self.alt_text = "😅 | 💥"
|
||||||
|
|
||||||
def play_card(self, player, against, _with=None):
|
def play_card(self, player, against, _with=None):
|
||||||
#TODO
|
return False
|
||||||
# super().play_card(player, against=against)
|
|
||||||
# player.game.attack(player, against)
|
def use_card(self, player):
|
||||||
return True
|
player.notify_self()
|
||||||
|
|
||||||
def get_starting_deck() -> List[Card]:
|
def get_starting_deck() -> List[Card]:
|
||||||
cards = [
|
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
|
# Fuga(Suit.HEARTS, 3), # evita l'effetto di carte marroni (tipo panico cat balou) di cui sei bersaglio
|
||||||
# Mira(Suit.CLUBS, 6),
|
# 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
|
# 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:
|
for c in cards:
|
||||||
c.expansion_icon = '👻️'
|
c.expansion_icon = '👻️'
|
||||||
|
@ -426,13 +426,13 @@ class Player:
|
|||||||
data=f'_turn|{self.name}')
|
data=f'_turn|{self.name}')
|
||||||
print(f'{self.name}: I was notified that it is my turn')
|
print(f'{self.name}: I was notified that it is my turn')
|
||||||
self.was_shot = False
|
self.was_shot = False
|
||||||
|
self.attacker = None
|
||||||
self.is_my_turn = True
|
self.is_my_turn = True
|
||||||
self.is_waiting_for_action = True
|
self.is_waiting_for_action = True
|
||||||
self.has_played_bang = False
|
self.has_played_bang = False
|
||||||
self.special_use_count = 0
|
self.special_use_count = 0
|
||||||
self.bang_used = 0
|
self.bang_used = 0
|
||||||
if self.game.check_event(ceh.MezzogiornoDiFuoco):
|
if self.game.check_event(ceh.MezzogiornoDiFuoco):
|
||||||
self.attacker = None
|
|
||||||
self.lives -= 1
|
self.lives -= 1
|
||||||
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0:
|
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0:
|
||||||
self.gold_nuggets += 1
|
self.gold_nuggets += 1
|
||||||
@ -576,7 +576,7 @@ class Player:
|
|||||||
pickable_cards = 1 + self.character.pick_mod
|
pickable_cards = 1 + self.character.pick_mod
|
||||||
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.FerroDiCavallo)]) > 0:
|
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.FerroDiCavallo)]) > 0:
|
||||||
pickable_cards += 1
|
pickable_cards += 1
|
||||||
if self.is_my_turn:
|
if self.is_my_turn and self.attacker == None:
|
||||||
for i in range(len(self.equipment)):
|
for i in range(len(self.equipment)):
|
||||||
if i < len(self.equipment) and isinstance(self.equipment[i], cs.Dinamite):
|
if i < len(self.equipment) and isinstance(self.equipment[i], cs.Dinamite):
|
||||||
while pickable_cards > 0:
|
while pickable_cards > 0:
|
||||||
@ -1212,7 +1212,15 @@ class Player:
|
|||||||
self.molly_discarded_cards = 0
|
self.molly_discarded_cards = 0
|
||||||
self.notify_self()
|
self.notify_self()
|
||||||
self.game.responders_did_respond_resume_turn(did_lose=False)
|
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 = ''
|
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:
|
else:
|
||||||
self.pending_action = PendingAction.RESPOND
|
self.pending_action = PendingAction.RESPOND
|
||||||
self.notify_self()
|
self.notify_self()
|
||||||
|
@ -297,8 +297,6 @@ def test_SlabTheKiller():
|
|||||||
g.players[g.turn].play_card(0, g.players[(g.turn+1)%2].name)
|
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
|
assert g.players[(g.turn+1)%2].pending_action == PendingAction.RESPOND
|
||||||
g.players[(g.turn+1)%2].respond(0)
|
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].pending_action == PendingAction.WAIT
|
||||||
assert g.players[(g.turn+1)%2].lives == 3
|
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.deck import Deck
|
||||||
from bang.game import Game
|
from bang.game import Game
|
||||||
from bang.players import Player, PendingAction
|
from bang.players import Player, PendingAction
|
||||||
|
import bang.cards as cs
|
||||||
|
|
||||||
# test UltimoGiro
|
# test UltimoGiro
|
||||||
def test_ultimo_giro():
|
def test_ultimo_giro():
|
||||||
@ -69,3 +70,73 @@ def test_fantasma():
|
|||||||
pl.choose(0)
|
pl.choose(0)
|
||||||
assert pl.pending_action == PendingAction.PLAY
|
assert pl.pending_action == PendingAction.PLAY
|
||||||
assert len(fantasma_guy.equipment) == 1 and isinstance(fantasma_guy.equipment[0], Fantasma)
|
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