查看: 3634|回复: 2

[原创发布] 仿网游的不重复慨率抽奖, 显示慨率数量 ,較中等简易范例

[复制链接]
梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2020-2-3 21:10:09 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 ppspssss 于 2020-2-3 21:26 编辑

之前群里有个新手问我怎么做赛尔号随机抽奖,能抽了从奖池中抽起, 抽的慨率随之而增大, 那么网游中很多都是这样,而好像搜索抽不到这种范例或方法, 想起来做起来也没这么简单, 那么就练习做一次,那么就用5种口罩抽取作例子, 教程較易但依旧有一定难度,比較适用中等或有基础知識新手要,求会:數組慨念,for循環,以及全局變量使用等, 腳本中就插入相关的一个模块,隨时能調用抽獎, , 如有地方错請从中指出
E1316DDF26DE26B5EC13EFB1B03D19B4.jpg 14830780124259336_460_380.jpg

制作前准备的慨念图思考:
QQ截图20200203212105.png
腳本解釋:
QQ截图20200203194056.png QQ截图20200203203612.png QQ截图20200203204458.png QQ截图20200203205420.png


忘了弄范例附件
抽奖范例.rar (415.86 KB, 下载次数: 110)
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 2020-2-4 01:28:55 | 显示全部楼层
这功能完全就不需要那么复杂的脚本啊……

初始化奖池:
pool = [[1]*$N95, [2]*$普通, [3]*$医用, [4]*$其他]].flatten.sort {|a, b| rand()-rand()}

抽奖:
a = pool.pop

查看奖池比例:
size1 = pool.size - (pool - [1]).size  # 还剩余的1的个数
rate1 = size1 / pool.size # 还剩余的1所占的比例
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复

使用道具 举报

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2020-2-4 05:03:06 | 显示全部楼层
[pre lang="ruby"]class L
  def initialize(r=true)
    @inf = r
    @sum = 0
    @ts = []
    @nums = []
  end
  def add(*ts)
    ts.each{ |t|
      @ts.push t[0]
      @nums.push t[1]
      @sum += t[1]
    }
  end
  def get_id(n,c,d)
    d < c ? n : get_id(n+1, c+@nums[n+1], d)
  end
  def draw
    return nil if @sum == 0
    id = get_id(0, @nums[0], rand(@sum))
    unless @inf
      @nums[id] -= 1
      @sum -= 1
    end
    @ts[id]
  end
end[/pre]
[pre lang="ruby"]pot = L.new false
pot.add ["a", 1], ["b", 2]
pot.add ["c", 3], ["d", 4]
11.times{p pot.draw}[/pre]
简单写了一个
初始化传入true(默认) 变成重复概率抽奖

模块/类的存在是为了尽量提高可复用性吧
你把要抽的东西直接写进去了 就违背了模块的本意
要是换东西了/东西个数变了改改多麻烦啊
而且利用了全局变量 副作用很大
因此你必须reset 同一时间只能抽口罩
想抽两个就得复制两份
不方便了吧?

抽的方式上 假如有几千几万个东西
都push进一个数组 是不是不太好?
当然假如是很多个各不相同的东西
这个思路是没问题的
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部