document.addEventListener('DOMContentLoaded', function () { let students = []; let intervalId; let isRunning = false; let audio = new Audio('path/to/your/music.mp3'); // 自定义音乐文件路径 // 读取Excel文件 document.getElementById('file-upload').addEventListener('change', function (e) { const file = e.target.files[0]; const reader = new FileReader(); reader.onload = function (event) { const data = new Uint8Array(event.target.result); const workbook = XLSX.read(data, { type: 'array' }); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; const json = XLSX.utils.sheet_to_json(worksheet); students = json.map(row => ({ name: row['姓名'], points: row['积分'] ? parseFloat(row['积分']) : 0 })); document.querySelector('.upload-button').innerText = file.name; // 显示文件名在按钮上 }; reader.readAsArrayBuffer(file); }); // 随机点名 function startRandomName() { if (students.length === 0) return; isRunning = true; intervalId = setInterval(() => { const selectedStudent = weightedRandomSelection(); document.getElementById('nameDisplay').innerText = selectedStudent.name; }, 100); audio.play(); // 开始播放音乐 } function stopRandomName() { clearInterval(intervalId); isRunning = false; const selectedName = document.getElementById('nameDisplay').innerText; const selectedStudent = students.find(student => student.name === selectedName); if (selectedStudent) { handleStudentAttendance(selectedStudent); } audio.pause(); // 停止播放音乐 audio.currentTime = 0; // 重置音乐播放时间 } // 处理学生到场与表现 function handleStudentAttendance(student) { const isPresent = confirm(`${student.name} 是否到场?`); if (!isPresent) { student.points -= 1; alert(`${student.name} 未到场,扣1分。当前积分:${student.points}`); } else { const answeredCorrectly = confirm(`${student.name} 是否准确回答问题?`); if (!answeredCorrectly) { student.points += 0.5; alert(`${student.name} 回答错误,默认得分:0.5。当前积分:${student.points}`); } else { const score = parseFloat(prompt(`${student.name} 回答问题得分(0.5-3分):`)); if (!isNaN(score) && score >= 0.5 && score <= 3) { student.points += score; alert(`${student.name} 回答正确,得分:${score}。当前积分:${student.points}`); } else { student.points += 0.5; alert(`${student.name} 输入无效,默认得分:0.5。当前积分:${student.points}`); } triggerRandomEvents(student); } } } // 触发随机事件 function triggerRandomEvents(student) { const randomEvent = Math.random(); if (randomEvent < 0.5) { // 50%的触发几率 student.points *= 2; alert(`${student.name} 触发双倍积分!当前积分:${student.points}`); } else if (randomEvent < 0.2) { alert(`${student.name} 触发点名转移权!下次可以选择不回答问题。`); } } // 开始/结束按钮点击事件 window.clickButton = function (button) { if (isRunning) { stopRandomName(); button.innerText = '开始'; } else { startRandomName(); button.innerText = '结束'; } }; // 权重随机选择与疯狂星期四加成 function weightedRandomSelection() { const totalWeight = students.reduce((sum, student) => sum + (1 / (student.points + 1)), 0); let random = Math.random() * totalWeight; for (const student of students) { random -= (1 / (student.points + 1)); if (random <= 0) { return student; } } return students[students.length - 1]; } function applyThursdayBonus() { const today = new Date(); if (today.getDay() === 4) { // 星期四 students.forEach(student => { if (student.points % 50 === 0) { student.points *= 2; } }); } } applyThursdayBonus(); module.exports = { startRandomName, stopRandomName, handleStudentAttendance, weightedRandomSelection, applyThursdayBonus }; });