IFE 熱身任務解決過程手記

作者:?緝熙Soyaine
發(fā)布日期:2017-02-17

本篇主要記錄完成 IFE 熱身任務過程中我的思考過程和解決方法。

Warm up

warm up
warm up

把空間延伸開來即可。

Step1

先找到一串奇怪的字符,但是發(fā)現(xiàn)長度不對,猜想可能是經(jīng)過加密了,所以試了一些在線解密網(wǎng)站,用 BASE64 解出來了。

說個題外話,前一天晚上看到這串字符時絲毫沒有想法,后來晚上做夢,夢見朋友起床時很興奮的和我說“我解出來啦!是達芬奇密碼?!?23333333 這個詭異的夢境。

Step1 - vue or ctrl+a
Step1 - vue or ctrl+a
Step1 - BASE64
Step1 - BASE64

相關(guān)知識:
Base64是一種編碼方法,特點如下:

  • 用64個字符
  • 表示任意二進制數(shù)據(jù)
  • 查表實現(xiàn)
  • 適合少量數(shù)據(jù)
  • 常用于在URL、Cookie、網(wǎng)頁中傳輸
  • 不能用于加密

其實 JavaScript 自帶有相關(guān)的處理方法 WindowBase64.atob() ,所以也可以直接在 Console 中調(diào)用語句來解碼。

編碼解碼調(diào)用的方法名稱正好相反。

var encodedData = window.btoa("Hello, world"); // 編碼
var decodedData = window.atob(encodedData); // 解碼

// encodedData: "SGVsbG8sIHdvcmxk"
// decodedData: "Hello, world"

### Step2

揣摩題意,標注引號的兩個字影射了 `window` 和 `height` 兩個特性,所以直接在 Console 里輸入語句獲取當前窗口高度,然后將密碼值調(diào)整到相應數(shù)值即可。

`注: 此處截圖時調(diào)整過窗口,所以密碼值有些不一致。`

![Step2 - window.height](https://cl.ly/2H2z2r0c2B3D/[bdc80d68359c95fb6ce5fd2d8faadbe7]_Image%25202017-02-17%2520at%25207.17.11%2520PM.png)

這個頁面仿真做得還不錯,在 Elements 面板用 Shift 調(diào)整元素的 CSS 屬性值時,伴隨著過渡效果,的確有在撥動密碼鎖的感覺。

![Step2 - css](https://cl.ly/1F061l0m1f1M/[e763068c0434be287b0217b076c9a876]_Image%25202017-02-17%2520at%25207.19.34%2520PM.png)

### Step3

這一步就是 CSS 的位置與變換。比較繁雜的是字母 E。最開始我是使用的 `matrix` 作水平鏡像翻轉(zhuǎn),需要經(jīng)過一些計算。

![Step3 - matrix counting](https://cl.ly/042e1V2D360r/Image%202017-02-17%20at%209.21.42%20PM.png)

```css
.letter-e {
  position: absolute;
  transform: matrix(-0.94, 0.342, 0.342, 0.94, 560, -191);
}

http://www.boogdesign.com/examples/transforms/matrix-calculator.html -- 這是一個在線換算角度的網(wǎng)站。

后來看到了一種更好的解決辦法,也就是下圖中的寫法,使用 rotateY,更好理解一些。

Step3
Step3

總結(jié)一下,下面幾種寫法的效果是相同的:

{
//CSS 2D 變換
transform: matrix(-0.94, 0.342, 0.342, 0.94, 0, 0);
transform: rotate(-20deg) scaleX(-1);

//CSS 3D 變換
transform: rotate(20deg) rotateY(180deg);
}

Step4

Step4 - route mao
Step4 - route mao

步驟如下:

  1. 畫出路線圖,標記需要的坐標點
  2. 點擊頁面中各個點,在 Console 面板獲得坐標值
  3. 處理語句
function moveBall(ball) {
    ball.at (9 , 47, ball => ball.wait(2000));
    ball.at (80 , 47, ball => ball.turnRight());
    ball.at (80 , 129, ball => ball.turnLeft());
    ball.at (221,  129, ball => ball.turnRight());
    ball.at (221,  236, ball => ball.turnRight());
    ball.at (79 , 236, ball => ball.turnLeft());
    ball.at (79 , 362, ball => ball.turnRight());
    ball.at (24 , 362, ball => ball.turnBack());
    ball.at (166,  362, ball => ball.turnRight());
    ball.at (166,  472, ball => ball.turnRight());
    ball.at (26 , 472, ball => ball.turnBack());
    ball.at (366,  472, ball => ball.turnLeft());
    ball.at (366,  50, ball => ball.turnLeft());
    ball.at (311,  50, ball => ball.turnBack());
    ball.at (367,  50, ball => ball.turnRight());
    ball.at (367,  100, ball => ball.turnLeft());
    ball.at (465,  100, ball => ball.turnLeft());
    ball.at (465,  14, ball => ball.turnRight());
    ball.at (544,  14, ball => ball.turnRight());
    ball.at (544,  99, ball => ball.turnLeft());
    ball.at (621,  99, ball => ball.turnRight());
    ball.at (621,  180, ball => ball.turnRight());
    ball.at (572,  180, ball => ball.turnLeft());
    ball.at (572,  472, ball => ball.turnLeft());
}

有幾個注意點:

  1. 所寫代碼是用于定義小球到達某個點時的動作,所以對于經(jīng)過兩次的點,最好選取不同坐標使其錯開。
  2. 由于路線需要銜接上,所以坐標也同樣需要銜接。
  3. 入口處的星星出現(xiàn)有延遲,所以需要在開始時等待幾秒。
Step4 - code
Step4 - code
[END]
若有更好的解決方案,歡迎討論。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容