类对象实现红蓝方互殴

import time,random
class Soldier :
    def __init__(self,name,hp,ack):
        self.name = name
        self.hp = hp
        self.ack = ack
        self.state = 1#正常状态
    def attack(self,target):
        if isinstance(target,Tank):
            print("%s攻击装甲单位%s无效"%(self.name,target.name))
        elif isinstance(target,TankDes):
            if target.state == 2:
                print("%s攻击%s,没有击中")
            elif target.state == 1:
                damage = random.randrange(0,self.ack) *2 #对反坦克兵造成两倍伤害
                target.hp -=damage
                print("%s 攻击 %s ,造成%d 伤害,剩余生命%d"%(self.name,target.name,damage,target.hp))
                
            
        elif isinstance(target,Soldier):
            if target.state == 2:
                print("%s攻击%s,没有击中")
            elif target.state == 1:
                damage = random.randrange(0,self.ack) #对普通士兵造成普通伤害
                target.hp -=damage
                print("%s 攻击 %s ,造成%d 伤害,剩余生命%d"%(self.name,target.name,damage,target.hp))
            
    def standup(self):
        print("%s站了起来"%self.name)
        self.state = 1
    def dodge(self):
        print("%s闪避"%self.name)
        self.state = 2#闪避状态
    def move(self):
        pass
    
class TankDes :#反坦克士兵
    def __init__(self,name,hp,ack):
        self.name = name
        self.hp = hp
        self.ack = ack
        self.state = 1#正常状态
    def attack(self,target):
        
        if isinstance(target,Tank) :# 攻击坦克造成二倍伤害
            if target.state == 2:
                print("%s攻击%s,没有击中")
            elif target.state == 1:
                damage = random.randrange(0,self.ack) *2
                target.hp -=damage
                print("%s 攻击 %s ,造成%d 伤害,剩余生命%d"%(self.name,target.name,damage,target.hp))
        
        elif isinstance(target,TankDes):# 攻击反坦克兵造成普通伤害
            if target.state == 2:
                print("%s攻击%s,没有击中")
            elif target.state == 1:
                damage = random.randrange(0,self.ack)
                target.hp -=damage
                print("%s 攻击 %s ,造成%d 伤害,剩余生命%d"%(self.name,target.name,damage,target.hp))
        elif isinstance(target,Soldier):#攻击士兵造成一半伤害
            if target.state == 2:
                print("%s攻击%s,没有击中")
            elif target.state == 1:
                damage = random.randrange(0,self.ack) /2
                target.hp -=damage
                print("%s 攻击 %s ,造成%d 伤害,剩余生命%d"%(self.name,target.name,damage,target.hp))
            
    def standup(self):
        print("%s站了起来"%self.name)
        self.state = 1
    def dodge(self):
        print("%s闪避"%self.name)
        self.state = 2#闪避状态
    def move(self):
        pass

class Tank :
    def __init__(self,name,hp,ack):
        self.name = name
        self.hp = hp
        self.ack = ack
        self.state = 1#正常状态
    def attack(self,*targets):
        for i in targets:#循环判断对目标们的伤害
            if isinstance(i,Tank):
                damage = random.randrange(0,self.ack)
                i.hp -=damage
                print("%s攻击装甲单位%s造成%d伤害,剩余生命%d"%(self.name,i.name,damage,i.hp))
            elif isinstance(i,TankDes) :
                if i.state == 2:
                    print("%s攻击%s,没有击中")
                elif i.state == 1:
                    damage = random.randrange(0,self.ack) /2
                    i.hp -=damage
                    print("%s 攻击 %s ,造成%d 伤害,剩余生命%d"%(self.name,i.name,damage,i.hp))
            elif isinstance(i,Soldier):
                if i.state == 2:
                    print("%s攻击%s,没有击中")
                elif i.state == 1:
                    damage = random.randrange(0,self.ack) /4
                    i.hp -=damage
                    print("%s 攻击 %s ,造成%d 伤害,剩余生命%d"%(self.name,i.name,damage,i.hp))
                    
            
    def standup(self):
        print("%s站了起来"%self.name)
        self.state = 1
    def dodge(self):
        print("%s闪避"%self.name)
        self.state = 2#闪避状态
    def move(self):
        pass
    
    
    
red = []#初始化红蓝两方
blue = []
for i in range(10): #二十个兵
    red.append(Soldier("(红)士兵" + str(i), 100 ,30))
    blue.append(Soldier("(蓝)士兵" + str(i), 100 ,30))

for i in range(5): #二十个反坦克
    red.append(TankDes("(红)反坦克" + str(i), 100 ,20))
    blue.append(TankDes("(蓝)反坦克" + str(i), 100 ,20))


for i in range(5): #十个坦克
    red.append(Tank("(红)坦克" + str(i), 100 ,40))
    blue.append(Tank("(蓝)坦克" + str(i), 100 ,40))


    
while True :#随机产生动作,并且队内循环,确保每个人都能输出
    #坦克随机攻击敌方五个人
    random.shuffle(red)#把红队顺序打乱
    random.shuffle(blue)#把蓝队顺序打乱
    tmp1 = []
    tmp2 = []
    i = 0
    if len(blue) < len(red) :
        j = len(blue)
    
    else :
        j = len(red)
    n = j
    while i < j:#互殴
        red[i].attack(blue[i])
        i += 1
        blue[n-1].attack(red[n-1])
        n -= 1
    
    i = 0
    for i in red:#判断红队存活
        if i.hp > 0:
            tmp1.append(i)
    red = tmp1.copy()
    
    i = 0
    for i in blue:#红队攻击蓝队
        if i.hp > 0:
            tmp2.append(i)
    blue = tmp2.copy()
    if len(blue) == 0 :
        print("红方胜利")
        break
    if len(red) == 0 :
        print("蓝方胜利")
        break
    
    
    
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值