使用Python模拟武侠小说中两派人的一场遭遇战。
每个人都有名字、血量(HP) 、一系列技能及技能对应的攻击输出。每个人的攻击方式均一致,即随机从自己的技能包中抽取一个技能进行攻击。两派人(自己命名)均继承
自武林人士这个父类,但有各个门派都有各自的技能包及对应的输出值。门派下每个人拥有的技能包都是在实例化对象的时候随机赋子的。
遭遇战的时候,每个帮派的人数不确定。战斗采用回合制的方式进行,即整派A中的一个人随机选择帮派B中的一个人进行攻击, B受到的伤害值为A随机选择的技能的输出值加
上20%的标准正态分布生成的随机数向下取整,即伤害值=输出值(1+0.2*N( 0,1)),技能被选择的概率和其对应的输出值成反比,如某人拥有两个技能,输出值分别为10、30
则技能1的被选择概率为 (1/10)/(1/10 + 1/30).其中某一门派参与战斗的所有人都则阵亡(既HP降为0)则战斗结束。
几个随机数生成函数:首先引入random包, import random; random.random()生成一个0-1的均匀分布随机数; random.randint(a,b)生成取信范围为[a.b])的数随机

import random                                                                             # 导入库
import numpy as np
import math
from matplotlib import pyplot as pltshaolin = {"玄难": 135, "玄寂": 132, "玄奘": 136, "玄苦": 137, "玄渡": 131}                  # 人 及其 HP
carefree = {"康广陵": 91, "范百龄": 93, "薛慕华": 108}                                       # 人 及其 HP
s_skill = {"大金刚掌": 20, "如来千手": 30, "擒龙功": 25, "金刚指": 30, "少林长拳": 35}         # 技能及其输出值
c_skill = {"小无相功": 20, "天山折梅手": 30, "八荒六合唯我独尊功": 25, "天上六阳掌": 30}        # 技能及其输出值
d_sname = {}
d_cname = {}
s_suiji = {}
c_suiji = {}class Wulinpeople():def __init__(self):self.s_name = random.sample(list(s_skill),random.randrange(1,len(s_skill)+1))self.c_name = random.sample(list(c_skill),random.randrange(1,len(c_skill)+1))def Shaolin_Temple(self):s_name = random.sample(list(shaolin),1)[0]   # 随机选取攻击方的人物s_hp = shaolin[s_name]                      # 随机选取攻击方人物的hpc_name = random.sample(list(carefree),1)[0]  # 随机选取被攻击方的人物c_hp = carefree[c_name]                      # 随机选取被攻击方人物的hppt = d_sname[s_name]                        # 随机分配的技能包qwq = random.random()for x in pt:  # 随机分配的技能包的输出值s_suiji[x]=s_skill[x]a = list(s_suiji.values())c = 0key = 0s_kill_name = ""                                #定义随机技能名的变量for i in s_suiji:i_1 = s_skill[i]b = 0for j in a:b += 1/jkey += 1/i_1 / b# print("c的值:{} key的值{}".format(c,key))if c < qwq <= key:s_kill_name = i                         # 根据输出值成反比的概率 分配的技能名# print('随机值:{},技能名:{},技能输出值{}'.format(qwq,i,i_1))c = key# s_kill_name = random.sample(pt, 1)[0]          # 随机分配的技能s_kill_hp = int(s_skill[s_kill_name]  )          # 随机分配的技能输出值random3 = np.random.randn()                      # 随机生成1个服从正态分布的随机数hurt = math.floor(s_kill_hp * (1 + 0.2*random3)) #向下取整的伤害值# print("伤害是{:0.1f}".format(hurt))print("少林僧人{}使出了一招伤害为{}的{}".format(s_name,s_kill_hp,s_kill_name))c_kill_hp = c_hp - hurtif c_kill_hp <= 0:del carefree[c_name]  # 删除键 'shaolin'print("逍遥派{}受到{}点伤害,剩余HP{}".format(c_name, hurt, 0))print("逍遥派{}阵亡!!!!".format(c_name))else:carefree[c_name] = c_kill_hpprint("逍遥派{}受到{}点伤害,剩余HP{}".format(c_name, hurt, c_kill_hp))def Carefree(self):c_name = random.sample(list(carefree),1)[0]  # 随机选取攻击方的人物c_hp = carefree[c_name]                      # 随机选取攻击方人物的hps_name = random.sample(list(shaolin),1)[0]  # 随机选取被攻击方的人物s_hp = shaolin[s_name]                      # 随机选取被攻击方人物的hppt = d_sname[c_name]                        # 随机分配的技能包qwq = random.random()for x in pt:  # 随机分配的技能包的输出值c_suiji[x] = c_skill[x]a = list(c_suiji.values())c = 0key = 0c_kill_name = ""                                #定义随机技能名的变量for i in c_suiji:i_1 = c_skill[i]b = 0for j in a:b += 1/jkey += 1/i_1 / b# print("c的值:{} key的值{}".format(c,key))if c < qwq <= key:c_kill_name = i                         # 根据输出值成反比的概率 分配的技能名# print('随机值:{},技能名:{},技能输出值{}'.format(qwq,i,i_1))c = key# s_kill_name = random.sample(pt, 1)[0]          # 随机分配的技能c_kill_hp = int(c_skill[c_kill_name]  )          # 随机分配的技能输出值random3 = np.random.randn()                      # 随机生成1个服从正态分布的随机数hurt = math.floor(c_kill_hp * (1 + 0.2*random3)) #向下取整的伤害值# print("伤害是{:0.1f}".format(hurt))print("逍遥派{}使出了一招伤害为{}的{}".format(c_name,c_kill_hp,c_kill_name))s_kill_hp = s_hp - hurtif s_kill_hp <= 0:del shaolin[s_name]  # 删除键 'shaolin'print("少林僧人{}受到{}点伤害,剩余HP{}".format(s_name, hurt, 0))print("少林僧人{}阵亡!!!!".format(s_name))else:shaolin[s_name] = s_kill_hpprint("少林僧人{}受到{}点伤害,剩余HP{}".format(s_name, hurt, s_kill_hp))passdef Battle():sign = Truewhile sign:# 少林寺Wulinpeople.Shaolin_Temple(Wulinpeople)if not shaolin or not carefree:                 #判断双方是否完全阵亡if shaolin:print("战斗结束,少林寺获胜!留在战场的是:")for i in shaolin:print("少林僧人{}剩余血量{}".format(i,shaolin[i]))sign = Falseelse:print("战斗结束,逍遥派获胜!留在战场的是:")for i in carefree:print("逍遥派人{}剩余血量{}".format(i,carefree[i]))sign = Falseif not sign:               # 结束程序break# 逍遥派Wulinpeople.Carefree(Wulinpeople)def main():print("战斗开始了!出场人物是:")for i in range(len(shaolin)+len(carefree)):a = Wulinpeople()if i<len(shaolin):kill = ",".join(a.s_name)d_sname[list(shaolin)[i]] = a.s_nameprint("少林寺的少林僧人{},HP{},招数为{}".format(list(shaolin)[i],shaolin[list(shaolin)[i]],kill))else:i = i-len(shaolin)kill = ",".join(a.c_name)d_sname[list(carefree)[i]] = a.c_nameprint("逍遥派的逍遥派{},HP{},招数为{}".format(list(carefree)[i],carefree[list(carefree)[i]],kill))Battle()
main()# 1)生成随机数
rdm = np.random.randn(10000)                        # 随机生成10000个服从正态分布的随机数
# 2)结果验证
import seaborn as sns                               # 使用seaborn 库画直方图验证结果
sns.set_palette("hls")                              # 设置所有图的颜色,使用hls色彩空间
sns.distplot(rdm,color="r",bins=1000,kde=True)      # 绘制直方图,color设置颜色,bins设置直方图的划分数
plt.show()

