First comit
This commit is contained in:
commit
046ddb0657
110
Card.py
Normal file
110
Card.py
Normal file
@ -0,0 +1,110 @@
|
||||
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):
|
||||
print("防禦成功~")
|
||||
|
||||
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()
|
||||
cur.get(card)
|
||||
self.texts.append(card)
|
||||
|
||||
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
|
||||
"""
|
||||
v 1 攻擊 對敵方造成兩點傷害 攻擊類卡片
|
||||
x 2 防禦 抵擋攻擊類卡片 防禦類卡片
|
||||
v 3 治癒 回復兩點生命
|
||||
v 4 補給 抽取兩張手牌
|
||||
x 5 強奪 從敵方手牌中選擇一張加入自己的手牌 攻擊類卡片
|
||||
x 6 奇襲 對敵方造成一點傷害,並使其隨機損失一張手牌 攻擊類卡片
|
||||
x 8 洞悉 抵擋攻擊類卡片,並抽取一張手牌、抵擋強奪的效果 防禦類卡片
|
||||
x 9 妙策 從牌庫中隨機挑出三張卡片,選擇一張加入手牌
|
||||
v 10 掃射 對敵方造成零~五點傷害 攻擊類卡片
|
||||
v 11 加護 回復三點生命,並解除中毒
|
||||
v 12 劇毒 使敵方中毒:每個回合,玩家會損失一點生命
|
||||
x 14 反制 抵擋攻擊類卡片,並反彈其傷害和效果 防禦類卡片
|
||||
x 15 狂亂 回復三點生命,並對敵方造成三點傷害 攻擊類卡片
|
||||
"""
|
24
DeckGen.py
Normal file
24
DeckGen.py
Normal file
@ -0,0 +1,24 @@
|
||||
from Card import *
|
||||
cards = {
|
||||
1: Attack,
|
||||
2: Defend,
|
||||
3: Heal,
|
||||
4: Supply,
|
||||
5: Rob,
|
||||
6: Card,
|
||||
7: Card,
|
||||
8: Card,
|
||||
9: Card,
|
||||
10: Card,
|
||||
11: Bless,
|
||||
12: Card,
|
||||
}
|
||||
def DeckGen(card_ids):
|
||||
deck = []
|
||||
for card_id in card_ids:
|
||||
deck.append(cards[card_id]())
|
||||
return deck
|
||||
|
||||
def CardGen(card_id):
|
||||
return cards[card_id]()
|
||||
|
40
Game.py
Normal file
40
Game.py
Normal file
@ -0,0 +1,40 @@
|
||||
import Player, Card
|
||||
|
||||
class Game:
|
||||
def __init__(self, first, second):
|
||||
self.first, self.second = first, second
|
||||
self.first.draw(3)
|
||||
self.second.draw(3)
|
||||
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))
|
||||
for i, card in enumerate(self.first.hand):
|
||||
print(i, ": ", card, sep="")
|
||||
|
||||
# Use Cards
|
||||
while 1:
|
||||
use = input("請出牌的啦")
|
||||
try:
|
||||
card = self.first.hand[int(use)]
|
||||
if isinstance(card, Card.ATKCard):
|
||||
# Defence Handle
|
||||
if self.second.defend(card):
|
||||
break
|
||||
elif isinstance(card, Card.DEFCard):
|
||||
print("防禦類卡片無法主動打出")
|
||||
continue
|
||||
self.first.hand.pop(int(use)).active(self.first, self.second)
|
||||
break
|
||||
except IndexError:
|
||||
print("索引錯誤")
|
||||
except ValueError:
|
||||
print("請輸入數字")
|
||||
|
||||
self.first, self.second = self.second, self.first
|
||||
self.end()
|
||||
def end(self):
|
||||
winner = self.second if self.first.hp <= 0 else self.first
|
||||
print("{}贏了".format(winner.name))
|
||||
|
||||
game = Game(Player.Keieit(), Player.Rabbit())
|
||||
game.main()
|
50
Player.py
Normal file
50
Player.py
Normal file
@ -0,0 +1,50 @@
|
||||
from Data import Deck
|
||||
from DeckGen import CardGen
|
||||
from Card import DEFCard
|
||||
from random import choice
|
||||
class Player:
|
||||
def __init__(self, name, deck):
|
||||
self.hp = 15
|
||||
self.name = name
|
||||
self.deck = deck[:]
|
||||
self.hand = []
|
||||
self.poison = 0
|
||||
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):
|
||||
self.hp += hp
|
||||
def get(self, card):
|
||||
self.hand.append(card)
|
||||
def drop(self):
|
||||
if not self.hand:
|
||||
return False
|
||||
card = choice(self.hand)
|
||||
self.hand.remove(card)
|
||||
return card
|
||||
def defend(self, card):
|
||||
|
||||
print("對手使用了{}".format(card))
|
||||
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.hand.remove(card)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
class Keieit(Player):
|
||||
def __init__(self):
|
||||
super(Keieit, self).__init__("圭月", Deck[0])
|
||||
|
||||
class Rabbit(Player):
|
||||
def __init__(self):
|
||||
super(Rabbit, self).__init__("小兔", Deck[1])
|
Loading…
x
Reference in New Issue
Block a user