benedizione, maledizione

This commit is contained in:
Alberto Xamin 2020-12-23 14:06:07 +01:00
parent 25bf088c3e
commit a7fe148ff9
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
5 changed files with 63 additions and 8 deletions

View File

@ -75,6 +75,15 @@ class Card(ABC):
def is_duplicate_card(self, player):
return self.name in [c.name for c in player.equipment]
def check_suit(self, game, accepted):
import bang.expansions.high_noon.card_events as ceh
if game.check_event(ceh.Benedizione):
return Suit.HEARTS in accepted
elif game.check_event(ceh.Maledizione):
return Suit.SPADES in accepted
return self.suit in accepted
class Barile(Card):
def __init__(self, suit, number):

View File

@ -2,6 +2,7 @@ from typing import List, Set, Dict, Tuple, Optional
import random
import bang.cards as cs
import bang.expansions.fistful_of_cards.card_events as ce
import bang.expansions.high_noon.card_events as ceh
class Deck:
def __init__(self, game):
@ -22,6 +23,9 @@ class Deck:
self.event_cards: List[ce.CardEvent] = []
if 'fistful_of_cards' in game.expansions:
self.event_cards.extend(ce.get_all_events())
if 'high_noon' in game.expansions:
self.event_cards.extend(ceh.get_all_events())
if len(self.event_cards) > 0:
self.event_cards.insert(0, None)
self.event_cards.insert(0, None) # 2 perchè iniziale, e primo flip dallo sceriffo
random.shuffle(self.cards)

View File

@ -0,0 +1,41 @@
import random
from bang.expansions.fistful_of_cards.card_events import CardEvent
class Benedizione(CardEvent):
def __init__(self):
super().__init__("Benedizione", "🙏")
self.desc = "Tutte le carte sono considerate di cuori ♥️"
self.desc_eng = ""
class Maledizione(CardEvent):
def __init__(self):
super().__init__("Maledizione", "🤬")
self.desc = "Tutte le carte sono considerate di picche ♠"
self.desc_eng = ""
class MezzogiornoDiFuoco(CardEvent):
def __init__(self):
super().__init__("Mezzogiorno di Fuoco", "🔥")
self.desc = "Ogni giocatore perde 1 punto vita all'inizio del turno"
self.desc_eng = "Every player loses 1 HP when their turn starts"
def get_all_events():
cards = [
Benedizione(),
Maledizione(),
# CittaFantasma(),
# CorsaAllOro(),
# IDalton(),
# IlDottore(),
# IlReverendo(),
# IlTreno(),
# Sbornia(),
# Seromone(),
# Sete(),
# Sparatoria(),
]
random.shuffle(cards)
cards.append(MezzogiornoDiFuoco())
for c in cards:
c.expansion = 'high-noon'
return cards

View File

@ -24,7 +24,7 @@ class Game:
self.initial_players = 0
self.password = ''
self.expansions = []
self.available_expansions = ['dodge_city', 'fistful_of_cards']
self.available_expansions = ['dodge_city', 'fistful_of_cards', 'high_noon']
self.shutting_down = False
self.is_competitive = False
self.disconnect_bot = True

View File

@ -9,6 +9,7 @@ import bang.expansions.dodge_city.cards as csd
import bang.characters as chars
import bang.expansions.dodge_city.characters as chd
import bang.expansions.fistful_of_cards.card_events as ce
import bang.expansions.high_noon.card_events as ceh
import eventlet
class PendingAction(IntEnum):
@ -403,7 +404,7 @@ class Player:
for p in self.game.players:
if p != self:
p.notify_card(self, card, 'blackjack_special' if isinstance(self.character, chars.BlackJack) else 'foc.leggedelwest')
if card.suit == cs.Suit.HEARTS or card.suit == cs.Suit.DIAMONDS and isinstance(self.character, chars.BlackJack):
if card.check_suit(self.game, [cs.Suit.HEARTS, cs.Suit.DIAMONDS]) and isinstance(self.character, chars.BlackJack):
self.hand.append(self.game.deck.draw())
if isinstance(self.character, chd.PixiePete):
self.hand.append(self.game.deck.draw())
@ -422,7 +423,7 @@ class Player:
print(f'Did pick {picked}')
self.sio.emit('chat_message', room=self.game.name,
data=f'_flipped|{self.name}|{picked}')
if picked.suit == cs.Suit.SPADES and 2 <= picked.number <= 9 and pickable_cards == 0:
if picked.check_suit(self.game, [cs.Suit.SPADES]) and 2 <= picked.number <= 9 and pickable_cards == 0:
self.lives -= 3
self.game.deck.scrap(self.equipment.pop(i), True)
self.sio.emit('chat_message', room=self.game.name, data=f'_explode|{self.name}')
@ -448,7 +449,7 @@ class Player:
print(f'Did pick {picked}')
self.sio.emit('chat_message', room=self.game.name,
data=f'_flipped|{self.name}|{picked}')
if picked.suit != cs.Suit.HEARTS and pickable_cards == 0:
if not picked.check_suit(self.game, [cs.Suit.HEARTS]) and pickable_cards == 0:
self.game.deck.scrap(self.equipment.pop(i), True)
self.end_turn(forced=True)
return
@ -497,7 +498,7 @@ class Player:
print(self.name, 'is playing ', card, ' against:', against, ' with:', _with)
did_play_card = False
event_blocks_card = (self.game.check_event(ce.IlGiudice) and (card.is_equipment or (card.usable_next_turn and not card.can_be_used_now))) or (self.game.check_event(ce.Lazo) and card.usable_next_turn and card.can_be_used_now)
if not(against != None and isinstance(self.game.get_player_named(against).character, chd.ApacheKid) and card.suit == cs.Suit.DIAMONDS) and not event_blocks_card:
if not(against != None and isinstance(self.game.get_player_named(against).character, chd.ApacheKid) and card.check_suit(self.game, [cs.Suit.DIAMONDS])) and not event_blocks_card:
if against == self.name and not isinstance(card, csd.Tequila):
did_play_card = False
else:
@ -647,7 +648,7 @@ class Player:
print(f'Did pick {picked}')
self.sio.emit('chat_message', room=self.game.name,
data=f'_flipped|{self.name}|{picked}')
if picked.suit == cs.Suit.HEARTS:
if picked.check_suit(self.game, [cs.Suit.HEARTS]):
self.mancato_needed -= 1
self.notify_self()
if self.mancato_needed <= 0:
@ -677,7 +678,7 @@ class Player:
print(f'Did pick {picked}')
self.sio.emit('chat_message', room=self.game.name,
data=f'_flipped|{self.name}|{picked}')
if picked.suit == cs.Suit.HEARTS:
if picked.check_suit(self.game, [cs.Suit.HEARTS]):
self.mancato_needed -= 1
self.notify_self()
if self.mancato_needed <= 0:
@ -921,7 +922,7 @@ class Player:
if not forced and self.game.check_event(ce.Vendetta) and self.can_play_vendetta:
picked: cs.Card = self.game.deck.pick_and_scrap()
self.sio.emit('chat_message', room=self.game.name, data=f'_flipped|{self.name}|{picked}')
if picked.suit == cs.Suit.HEARTS:
if picked.check_suit(self.game, [cs.Suit.HEARTS]):
self.play_turn(can_play_vendetta=False)
return
self.is_my_turn = False