使用Python模拟武侠小说中两派人的一场遭遇战。相关推荐

  1. Python:Tensorflow中两个稀疏张量相乘

    Python:Tensorflow中两个稀疏张量相乘 博主在想让两个稀疏张量进行相乘时,发现不能用tf.matmul.tf.sparse_matmul.tf.sparse_tensor_dense_m ...

  2. 用Python实现武侠小说中的武打动作残影特效

    创作背景 "飞雪连天射白鹿,笑书神侠倚碧鸳",相信很多90后知道这副对联的含义,这是武侠小说作家金庸先生的作品合集,说实话在所有的作品中我最喜欢的是倚天屠龙记和天龙八部,应该说基本 ...

  3. python 余数_python中两数相除取余数怎么运算

    在Python中取余数可以通过取模运算符%或通过divmod()函数来计算. 1.取模运算符%: 所谓取模运算,就是计算两个数相除之后的余数,符号是%.如a % b就是计算a除以b的余数.用数学语言来 ...

  4. python比较excel中两列数据_python入门之对比两份excel表格数据

    今天老大交给我一个任务,对比两个版本的excel数据的异同(增删情况),唉,说多了都是泪,自从学会了python,再也不用担心老大这样的任务了~~~ 好了直接上代码吧,代码中解释 import xlr ...

  5. 字符串篇(python)——字符串数组中两个字符串的最小距离

    题目描述 给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1. def find ...

  6. 如何使用Python计算Log中两个时间的差值

    有时候需要计算两个时间之间的差值,如果用口算很容易出现失误,这时候借助于Python就可以很容易地解决该问题1.按如下步伐操作,能有现成计算的直接用现成的,没有的再自己写函数 2.打包成exe,方便传 ...

  7. python模拟ps中的素描工具

    其实就是将原图放入.然后你用工具将图像P一下,转换为素描图像.很像滤镜之类的PS. 话不多说 简单实现一下 # -*- encoding: utf-8 -*-# 图像处理 # 导如科学计算库 impo ...

  8. 如何用python处理excel中时间重合_python读取Excel文件中的时间,并计算时间间隔...

    以此Excel文件为例: 1.python读取Excel文件中的时间 import xlrd #读取Excel文件 workbook = xlrd.open_workbook('C:/Users/12 ...

  9. python中 1%2等于什么_穷人和富人就差1%的努力——python模拟社会财富分配游戏

    社会资金流是持续而有目的性的,你是否曾想过,为何富人会出现,穷人又为何会出现?穷人和富人究竟如何形成,是否努力就一定能获得成功,赢得更多金钱?今天,让我们用python代码,来模拟一个小社会,看看财富 ...

