炉石传说酒馆战棋(python版)

详细解释内容请见代码注释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(
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值