详细解释内容请见代码注释XD
import numpy as np
#随从的定义
#随从的星数,攻击力,防御力,属性,圣盾,亡语,嘲讽,在场buff,因其他随从状态变化而造成的效果
class minions():
def __init__(self, name, star, ATK, DEF, attribute,
DivineShield, Deathrattle, Taunt, onboard, feedback):
self.name = name
self.star = star
self.ATK = ATK
self.DEF = DEF
self.attribute = attribute
self.DivineShield = DivineShield
self.Deathrattle = Deathrattle
self.onboard = onboard
self.feedback = feedback
self.Taunt = Taunt
#玩家场上的七只怪
def player_list(one, two, three, four, five, six, seven):
player = []
player.append(one)
player.append(two)
player.append(three)
player.append(four)
player.append(five)
player.append(six)
player.append(seven)
return player
#英雄的定义
class Heroes():
def __init__(self, name, ability, bloodvalue, minion): #英雄的技能、血量和拥有的随从
self.name = name
self.ability = ability
self.bloodvalue = bloodvalue
self.minion = minion
def winordefeat(self, player): #判断获胜的英雄是谁
for min in self.minion:
if min.name == player[0].name:
return True
#1.掷色子,决定哪方先手
def offensiveordifensive(opponent, you):
dice = np.random.randint(0, 2)
if dice == 0: #dice为0,opponent先手,dice为1,you先手
offensive = opponent
defensive = you
else:
offensive = you
defensive = opponent
return offensive, defensive
#检查圣盾被破后的feedback状态
def checkfeedback(player):
for min in player:
if min.feedback == 'gain+2+2': #该情形为龙人执行者
min.ATK += 2
min.DEF += 2
print(min.name, '获得+2+2,', '身材变为', min.ATK, '-', min.DEF)
#两个随从互打,削减生命值,判断圣盾状态,判断因圣盾状态变化而导致其他随从变化的状态(如龙人执行者)
def battle(minion1, minion2, offensive, defensive):
print(minion1.name, '正在攻击', minion2.name)
if minion1.DivineShield == True and minion2.DivineShield == None: #第一个随从有圣盾,第二个随从没有圣盾,第二个随从扣血,第一个随从破圣盾
minion2.DEF = minion2.DEF-minion1.ATK
minion1.DivineShield = None
print(minion2.name, '还剩', minion2.DEF, '点血,', minion1.name, '失去圣盾')
# 检查圣盾被破后的feedback状态
checkfeedback(offensive)
elif minion1.DivineShield == None and minion2.DivineShield == True: #第一个随从没有圣盾,第二个随从有圣盾,第一个随从扣血,第二个随从破圣盾
minion1.DEF = minion1.DEF - minion2.ATK
minion2.DivineShield = None
print(minion1.name, '还剩', minion1.DEF, '点血,', minion2.name, '失去圣盾')
checkfeedback(defensive)
elif minion1.DivineShield == None and minion2.DivineShield == None: #两个随从都没圣盾
minion1.DEF = minion1.DEF - minion2.ATK
minion2.DEF = minion2.DEF - minion1.ATK
print(minion1.name, '还剩', minion1.DEF, '点血,', minion2.name, '还剩', minion2.DEF, '点血')
elif minion1.DivineShield == True and minion2.DivineShield == True: #两个随从都有圣盾
minion1.DivineShield = None
minion2.DivineShield = None
print(minion1.name, '失去圣盾', minion2.name, '失去圣盾')
checkfeedback(offensive)
checkfeedback(defensive)
#判断是否有嘲讽随从,若有,则选择一个嘲讽随从,若没有,则随机选择一个随从
def getTaunt(defensive):
Taunt_list = []
for i in range(len(defensive)):
if defensive[i].Taunt == True:
Taunt_list.append(i)
if len(Taunt_list) != 0:
dice = np.random.randint(0, len(Taunt_list))
dice = Taunt_list[dice]
else:
dice = np.random.randint(0, len(defensive))
return dice
#小鬼囚徒的亡语
def ImprisonerDeathrattle(player, count_minion):
Imprisoner_token = minions('小鬼', 1, 1, 1, 'demon', None, None, None, None, None)
player.pop(count_minion)
player.insert(count_minion, Imprisoner_token)
#查询在场是否有符合要求的onboard状态的随从,如二王
for min in player:
if min.onboard == 'all+2+2':
player[count_minion].ATK += 2
player[count_minion].DEF += 2
print(player[count_minion].name, '受到', min.name, '影响,身材变为', player[count_minion].ATK, '-', player[count_minion].DEF)
#麦田傀儡的亡语,检查feedback状态,主要影响偏折机器人
def HarvestGolemDeathrattle(player, count_minion):
HarvestGolem_token = minions('损坏的傀儡', 1, 4, 2, 'tech', None, None, None, None, None)
player.pop(count_minion)
player.insert(count_minion, HarvestGolem_token)
#检查feedback状态
for min in player:
if min.feedback == 'gain +1ATK and shield' and min.DivineShield != True:
min.DivineShield = True
min.ATK += 1
print(min.name, '获得圣盾和+1攻击力')
elif min.feedback == 'gain +1ATK and shield' and min.DivineShield == True:
min.ATK += 1
print(min.name, '获得+1攻击力')
#邪魔仆从的亡语
def FiendishServentDeathrattle(minion, player):
dice = np.random.randint(0, len(player)) #随机选择一个随从获得攻击力
player[dice].ATK += minion.ATK
print(player[dice].name, '获得了', minion.ATK, '点攻击力,身材变为', player[dice].ATK, '-', player[dice].DEF)
#青铜守卫的亡语
def BronzeWardenDeathrattle(minion):
minion.name = '青铜守卫'
minion.star = 3
minion.ATK = 2
minion.DEF = 1
minion.attribute = 'dragon'
minion.DivineShield = True
minion.Deathrattle = None
minion.onboard = None
minion.feedback = None
minion.Taunt = None
#发动攻击方偏折机器人的亡语,该亡语也会影响其他偏折机器人,要检查feedback
def DeflectoBotDeathrattle(minion, player, count_minion):
Microbots = minions('微型机器人', 1, 1, 1, 'tech', None, None, None, None, None)
player.pop(