74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
import Player, Card
|
||
from random import shuffle
|
||
|
||
class Game:
|
||
def __init__(self, first, second):
|
||
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:
|
||
# 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 "後攻"))
|
||
self.turn += 1
|
||
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("請出牌的啦(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):
|
||
# Defense Handle
|
||
if self.second.defend(card, self.first):
|
||
print("防禦成功~")
|
||
self.first.hand.remove(card)
|
||
break
|
||
if self.first.boost > 0 and not isinstance(card, Card.Rob):
|
||
self.first.hand[int(use)].damage += 1
|
||
print("傷害將會+1,效果持續{}回合".format(self.first.boost))
|
||
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
|
||
|
||
# Player Ability Handling
|
||
if isinstance(self.first, Player.Keieit):
|
||
self.first.guard -= 1
|
||
|
||
if isinstance(self.first, Player.Rabbit):
|
||
self.first.boost -= 1
|
||
self.end()
|
||
def end(self):
|
||
winner = self.second if self.first.hp <= 0 else self.first
|
||
print("{}贏了".format(winner.name))
|
||
|
||
if __name__ == "__main__":
|
||
players = [Player.Keieit(), Player.Rabbit()]
|
||
shuffle(players)
|
||
game = Game(*players)
|
||
game.main() |