最新文章

  1. 线上办公室 x 音视频会议最佳实践
  2. 基于SpringBoot的个人博客系统
  3. ASP.NET 2.0中如何连接到Mysql(转)
  4. HTML中的转义字符 (转)
  5. C# 中SqlParameter类的使用方法小结
  6. python解一元二次方程步骤-使用Python解一元二次方程!
  7. POJ2296二分2sat
  8. Android APP 引导页实现-第一次应用进入时加载
  9. PAT-BASIC-1003-我要通过!
  10. .Net 中的序列化与反序列化[概述]
  11. 苹方字体 for linux,使用macOS苹方替换Windows 10微软雅黑
  12. java rgb565转rgb888_RGB565 转RGB888的循环补偿(zz)
  13. 前端时尚好用的图标项目-Font Awesome
  14. 中控考勤机-C#操作
  15. 多线程---详解各种锁和AQS原理
  16. R语言中apply函数族的介绍
  17. 短视频剪辑制作教学:编辑短视频时需要注意的三个方面
  18. 2021重庆市高考成绩排名查询,重庆2021高考成绩排名榜单,重庆各高中高考成绩喜报...
  19. C#用Replace把字符替换成空
  20. 企业引导页自适应HTML源码

热门文章

  1. linux重新启动apache,如何启动,停止或重新启动Apache
  2. 为什么说选择云服务器更有优势?
  3. 图文讲解三极管3种工作状态
  4. 编译c或c++代码出现error “***” was not declared in this scope 的解决方法
  5. 抢鲜体验:Oracle 19C单实例数据库安装步骤详解
  6. H5加速、WebView加速、Hybrid 常见方案对比
  7. [Android] 隐藏头顶状态栏
  8. tpl文件如何导入ps?tpl文件笔刷怎么安装?
  9. 便携式明渠流量计(比对装置)——适用于四种基本堰槽
  10. SHELL脚本编程小程序