JS30 Day 12 - Key Sequence Detection (KONAMI CODE)
科樂美秘技 實作 經典的 ↑ ↑ ↓ ↓ ← → ← → B A
KONAMI CODE 的由來來自 Konami 遊戲公司
1985 年,遊戲設計師橋本和久在 Debug 其中一款遊戲《宇宙巡航艦》 時,因為關卡太難了自己也打不過,所以就加入了這段密技,輸入的人可以拿到全裝備全能量以便自己過關 Debug,結束後也沒有拿掉這段密技,就這樣成為第一段 KONAMI CODE。
而真正發揚光大這段密技的是 Konami 的另一款作品 《魂斗羅》 ,只要輸入 「上上下下左右左右BA」,就能從 3 條命變成 30 條命,拯救了無數玩家。
後來 KONAMI 在之後的 30 幾年橫跨了多個遊戲世代,都有繼續推出的遊戲中放入 KONAMI CODE 或是類似的密技,這也演變成了一種流行文化。
但是最近 10 年內越來越多 KONAMI CODE 被移除Q_Q
一些有此彩蛋的網站
暴雪娛樂Overwatch官方網站
Plurk - 占卜精靈
GoSkills
BuzzFeed
設定密碼
監聽並儲存我們輸入的字串。
將我們儲存的字串與密碼字串做判斷,相等的話跳出效果。
先建立一個存取用的空陣列
const pressed = []
$(window).keyup( (e) => {
})
將陣列長度維持在密碼長度,這邊有兩種方式
.shift()
移除陣列的第一個元素shift() 方法會移除陣列的第一個元素並回傳陣列。此方法會改變陣列的長度。
pressed = [] // 我們鍵盤輸入組成的陣列
secretCode = 'abc' // KONAMI CODE
if (pressed.length > secretCode.length) {
pressed.shift()
}
.splice()
secretCode = 'abc' // KONAMI CODE
pressed.splice(-secretCode.length - 1, pressed.length - secretCode.length)
pressed = [z, x, c, v]
pressed.splice(-3 - 1, 4 - 3)
pressed.splice(-4, 1)
pressed = [x, c, v]
只有在 pressed 鍵盤陣列長度大於密碼長度才會被觸發,
就判斷式
if (pressed.join('') === secretCode) {
console.log('WEEEEEEEEEEEEEEEEEEEEEEEEEE')
}
// 或是
if (pressed.join('').includes(secretCode)) {
console.log('WEEEEEEEEEEEEEEEEEEEEEEEEEE')
}
使用到的技術
keyup()
可以監聽鍵盤輸入什麼
.includes()
MDN 用以判斷字串或陣列中是否有包含特定字串。
console.log('apple'.includes('apple')) // true
console.log('apple is good'.includes('apple')) // true
console.log(['apple', 'org'].includes('apple')) // true
console.log(['apple is good', 'org'].includes('apple')) // false
.splice()
MDN
arr.splice(要插入的位置, 要刪除的數量, 要插入的元素們)
arr.splice(要刪除的位置, 要刪除的數量)
<要刪除的數量> 如果為負數的話不會執行
.shift()
MDN shift() 方法會移除並回傳陣列的第一個元素。此方法會改變陣列的長度。
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing