game: pretty morse code

This commit is contained in:
He4eT 2025-06-09 09:10:00 +02:00
commit d13d5807e8

70
game.js
View file

@ -6,34 +6,39 @@
// version: 0.1 // version: 0.1
// script: js // script: js
let morseTable = { const morseCode = [
'.-': 'A', ['A', ' .- '],
'-...': 'B', ['B', ' -... '],
'-.-.': 'C', ['C', ' -.-. '],
'-..': 'D', ['D', ' -.. '],
'.': 'E', ['E', ' . '],
'..-.': 'F', ['F', ' ..-. '],
'--.': 'G', ['G', ' --. '],
'....': 'H', ['H', ' .... '],
'..': 'I', ['I', ' .. '],
'.---': 'J', ['J', ' .--- '],
'-.-': 'K', ['K', ' -.- '],
'.-..': 'L', ['L', ' .-.. '],
'--': 'M', ['M', ' -- '],
'-.': 'N', ['N', ' -. '],
'---': 'O', ['O', ' --- '],
'.--.': 'P', ['P', ' .--. '],
'--.-': 'Q', ['Q', ' --.- '],
'.-.': 'R', ['R', ' .-. '],
'...': 'S', ['S', ' ... '],
'-': 'T', ['T', ' - '],
'..-': 'U', ['U', ' ..- '],
'...-': 'V', ['V', ' ...- '],
'.--': 'W', ['W', ' .-- '],
'-..-': 'X', ['X', ' -..- '],
'-.--': 'Y', ['Y', ' -.-- '],
'--..': 'Z', ['Z', ' --.. '],
} ].map(([letter, code]) => [letter, code.trim()])
const letterToMorse = Object.fromEntries(morseCode)
const morseToLetter = Object.fromEntries(
morseCode.map((pair) => pair.reverse()),
)
function TIC() { function TIC() {
gameStages[currentStage]() gameStages[currentStage]()
@ -226,7 +231,7 @@ function playMorseKey(seed) {
const note = bySeed(57, 72) const note = bySeed(57, 72)
const volume = bySeed(8, 10) const volume = bySeed(8, 10)
sfx(4, note, 4, 0, volume, 0); sfx(4, note, 4, 0, volume, 0)
} }
function handleMorse() { function handleMorse() {
@ -271,8 +276,8 @@ function handleMorse() {
key.buffer.length > 0 && key.buffer.length > 0 &&
now - key.upAt > IDLE_TIMEOUT now - key.upAt > IDLE_TIMEOUT
) { ) {
if (morseTable[key.buffer]) { if (morseToLetter[key.buffer]) {
destroyEnemiesByLetter(morseTable[key.buffer]) destroyEnemiesByLetter(morseToLetter[key.buffer])
} }
key.buffer = '' key.buffer = ''
} }
@ -380,8 +385,7 @@ function spawnEnemies() {
} }
arena.wave += 1 arena.wave += 1
arena.waveSeed = (Math.sin(arena.wave * 91.17) * 10000) % 1; arena.waveSeed = (Math.sin(arena.wave * 91.17) * 10000) % 1
const enemyCount = 1 + Math.floor(arena.wave / 2) const enemyCount = 1 + Math.floor(arena.wave / 2)