周年庆快开始了,作为一个每次只抽保底的白嫖党,我十分慌张,为了检验我是否能抽到限定六星干员,在这里我用python写了一个抽六星的模拟程序,来保证我能抽到六。。。
最近有点顿悟了类的使用,因此写点程序来练练手,于是便有了这次体验
一、简介
- 首先构想很简单,谁都能想出来,类有两个,一个是池子,还有一个自然是doctor了;
那这次模拟以月为单位,每月鹰角更新三个池子,其中两个是常规池子,还有一个是新六星的池子,池子的抽卡概率,保底机制,还有池子里的六星我是否已经拥有的概率,这些因素都在这个池子类中体现,定这个类为Pool; - 然后是玩家Doctor类,玩家自然有玩家数据,如合成玉,黄票,玩家的六星数,玩家知道的游戏中所有的六星数,玩家的抽池子次数(即保底次数),
我玩家的白嫖思想(抽个保底走人),等等。 - 那么白嫖党的规则出来了,doctor每月通过龙门市区,商店,鹰角维护获得玉(抽卡券),并且攒够180黄票便能换个新六星,然后每抽一次卡记录保底信息,保底机制影响池子,而新出的英雄以及doctor自身盒子也影响了doctor能够得到新六星的效率。
二、Pool类
先敲定Pool类的东西,创建Pool.py
池子两个六星,有可能是我拥有的,可能是我没有的,因此让两个六星分别获得两个随机数,当这个数小于某值时,判定为我没有的六星(这个某值由我拥有的六星数和六星总数决定),各个星级的出货概率众所周知,不必多说,Pool类的抽卡方法就是出一个随机数,抽出多少星由判定随机数在什么范围决定,保底机制影响这个范围。
Pool.py
import random
class Pool: #常规池子信息
def __init__(self,bd_addition): #传入保底机制
self.upSixStar1 = random.random() #第一个六星名字
self.upSixStar2 = random.random() #第二个六星名字
self.sixStar_PR = 0.02 + 0.02 * bd_addition #六星出货率
self.fiveStar_PR = 0.08 - 0.08 / 49 * bd_addition #五星出货率
self.fourStar_PR = 0.5 - 0.5 / 49 * bd_addition #四星出货率
self.threeStar_PR = 0.4 - 0.4 / 49 * bd_addition #三星出货率
def sendCard(self): #抽卡信息
cardGet = random.random()
return cardGet
def correct(self,bd): #抽卡一次后重新计算保底的方法
self.sixStar_PR = 0.02 + 0.02 * bd #六星出货率
self.fiveStar_PR = 0.08 - 0.08 / 49 * bd #五星出货率
self.foureStar_PR = 0.9 - 0.9 / 49 * bd #四星出货率
self.threeStar_PR = 0.4 - 0.4 / 49 * bd #三星出货率
class SpecialPool(Pool): #新干员池子
def __init__(self,bd_addition): #传入保底机制
self.upSixStar1 = 0 #新六星
self.upSixStar2 = random.random() #另一个六星
self.sixStar_PR = 0.02 + 0.02 * bd_addition #六星出货率
self.fiveStar_PR = 0.08