81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
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])
|
|
|