spec added; card function 1, 2, 3, 4 modified

This commit is contained in:
a91082900
2018-05-17 23:21:59 +08:00
committed by GitHub
parent 22cb3f44f3
commit 152a71ff05
5 changed files with 621 additions and 161 deletions

117
card.py
View File

@@ -1,5 +1,7 @@
import random
import game
from room import Room
from json import dumps
cards = dict()
card_name = ["1.攻擊","2.防禦","3.治癒","4.補給","5.強奪","6.奇襲","7.交易","8.洞悉","9.妙策","10.掃射","11.加護","12.劇毒","13.詛咒","14.反制","15.狂亂","16.逆轉"]
@@ -9,20 +11,37 @@ for i in range(len(card_name)):
cards[str(i+1)] = card_name[i] # initialize cards
# create default deck
# 攻擊*15 防禦*15 治癒*15 補給*10 強奪*10 奇襲*10 交易*10 洞悉*5 妙策*5 掃射*5 加護*5 劇毒*2 詛咒*2 反制*2 狂亂*2 逆轉*2
default_deck = ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '5', '5', '5', '5', '5', '5', '5', '5', '5', '5', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '7', '7', '7', '7', '7', '7', '7', '7', '7', '7', '8', '8', '8', '8', '8', '9', '9', '9', '9', '9', '10', '10', '10', '10', '10', '11', '11', '11', '11', '11', '12', '12', '13', '13', '14', '14', '15', '15', '16', '16']
#default_deck = ['1', '2', '3'] * 5 + ['4', '5', '6', '7'] * 3 + ['8', '9', '10', '11'] * 2 + ['12', '13', '14', '15', '16']
default_deck = ['3', '4', '2', '1']*15
random.shuffle(default_deck) # wash
# card functions
# cur:current player
# ene:enemy
def attack(cur,ene):
def attack(wscur, wsene):
cur, ene = wscur.player, wsene.player
cur.attacking = True
r = []
cur.damage = 2 # 給反制判斷的
print("{} 攻擊 {}".format(cur.name,ene.name))
r.append(( (wscur, ), dumps({"msg": "attack", "data": [cur.name, ene.name]})))
if ene.defence():
game.display(ene) # 顯示手牌
while True:
choice = input("請問要防禦嗎? 不使用請輸入0 ")
r.append(( (wsene, ),
dumps({"msg": "attack", "data": [cur.name, ene.name],
"action": "toDefend", "value": {"damage": cur.damage}})
))
cur.status = Room.NOTHING
ene.status = Room.DEFENCE
else:
r.append(( (wsene, wscur),
dumps({"msg": "damaged", "data": [ene.name, cur.damage]})
))
ene.life -= cur.damage
cur.attacking = False
cur.damage = 0 # reset
"""
if choice in ene.hand:
if choice in unattackable:
skills[choice](cur,ene)
@@ -36,25 +55,41 @@ def attack(cur,ene):
print("{} 受到{}點傷害".format(ene.name,cur.damage))
ene.life -= cur.damage
cur.attacking = False
cur.damage = 0 # reset
cur.damage = 0 # reset"""
return r
def defend(cur,ene):
if cur.attacking or cur.surprise:
print("{} 防禦成功".format(ene.name))
def defend(wscur,wsene): # cur是用卡方
cur, ene = wscur.player, wsene.player
r = []
if ene.attacking or ene.surprise:
r.append(( (wsene,wscur), "{} 防禦成功".format(cur.name)))
else:
print("{} 沒什麼可以防禦的,回復一點生命".format(cur.name))
r.append(( (wsene,wscur), "{} 沒什麼可以防禦的,回復一點生命".format(cur.name)))
cur.life += 1
return r
def heal(cur,ene):
print("{} 回復兩點生命".format(cur.name))
def heal(wscur,wsene):
cur, ene = wscur.player, wsene.player
r = []
r.append(( (wsene,wscur), dumps({"msg": "heal", "data": [cur.name]})))
cur.life += 2
return r
def supply(wscur,wsene):
cur, ene = wscur.player, wsene.player
r = []
r.append(( (wsene,wscur), dumps({"msg": "supply", "data": [cur.name]})))
def supply(cur,ene):
print("{} 增加兩張手牌".format(cur.name))
for _ in range(2):
game.draw(cur)
def rob(cur,ene):
return r
def rob(wscur,wsene):
cur, ene = wscur.player, wsene.player
cur.robbing = True
print("{} 正在對 {} 行搶".format(cur.name,ene.name))
if ene.keep():
@@ -74,14 +109,16 @@ def rob(cur,ene):
else:
game.display(ene)
while True:
swag = input("{} 要搶哪張? ".format(cur.name))
swag = input("{} 要搶哪張?".format(cur.name))
if swag in ene.hand:
ene.robbed(swag)
cur.add_card(swag)
break
cur.robbing = False
def surprise(cur,ene):
def surprise(wscur,wsene):
cur, ene = wscur.player, wsene.player
cur.surprise = True
cur.damage = 1 # 給反制判斷
print("{} 發動奇襲".format(cur.name))
@@ -108,7 +145,9 @@ def surprise(cur,ene):
cur.surprise = False
cur.damage = 0 # reset
def trade(cur,ene):
def trade(wscur,wsene):
cur, ene = wscur.player, wsene.player
print("{} 想與 {} 進行交易".format(cur.name,ene.name))
cur.remove_card("7") # you can't trade the using card "trade"
game.display(cur) # 顯示手牌
@@ -138,7 +177,9 @@ def trade(cur,ene):
cur.add_card("7") # add back the card. game system will remove this card right away
def aware(cur,ene):
def aware(wscur,wsene):
cur, ene = wscur.player, wsene.player
if cur.attacking:
print("{} 洞悉了 {} 的攻擊,並抽取了一張手牌".format(ene.name,cur.name))
game.draw(ene)
@@ -153,7 +194,9 @@ def aware(cur,ene):
print("{} 增加三張手牌".format(cur.name))
game.draw(cur)
def plan(cur,ene):
def plan(wscur,wsene):
cur, ene = wscur.player, wsene.player
print("{} 有個妙策".format(cur.name))
options = random.sample(cur.deck,3)
o_name = [] # names of cards in options
@@ -166,7 +209,9 @@ def plan(cur,ene):
cur.add_card(choice)
break
def sweep(cur,ene):
def sweep(wscur,wsene):
cur, ene = wscur.player, wsene.player
cur.attacking = True
cur.damage = random.randint(0,5)
print("{}{} 進行掃射,威力是 {}".format(cur.name,ene.name,cur.damage))
@@ -189,14 +234,20 @@ def sweep(cur,ene):
cur.attacking = False
cur.damage = 0 # reset
def bless(cur,ene):
def bless(wscur,wsene):
cur, ene = wscur.player, wsene.player
print("{} 獲得加護,身上的毒素一掃而空,並回復三點生命,還抽取了兩張手牌".format(cur.name))
cur.poison = 0 # 解毒
cur.life += 3
for _ in range(2):
game.draw(cur)
def poison(cur,ene):
def poison(wscur,wsene):
cur, ene = wscur.player, wsene.player
if ene.poison != 0:
s = ""
else:
@@ -204,13 +255,17 @@ def poison(cur,ene):
print("{} 在食物下毒,{} {}中毒了".format(cur.name,ene.name, s))
ene.poison += 1
def curse(cur,ene):
def curse(wscur,wsene):
cur, ene = wscur.player, wsene.player
print("{} 詛咒了 {},使其損失四點生命,並掉了一張手牌".format(cur.name,ene.name))
ene.life -= 4
drop = random.choice(ene.hand)
ene.remove_card(drop)
def counter(cur,ene):
def counter(wscur,wsene):
cur, ene = wscur.player, wsene.player
if cur.attacking:
print("{} 反制了 {} 的攻擊,反彈了{}點傷害".format(ene.name,cur.name,cur.damage))
cur.life -= cur.damage
@@ -223,12 +278,16 @@ def counter(cur,ene):
print("{} 反制了敵手,使 {} 生命值減半了!".format(cur.name,ene.name))
ene.life = ene.life//2
def chaos(cur,ene):
def chaos(wscur,wsene):
cur, ene = wscur.player, wsene.player
print("{} 進入狂亂模式,回復三點生命,並對 {} 造成三點傷害".format(cur.name,ene.name))
cur.life += 3
ene.life -= 3
def reverse(cur,ene):
def reverse(wscur,wsene):
cur, ene = wscur.player, wsene.player
print("{} 一口氣逆轉了情勢".format(cur.name))
cur.life,ene.life = ene.life,cur.life