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
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