有时候还真要信命
我们公司最近预研了一款对战游戏,是我的创新实验室中一个同事原创的玩法,同时他做了几乎所有的实现工作:包括客户端,服务器,还有从别的老项目借出来的美术资源……
在独自开发了大半年后,我们又加了几个同事协助他把最后的工作完成。上个月,终于告一段落,所以在公司内部做了一次大规模的试玩。游戏还是挺有意思的,试玩的同学非常踊跃,昼夜不休的打天梯。试玩期结束后,我们决定对最活跃的数十个玩家进行一次奖励。用抽奖的形式奖励自选 switch 游戏卡。天梯排名靠前的同学可以有更高的权重(是排名靠后的同学的 6 倍)。我的排名很低,所以只拿了一张抽奖票,最后一共发放了 106 张奖票。
今天下午,我们在试玩钉钉交流群里商量怎么抽奖。我提了个公平的规则建议:
首先,公布奖池名单,权重高的同学可以多占奖号。
所有围观的同学,无论是否参与抽奖,都可以参与摇奖。方法是:想一个数字以及一句话,计算出 md5 值。比如我用的 "4186焦耳质量" 这样一句话,计算出 md5 值为 859E296773504DE4AD7A9FD1126DE66E 。
先把 md5 值发到群里。
任何人都可以随时发自己的 md5 值,收集完足够多以后,宣布开奖。
第一轮大家非常活跃,当然也有人不太明白规则,在反复解释规则的同时,我们在群里收集到了 13 个数字。然后大家在群中发布自己的原始串和 md5 值,方便以后校验。实际上,也不需要校验,反正聊天记录都保存在服务器上作为公证。
我们把这 13 个数字加起来,对 106 取模,就得到了中奖号码。
结果,第一轮我自己中奖了。
真的没有作弊呢。
去掉已经中奖的名字后,我们又进行了 9 轮摇奖,共抽了 10 张游戏卡作为奖品。整个过程抽奖的参与感和仪式感十足,非常热闹。整个聊天记录附加在活动历程里作为抽奖公证。大家纷纷表示,这可以开发为一个游戏抽奖玩法。
Comments
最后一个人的md5码具有决定性的作用,这可能是一个较大的隐患。
Posted by: mario | (22) July 27, 2018 06:16 PM
hash的字符串是提供的数字和想到的字符串的连接吧(lua中就是code..str)?想了一会……
为了增加被攻破的难度,可以规定数字可以出现在被hash的字符串任何位置,只要满足出现的所有数字字符按顺序写下后和提供的整数相等即可。
Posted by: chirsz | (21) July 19, 2018 09:15 AM
如果是我们公司的做法,boss中奖要多提供一份奖品放入奖池的呢
Posted by: alex4j | (20) July 7, 2018 03:46 PM
哈哈,竟然首轮就中奖~老天有命噢~
Posted by: icicle | (19) July 6, 2018 08:53 PM
周松松博客特来拜访
Posted by: 周松松博客 | (18) June 29, 2018 07:51 PM
这个方法其实还是有作弊的可能,虽然比较困难。最后一个人可以知道其它的结果,所以可以穷举一些词计算最终结果。因为最后是要模 106 的,这是个比较小的数,我想应该还是比较容易推算出一个合理的词的。
更安全的方法是每个人的原始 hash 不公布,而预先公布原始 hash 的 hash;等待所有人公布之后,再每个人公布原始 hash,利用所有人的原始 hash 计算最终结果。因为在拿到其他人的原始 hash 的 hash之后,无法推算每个人的原始 hash,也就没有办法作弊。
这个实际就是使用“承诺”的分布式随机数的生成办法。区块链里用的很多。
Posted by: moonfruit | (17) June 29, 2018 02:02 PM
终于“搞”一段落,终于告一段落,博客内面的错别字~~~ 我是纠错侠。。。
Posted by: joewanchen | (16) June 27, 2018 04:41 PM
技术人员的玩法,果然别具一格,哈哈
Posted by: 码客 | (15) June 27, 2018 01:58 PM
@laixintao 不好意思,看错算法了,原来是收集了所有的MD5值后再一起公布原始数字
Posted by: Vincent | (14) June 27, 2018 10:43 AM
@Vincent 你很难根据md5最后一位反推出一个合理的原始字符串吧,这么厉害的话可以去挖矿了哈哈哈
Posted by: laixintao | (13) June 26, 2018 12:20 PM
印象中,哈希取模的话,模素数结果更均匀。
Posted by: fangcun | (12) June 26, 2018 12:16 PM
这样 最后一个人不就可以根据前面的值算出一个数字 使自己必然中奖么?
Posted by: Vincent | (11) June 26, 2018 10:34 AM
@dwing 别人相信不相信没有关系,方法应该是客观上比较公正的,而不是当事人或者旁观者主观上公正的。我觉得md5相加取模比用第三方网站靠谱
Posted by: laixintao | (10) June 22, 2018 05:50 PM
“绝对对”,有错别字,应该是“决定对”
Posted by: joewanchen | (9) June 22, 2018 12:02 PM
www.random.org 是很知名的网站了, 当然可以说"黑掉","后门","障眼法"等各种理由说不安全, 因为没提供办法让所有人求证.
其实最让普通人信服的做法是把几个知名股市大盘指数做个简单运算再求模, 这些数据公开可查也利于小白们理解.
Posted by: dwing | (8) June 22, 2018 10:45 AM
@dwing 但是我们有完整的聊天记录公开留档啊。你可以暂时不信任,但是可以拿着聊天记录日后随时搞清楚或找到信任的人鉴定。
第三方网站怎么鉴定当时那个时刻没有人搞鬼?
Posted by: Cloud | (7) June 22, 2018 10:36 AM
从文章中可以看出很多人都不懂规则, 对这些人来说, 信任第三方网站比内部某人自己定个什么看不懂的规则更靠谱.
Posted by: dwing | (6) June 22, 2018 09:55 AM
评什么相信这个网站不是你自己开的,有没有黑进去作弊?
而且一点摇奖的仪式感都没有。
Posted by: Cloud | (5) June 21, 2018 12:17 PM
这么麻烦么, 去这里填个最小最大值就能生成一个很可信的随机数了:
https://www.random.org/
Posted by: dwing | (4) June 21, 2018 10:27 AM
“真的没有作弊呢。”,龙哥说的真对:“萌是第一生产力”。
Posted by: Pamela | (3) June 21, 2018 12:48 AM
如果是我们公司的做法,boss中奖要多提供一份奖品放入奖池的呢
Posted by: snake | (2) June 20, 2018 11:08 PM
这个抽奖玩法可以ICO了
Posted by: 杨博 | (1) June 20, 2018 10:49 PM