查看: 2210|回复: 1

[通用发布] (小玩意)氪金的心脏owo

[复制链接]
梦石
0
星屑
2427
在线时间
87 小时
注册时间
2018-1-3
回帖
10
发表于 2018-4-5 18:37:50 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 路路 于 2018-4-5 18:42 编辑

顾名思义...说通俗点就是抽奖 氪金 非洲概率,不过发布的小玩意和抽奖只有一毛钱关系(并没有现成的奖池给你抽)
用途就是从一组数据按对应的概率输出结果,软件默认的都是单个比较(掉落 事件的变量)x/n 要实现多种比较就稍微头疼了(非dalao)
泛用性还是挺高的 用于掉落阿奖池阿遇敌阿甚至能力值等等,以前好像发布过效率底下的版本,这次整合了两个版本 区别会在下面说明



[fold]
主体:
模块通用类:PICK_DATA_RATIOS.Normal()  适用于频繁更换数据的类型 百万次结果用时13秒左右
实例快速类:PICK_DATA_RATIOS::Rapid.new() 适用于固定数据的类型(也提供更改数据的set) 百万次结果用时0.6秒左右
兼容性:属于独立类型 理论上与默认和任何插件脚本没有冲突
容器是哈希对象 键就是数据本身 值即是概率数值,值的设定没有限制 会自动相加所有值 大小不分前后随意设置即可。
[pre lang="ruby"]#———————————————————————————————————————
# ●数据抽取(PICK_DATA_RATIOS) By.Lyaci
# use:type1-PICK_DATA_RATIOS.Normal(data)
#     type2-PICK_DATA_RATIOS::Rapid.new(data) Rapid#set(data) Rapid#get
#     data:Hash-{data=>odds}
#———————————————————————————————————————
module PICK_DATA_RATIOS
  class Rapid
    def initialize(data)
      set(data)
    end
    def set(data)
      @k,@v = data.keys,data.values
      @m,@t = @v.inject(:+),Array.new
      @v.each_with_index{|u,n|@t.concat Array.new(u,n)}
    end
    def get
      c = @t[rand(@m)];return [@k[c],@v[c]]
    end
  end
  def self.Normal(data = {})
    k,v,z = data.keys,data.values,Array.new
    m = v.inject(0){|a, b|c = a + b; z << c; c}
    r = rand(m)
    z.map!{|u|u>r}
    i = z.index(true)
    [k,v]
  end
end[/pre]

测试:
[pre lang="ruby"]h={"金"=>5,"银"=>20,"钻石"=>1,"铁"=>50,"锡"=>20,"白金"=>4}
a={"金"=>0,"银"=>0,"钻石"=>0,"铁"=>0,"锡"=>0,"白金"=>0}
h2={"三等奖"=>5,"四等奖B"=>20,"一等奖"=>1,"安慰奖"=>50,"四等奖A"=>20,"二等奖"=>4}
a2={"三等奖"=>0,"四等奖B"=>0,"一等奖"=>0,"安慰奖"=>0,"四等奖A"=>0,"二等奖"=>0}

1000.times{
r=PICK_DATA_RATIOS.Normal(h)
a[r[0]]+=1
p r
}
p a

js = PICK_DATA_RATIOS::Rapid.new(h)
js2 = PICK_DATA_RATIOS::Rapid.new(h2)

p js.get

100.times{
r=js.get
a[r[0]]+=1
p r
}
p a

100.times{
r=js2.get
a2[r[0]]+=1
p r
}
p a2

h={"金"=>500,"银"=>20,"钻石"=>1,"铁"=>50,"锡"=>20,"白金"=>4}
js.set(h)
100.times{
r=js.get
a[r[0]]+=1
p r
}
p a[/pre]
[/fold]
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2018-4-12 23:03:31 | 显示全部楼层
n久以前做了一个模拟手游抽卡的,然后发现贼蛋疼
一般手游的抽卡有各种日替、无料、十连保底、天井···还有那种返却重抽加概率设定,一个池子里全部卡的概率不能直接设而且这一个池不是一次射完的(也就是一个池里不同奖品得分开不同设,然后一个池正好是几个设置模块拼接在一起,想要完全还原这个简直不敢继续想)
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部