Compare commits

...

7 Commits

Author SHA1 Message Date
ba829f344f Entering HH in speaking game clears input 2024-09-02 20:33:23 -07:00
03c4fb9ea9 Add symbols category 2024-09-02 19:35:20 -07:00
3913dfa1fa Trim answers to avoid false negatives 2024-09-02 18:33:30 -07:00
7214994e33 Fix bug in submission
The common words are lowercase and our submit check didn't account for that
(because all the morse shorthands are uppercase)
2024-05-08 20:50:09 -07:00
6aa9895174 Default to no Farnsworth 2024-05-08 20:21:25 -07:00
6c4ed863cc Don't hotlink original site 2024-05-08 20:21:13 -07:00
4180fcca29 Add html for common words update 2024-05-08 20:21:01 -07:00
3 changed files with 39 additions and 7 deletions

View File

@ -8,7 +8,7 @@
<meta name="generator" content="Hugo 0.64.1"> <meta name="generator" content="Hugo 0.64.1">
<title>Little games to play with Morse Code in your browser · Caffeinspiration</title> <title>Little games to play with Morse Code in your browser · Caffeinspiration</title>
<link rel="shortcut icon" href="https://alexanderell.is/images/favicon.ico"> <link rel="shortcut icon" href="">
<link rel="stylesheet" href="morse-code_files/style.css"> <link rel="stylesheet" href="morse-code_files/style.css">
<link rel="stylesheet" href="morse-code_files/highlight.css"> <link rel="stylesheet" href="morse-code_files/highlight.css">
@ -130,8 +130,17 @@ up a letter faster.
<input type="radio" id="difficultyHard" name="difficulty" value="hard"> <input type="radio" id="difficultyHard" name="difficulty" value="hard">
<label for="difficultyHard">Hard (multiple short words)</label> <label for="difficultyHard">Hard (multiple short words)</label>
<br> <br>
<input type="radio" id="difficultyMorseEasy" name="difficulty" value="morse-easy">
<label for="difficultyMorseEasy">Morse easy (morse code shorthand)</label>
<br>
<input type="radio" id="difficultyMorseHard" name="difficulty" value="morse-hard">
<label for="difficultyMorseHard">Morse hard (multiple morse shorthand)</label>
<br>
<input type="radio" id="difficultyVeryHard" name="difficulty" value="really-hard"> <input type="radio" id="difficultyVeryHard" name="difficulty" value="really-hard">
<label for="difficultyVeryHard">Very Hard (multiple words)</label> <label for="difficultyVeryHard">Very Hard (multiple words)</label>
<br>
<input type="radio" id="difficultySymbols" name="difficulty" value="symbols">
<label for="difficultySymbols">(symbols)</label>
</div> </div>
<br> <br>
<br> <br>
@ -153,10 +162,10 @@ up a letter faster.
<br> <br>
<legend>Use the Farnsworth method?</legend> <legend>Use the Farnsworth method?</legend>
<div> <div>
<input type="radio" id="yesFarnsworth" name="farnsworth" value="yes" checked="checked"> <input type="radio" id="yesFarnsworth" name="farnsworth" value="yes">
<label for="yesFarnsworth">Yes</label> <label for="yesFarnsworth">Yes</label>
<br> <br>
<input type="radio" id="noFarnsworth" name="farnsworth" value="no"> <input type="radio" id="noFarnsworth" name="farnsworth" value="no" checked="checked">
<label for="noFarnsworth">No</label> <label for="noFarnsworth">No</label>
</div> </div>
<br> <br>

View File

@ -40,7 +40,8 @@ const MORSE_MAP = {
'!': '-.-.--', '!': '-.-.--',
'=': '-...-', '=': '-...-',
'+': '.-.-.', '+': '.-.-.',
'-': '-....-' '-': '-....-',
'clear': '........'
}; };
const REVERSE_MORSE_MAP = function() { const REVERSE_MORSE_MAP = function() {
@ -51,6 +52,15 @@ const REVERSE_MORSE_MAP = function() {
return reversed; return reversed;
}(); }();
const SYMBOLS = [
'.',
'?',
'!',
'=',
'+',
'-'
];
const COMMON_WORDS = { const COMMON_WORDS = {
"description": "Common English words.", "description": "Common English words.",
"commonWords": "commonWords":

View File

@ -125,6 +125,11 @@ function convertAsciiSentenceToMorse(asciiSentence) {
return splitSentence.map(convertAsciiWordToMorse); return splitSentence.map(convertAsciiWordToMorse);
} }
function getRandomSymbol() {
const randomIndex = Math.floor(Math.random() * SYMBOLS.length);
return SYMBOLS[randomIndex];
}
function getRandomLetter() { function getRandomLetter() {
const randomIndex = Math.floor(Math.random() * 26); const randomIndex = Math.floor(Math.random() * 26);
return Object.keys(MORSE_MAP)[randomIndex]; return Object.keys(MORSE_MAP)[randomIndex];
@ -231,6 +236,10 @@ function getTarget() {
case 'morse-hard': case 'morse-hard':
target = getRandomMorseWords(); target = getRandomMorseWords();
break; break;
case 'symbols':
target = getRandomSymbol();
console.log(target);
break;
default: default:
target = getRandomWords(); target = getRandomWords();
break; break;
@ -294,7 +303,7 @@ class ListeningGame {
} else { } else {
const enteredWord = this.wordInput.value; const enteredWord = this.wordInput.value;
// console.log('enteredWord: ', enteredWord, 'target: ', this.target); // console.log('enteredWord: ', enteredWord, 'target: ', this.target);
if (enteredWord.toUpperCase() == this.target) { if (enteredWord.trim().toUpperCase() == this.target.trim().toUpperCase()) {
// If they got the word, show message and switch event listener. // If they got the word, show message and switch event listener.
this.statusElement.textContent = 'Correct! Press enter to play a new round.'; this.statusElement.textContent = 'Correct! Press enter to play a new round.';
this.messageFound = true; this.messageFound = true;
@ -531,7 +540,11 @@ class InputGame {
// TODO: handle letter being done. // TODO: handle letter being done.
const currentLetterCombo = this.dotAndDashStack.join(''); const currentLetterCombo = this.dotAndDashStack.join('');
if (currentLetterCombo in REVERSE_MORSE_MAP) { if (currentLetterCombo in REVERSE_MORSE_MAP) {
if (REVERSE_MORSE_MAP[currentLetterCombo] == "clear") {
this.letterStack = [];
} else {
this.letterStack.push(REVERSE_MORSE_MAP[currentLetterCombo]); this.letterStack.push(REVERSE_MORSE_MAP[currentLetterCombo]);
}
} else { } else {
// Push a question mark // Push a question mark
this.letterStack.push('?'); this.letterStack.push('?');
@ -617,7 +630,7 @@ class InputGame {
// console.log('target: \'' + this.target + '\''); // console.log('target: \'' + this.target + '\'');
// console.log('this.letterStack.join(\'\'): \'' + this.letterStack.join('') + '\''); // console.log('this.letterStack.join(\'\'): \'' + this.letterStack.join('') + '\'');
// console.log(this.letterStack.join('') == this.target); // console.log(this.letterStack.join('') == this.target);
if (this.letterStack.join('') == this.target) { if (this.letterStack.join('').toUpperCase() == this.target.toUpperCase()) {
// console.log('match!'); // console.log('match!');
// Clear intervals // Clear intervals
clearTimeout(this.letterTimeout); clearTimeout(this.letterTimeout);