Spaces:
Running
Running
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; | |