类对象实现红蓝方互殴
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
类对象实现红蓝方互殴相关推荐
- 不能从远程创建com+对象_红蓝对抗攻防实战:寻找COM对象
概述 渗透测试人员.红蓝对抗的蓝军(攻击方).恶意行动者经常会选择COM对象来实现横向移动.此前,一些安全研究人员陆续针对COM对象开展研究,包括Matt Nelson(enigma0x3)在2017 ...
- 机器学习算法(七): 基于LightGBM的分类预测(基于英雄联盟10分钟数据判断红蓝方胜负)
机器学习算法(七)基于LightGBM的分类预测 1. 实验室介绍 1.1 LightGBM的介绍 LightGBM是2017年由微软推出的可扩展机器学习系统,是微软旗下DMKT的一个开源项目,由20 ...
- 技术分享 | Goby食用指南之红蓝对抗
前言:最近看到好友采用FOFA+Xray组合实现自动挖洞的思路,身为考研选手的我,急了,手中的高等数学瞬间不香了!我寻思着:用Goby联动漏扫他不香吗?不香吗?不香吗?Goby是啥?有了FOFA还用G ...
- IDEA使用@Data注解,类调用get、set方法标红的解决办法
IDEA使用@Data注解,类调用get.set方法标红的解决办法 参考文章: (1)IDEA使用@Data注解,类调用get.set方法标红的解决办法 (2)https://www.cnblogs. ...
- Map集合转换成实体类对象,实体类对象转换为map集合,互转工具类
注 : 2019-06-16日 增加第六节 map与实体互转工具类,直接看第6节; 1.调用这个方法BeanMapUtils.mapToBean(),实现map集合转实体类对象; 注意: 这个方法转换 ...
- android json字符串转成json对象_C++ 两行代码实现json与类对象互转
背景与需求 之前写C#的时候,解析json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,比如: class 一行代码就能将json字符串转为相应的类对象. 最近写C++需要 ...
- 红蓝对抗场景下的二三事
背景 未知攻焉知防,警察想要抓小偷,就该先摸透小偷的想法,才能更快捷的抓到小偷毕竟小偷抓小偷更容易.网络安全的攻与防,好比"矛"与"盾",要想不被"矛 ...
- 红蓝攻防演练过程中零失陷经验分享
本文选取了金融单位.集团公司和政府单位三个红队经典防守实 例,从防守思路.重点和职责分工等方面,直观展示了如何实操红队 防守各阶段的工作及防守策略.防护手段,给不同组织和业务场景 下,分阶段.有侧重开 ...
- 万字长文:盘点2022全球10大数据泄漏事件(红蓝攻防角度)
导读:全球每年都会有大量的爆炸性的数据泄漏事件发生,但是今年的数据泄漏事件特别多,此起彼伏,而且数据泄漏的规模和造成的破坏性影响,一次比一次大. 根据Identify Theft Research C ...
- 红蓝cp未能连接到服务器,红蓝CP产品分析
核心需求 解决当代年轻人拓宽社交圈,找到另一半的需求. 用户画像(按年龄阶段划分) 用户A(90后) 性格:内敛 人生阶段:事业有一定起色,进入平稳发展期 使用软件目的:找事宜结婚的对象,看重对方的客 ...
最新文章
- 使用links方式安装eclipse插件
- 软件工程(2018)第1次团队作业
- Zookeeper 安装和配置---学习二
- 两对光纤收发器用网线连接_为什么现在的人不喜欢用网线,反而更爱用光纤来传输呢?涨知识了...
- 21个深度学习调参的实用技巧
- 计算与推断思维 四、数据类型
- JVM GC调优参数说明
- c语言鸢尾花智能分类,基于LogisticRegression的鸢尾花分类
- Ansible之playbook的使用总结 - 运维笔记
- cglib 动态代理原理详解
- (14.1)Zotero常用功能:插件、导入题录、参考文献
- 大数据革命-eXtremeDB列数据库
- 本地音乐如何导入apple_如何将自己的音乐添加到Apple Music
- 对比Ruby和Python的垃圾回收
- 使用OpenVINO部署ONNX模型
- c语言判断两个字母相等,C语言:比较两个字符串是否相等
- Vue elementUI-select多选下拉框数据回显成功后,点击下拉选项或删除回显数据无反应...
- KiBiEx互联网交易互动平台数字货币
- linux 路由器pppoe拨号,linux下pppoe拨号上网
- 计算机机房必须用七氟丙烷灭火器吗,释放七氟丙烷气体会不会使人窒息?