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

类对象实现红蓝方互殴相关推荐

  1. 不能从远程创建com+对象_红蓝对抗攻防实战:寻找COM对象

    概述 渗透测试人员.红蓝对抗的蓝军(攻击方).恶意行动者经常会选择COM对象来实现横向移动.此前,一些安全研究人员陆续针对COM对象开展研究,包括Matt Nelson(enigma0x3)在2017 ...

  2. 机器学习算法(七): 基于LightGBM的分类预测(基于英雄联盟10分钟数据判断红蓝方胜负)

    机器学习算法(七)基于LightGBM的分类预测 1. 实验室介绍 1.1 LightGBM的介绍 LightGBM是2017年由微软推出的可扩展机器学习系统,是微软旗下DMKT的一个开源项目,由20 ...

  3. 技术分享 | Goby食用指南之红蓝对抗

    前言:最近看到好友采用FOFA+Xray组合实现自动挖洞的思路,身为考研选手的我,急了,手中的高等数学瞬间不香了!我寻思着:用Goby联动漏扫他不香吗?不香吗?不香吗?Goby是啥?有了FOFA还用G ...

  4. IDEA使用@Data注解,类调用get、set方法标红的解决办法

    IDEA使用@Data注解,类调用get.set方法标红的解决办法 参考文章: (1)IDEA使用@Data注解,类调用get.set方法标红的解决办法 (2)https://www.cnblogs. ...

  5. Map集合转换成实体类对象,实体类对象转换为map集合,互转工具类

    注 : 2019-06-16日 增加第六节 map与实体互转工具类,直接看第6节; 1.调用这个方法BeanMapUtils.mapToBean(),实现map集合转实体类对象; 注意: 这个方法转换 ...

  6. android json字符串转成json对象_C++ 两行代码实现json与类对象互转

    背景与需求 之前写C#的时候,解析json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,比如: class 一行代码就能将json字符串转为相应的类对象. 最近写C++需要 ...

  7. 红蓝对抗场景下的二三事

    背景 未知攻焉知防,警察想要抓小偷,就该先摸透小偷的想法,才能更快捷的抓到小偷毕竟小偷抓小偷更容易.网络安全的攻与防,好比"矛"与"盾",要想不被"矛 ...

  8. 红蓝攻防演练过程中零失陷经验分享

    本文选取了金融单位.集团公司和政府单位三个红队经典防守实 例,从防守思路.重点和职责分工等方面,直观展示了如何实操红队 防守各阶段的工作及防守策略.防护手段,给不同组织和业务场景 下,分阶段.有侧重开 ...

  9. 万字长文:盘点2022全球10大数据泄漏事件(红蓝攻防角度)

    导读:全球每年都会有大量的爆炸性的数据泄漏事件发生,但是今年的数据泄漏事件特别多,此起彼伏,而且数据泄漏的规模和造成的破坏性影响,一次比一次大. 根据Identify Theft Research C ...

  10. 红蓝cp未能连接到服务器,红蓝CP产品分析

    核心需求 解决当代年轻人拓宽社交圈,找到另一半的需求. 用户画像(按年龄阶段划分) 用户A(90后) 性格:内敛 人生阶段:事业有一定起色,进入平稳发展期 使用软件目的:找事宜结婚的对象,看重对方的客 ...

最新文章

  1. 使用links方式安装eclipse插件
  2. 软件工程(2018)第1次团队作业
  3. Zookeeper 安装和配置---学习二
  4. 两对光纤收发器用网线连接_为什么现在的人不喜欢用网线,反而更爱用光纤来传输呢?涨知识了...
  5. 21个深度学习调参的实用技巧
  6. 计算与推断思维 四、数据类型
  7. JVM GC调优参数说明
  8. c语言鸢尾花智能分类,基于LogisticRegression的鸢尾花分类
  9. Ansible之playbook的使用总结 - 运维笔记
  10. cglib 动态代理原理详解
  11. (14.1)Zotero常用功能:插件、导入题录、参考文献
  12. 大数据革命-eXtremeDB列数据库
  13. 本地音乐如何导入apple_如何将自己的音乐添加到Apple Music
  14. 对比Ruby和Python的垃圾回收
  15. 使用OpenVINO部署ONNX模型
  16. c语言判断两个字母相等,C语言:比较两个字符串是否相等
  17. Vue elementUI-select多选下拉框数据回显成功后,点击下拉选项或删除回显数据无反应...
  18. KiBiEx互联网交易互动平台数字货币
  19. linux 路由器pppoe拨号,linux下pppoe拨号上网
  20. 计算机机房必须用七氟丙烷灭火器吗,释放七氟丙烷气体会不会使人窒息?

热门文章

  1. 微博 用户画像_用户画像实例:创建可信的微博用户画像
  2. Pytorch 版本的lookahead 优化函数使用(附代码)
  3. 软件设计师-6.结构化开发方法
  4. c c++ 实现代理服务器
  5. 数据集按指定比例划分为训练集、验证集和测试集
  6. 最高100,000美元大奖,2021腾讯广告算法大赛开启
  7. 给定任意字符串,返回所有叠字的数组
  8. java中集合的概念
  9. 以风景为主题的html,以风景为主题的英语作文
  10. python 打开网页并截图_python实现自动网页截图并裁剪图片