zoukankan      html  css  js  c++  java
  • 老铁,你今天赢钱了吗?大数据分析博彩游戏的服务端算法。

    背景是某天突然收到朋友的信息,说最近迷上了某款博彩游戏,类似于大街小巷的水果机,说我是IT人士,赶紧帮忙写个外挂大家赚点钱。

    一开始我嗤之以鼻,我认为这种看脸的概率问题没必要浪费时间,但朋友说和一般的水果机不同,死缠烂打非让我研究下,于是只能勉强答应了。

    根据链接下载了游戏,是客户端游戏,虽然也是水果机,但的确有点不同,小店里的水果机是1对1的关系,而这个是多对1,一个房间内有N个玩家同时玩,下面是这个水果机的大概玩法:

    其中8个选项就是我们下注的8个项,

    总额:表示该游戏房间内例如有100个玩家,这100个玩家所有押注选项1的总额是多少,

    倍率:例如我压了100分选项3,那么开奖开的是选项3,我就得到8000分。

    总所周知庄家(游戏公司)肯定是稳赚不亏的,所以我们只能从别的玩家手中赚钱,下面开始截取封包并记录数据,冒泡递减排序:

    选项后面括号内的数字是倍率,括号后面带小数的数字是该选项押注总额,单位是万。

    经过几天24小时不间断的抓取,我们有了一定数量的样本, 写个简单的统计算法开始分析:

    果然不出所料,庄家为了保障利益,尽量会选择总额低的开,实际上其他的可以不用看,就看乘以倍率之后的名次关于开奖的概率分布就行了,

    于是我们再自动控制键盘鼠标,同时抓数据,因为下注总额是实时的,在开奖前一秒按照我们统计的概率去下注就行了,

    假如这次倍率最低为4倍 ,那么我们可以押概率最高的4个,中奖率高达73%,

    如果最低为6倍,那么我们可以押概率最高的6个,中奖率高达90%!而且即使开奖的是最低倍,我们也不会亏。

    于是我就开着程序一直挂着,不断的中奖,分数也越来越高,抱着明天坐等收钱的心态就去睡觉了,挂一夜看看到底能赚多少。

    。。。然而还是太天真了,第二天起来一看,分数原地踏步,立马看了下日志,原来如此,先让你赢点,然后就会输,输多了再让你赢,幅度控制在20%左右,也就是最多赢120%,就会让你输。

    按照统计的客观开奖概率,为什么会出现这种情况呢,很不科学,我开始重新审视算法,也在思考是不是忽略了什么,直到无意中看到了日志中封包数据。

    重点就是游戏房间内好像有几百人,好像很多人玩很多人赢钱的样子,说话的就那么三五个人,其他人不管输赢从不说话?一直24小时全部在线?不管任何时间段押注全是秒押?其实全是机器人!

    也就是系统生成的玩家,他们的存在一方面是充门面吸引玩家,最重要的目的是帮助系统下注,混淆押注总额,所以截取封包数据保存的样本全是假的!

    你根本无法获取真实玩家的押注总额,那么服务端就可以根据真实的下注情况来选择让少部分人赢,大部分人输,甚至可以根据不同的玩家发送不同的开奖结果。

    核心思路应该是

    int UserScore=User.Score;

    ……

    if(UserScore*1.2>User.Score)

    {

      必输!

    }

    老铁,悬崖勒马,回头是岸。

  • 相关阅读:
    Codeforces Round #518 (Div. 1) Computer Game 倍增+矩阵快速幂
    BZOJ2756 [SCOI2012]奇怪的游戏 最大流
    Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)
    [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)
    [AtCoder] Yahoo Programming Contest 2019
    Codeforces Round #538 (Div. 2) (CF1114)
    [BZOJ3625][Codeforces Round #250]小朋友和二叉树 多项式开根+求逆
    [BZOJ2341][Shoi2011]双倍回文 manacher+std::set
    [BZOJ4278] [ONTAK2015]Tasowanie 贪心+后缀数组
    [BZOJ3451] Tyvj1953 Normal 点分治+FFT
  • 原文地址:https://www.cnblogs.com/Uncle-Joker/p/6815799.html
Copyright © 2011-2022 走看看