这个游戏还不错,用了两个晚上的时间通过并写下解法。这个游戏通过修改JS代码来通关的游戏。很考验玩家的解决问题能力,同时也有一定的可玩性。

游戏地址 http://alexnisnevich.github.io/untrusted/

第一关

游戏说明,先移动@符号到⌘,获取一个功能窗口,然后右边就会出现一段代码,而该段代码的执行结果呈现在左边。现在要你移动@到口,要记住接下来的每一关都是要移动到蓝色的方框中(口)。我们修改右边的代码,让@符号可以找到出口。我在这一关的解法是:

然后按下面的Execute 或 Ctrl-5 进行运行,这是那些墙都不见了,我们就可以直接移到出口。这样就完成了这一关。注意代码的编写这能在黑色的部分,红色背景的代码是不可以修改的。

而这些呢,一个是js会用到的API,第4个是重置,第五个是运行。

接下来,如果非必要我就不截图了。

第二关

是一个随机的迷宫。

解法是在两个输入的地方进行块注释

第三关

@在房间内,如何出来,没错,第一想法是要把中间两个for都注释掉,但是很遗憾失败了,因为最下面的validateLevel方法已经规定了block(#)的个数了,所以注释不了。那该如何解呢?

我的解法是将第一个for里面的代码中的map.placeObject(5,y,’block’);改为map.placeObject(3,y,’block’);就可以了。修改后,然后execute运行。

第四关

@跳出房间,这次的墙都不能修改了,该怎么办呢?我们先看一下API给我们提供了什么。

map.placeObject(x, y, objectType) //Places an object of the given type at the given coordinates.

这个API好像还不错呢.我们可不可以在多创建一个出口呢,答案是可以的。

我的解法是创建多一个出口

Map.placeObject(40,20,’exit’);

第五关

Mine没错是雷,看一下代码getRandomInt()函数就知道,这一关是随机分布雷,然后要你在不踩到雷的情况下,到达出口。

我的解法是 看上面的map.setSquareColor()函数,不就是修改了颜色吗?我也会,在输入的地方输入 map.setSquareColor(x,y, 'fff'); 就可以了

第六关

有个守卫d 会根据你的位置,然后靠近你,一旦跟他重叠就输了。该怎么办呢?方法还比较简单,就是建一面墙,然后绕过去就可以了。

 for(var x = ; x < map.getWidth()-; x++) {
map.placeObject(x, , 'block');
} for(var y=;y<;y++){
map.placeObject(map.getWidth()-,y,'block');
}

第七关

这一关有个电话,捡起它后,你就会有一个调用函数的接口了,看下面的提示就知道,每次要按下Q键,就调用 player.setPhoneCallback() 回调函数。这一关是如果@和☒符号的颜色一样就可以通过了。我们只要定义每次按下Q键就改变颜色就可以了。

代码如下

 var i=;
if(player.getColor()=='#0f0'&&i==)
{
player.setColor('#ff0');
i++;
} if(player.getColor()=='#ff0'&&i==)
{
player.setColor('#f00');
i++;
}
if(player.getColor()=='#f00'&&i==)
{
player.setColor('#0f0');
i++;
}

第八关

一看代码,整个代码段就那个函数是可以修改的。

把movePlayerToExit 改为 generateForest 就可以了。作用是每次按下Q键就随机一次地图,我们只要每次都移动一小点,慢慢的就可以到达了。注意如果你碰巧被#符号困住,那么你可以按Reset重置一下。

第九关

这一关是这样的,要你跨过那些水,到达河的对面。

解法是用map.defineObject定义一条桥来让player通过,按照上面提示的定义一个类似与raft的对象,只是这个对象就不要移动函数了,不然难以控制。

代码如下

 map.defineObject('aa',{
'type':'dynamic',
'symbol':'||',
'color':'#ff0',
'transport':true
}); for (var y = 5; y < 15; y++) {
map.placeObject(0, y, 'aa');
}

第十关

这一关就是有很多的守卫,他们默认会向你移动。程序中就是要你修改他们默认的移动方法。该如何移动才不会碰到你呢?

看一下API 有个object.canMove();的函数

三个移动方法都写上这个

 if(me.canMove('up')){
me.move('up');
}else{
me.move('right');
}

第十一关

有个robot对象,然后要R这个移动到k那里,也就是让机器人r找到钥匙k,然后才可以让你进入下一关。R机器人会把k给带出来,然后你还要移动到R上面,拿到钥匙,然后才出开门,进入下一关。

解法如下:

 if(me.canMove('right')){
me.move('right');
}else{
me.move('down');
}

第十二关

这一关跟刚才那一关很相似。只不过是移动的时候有点难而已。最笨的办法是手动模拟R的路径出来就可以了。

 if(me.getY()<9&&me.getX()<20){
if(me.canMove('down')){
me.move('down');
}else{
me.move('right');
}
}else if(me.getX()>=20&&me.getX()<map.getWidth()-2){
if(me.canMove('up')){
me.move('up');
}else{
me.move('right');
}
}else{
me.move('down');
}

第十三关

在上一关的基础上又进一步了。我都不知道要怎么弄了。以前做这种迷宫的题都是dfs或bfs解决的。现在都不知道怎么下手了,要不用里面给的随机移动,只要时间够长,就一定能拿到key并出来。

这道题想了很久都没有想出来,百度了一下,看了一下别人的解法。难题就在于在一个函数里面不能保存上一次的运行结果。如果可以,就可以通过获取player这一次的xy位置,与下一次的xy位置进行判断。但是这个变量怎么定义就成为了一个问题,因为每次都会定义一次。然后我就想到了用静态变量,谁知js没有静态变量,这能通过全局变量。看了别人的解法,简直被吓尿了。居然用类似与数据库注入的办法。具体很难描述。直接上代码

         if (player.getX() - lx == 1) me.move('right');
else if (player.getX() - lx == -1) me.move('left');
else if (player.getY() - ly == 1) me.move('down');
else if (player.getY() - ly == -1) me.move('up');
lx = player.getX();
ly = player.getY();
}
}); var lx = player.getX(); //这样就有静态变量了。 var ly = player.getY(); map.defineObject('foo', {
'type': 'dynamic',
'dat': function() {

第十四关

这一关还是比较难,就是用同颜色的钥匙开同颜色的锁,然后最终拿到A并过关的意思。可以操作的地方不多,一看就是让我们设置当开绿锁的时候我们应该把哪把钥匙献上。要么是redKey要么是blueKey,greenKey。其实利用反推思想还是比较好做的。

我们选择blueKey。

第十五关

接下来的一关比一关难了。要好好想想。看一下validateLevel和前面几关有什么不同。

输入代码 map.placePlayer(0, 0)  就可以通关,也不知道为什么。

第十六关

我++这是什么,不是字符模式吗?怎么是图形的。什么要求啊,看一下代码先…… 注释完代码后,以为可以了。唉,我还是太天真了。还是好好看代码,分析一下

这关是随机产生25条墙,不能删除,因为validateLeve函数有验证。每个墙壁有一种颜色,如果颜色与@相同就可以让@通过。否则就失败。

第一步先把颜色弄出来。

第一段代码  ctx.strokeStyle=’white’ 该成 ctx.strokeStyle=color;

编写一个setPhoneCallback函数的像第7关一样。应该就可以了。

第二段代码

 var player = map.getPlayer();
//map.placeObject(1, 1, 'phone');
player.setColor('red');
player.setPhoneCallback(function(){
var i=0;
if(player.getColor()=='yellow'&&i==0)
{
player.setColor('red');
i++;
}
if(player.getColor()=='red'&&i==0)
{
player.setColor('teal');
i++;
}
if(player.getColor()=='teal'&&i==0)
{
player.setColor('yellow');
i++;
}
});

颜色值要用字母代替。不能用十六进制。

第十七关

每一个方格里面有三个门,和三个*号,表示不能达到的。具体那些门可以进,那些门传送到达*号,在代码中已经有体现出来了。就是那个getType()还有setTarget()用来表示门之间的对应关系。

画出来的图是这样的。然后自己找路走,很大的机率是走不通的,多execute几次,总有一次是可以的。

代码如下

         if(t1.getType() == 'teleporter' && t2.getType() == 'teleporter') {
var t1p = map.getCanvasCoords(t1);
var t2p = map.getCanvasCoords(t2);
//canvas.fillStyle ='orange';// 'rgb(0,165,0)';
//canvas.strokeStyle = 'red';
//canvas.strokeStyle ="rgb(" + r + ", " + g + ", "+ b +")";
canvas.lineWidth = 1;
canvas.moveTo(t1p.x, t1p.y);
canvas.lineTo(t2p.x+5,t2p.y+5);
canvas.stroke();
} if(t1.getType() == 'trap' || t2.getType() == 'trap') {
var t1p = map.getCanvasCoords(t1);
var t2p = map.getCanvasCoords(t2);
//canvas.fillStyle ='orange';// 'rgb(0,165,0)';
canvas.strokeStyle = 'blue';
//canvas.strokeStyle ="rgb(" + r + ", " + g + ", "+ b +")";
canvas.strokeStyle="rgba(0,0,222,0.1)";
canvas.lineWidth = 2;
canvas.moveTo(t1p.x, t1p.y);
canvas.lineTo(t1p.x+5,t1p.y+5);
canvas.moveTo(t2p.x, t2p.y);
canvas.lineTo(t2p.x+5,t2p.y+5);
canvas.stroke();
}

第十八关

这一关的意思就是跳过去,但是中间有个坑。怎么过呢,要你写那个jump函数。

第一想法弄个 map.placeObject(1,1,’block’); 要弄一条桥。没那么容易。不给造。

我发现快速的按下右还有上是可以前进一小段的。这个是不是可以利用一下。

我就编了一段脚本模拟键盘输入右方向键。这不是正常的办法,等我想到正常的办法再给出代码。这里先通关再说。

非正常方法

在Windows下,创建一个aa.vbs的文件里面写上

 Set objShell = CreateObject("Wscript.Shell")
WScript.Sleep
for i= to '循环发送消息100次!
WScript.Sleep
objShell.SendKeys "{up}"
objShell.SendKeys "{up}"
objShell.SendKeys "{right}"
next

保存,然后双击运行aa.vbs,然后在3秒内移到游戏窗口。就可以通过。可能根据不同的机器,上面的参数会有所不同。

楼下给出的解法,不错哦!

     map.startTimer(realJumper, 45);
} function realJumper(){
if(player.getX()<fl(w/2) + 5)player.move("up");

第十九关

这一关我都不知道怎么回事,只是简单的上下左右,几次后就通关了。也没有代码。

第二十关

天上下着雨,我们要避开雨到达对面。我觉得我呢能力就到这里了。只能参考别人的解法了。

这一关是天降毒雨,我们必须顶着毒雨和上面的BOSS作斗争,消灭所有的BOSS之后拿到A之后才能通关。翻API的时候发现有map.overrideKey这个函数,可以复写一个方向键的回调函数,解决没办法触发的问题。然后我们只要做向上发射的子弹去消灭BOSS就好了。这里因为我们要往右上下移动,所以选择复写了左方向键。

 map.defineObject('arrow', {
'type': 'dynamic',
'symbol': '↑',
'color': 'green',
'interval': 100,
'projectile': true,
'behavior': function (me) {
me.move('up');
}
}); function shoot() {
for (x = 0; x < map.getWidth(); x++) {
map.placeObject(x,12,'arrow');
}
} map.overrideKey('left', shoot);

第二十一关

这一关应该就是最后一关了。这一关我也不会做,还是看别人的做法。

这一关什么阻碍都没有,然后你也不可以操作代码,但是就是没法过关。看代码的原因应该是map.finalLevel这个值变成True了表示最后一关,所以就没办法再下一关了。

最后搜索了一下发现原来Menu界面下可以查看scripts文件夹,有看过游戏的Github地址,才知道这是游戏的源码了。而且发现有几个文件是呈黑色的,似乎可以修改的说。这一关我估计就是作者要玩家读懂整个程序。然后了解。

解法

进Object.js文件修改exit对象的行为判断函数,把if(!map.finalLevel){}去掉就好了。

第二十二关

结束了。

每一关的解法其实都是有保存的,保存在https://gist.github.com/*******

1. https://gist.github.com/dab3fa8d760afaa7be5b

2. https://gist.github.com/c71fe3495da61f413413

3. https://gist.github.com/88bd05ee27de9bece74a

4. https://gist.github.com/0a903137d4d5c756edf6

5. https://gist.github.com/1c30585f8498cff31566

6. https://gist.github.com/cc226fce4d1fda3d1ea8

7. https://gist.github.com/9c084e394ecc83fca6a0

8. https://gist.github.com/64963dbaef590cc5f769

9. https://gist.github.com/f0943f451c6a753cce9d

10. https://gist.github.com/00f663b522a8ed61431e

11. https://gist.github.com/3bc8c18cb8ea08c44714

12. https://gist.github.com/6e5679bc8e49ace815cc

13. https://gist.github.com/f157a0b23f4c9edfcd45

14. https://gist.github.com/b32d662528a577262255

15. https://gist.github.com/ec012bbc94a87678d743

16. https://gist.github.com/cf063c4a718da051c55a

17. https://gist.github.com/007211c7698b41d2225f

18. https://gist.github.com/d6491415365bc658f180

19.

20. https://gist.github.com/9f0f5022f03fbb313529

21. https://gist.github.com/440c4ca348a605f839b5

参考方案: http://blog.segmentfault.com/openwrt/1190000000467496

***********************************************

转载出处: http://www.cnblogs.com/wunaozai/p/3667587.html

Untrusted 游戏 通关攻略的更多相关文章

  1. XSS挑战之旅---游戏通关攻略

    最近发现一个有趣的XSS闯关小游戏,游戏的作者是先知社区的大佬Mramydnei,喜欢XSS的大家可以一起来学习交流. 现在我把自己在前面的十八关里面的闯关过程记录一下,大神绕行,我是菜鸟,大家可以一 ...

  2. imToken 测评通关攻略

    imToken 测评通关攻略 2017-10-19 imToken 在 1.3.3 版本新增了用户风险测评系统, 目的是为了让更多的用户了解钱包安全知识以及区块链的基本概念, 从某种程度上提升了整个区 ...

  3. 微信小程序——【百景游戏小攻略】

    微信小程序--[百景游戏小攻略] 本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载! 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE ...

  4. Upload-labs 文件上传靶场通关攻略(上)

    Upload-labs 文件上传靶场通关攻略(上) 文件上传是Web网页中常见的功能之一,通常情况下恶意的文件上传,会形成漏洞. 逻辑是这样的:用户通过上传点上传了恶意文件,通过服务器的校验后保存到指 ...

  5. upload-labs通关攻略(1-11关)

    upload-labs通关攻略 upload-labs是练习文件上传很好的一个靶场,建议把upload-labs关卡全部练习一遍 1.下载安装 下载地址 链接:https://pan.baidu.co ...

  6. upload-labs通关攻略(全)

    upload-labs通关攻略 upload-labs是练习文件上传很好的一个靶场,建议把upload-labs关卡全部练习一遍 1.下载安装 下载地址 链接:https://pan.baidu.co ...

  7. 经典DOS游戏皇帝攻略(曾经的回忆)

    最完美攻略>>>>> -------------------------------------------------------------------------- ...

  8. DQ8通关攻略

    <勇者斗恶龙8>作为勇者斗恶龙系列首次实现3D的一作,游戏无论是从画面.音效还是游戏系统都表现非常不俗,这款游戏也是PS2主机上必玩的一款大作. 作为PS2平台上唯一一款勇者斗恶龙的正传新 ...

  9. Upload-labs 文件上传靶场通关攻略(下)

    Upload-Labs靶场攻略(下) Pass-11 GET型传参,上传目录可设置,考虑00截断,在/upload/后添加1.php%00,即可上传 Pass-12 POST型传参,上传目录可设置,P ...

随机推荐

  1. css中url的路径含义及使用

    http://www.jb51.net/css/37554.html 在CSS中有用url语法来指定background-image或是其他引用文件中,如: 复制代码 代码如下: .mainheade ...

  2. php之快速入门学习-16(PHP 魔术变量)

    PHP 魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常 ...

  3. Wireshark基本介绍和TCP三次握手

    转自:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇博客:用 Fiddler 来调试HTTP,HTTPS. ...

  4. 虚拟机下linux迁移造成MAC地址异常处理办法

    虚拟机下linux迁移造成MAC地址异常处理办法 Linux无法启用网卡:Device eth0 has different MAC address than expected,ignoring解决 ...

  5. Tomcat 设置URI默认字符集为UTF-8

    新配置一个Spring的MVC项目.发现对Get请求的中文參数出现了乱码: 查看了SpingMVC中关于编码的配置(在web.xml中).例如以下 <filter> <filter- ...

  6. js 获取地址栏的值乱码问题

    传过去的参数是:(01) 0 6936841 40029 4. 接收的参数的:'(01)%200%206936841%2040029%204'. 因为包含空格,或者中文,就会乱码.要想不乱码,接收的使 ...

  7. 金山PDF

    金山是个很不错的软件公司,金山出PDF,纯粹是完善生态圈!毕竟没FoxitReader专业对PDF的处理上! 官网:芝麻开门 下载:http://wdl1.cache.wps.cn/wps/downl ...

  8. virtualenv沙箱

    准备用Django开发网站,豆瓣阅读中有<Django入门>,里面有人批注说用virtualenv+pip很好. 每次搞个什么都感觉举步维艰,因为之前太懒了,什么都懒得深入看一下.pip一 ...

  9. Spring MVC Beginner’s Guide勘误表

    - 17 submitted: last submission 09 Dec 2016 Page number: 213 Qauntity should be: Quantity Page numbe ...

  10. VS:"64位调试操作花费的时间比预期要长"的一解决途径

    解决办法之一: 在命令提示符那里打入如下命令: netsh winsock reset catalognetsh int ip reset reset.log hit 重启电脑后,即可