203 lines
6.0 KiB
Python
203 lines
6.0 KiB
Python
class Card:
|
||
ATK = 0
|
||
DEF = 1
|
||
OTHER = 2
|
||
SP_ATK = 3
|
||
SP_DEF = 4
|
||
SP_OTHER = 5
|
||
|
||
def __init__(self, cardtype):
|
||
self.type = cardtype
|
||
|
||
|
||
class ATKCard(Card):
|
||
def __init__(self, id, name):
|
||
super(ATKCard, self).__init__(Card.ATK)
|
||
self.id = id
|
||
self.name = name
|
||
self.damage = 0
|
||
self.text = ""
|
||
self.texts = []
|
||
def __repr__(self):
|
||
#return str(self.id) + ". " + self.name + "(ATK)"
|
||
return self.name + "(ATK)"
|
||
def active(self, cur, ene):
|
||
pass
|
||
|
||
class DEFCard(Card):
|
||
def __init__(self, id, name):
|
||
super(DEFCard, self).__init__(Card.DEF)
|
||
self.id = id
|
||
self.name = name
|
||
def __repr__(self):
|
||
return self.name + "(DEF)"
|
||
def passive(self):
|
||
pass
|
||
|
||
|
||
class OtherCard(Card):
|
||
def __init__(self, id, name):
|
||
super(OtherCard, self).__init__(Card.OTHER)
|
||
self.id = id
|
||
self.name = name
|
||
def __repr__(self):
|
||
return self.name + "(Other)"
|
||
def active(self):
|
||
pass
|
||
|
||
# Abstract Class Definition
|
||
|
||
class Attack(ATKCard):
|
||
def __init__(self):
|
||
super(Attack, self).__init__(1 ,"攻擊")
|
||
self.damage = 2
|
||
self.text = "可悲垃圾{}打了{}2"
|
||
def active(self, cur, ene):
|
||
self.texts = [cur.name, ene.name]
|
||
ene.inc_hp(0-self.damage)
|
||
print(self.text.format(*self.texts))
|
||
|
||
class Defend(DEFCard):
|
||
def __init__(self):
|
||
super(Defend, self).__init__(2 ,"防禦")
|
||
def passive(self, cur, ene, card):
|
||
pass
|
||
|
||
class Heal(OtherCard):
|
||
def __init__(self):
|
||
super(Heal, self).__init__(3 ,"治癒")
|
||
def active(self, cur, ene):
|
||
cur.inc_hp(2)
|
||
|
||
class Supply(OtherCard):
|
||
def __init__(self):
|
||
super(Supply, self).__init__(4 ,"補給")
|
||
def active(self, cur, ene):
|
||
cur.draw(2)
|
||
|
||
class Rob(ATKCard):
|
||
def __init__(self):
|
||
super(Rob, self).__init__(5 ,"搶奪")
|
||
self.text = "{}從{}那搶走了{}"
|
||
def active(self, cur, ene):
|
||
self.texts = [cur.name, ene.name]
|
||
card = ene.drop()
|
||
if not card:
|
||
print("SAD, {}沒東西可搶".format(ene.name))
|
||
return
|
||
cur.get(card)
|
||
self.texts.append(card)
|
||
|
||
print(self.text.format(*self.texts))
|
||
|
||
class Suprise(ATKCard):
|
||
def __init__(self):
|
||
super(Suprise, self).__init__(6 ,"奇襲")
|
||
self.damage = 1
|
||
self.text = "{}攻擊{}1,並使其掉落了一張{}"
|
||
def active(self, cur, ene):
|
||
card = ene.drop()
|
||
self.texts = [cur.name, ene.name]
|
||
if not card:
|
||
self.text = "{}攻擊{}1"
|
||
else:
|
||
self.texts.append(card)
|
||
ene.inc_hp(0-self.damage)
|
||
print(self.text.format(*self.texts))
|
||
|
||
class Aware(DEFCard):
|
||
def __init__(self):
|
||
super(Aware, self).__init__(8 ,"傷心")
|
||
def passive(self, cur, ene, card):
|
||
cur.draw(1)
|
||
print("好氣喔還抽了張卡片")
|
||
|
||
class Plan(OtherCard):
|
||
def __init__(self):
|
||
super(Plan, self).__init__(9 ,"妙策")
|
||
def active(self, cur, ene):
|
||
from random import sample
|
||
from DeckGen import DeckGen
|
||
l = DeckGen(sample(cur.deck, 3))
|
||
for i, card in enumerate(l):
|
||
print(i, ": ", card, sep="")
|
||
while 1:
|
||
try:
|
||
choose = int(input())
|
||
cur.get(l[choose])
|
||
print("{}獲得{}".format(cur.name, l[choose]))
|
||
cur.deck.remove(l[choose].id)
|
||
break
|
||
except:
|
||
pass
|
||
|
||
|
||
class Sweep(ATKCard):
|
||
def __init__(self):
|
||
super(Sweep, self).__init__(10 ,"掃射的啦")
|
||
self.damage = 0
|
||
self.text = "可悲垃圾{}打了{}{}"
|
||
def active(self, cur, ene):
|
||
from random import randint
|
||
self.damage = randint(0, 5)
|
||
self.texts = [cur.name, ene.name, self.damage]
|
||
ene.inc_hp(0-self.damage)
|
||
print(self.text.format(*self.texts))
|
||
|
||
class Bless(OtherCard):
|
||
def __init__(self):
|
||
super(Bless, self).__init__(11 ,"加護")
|
||
def active(self, cur, ene):
|
||
cur.inc_hp(3)
|
||
cur.poison = 0
|
||
|
||
class Poison(OtherCard):
|
||
def __init__(self):
|
||
super(Poison, self).__init__(12 ,"毒死你")
|
||
def active(self, cur, ene):
|
||
ene.poison += 1
|
||
print("毒死你生效ㄌ")
|
||
|
||
class Counter(DEFCard):
|
||
def __init__(self):
|
||
super(Counter, self).__init__(14 ,"反打一波")
|
||
def passive(self, cur, ene, card):
|
||
print("反彈了傷害和效果:")
|
||
"""if isinstance(card, Rob):
|
||
pass
|
||
elif isinstance(card, Suprise):
|
||
pass
|
||
elif isinstance(card, Frenzy):
|
||
cur.inc_hp(3)
|
||
ene.inc_hp(-3)
|
||
|
||
else:
|
||
ene.inc_hp(0-card.damage)"""
|
||
card.active(cur, ene)
|
||
|
||
class Frenzy(ATKCard):
|
||
def __init__(self):
|
||
super(Frenzy, self).__init__(15, "星爆氣流斬")
|
||
self.damage = 3
|
||
self.text = "可悲垃圾{}打了{}3,並回復了3"
|
||
def active(self, cur, ene):
|
||
|
||
self.texts = [cur.name, ene.name]
|
||
ene.inc_hp(0-self.damage)
|
||
cur.inc_hp(3)
|
||
print(self.text.format(*self.texts))
|
||
"""
|
||
v 1 攻擊 對敵方造成兩點傷害 攻擊類卡片
|
||
v 2 防禦 抵擋攻擊類卡片 防禦類卡片
|
||
v 3 治癒 回復兩點生命
|
||
v 4 補給 抽取兩張手牌
|
||
v 5 強奪 從敵方手牌中隨機一張加入自己的手牌 攻擊類卡片
|
||
v 6 奇襲 對敵方造成一點傷害,並使其隨機損失一張手牌 攻擊類卡片
|
||
v 8 洞悉 抵擋攻擊類卡片,並抽取一張(2?)手牌、抵擋強奪的效果 防禦類卡片
|
||
x 9 妙策 從牌庫中隨機挑出三張卡片,選擇一張加入手牌
|
||
v 10 掃射 對敵方造成零~五點傷害 攻擊類卡片
|
||
v 11 加護 回復三點生命,並解除中毒
|
||
v 12 劇毒 使敵方中毒:每個回合,玩家會損失一點生命
|
||
v 14 反制 抵擋攻擊類卡片,並反彈其傷害和效果 防禦類卡片
|
||
v 15 狂亂 回復三點生命,並對敵方造成三點傷害 攻擊類卡片
|
||
""" |