katakana / script.js
TangJicheng
chore: add katakana
7cfaaee
raw
history blame
4.36 kB
const fruitMap = {
'あ':'a',
'い':'i',
'う':'u',
'え':'e',
'お':'o',
'か':'ka',
'き':'ki',
'く':'ku',
'け':'ke',
'こ':'ko',
'さ':'sa',
'し':'shi',
'す':'su',
'せ':'se',
'そ':'so',
'た':'ta',
'ち':'chi',
'つ':'tsu',
'て':'te',
'と':'to',
'な':'na',
'に':'ni',
'ぬ':'nu',
'ね':'ne',
'の':'no',
'は':'ha',
'ひ':'hi',
'ふ':'fu',
'へ':'he',
'ほ':'ho',
'ま':'ma',
'み':'mi',
'む':'mu',
'め':'me',
'も':'mo',
'や':'ya',
'ゆ':'yu',
'よ':'yo',
'ら':'ra',
'り':'ri',
'る':'ru',
'れ':'re',
'ろ':'ro',
'わ':'wa',
'を':'wo',
'ん':'n'
};
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]]; // 交换
}
}
const totalWords = 4;
function getRandomSubmap(map, n) {
const keys = Object.keys(map);
const shuffledKeys = keys.sort(() => Math.random() - 0.5);
const newMap = {};
for (let i = 0; i < n && i < shuffledKeys.length; i++) {
const key = shuffledKeys[i];
newMap[key] = map[key];
}
return newMap;
}
function generateWords() {
newMap = getRandomSubmap(fruitMap, totalWords)
const chineseWords = Object.keys(newMap);
const englishWords = Object.values(newMap);
shuffleArray(chineseWords);
shuffleArray(englishWords);
const chineseContainer = document.getElementById('chineseWords');
const englishContainer = document.getElementById('englishWords');
chineseContainer.innerHTML = '';
englishContainer.innerHTML = '';
chineseWords.forEach(word => {
const button = document.createElement('button');
button.textContent = word;
button.className = 'button';
button.onclick = () => wordClicked(word, 'chinese', button); // 将按钮元素也传递给wordClicked函数
chineseContainer.appendChild(button);
});
englishWords.forEach(word => {
const button = document.createElement('button');
button.textContent = word;
button.className = 'button';
button.onclick = () => wordClicked(word, 'english', button); // 将按钮元素也传递给wordClicked函数
englishContainer.appendChild(button);
});
}
let selectedWords = [];
let matchCount = 0;
function checkMatch() {
const selected = [...selectedWords]; // 保存对selectedWords的引用
selectedWords = []; // 立即重置selectedWords数组
const [firstButton, secondButton] = selected;
if (firstButton.language === secondButton.language) {
alert('请选择不同语言的单词!');
resetButtonColor(firstButton);
resetButtonColor(secondButton);
} else {
const chineseWord = firstButton.language === 'chinese' ? firstButton.word : secondButton.word;
if (fruitMap[chineseWord] === (firstButton.language === 'english' ? firstButton.word : secondButton.word)) {
matchCount++;
firstButton.element.style.backgroundColor = 'green';
secondButton.element.style.backgroundColor = 'green';
if (matchCount === totalWords) {
alert('全部匹配成功!');
matchCount = 0;
generateWords();
}
} else {
alert('匹配失败,请重试!');
resetButtonColor(firstButton);
resetButtonColor(secondButton);
}
}
}
function resetButtonColor(button) {
// 只有当按钮颜色不是绿色时才重置颜色
if (button.element.style.backgroundColor !== 'green') {
button.element.style.backgroundColor = '';
}
}
function wordClicked(word, language, element) {
// 如果按钮颜色已经是绿色,则不允许用户选择
if (element.style.backgroundColor === 'green') {
return;
}
selectedWords.push({ word, language, element }); // 将元素也传递到对象中
element.style.backgroundColor = 'yellow'; // 当单词被选中时,改变按钮颜色为黄色
if (selectedWords.length === 2) {
checkMatch();
selectedWords = [];
}
}
window.onload = generateWords;