微信小游戏的前端攻城狮玩法
转自自己在开源中国上的博客:https://my.oschina.net/u/7247...
前言
公司群里经常有人会发一些微信小游戏,每次下面都会跟好多晒分截图。比如这个《看你有多色》的考察眼力的(瞎眼)小游戏。
别人的截图都是25分左右,还有30分以上的。自己玩了两把,20分都没上,于是只能悻悻的闷声当没看见。但如果你是一名前端攻城狮,并且还有一台电脑在手边,那就大不一样了。因为:前端攻城狮有前端攻城狮的玩法。
准备材料
- 手机一个(废话)
- 电脑一台
- 手机和电脑都可以连的WIFI
研究源码
首先当然得知道游戏本身是怎样的玩啦。用浏览器打开游戏页面,打开 F12。
可以看到这个页面内嵌了一个 iframe,真正的游戏页面其实是这个 http://9g.game6.cn/ssssds/gam...,打开之。
DOM 结构并不是很复杂。下面引入了一个 main.min.js
,估计就是控制游戏的主代码了。但也不着急看代码内容,先点击开始游戏。
游戏开始倒计时。不如先把这个时间改长点吧。因为每次时间刷新这个 DOM 元素都会刷新,那么检测这个 DOM 元素的更改肯定能找到控制时间相关的代码。审查元素,打开右键菜单,Break on -> subtree modifications
断点断到了 libs.min.js
里。代码是被压缩过的,名字是 libs
那应该是个第三方库。
所以具体什么意思不用管,直接在调试工具的右侧调用栈(Call stack)列表里找到最上层的用户代码(main.min.js)打开。
文件名虽然以 min.js
结尾,但是缩进还在。当然我们也可以点击左下角的 {}
按钮进一步美化代码。
可以看到 DOM 操作用的是类似 jQuery 的库。代码逻辑也很简单,如果当前游戏暂停什么都不做。如果没有暂停,时间减一。如果时间小于 0,游戏结束,否则输出当前时间。
那么要做的时间很简单,回到 main.min.js
,在函数头部加上一句
this.time = 60;
保存,把 DOM 断点取消,继续游戏。可以看到时间固定在了 59 不再减少。
当然这样做只是固定游戏时间,不如直接改分简单暴力。
每次点击正确方格。左上角的得分会被改变。如上类似操作可以容易的找到控制分数的代码。
检查 得分: X
这个 DOM 元素,右键,选择 Break on -> subtree modifications。点击一个正确的方格,断点会断到被压缩过的 jQuery 代码内部。右侧调用栈列表里选择第一个 main.min.js
所对应的函数 renderInfo
。
很显然这个 this.lv
就是当前的得分。那么要做的事情也很简单,直接在 Console
里把 this.lv
的值改为你想要的值。
取消断点继续游戏。得分没有变化。别着急,那是因为你只是改了外面的值,而写入 DOM 元素中的值已经传入了 jQuery 库内部了。当你再次得分时,分数就会变为你想要的值。
分数被改掉了,图还是一样的瞎眼。有没有什么办法能直接标识出正确的方格呢?这时我们就必须看游戏的内部实现逻辑了,需要看看这些方格是怎么被画出来的。
于是这次直接对大方格(#box)打断点,点击正确的方格。
断点依旧是断到了 jQuery 里面。调用栈列表回到最后用户代码 renderMap 里。
可以看到这里是在用多个 span
标签画方格区域。所有的 span
标签都是相同的。然而这些方格至少得有 background-color
或者一个特别的 class
才对。
单步进入下面的 this.api.render
方法。
可以看到这个方法就是在给 span
标签添加背景色了。可以看到这些 span
分为两种 data('type', 'a')
和 data('type', 'b')
。其中 type: b
的背景色用的是随机生成的颜色,而 type: a
的背景色是基于 type: b
的颜色基础生成的。那这个 type: a
是不是就代表正确方格的意思呢?
我们去看看程序究竟是怎样判断点击的方格是否正确的。直接审查正确方格的元素,检查他们绑定的 click
事件。
事件名右侧有绑定事件的源代码位置,点击进入。
对于使用第三方库绑定的事件,代码经常会跳转到第三方库内部代码里,不过这次我们运气不错。可以看到:代码首先拿出了设置在元素上的 data('type')
,如果为 a
则调用 e.nextLv。我们猜的没错。
那么事情就好办了。看看原本这些 span
标签就有个 5px 的 border。给这个 border 改个颜色好了呀。
回到之前的 render
函数里,给 type: a
的 span
标签的边框改个颜色:
span.css('border-color', 'black')
继续游戏,正确的方格有了显眼的边框,这下不会再瞎眼了。
实行魔改
这下万事俱备,就差把我们的改动放到手机端了。这时我们要请出移动端调试神器 Charles
。
如图所言,Charles 是一个跨平台的网页调试代理工具。Windows 上有免费的 Fiddler,然而 Fiddler 是用 .NET 写的,在 macOS 上不太玩的转。跨平台(Java 写)的 Charles 却是收费软件,有钱的可以支持一下原作者开发,没钱的也可以简单的用你懂的方式搞定。
我们要做的事情就是启用手机代理到你的电脑上。首先查看电脑 IP。macOS 有个简单的查看本机内网 IP 的方法:按住 Option 键点击系统菜单栏上的 WiFi 图标(当然你非要 ifconfig 也不是不可以)
保证 Charles 为打开状态。在手机上,打开系统设置,将 WiFi 的代理设置为你电脑的 IP,端口号 8888
手机上随便进行一个需要网络请求的操作,Charles 会要求你确认是否允许接入代理请求,点击 Allow
允许此操作。
这时在手机微信里访问游戏的链接,在 PC 端 Charles 里就可以看到手机发出的 HTTP 请求。
注意,手机端浏览器自己的缓存经常让服务器返回 204 或者根本不发出请求。这时可以尝试开启 Charles 的 Tools -> No Caching 并多刷新页面解决,实在不行就得清除对应 APP 的数据。
找到需要修改的文件 main.min.js
,右键,选择 Breakpoints
这时就给这个文件 URL 的请求打了断点。手机上刷新页面。首先会收到 Request,点击 Execute
放行。
然后会受到 Response。这时点击右侧的 Edit Response
,然后点击下面的 JavaScript
,善用查找功能把代码改掉
点击 Execute,爽去吧
截图跟同事显摆一下。如果他问你图是不是 P 的,那你可以诅咒发誓绝对没有。本来就是纯手点的嘛~~~
全文完
微信小游戏的前端攻城狮玩法相关推荐
- 15个前端攻城狮必备的学习网站 | 你知道几个?(附视频介绍)
前端开发所需掌握知识点概要 HTML&CSS: 对Web标准的理解(结构.表现.行为).浏览器内核.渲染原理.依赖管理.兼容性.CSS语法.层次关系,常用属性.布局.选择器.权重.盒模型.Ha ...
- 一个不务正业的前端攻城狮
猿叔 一个不务正业的前端攻城狮 特别欢迎热衷于写作的在校学生 以及那些正在运营自己的微信公众号的喜欢写作的朋友积极投稿 希望投稿的文章最好是温暖治愈的爱情小故事 或者能够给予人启发的人生感悟 温暖,治 ...
- 活动报名 | 前端攻城狮该怎样跳脱“围城”的焦虑
活动报名 | 前端攻城狮该怎样跳脱"围城"的焦虑 原创: 京小云 京东云开发者社区 4天前 作为WEB2.0的产物,前端工程师这一相对较新的职业俨然变成了一颗?一样的存在--丰富 ...
- web前端攻城狮 学习笔记——HTML基础
开始学习web前端开发基础了,我是跟着清华大学在学堂在线的<Web前端攻城狮>学习的,把一些笔记记在这里,方便后期查阅. 1 HTML基础 HTML是超文本语言. 一段HTML代码: &l ...
- animejs走马灯_web前端攻城狮超爱的JS动画库插件—anime.js
作为一名web前端攻城狮,除了完成日常业务逻辑处理之外,也会去注重一些用户体验交互的问题.特别是如今web前端的发展很快,很多优秀js插件层出不穷.对于web前端开发者,也要会利用这些现有的js插件, ...
- 小程序源码:最新wordpress黑金壁纸微信小程序 二开修复版-多玩法安装简单
这是一款wordpress系统框架的壁纸小程序源码 相信很多人以前也有用过这类的壁纸小程序源码吧 现在给大家发的这一款是二开修复版的 和以前的安装方式差不多,支持流量主收益模式 介绍: WordPre ...
- 让虞书欣、李诞拍到停不下来!AR+AI双引擎的互动小游戏,如何打开IP新玩法?...
有眼尖的朋友已经发现,近期爱奇艺的热播剧们有了新"看"法:在日常追剧的间隙,结合了IP要素的趣味视频互动特效小游戏玩法吸引了百万用户参与互动的热潮,更激发了The9全员.李诞等娱乐 ...
- html5 营销小游戏,HTML5 营销:三种玩法+案例
近段时间小编发现,HTML5似乎满足了广告主对移动营销的大部分需求,从形式到功用.到传播,有人观望,更有人已抢了鲜,在2014年HTML5营销案例也层出不穷.大到可口可乐.维多利亚的秘密这种敢于尝鲜的 ...
- 前端攻城狮学习笔记七:常见前端面试题之HTML/CSS部分(二)
前端页面有哪三层构成,分别是什么?作用是什么? 1.结构层:由 HTML 或 XHTML 之类的标记语言负责创建,仅负责语义的表达.解决了页面"内容是什么"的问题. 2.表示层:由 ...
最新文章
- 贝叶斯定理核心在后验概率是对先验概率的修正,即后验概率是描述来自先验概率的概率
- 搞懂OpenLDAP
- 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )
- asp实现批量录入数据
- [转]国际化: 理解Java平台上的Locale
- 关于Chrome出现Provisional headers are shown无法正常访问的解决方案(其他firefox,360, IE访问正常) (转)...
- mysql序列 mybatis_MySQL实现序列(Sequence)效果以及在Mybatis中如何使用这种策略
- 三大角度 PK ,Go 语言和 Node.js 谁胜谁负?
- springboot项目层次结构_Springboot项目结构Springboot项目结构
- linux syslog 3
- WDF框架下 硬盘的虚拟
- 五笔字根表识别码图_怎么学五笔 五笔字根表键盘图 【详细介绍】
- Linux源码阅读(Web在线阅读)
- C语言程序100例之C#版-029
- matlab给语音信号添加噪声
- 哪些平台可以查看医学类文献?
- 简洁、快速的JavaScript框架/库:jQuery
- mysql联合索引B 树_B+树和Mysql索引详解
- 把 Jul 8, 2020 12:00:00 AM 格式的时间转换为 2020-07-08 12:00:00 格式的时间
- 网页html游戏添加
热门文章
- TensorFlow多层感知机实现MINIST分类
- Java Set接口详细讲解 TreeSet的定制排序和自然排序
- python的[:-1]和[::-1]用法及结果实例(取反、删除末尾字符串)
- cygwin使用笔记
- ubuntu16.04更改python版本
- JavaEE——Spring4--(9)Spring的事务管理(注解方式)
- o2o家庭助手demo
- mysql服务器设置其他电脑访问
- 【Android开发坑系列】之PopupWindow
- [转]这才是真正的3D显示!Leap Motion推出次毫米级3D手动控制技术,让人手和影像融为一体...