from Data import * from DeckGen import CardGen from Card import DEFCard, SPATKCard, SPDEFCard, Rabbit1, Rabbit3 from random import choice, shuffle class Player: def __init__(self, name, deck, hp): self.hp = hp self.name = name self.deck = deck[:] shuffle(self.deck) self.hand = [] self.poison = 0 self.guard = 0 self.boost = 0 def __repr__(self): return self.name + "(HP: " + str(self.hp) + ", 手牌: " + str(len(self.hand)) + ", 牌庫: " + str(len(self.deck)) + ")" def draw(self, num=1): if not self.deck: return False for _ in range(num): self.hand.append(CardGen(self.deck.pop(0))) return self.hand[-1] def inc_hp(self, hp): if self.guard > 0 and hp < 0: print("{}在{}回合內不會受到傷害".format(self.name, self.guard)) return True else: self.hp += hp def get(self, card): self.hand.append(card) def drop(self, num=1): if not self.hand: return False if num == 1: card = choice(self.hand) self.hand.remove(card) return card else: l = [] for _ in range(num): card = choice(self.hand) l.append(card) self.hand.remove(card) if not self.hand: break return l def defend(self, use_card, ene): print("對手使用了{}".format(use_card)) def_cards = [] if isinstance(use_card, SPATKCard): if not isinstance(use_card, (Rabbit1, Rabbit3)): def_cards = list(filter(lambda x: True if isinstance(x, SPDEFCard) else False, self.hand)) else: def_cards = list(filter(lambda x: True if isinstance(x, DEFCard) else False, self.hand)) if not def_cards: return False for i, card in enumerate(def_cards): print(i, ": ", card, sep="") try: use = input() card = def_cards[int(use)] card.passive(self, ene, use_card) self.hand.remove(card) return True except Exception as e: #template = "An exception of type {0} occurred. Arguments:\n{1!r}" #message = template.format(type(e).__name__, e.args) #print(message) return False class Keieit(Player): def __init__(self): super(Keieit, self).__init__("圭月", Deck[0], HP[0]) self.guard = 0 class Rabbit(Player): def __init__(self): super(Rabbit, self).__init__("小兔", Deck[1], HP[1])