Standard card completed

This commit is contained in:
Jerry Wu 2018-08-26 22:51:31 +08:00
parent 046ddb0657
commit 39792f4b48
5 changed files with 144 additions and 23 deletions

109
Card.py
View File

@ -60,8 +60,8 @@ class Attack(ATKCard):
class Defend(DEFCard): class Defend(DEFCard):
def __init__(self): def __init__(self):
super(Defend, self).__init__(2 ,"防禦") super(Defend, self).__init__(2 ,"防禦")
def passive(self): def passive(self, cur, ene, card):
print("防禦成功~") pass
class Heal(OtherCard): class Heal(OtherCard):
def __init__(self): def __init__(self):
@ -82,29 +82,122 @@ class Rob(ATKCard):
def active(self, cur, ene): def active(self, cur, ene):
self.texts = [cur.name, ene.name] self.texts = [cur.name, ene.name]
card = ene.drop() card = ene.drop()
if not card:
print("SAD, {}沒東西可搶".format(ene.name))
return
cur.get(card) cur.get(card)
self.texts.append(card) self.texts.append(card)
print(self.text.format(*self.texts)) 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): class Bless(OtherCard):
def __init__(self): def __init__(self):
super(Bless, self).__init__(11 ,"加護") super(Bless, self).__init__(11 ,"加護")
def active(self, cur, ene): def active(self, cur, ene):
cur.inc_hp(3) cur.inc_hp(3)
cur.poison = 0 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 1 攻擊 對敵方造成兩點傷害 攻擊類卡片
x 2 防禦 抵擋攻擊類卡片 防禦類卡片 v 2 防禦 抵擋攻擊類卡片 防禦類卡片
v 3 治癒 回復兩點生命 v 3 治癒 回復兩點生命
v 4 補給 抽取兩張手牌 v 4 補給 抽取兩張手牌
x 5 強奪 從敵方手牌中選擇一張加入自己的手牌 攻擊類卡片 v 5 強奪 從敵方手牌中隨機一張加入自己的手牌 攻擊類卡片
x 6 奇襲 對敵方造成一點傷害並使其隨機損失一張手牌 攻擊類卡片 v 6 奇襲 對敵方造成一點傷害並使其隨機損失一張手牌 攻擊類卡片
x 8 洞悉 抵擋攻擊類卡片並抽取一張手牌抵擋強奪的效果 防禦類卡片 v 8 洞悉 抵擋攻擊類卡片並抽取一張(2?)手牌抵擋強奪的效果 防禦類卡片
x 9 妙策 從牌庫中隨機挑出三張卡片選擇一張加入手牌 x 9 妙策 從牌庫中隨機挑出三張卡片選擇一張加入手牌
v 10 掃射 對敵方造成零五點傷害 攻擊類卡片 v 10 掃射 對敵方造成零五點傷害 攻擊類卡片
v 11 加護 回復三點生命並解除中毒 v 11 加護 回復三點生命並解除中毒
v 12 劇毒 使敵方中毒每個回合玩家會損失一點生命 v 12 劇毒 使敵方中毒每個回合玩家會損失一點生命
x 14 反制 抵擋攻擊類卡片並反彈其傷害和效果 防禦類卡片 v 14 反制 抵擋攻擊類卡片並反彈其傷害和效果 防禦類卡片
x 15 狂亂 回復三點生命並對敵方造成三點傷害 攻擊類卡片 v 15 狂亂 回復三點生命並對敵方造成三點傷害 攻擊類卡片
""" """

View File

@ -1,4 +1,4 @@
Deck = [ Deck = [
[1, 2, 3, 4, 5] * 10, [1, 2, 3] * 7 + [4, 5, 6] * 4 + [8, 9, 10, 11] * 2 + [12, 14, 15],
[1] * 10 [1, 2, 3] * 7 + [4, 5, 6] * 4 + [8, 9, 10, 11] * 2 + [12, 14, 15]
] ]

View File

@ -5,13 +5,16 @@ cards = {
3: Heal, 3: Heal,
4: Supply, 4: Supply,
5: Rob, 5: Rob,
6: Card, 6: Suprise,
7: Card, #7: Card,
8: Card, 8: Aware,
9: Card, 9: Plan,
10: Card, 10: Sweep,
11: Bless, 11: Bless,
12: Card, 12: Poison,
14: Counter,
15: Frenzy,
} }
def DeckGen(card_ids): def DeckGen(card_ids):
deck = [] deck = []

26
Game.py
View File

@ -5,20 +5,40 @@ class Game:
self.first, self.second = first, second self.first, self.second = first, second
self.first.draw(3) self.first.draw(3)
self.second.draw(3) self.second.draw(3)
self.turn = 0
def main(self): def main(self):
while self.first.hp > 0 and self.second.hp > 0: 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): for i, card in enumerate(self.first.hand):
print(i, ": ", card, sep="") print(i, ": ", card, sep="")
# Use Cards # Use Cards
while 1: while 1:
use = input("請出牌的啦") use = input("請出牌的啦(type p or pass to skip turn): ")
if use == "pass" or use == "p":
print("pass")
break
try: try:
card = self.first.hand[int(use)] card = self.first.hand[int(use)]
if isinstance(card, Card.ATKCard): if isinstance(card, Card.ATKCard):
# Defence Handle # Defence Handle
if self.second.defend(card): if self.second.defend(card, self.first):
print("防禦成功~")
self.first.hand.remove(card)
break break
elif isinstance(card, Card.DEFCard): elif isinstance(card, Card.DEFCard):
print("防禦類卡片無法主動打出") print("防禦類卡片無法主動打出")

View File

@ -9,6 +9,8 @@ class Player:
self.deck = deck[:] self.deck = deck[:]
self.hand = [] self.hand = []
self.poison = 0 self.poison = 0
def __repr__(self):
return self.name + "(HP: " + str(self.hp) + ", 手牌: " + str(len(self.hand)) + ")"
def draw(self, num=1): def draw(self, num=1):
if not self.deck: if not self.deck:
return False return False
@ -25,9 +27,9 @@ class Player:
card = choice(self.hand) card = choice(self.hand)
self.hand.remove(card) self.hand.remove(card)
return 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)) def_cards = list(filter(lambda x: True if isinstance(x, DEFCard) else False, self.hand))
if not def_cards: if not def_cards:
return False return False
@ -36,10 +38,13 @@ class Player:
try: try:
use = input() use = input()
card = def_cards[int(use)] card = def_cards[int(use)]
card.passive() card.passive(self, ene, use_card)
self.hand.remove(card) self.hand.remove(card)
return True 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 return False
class Keieit(Player): class Keieit(Player):
def __init__(self): def __init__(self):