判断左右脑源码解读

左右脑源码解读

最近看看你的左右脑年龄可以说是非常火,朋友圈有不少朋友人在玩,也看到有大牛对代码进行了解决,对此我也颇感兴趣来解读一番。
地址 :[http://game.if122.com]

数据分析

查看其源码 与网络请求,发现其发起了两次请求 js/index.jsonjs/index_2.json

  • 首先 是js/index.json ,返回结果为问题题目,共9个节点,第一个如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    {
    "question":"这个男人的眼睛是在一条直线上吗?",
    "answer":{
    "是":"2",
    "否":"2"
    },
    "banner":"images/1_pWzVxxQ.jpg"
    }
  • js/index_2.json 中返回年龄与应该展示共个4个节点 每个节点中的word分别为a,b,c,d,第一个节点如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {"word":"a",
    "name":{
    "one":"25与27岁",
    "two":"39与22岁"
    },
    "output":
    {"img":"images/86DA2WyG5I5uXM1.jpg",
    "text":"李白属于灵活走位,多段位移,七进七出,秀你一脸,比较吃操作的英雄,因此玩家的意识要特别强,才能将该英雄玩的很好。需要多熟悉、多玩,对应新手来说,不是特别适合。"
    },
    "outputtwo":
    {"img":"images/ngeG9PYKAYsdqHtZ.jpg",
    "text":"李白属于灵活走位,多段位移,七进七出,秀你一脸,比较吃操作的英雄,因此玩家的意识要特别强,才能将该英雄玩的很好。需要多熟悉、多玩,对应新手来说,不是特别适合。"
    }
    }

源码解析

  • 查看js源码 其中有两个随机数 ansrandom,ansrandom2,ansrandom2 先来看 ansrandom2 ,ansrandom2 的取值只与 .ad_after .ad_after_section 有关,查看源码, 里面显示的是二维码等,所以与年龄判断无关,关键代码:

    1
    2
    3
    4
    5
    6
    if(ansrandom2%4==0){
    $('.ad_after .ad_after_section:eq(0)')
    .css('display','flex')
    .siblings()
    .hide()
    }
  • 查看 ansrandom ,其结果为选择js/index_2.json 选中节点中的随机一个年龄

    1
    2
    3
    4
    5
    6
    7
    8
     if(ansrandom%2==1){
    $('.result').prepend('<img src="'+result[index].output.img+'"class="result_img"/>')
    .find('span').text(result[index].name.one);
    $('title').text('原来我左右脑年龄是'+result[index].name.one+',你也来看看');
    }else{

    //设置 outputtwo 略
    }
  • 接下来判断他是如何选中 js/index_2.json 中的节点的
    关键代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // isNaN 来判断是否是最后一题
    if(!isNaN($(this).data("math"))){
    //不是最后一题目 进入下一题
    var num_a=$(this).data("math")-1 $(".question:eq("+num_a+")").show().siblings().hide()
    json[num_a].banner?$(".banner").prop('src',json[num_a].banner):$(".banner").prop('src', json[0].banner)
    }else{
    //最后一题目显示结果

    }
  • 通过js/index.json 中的answer 选择来跳转下一题,而 answer 的 中不同答案除了最后一个,都是相同而是 2,3,4,5,6,7,8,9 最后一个则分表为 abcd
    所以前几题的结果都是无用的 年龄判断只与之后一题有关,
    最后一题的$(this).data("math");中放的分别是 abcd ,通过匹配abcd 在js/index_2.json 中选择出word 相同的节点,再通过 ansrandom 再在节点中随机选个年龄来展示。

结论

  1. 通过上一题的答案来选择下一题,但除最后一题外,跳转的题目都相同,故没有意义。
  2. 最后结果只与最后一题有关,在从你选择的答案中,从预设对应答案中选择选择一个来展示。
  3. 答案对应年龄:
  • a: 25与27岁 或 39与22岁
  • b: 30与49岁 或 9岁与26岁
  • c: 46岁与19岁 或 33岁与5岁
  • d: 19与20岁