diff --git a/Card.py b/Card.py index 02c1b18..418ea24 100644 --- a/Card.py +++ b/Card.py @@ -60,8 +60,8 @@ class Attack(ATKCard): class Defend(DEFCard): def __init__(self): super(Defend, self).__init__(2 ,"防禦") - def passive(self): - print("防禦成功~") + def passive(self, cur, ene, card): + pass class Heal(OtherCard): def __init__(self): @@ -82,29 +82,122 @@ class Rob(ATKCard): 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 攻擊 對敵方造成兩點傷害 攻擊類卡片 -x 2 防禦 抵擋攻擊類卡片 防禦類卡片 +v 2 防禦 抵擋攻擊類卡片 防禦類卡片 v 3 治癒 回復兩點生命 v 4 補給 抽取兩張手牌 -x 5 強奪 從敵方手牌中選擇一張加入自己的手牌 攻擊類卡片 -x 6 奇襲 對敵方造成一點傷害,並使其隨機損失一張手牌 攻擊類卡片 -x 8 洞悉 抵擋攻擊類卡片,並抽取一張手牌、抵擋強奪的效果 防禦類卡片 +v 5 強奪 從敵方手牌中隨機一張加入自己的手牌 攻擊類卡片 +v 6 奇襲 對敵方造成一點傷害,並使其隨機損失一張手牌 攻擊類卡片 +v 8 洞悉 抵擋攻擊類卡片,並抽取一張(2?)手牌、抵擋強奪的效果 防禦類卡片 x 9 妙策 從牌庫中隨機挑出三張卡片,選擇一張加入手牌 v 10 掃射 對敵方造成零~五點傷害 攻擊類卡片 v 11 加護 回復三點生命,並解除中毒 v 12 劇毒 使敵方中毒:每個回合,玩家會損失一點生命 -x 14 反制 抵擋攻擊類卡片,並反彈其傷害和效果 防禦類卡片 -x 15 狂亂 回復三點生命,並對敵方造成三點傷害 攻擊類卡片 +v 14 反制 抵擋攻擊類卡片,並反彈其傷害和效果 防禦類卡片 +v 15 狂亂 回復三點生命,並對敵方造成三點傷害 攻擊類卡片 """ \ No newline at end of file diff --git a/Data.py b/Data.py index cea5c8e..40c6b53 100644 --- a/Data.py +++ b/Data.py @@ -1,4 +1,4 @@ Deck = [ - [1, 2, 3, 4, 5] * 10, - [1] * 10 + [1, 2, 3] * 7 + [4, 5, 6] * 4 + [8, 9, 10, 11] * 2 + [12, 14, 15], + [1, 2, 3] * 7 + [4, 5, 6] * 4 + [8, 9, 10, 11] * 2 + [12, 14, 15] ] \ No newline at end of file diff --git a/DeckGen.py b/DeckGen.py index 5c9b60d..29a0c37 100644 --- a/DeckGen.py +++ b/DeckGen.py @@ -5,13 +5,16 @@ cards = { 3: Heal, 4: Supply, 5: Rob, - 6: Card, - 7: Card, - 8: Card, - 9: Card, - 10: Card, + 6: Suprise, + #7: Card, + 8: Aware, + 9: Plan, + 10: Sweep, 11: Bless, - 12: Card, + 12: Poison, + 14: Counter, + 15: Frenzy, + } def DeckGen(card_ids): deck = [] diff --git a/Game.py b/Game.py index 430e765..2a5e1d8 100644 --- a/Game.py +++ b/Game.py @@ -5,20 +5,40 @@ class Game: self.first, self.second = first, second self.first.draw(3) self.second.draw(3) + self.turn = 0 def main(self): while self.first.hp > 0 and self.second.hp > 0: - print("輪到{}了\n{}抽到了{}\n這是{}現在的手牌:".format(self.first.name, self.first.name, self.first.draw(), self.first.name)) + self.turn += 1 + # Poison Check + if self.first.poison: + print("{}因劇毒損失了{}".format(self.first.name, self.first.poison)) + self.first.inc_hp(0-self.first.poison) + if self.first.hp <= 0: + print("{}倒下ㄌ".format(self.first.name)) + break + print("========Turn {} {}========".format(self.turn//2+1, "先攻" if self.turn%2 else "後攻")) + draw = self.first.draw() + if not draw: + print("{}抽到了死神 吧".format(self.first.name)) + self.first.inc_hp(-999) # 讓他死啦 + break + print("玩家{}\n{}抽到了{}\n這是{}現在的手牌:".format(self.first, self.first.name, draw, self.first.name)) for i, card in enumerate(self.first.hand): print(i, ": ", card, sep="") # Use Cards while 1: - use = input("請出牌的啦") + use = input("請出牌的啦(type p or pass to skip turn): ") + if use == "pass" or use == "p": + print("pass") + break try: card = self.first.hand[int(use)] if isinstance(card, Card.ATKCard): # Defence Handle - if self.second.defend(card): + if self.second.defend(card, self.first): + print("防禦成功~") + self.first.hand.remove(card) break elif isinstance(card, Card.DEFCard): print("防禦類卡片無法主動打出") diff --git a/Player.py b/Player.py index 9529117..beb2c1c 100644 --- a/Player.py +++ b/Player.py @@ -9,6 +9,8 @@ class Player: self.deck = deck[:] self.hand = [] self.poison = 0 + def __repr__(self): + return self.name + "(HP: " + str(self.hp) + ", 手牌: " + str(len(self.hand)) + ")" def draw(self, num=1): if not self.deck: return False @@ -25,9 +27,9 @@ class Player: card = choice(self.hand) self.hand.remove(card) return card - def defend(self, card): + def defend(self, use_card, ene): - print("對手使用了{}".format(card)) + print("對手使用了{}".format(use_card)) def_cards = list(filter(lambda x: True if isinstance(x, DEFCard) else False, self.hand)) if not def_cards: return False @@ -36,10 +38,13 @@ class Player: try: use = input() card = def_cards[int(use)] - card.passive() + card.passive(self, ene, use_card) self.hand.remove(card) return True - except: + 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):