Widget:520Jeopardy: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 4: | Line 4: | ||
==Usage== | ==Usage== | ||
<nowiki>{{#widget:520Jeapordy}}</nowiki> | <nowiki>{{#widget:520Jeapordy}}</nowiki> | ||
</noinclude><includeonly><div id=" | </noinclude><includeonly><div id="jep-container"> | ||
<style> | <style> | ||
.jep * { margin: 0; padding: 0; box-sizing: border-box; } | .jep-game * { margin: 0; padding: 0; box-sizing: border-box; } | ||
.jep { font-family: Arial, sans-serif; background: linear-gradient(135deg, rgb(30,58,95) 0%, rgb(12,25,41) 100%) | .jep-game { font-family: Arial, sans-serif; background: linear-gradient(135deg, rgb(30,58,95) 0%, rgb(12,25,41) 100%); padding: 20px; border-radius: 8px; } | ||
.jep . | .jep-game .container { max-width: 1200px; margin: 0 auto; } | ||
.jep | .jep-game .title { text-align: center; color: rgb(251,191,36); font-size: 2rem; font-weight: bold; margin-bottom: 8px; } | ||
. | .jep-game .subtitle { text-align: center; color: rgb(147,197,253); margin-bottom: 15px; font-size: 0.9rem; } | ||
.jep . | .jep-game .scoreboard { display: flex; justify-content: center; gap: 30px; margin-bottom: 15px; } | ||
.jep . | .jep-game .team { background: rgb(30,64,175); padding: 10px 20px; border-radius: 8px; text-align: center; } | ||
.jep . | .jep-game .team.active { box-shadow: 0 0 15px rgb(251,191,36); } | ||
.jep . | .jep-game .team h3 { color: white; margin-bottom: 5px; font-size: 0.95rem; } | ||
.jep . | .jep-game .team .score { font-size: 1.4rem; font-weight: bold; } | ||
.jep-game .score-pos { color: rgb(74,222,128); } | |||
.jep . | .jep-game .score-neg { color: rgb(248,113,113); } | ||
.jep-game .turn-indicator { text-align: center; color: rgb(251,191,36); font-size: 1rem; margin-bottom: 12px; } | |||
.jep .neg { color: rgb(248,113,113); } | .jep-game .board { display: grid; grid-template-columns: repeat(6, 1fr); gap: 5px; margin-bottom: 15px; } | ||
.jep . | .jep-game .cat-header { background: rgb(30,64,175); color: white; padding: 10px 5px; text-align: center; font-weight: bold; font-size: 0.8rem; border-radius: 5px 5px 0 0; min-height: 50px; display: flex; align-items: center; justify-content: center; } | ||
.jep . | .jep-game .cell { background: rgb(37,99,235); color: rgb(251,191,36); padding: 15px 5px; text-align: center; font-size: 1.2rem; font-weight: bold; border-radius: 5px; cursor: pointer; border: none; width: 100%; } | ||
.jep .cat { background: rgb(30,64,175); color: white; padding: | .jep-game .cell:hover:not(.used) { background: rgb(59,130,246); } | ||
.jep . | .jep-game .cell.used { background: rgb(30,58,95); color: rgb(30,58,95); cursor: default; } | ||
.jep . | .jep-game .btn-reset { background: rgb(220,38,38); color: white; padding: 8px 16px; border-radius: 5px; font-weight: bold; cursor: pointer; border: none; display: block; margin: 0 auto; } | ||
.jep-game .btn-reset:hover { background: rgb(185,28,28); } | |||
.jep . | .jep-game .btn-mute { background: rgb(30,64,175); color: white; padding: 8px 12px; border-radius: 5px; border: none; cursor: pointer; font-size: 1.1rem; margin-left: 10px; } | ||
.jep . | .jep-game .tips { text-align: center; color: rgb(147,197,253); font-size: 0.75rem; margin-top: 10px; } | ||
.jep .mute { | .jep-game .question-view { background: rgb(30,64,175); border-radius: 8px; padding: 20px; color: white; } | ||
.jep . | .jep-game .q-header { text-align: center; margin-bottom: 15px; } | ||
.jep-game .q-category { display: inline-block; background: rgb(251,191,36); color: rgb(30,58,95); padding: 5px 15px; border-radius: 15px; font-weight: bold; font-size: 0.9rem; } | |||
.jep . | .jep-game .q-team { color: rgb(251,191,36); margin-top: 8px; } | ||
.jep . | .jep-game .q-timer { text-align: center; margin-bottom: 12px; } | ||
.jep . | .jep-game .timer-badge { display: inline-block; padding: 6px 16px; border-radius: 15px; font-size: 1.2rem; font-weight: bold; background: rgb(251,191,36); color: rgb(30,58,95); } | ||
.jep-game .timer-badge.warning { background: rgb(220,38,38); color: white; } | |||
.jep-game .scenario-box { background: rgb(29,78,216); border-radius: 6px; padding: 12px; margin-bottom: 10px; } | |||
.jep . | .jep-game .scenario-box h4 { color: rgb(251,191,36); margin-bottom: 6px; font-size: 0.9rem; } | ||
.jep . | .jep-game .scenario-box p { font-size: 0.95rem; line-height: 1.4; } | ||
.jep . | .jep-game .question-box { background: rgb(37,99,235); border-radius: 6px; padding: 12px; margin-bottom: 10px; } | ||
.jep . | .jep-game .question-box h4 { color: rgb(251,191,36); margin-bottom: 6px; font-size: 0.9rem; } | ||
.jep . | .jep-game .question-box p { font-size: 1rem; font-weight: 600; } | ||
.jep . | .jep-game .answer-box { background: rgb(22,101,52); border-radius: 6px; padding: 12px; margin-bottom: 10px; } | ||
.jep-game .answer-box h4 { color: rgb(251,191,36); margin-bottom: 6px; font-size: 0.9rem; } | |||
.jep . | .jep-game .answer-box p { font-size: 0.95rem; line-height: 1.4; } | ||
. | .jep-game .btn-group { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: 15px; } | ||
.jep . | .jep-game .btn { padding: 10px 20px; border-radius: 5px; font-weight: bold; cursor: pointer; border: none; font-size: 0.9rem; } | ||
.jep . | .jep-game .btn-reveal { background: rgb(251,191,36); color: rgb(30,58,95); } | ||
.jep . | .jep-game .btn-reveal:hover { background: rgb(252,211,77); } | ||
.jep . | .jep-game .btn-correct { background: rgb(34,197,94); color: white; } | ||
.jep . | .jep-game .btn-correct:hover { background: rgb(22,163,74); } | ||
.jep . | .jep-game .btn-wrong { background: rgb(239,68,68); color: white; } | ||
.jep-game .btn-wrong:hover { background: rgb(220,38,38); } | |||
.jep . | .jep-game .game-over { text-align: center; padding: 30px; } | ||
.jep . | .jep-game .game-over h1 { font-size: 2rem; color: rgb(251,191,36); margin-bottom: 15px; } | ||
.jep . | .jep-game .game-over .final { font-size: 1.2rem; color: white; margin-bottom: 10px; } | ||
.jep . | .jep-game .game-over .winner { font-size: 1.5rem; color: rgb(251,191,36); font-weight: bold; margin-bottom: 20px; } | ||
.jep . | .jep-hidden { display: none !important; } | ||
.jep | |||
</style> | </style> | ||
<div class="jep"> | <div class="jep-game"> | ||
<div id="jepBoardView" class="container"> | |||
<h1 class="title">🏥 Nursing Pharmacology Jeopardy</h1> | |||
<p class="subtitle">NSG 520 - Pathophysiology and Pharmacology</p> | |||
<div class="scoreboard"> | |||
< | <div class="team active" id="jepTeam1"><h3>Team 1</h3><div class="score score-pos" id="jepScore1">$0</div></div> | ||
<div class="team" id="jepTeam2"><h3>Team 2</h3><div class="score score-pos" id="jepScore2">$0</div></div> | |||
</div> | |||
<p class="turn-indicator" id="jepTurn">🎯 Team 1's Turn to Pick</p> | |||
<div class="board" id="jepBoard"></div> | |||
<div style="text-align:center;"> | |||
<button class="btn-reset" onclick="JepGame.resetGame()">Reset Game</button> | |||
<button class="btn-mute" id="jepMuteBtn" onclick="JepGame.toggleMute()">🔊</button> | |||
</div> | |||
<p class="tips">💡 Questions increase in difficulty with point value | 🎵 Sound effects included</p> | |||
</div> | |||
<div id="jepQuestionView" class="container jep-hidden"> | |||
<div class="question-view"> | |||
<div class="q-header"> | |||
<span class="q-category" id="jepQCat">Category - $000</span> | |||
<p class="q-team" id="jepQTeam">Team 1's Turn</p> | |||
</div> | </div> | ||
<div class="q-timer"><span class="timer-badge" id="jepTimer">⏱️ 30s</span></div> | |||
<div class=" | <div class="scenario-box"><h4>📋 Scenario:</h4><p id="jepScenario"></p></div> | ||
<div class="question-box"><h4>❓ Question:</h4><p id="jepQuestion"></p></div> | |||
<div id="jepAnswerBox" class="answer-box jep-hidden"><h4>✅ Answer:</h4><p id="jepAnswer"></p></div> | |||
<div class="btn-group" id="jepButtons"> | |||
<button class="btn btn-reveal" onclick="JepGame.showAnswer()">Reveal Answer</button> | |||
</div> | </div> | ||
</div> | </div> | ||
</div> | |||
<div id="jepGameOverView" class="container jep-hidden"> | |||
<div class="question-view game-over"> | |||
<h1>🏆 Game Over!</h1> | |||
<div class="final" id="jepFinalScores"></div> | |||
<div class="winner" id="jepWinner"></div> | |||
<button class="btn btn-reveal" onclick="JepGame.resetGame()">Play Again</button> | |||
</div> | </div> | ||
</div> | |||
</div> | </div> | ||
<script> | <script> | ||
var | var JepGame = (function() { | ||
var | var categories = [ | ||
{name:"Cardiovascular", | {name:"Cardiovascular",questions:[ | ||
{ | {pts:200,scenario:"A 58-year-old patient with heart failure is prescribed digoxin. Before administering the medication, the nurse checks the apical pulse and finds it to be 52 bpm.",question:"What should the nurse do?",answer:"Hold the medication and notify the healthcare provider. Digoxin should be held if the apical pulse is below 60 bpm in adults due to risk of toxicity and bradycardia."}, | ||
{ | {pts:400,scenario:"A patient taking warfarin for atrial fibrillation has an INR of 4.8. The patient reports dark, tarry stools and dizziness.",question:"What is the priority nursing intervention?",answer:"Hold warfarin, notify the provider immediately, and prepare for possible administration of Vitamin K. The patient shows signs of GI bleeding with supratherapeutic INR levels."}, | ||
{ | {pts:600,scenario:"A post-MI patient on a cardiac monitor suddenly shows a wide QRS complex rhythm at 180 bpm with no detectable pulse.",question:"What is this rhythm and what is the immediate action?",answer:"Ventricular tachycardia (pulseless VT). Begin CPR immediately and prepare for defibrillation. This is a shockable rhythm requiring immediate intervention per ACLS protocol."}, | ||
{ | {pts:800,scenario:"A patient with chronic heart failure is started on carvedilol. Two weeks later, the patient reports increased shortness of breath and weight gain of 5 lbs.",question:"Why might this occur and what should the nurse assess?",answer:"Beta-blockers can initially worsen heart failure symptoms before providing long-term benefit. Assess for fluid retention, monitor daily weights, lung sounds, and edema."}, | ||
{ | {pts:1000,scenario:"A hypertensive patient on lisinopril develops a persistent dry cough. The provider switches to losartan.",question:"What is the nurse's best explanation for this change?",answer:"ACE inhibitors like lisinopril can cause dry cough due to bradykinin accumulation. ARBs like losartan work similarly but don't cause bradykinin buildup, so cough is not a side effect."} | ||
]}, | ]}, | ||
{name:"Pain Mgmt", | {name:"Pain Mgmt",questions:[ | ||
{ | {pts:200,scenario:"A post-surgical patient rates their pain as 7/10 and requests PRN morphine. The last dose was given 3 hours ago, ordered every 4 hours.",question:"What is the appropriate nursing action?",answer:"Offer non-pharmacological interventions (repositioning, ice/heat, relaxation) and reassess in 1 hour. Cannot give morphine until 4-hour interval has passed."}, | ||
{ | {pts:400,scenario:"An elderly patient with dementia is grimacing, guarding their abdomen, and has increased restlessness but cannot verbally report pain.",question:"What pain assessment tool should the nurse use?",answer:"Use a behavioral pain scale such as PAINAD (Pain Assessment in Advanced Dementia) or FLACC scale. Assess for nonverbal cues."}, | ||
{ | {pts:600,scenario:"A patient with chronic back pain has been on oxycodone for 6 months and now requires higher doses to achieve the same pain relief.",question:"What phenomenon is this, and how is it different from addiction?",answer:"This is tolerance - a physiological adaptation requiring higher doses. It differs from addiction, which involves compulsive use despite harm and loss of control."}, | ||
{ | {pts:800,scenario:"A patient receiving IV morphine via PCA pump has a respiratory rate of 8, is difficult to arouse, and has pinpoint pupils.",question:"What is occurring and what are the priority interventions?",answer:"Opioid overdose/toxicity. Stop PCA, stimulate patient, call for help, prepare naloxone (Narcan), support airway and breathing."}, | ||
{ | {pts:1000,scenario:"A patient with cancer pain is on around-the-clock MS Contin but still has breakthrough pain episodes.",question:"What medication regimen modification should the nurse anticipate?",answer:"Add immediate-release morphine for breakthrough pain, typically 10-15 percent of the total 24-hour dose."} | ||
]}, | ]}, | ||
{name:"Teaching", | {name:"Teaching",questions:[ | ||
{ | {pts:200,scenario:"A newly diagnosed diabetic patient needs insulin teaching. The patient appears anxious and keeps checking their phone.",question:"What should the nurse do before beginning education?",answer:"Assess readiness to learn. Address anxiety first, minimize distractions, and determine the patient's learning style and priorities."}, | ||
{ | {pts:400,scenario:"An elderly patient with newly prescribed warfarin has mild hearing loss and reads at a 6th-grade level.",question:"What teaching strategies should the nurse employ?",answer:"Face the patient when speaking, use simple language, provide written materials at appropriate reading level with large print, use teach-back method."}, | ||
{ | {pts:600,scenario:"A patient is being discharged on metformin for type 2 diabetes. They ask if they can drink alcohol on weekends.",question:"What patient education should the nurse provide?",answer:"Alcohol increases risk of lactic acidosis with metformin and can cause hypoglycemia. Recommend limiting alcohol and never drinking on empty stomach."}, | ||
{ | {pts:800,scenario:"A patient with CHF is being discharged. The nurse has 15 minutes to provide discharge teaching about medications, diet, activity, and warning signs.",question:"How should the nurse prioritize this teaching?",answer:"Focus on survival skills: daily weights (report 2+ lb gain), sodium restriction basics, medication names/times, and warning signs requiring immediate attention."}, | ||
{ | {pts:1000,scenario:"A 16-year-old with newly diagnosed epilepsy needs teaching about phenytoin. The mother wants to handle all medication administration.",question:"What developmental considerations should guide the nurse's approach?",answer:"Adolescents need autonomy. Include the teen in teaching, address concerns about appearance (gingival hyperplasia) and driving restrictions."} | ||
]}, | ]}, | ||
{name:"GI/Hepatic", | {name:"GI/Hepatic",questions:[ | ||
{ | {pts:200,scenario:"A patient with cirrhosis has a serum ammonia level of 95 mcg/dL (normal: 15-45). The patient is confused and has asterixis.",question:"What medication should the nurse anticipate and why?",answer:"Lactulose - it acidifies the colon, converting ammonia to ammonium which cannot be absorbed, and promotes bowel movements to eliminate ammonia."}, | ||
{ | {pts:400,scenario:"A patient post-cholecystectomy complains of severe right shoulder pain despite the surgery being abdominal.",question:"What causes this and what should the nurse do?",answer:"Referred pain from CO2 used during laparoscopic surgery irritating the diaphragm. Encourage ambulation to absorb the gas."}, | ||
{ | {pts:600,scenario:"A patient with peptic ulcer disease is prescribed omeprazole, clarithromycin, and amoxicillin for 14 days.",question:"What is this regimen treating and what teaching is essential?",answer:"H. pylori eradication (triple therapy). Complete entire course even if feeling better, take PPI before meals, return for follow-up testing."}, | ||
{ | {pts:800,scenario:"A patient with acute pancreatitis has NG tube to suction, IV fluids, and NPO status. The patient asks why they can't eat.",question:"What is the nurse's best explanation?",answer:"The pancreas needs rest to heal. Eating stimulates pancreatic enzyme secretion, which can worsen inflammation and pain."}, | ||
{ | {pts:1000,scenario:"A patient with Crohn's disease on long-term prednisone develops round face, central obesity, and blood glucose of 180 mg/dL.",question:"What is occurring and what patient education is needed?",answer:"Cushing syndrome from chronic corticosteroid use. Never stop medication abruptly, report signs of infection, monitor blood glucose."} | ||
]}, | ]}, | ||
{name:"Med Admin", | {name:"Med Admin",questions:[ | ||
{ | {pts:200,scenario:"A nurse is preparing to administer IV vancomycin. The pharmacy sends it to infuse over 30 minutes.",question:"What concern should the nurse have?",answer:"Vancomycin infused too rapidly causes Red Man Syndrome - flushing, hypotension, rash. Should infuse over at least 60 minutes."}, | ||
{ | {pts:400,scenario:"A patient's MAR shows potassium chloride 40 mEq IV ordered. The nurse receives the medication as a 40 mEq vial.",question:"What must the nurse verify before administration?",answer:"IV potassium must NEVER be given as bolus push - causes fatal arrhythmias. Verify diluted appropriately, infused via pump, max 10-20 mEq/hour."}, | ||
{ | {pts:600,scenario:"A nurse is to administer insulin lispro (Humalog) and insulin glargine (Lantus) to a diabetic patient before breakfast.",question:"How should these insulins be administered?",answer:"Give in SEPARATE syringes - Lantus should never be mixed with other insulins as it can alter the action of both."}, | ||
{ | {pts:800,scenario:"A patient on IV heparin drip has an aPTT of 120 seconds (therapeutic range 60-80). The patient now needs an invasive procedure.",question:"What should the nurse do?",answer:"Hold heparin infusion, notify provider. If urgent reversal needed, protamine sulfate is the antidote. Monitor for bleeding."}, | ||
{ | {pts:1000,scenario:"A patient receiving first dose of IV penicillin develops hives, wheezing, and BP drop to 80/50 after 5 minutes.",question:"What is occurring and list interventions in priority order?",answer:"Anaphylaxis. 1) Stop infusion, 2) Call for help, 3) Epinephrine IM, 4) Maintain airway, 5) IV fluids, 6) Diphenhydramine/corticosteroids."} | ||
]}, | ]}, | ||
{name:"Pathophys", | {name:"Pathophys",questions:[ | ||
{ | {pts:200,scenario:"A patient with uncontrolled diabetes has blood glucose of 450 mg/dL, breathing rapidly and deeply, and fruity-smelling breath.",question:"What condition is this and what causes these symptoms?",answer:"Diabetic Ketoacidosis (DKA). Lack of insulin causes fat breakdown producing ketones. Metabolic acidosis triggers Kussmaul respirations."}, | ||
{ | {pts:400,scenario:"A patient with COPD on 2L nasal cannula has oxygen increased to 6L by family. The patient becomes increasingly drowsy.",question:"What is happening physiologically?",answer:"CO2 narcosis. COPD patients rely on hypoxic drive. High-flow oxygen removes this drive, causing hypoventilation and CO2 retention."}, | ||
{ | {pts:600,scenario:"A patient after thyroidectomy develops tingling around the mouth, muscle cramps, and positive Chvostek's sign.",question:"What complication is this and why does it occur?",answer:"Hypocalcemia due to damage to parathyroid glands during surgery. Treat with IV calcium gluconate."}, | ||
{ | {pts:800,scenario:"A trauma patient receives 6 units of PRBCs. Labs show: pH 7.28, K+ 6.2 mEq/L, calcium 7.8 mg/dL, hypothermia.",question:"What complications of massive transfusion are occurring?",answer:"Metabolic acidosis, hyperkalemia (K+ leaks from stored RBCs), hypocalcemia (citrate binds calcium), and hypothermia."}, | ||
{ | {pts:1000,scenario:"A patient with severe sepsis has: BP 78/40, HR 128, lactate 6 mmol/L, urine output 10 mL/hr for 2 hours.",question:"What is occurring and what are the priority interventions?",answer:"Septic shock. Fluid resuscitation (30 mL/kg), obtain cultures, broad-spectrum antibiotics within 1 hour, vasopressors if needed."} | ||
]} | ]} | ||
]; | ]; | ||
var | |||
function | var state = { | ||
function | scores: {team1: 0, team2: 0}, | ||
function | currentTeam: 1, | ||
function | answered: {}, | ||
function | current: null, | ||
function | timer: 30, | ||
function | timerInterval: null, | ||
muted: false, | |||
audioCtx: null | |||
}; | |||
function initAudio() { | |||
if (!state.audioCtx) { | |||
state.audioCtx = new (window.AudioContext || window.webkitAudioContext)(); | |||
function | } | ||
if (state.audioCtx.state === 'suspended') { | |||
function | state.audioCtx.resume(); | ||
} | |||
} | |||
function playTone(freq, dur, type, vol) { | |||
if (state.muted || !state.audioCtx) return; | |||
type = type || 'sine'; | |||
vol = vol || 0.3; | |||
var osc = state.audioCtx.createOscillator(); | |||
return{ | var gain = state.audioCtx.createGain(); | ||
osc.connect(gain); | |||
gain.connect(state.audioCtx.destination); | |||
osc.frequency.value = freq; | |||
osc.type = type; | |||
gain.gain.value = vol; | |||
gain.gain.exponentialRampToValueAtTime(0.01, state.audioCtx.currentTime + dur); | |||
osc.start(); | |||
osc.stop(state.audioCtx.currentTime + dur); | |||
} | |||
function playSelect() { | |||
initAudio(); | |||
playTone(523.25, 0.1, 'sine', 0.2); | |||
setTimeout(function() { playTone(659.25, 0.1, 'sine', 0.2); }, 50); | |||
setTimeout(function() { playTone(783.99, 0.15, 'sine', 0.2); }, 100); | |||
} | |||
function playCorrect() { | |||
initAudio(); | |||
var notes = [523.25, 659.25, 783.99, 1046.50]; | |||
for (var i = 0; i < notes.length; i++) { | |||
(function(idx) { | |||
setTimeout(function() { playTone(notes[idx], 0.2, 'sine', 0.25); }, idx * 100); | |||
})(i); | |||
} | |||
} | |||
function playWrong() { | |||
initAudio(); | |||
playTone(200, 0.3, 'sawtooth', 0.15); | |||
setTimeout(function() { playTone(150, 0.4, 'sawtooth', 0.15); }, 150); | |||
} | |||
function playReveal() { | |||
initAudio(); | |||
playTone(440, 0.1, 'triangle', 0.2); | |||
setTimeout(function() { playTone(554.37, 0.1, 'triangle', 0.2); }, 100); | |||
setTimeout(function() { playTone(659.25, 0.2, 'triangle', 0.2); }, 200); | |||
} | |||
function showView(viewId) { | |||
document.getElementById('jepBoardView').className = 'container jep-hidden'; | |||
document.getElementById('jepQuestionView').className = 'container jep-hidden'; | |||
document.getElementById('jepGameOverView').className = 'container jep-hidden'; | |||
document.getElementById(viewId).className = 'container'; | |||
} | |||
function buildBoard() { | |||
var board = document.getElementById('jepBoard'); | |||
board.innerHTML = ''; | |||
for (var c = 0; c < categories.length; c++) { | |||
var header = document.createElement('div'); | |||
header.className = 'cat-header'; | |||
header.textContent = categories[c].name; | |||
board.appendChild(header); | |||
} | |||
for (var q = 0; q < 5; q++) { | |||
for (var c = 0; c < categories.length; c++) { | |||
var cell = document.createElement('button'); | |||
var key = c + '-' + q; | |||
cell.className = 'cell' + (state.answered[key] ? ' used' : ''); | |||
cell.textContent = state.answered[key] ? '' : '$' + categories[c].questions[q].pts; | |||
cell.setAttribute('data-cat', c); | |||
cell.setAttribute('data-q', q); | |||
if (!state.answered[key]) { | |||
cell.onclick = function() { | |||
var catIdx = parseInt(this.getAttribute('data-cat')); | |||
var qIdx = parseInt(this.getAttribute('data-q')); | |||
selectQuestion(catIdx, qIdx); | |||
}; | |||
} | |||
board.appendChild(cell); | |||
} | |||
} | |||
} | |||
function updateScores() { | |||
var s1 = document.getElementById('jepScore1'); | |||
var s2 = document.getElementById('jepScore2'); | |||
var t1 = document.getElementById('jepTeam1'); | |||
var t2 = document.getElementById('jepTeam2'); | |||
var turn = document.getElementById('jepTurn'); | |||
s1.textContent = '$' + state.scores.team1; | |||
s1.className = 'score ' + (state.scores.team1 >= 0 ? 'score-pos' : 'score-neg'); | |||
s2.textContent = '$' + state.scores.team2; | |||
s2.className = 'score ' + (state.scores.team2 >= 0 ? 'score-pos' : 'score-neg'); | |||
t1.className = 'team' + (state.currentTeam === 1 ? ' active' : ''); | |||
t2.className = 'team' + (state.currentTeam === 2 ? ' active' : ''); | |||
turn.textContent = '🎯 Team ' + state.currentTeam + "'s Turn to Pick"; | |||
} | |||
function startTimer() { | |||
state.timer = 30; | |||
updateTimer(); | |||
state.timerInterval = setInterval(function() { | |||
state.timer--; | |||
updateTimer(); | |||
if (state.timer <= 0) { | |||
clearInterval(state.timerInterval); | |||
} | |||
}, 1000); | |||
} | |||
function stopTimer() { | |||
if (state.timerInterval) { | |||
clearInterval(state.timerInterval); | |||
state.timerInterval = null; | |||
} | |||
} | |||
function updateTimer() { | |||
var badge = document.getElementById('jepTimer'); | |||
badge.textContent = '⏱️ ' + state.timer + 's'; | |||
badge.className = 'timer-badge' + (state.timer <= 10 ? ' warning' : ''); | |||
} | |||
function selectQuestion(catIdx, qIdx) { | |||
var key = catIdx + '-' + qIdx; | |||
if (state.answered[key]) return; | |||
playSelect(); | |||
state.current = {cat: catIdx, q: qIdx}; | |||
var cat = categories[catIdx]; | |||
var question = cat.questions[qIdx]; | |||
document.getElementById('jepQCat').textContent = cat.name + ' - $' + question.pts; | |||
document.getElementById('jepQTeam').textContent = "Team " + state.currentTeam + "'s Turn"; | |||
document.getElementById('jepScenario').textContent = question.scenario; | |||
document.getElementById('jepQuestion').textContent = question.question; | |||
document.getElementById('jepAnswer').textContent = question.answer; | |||
document.getElementById('jepAnswerBox').className = 'answer-box jep-hidden'; | |||
document.getElementById('jepButtons').innerHTML = '<button class="btn btn-reveal" onclick="JepGame.showAnswer()">Reveal Answer</button>'; | |||
showView('jepQuestionView'); | |||
startTimer(); | |||
} | |||
function showAnswer() { | |||
stopTimer(); | |||
playReveal(); | |||
document.getElementById('jepAnswerBox').className = 'answer-box'; | |||
var question = categories[state.current.cat].questions[state.current.q]; | |||
document.getElementById('jepButtons').innerHTML = | |||
'<button class="btn btn-correct" onclick="JepGame.answer(true)">✓ Correct (+$' + question.pts + ')</button>' + | |||
'<button class="btn btn-wrong" onclick="JepGame.answer(false)">✗ Incorrect (-$' + question.pts + ')</button>'; | |||
} | |||
function answer(correct) { | |||
stopTimer(); | |||
if (correct) { | |||
playCorrect(); | |||
} else { | |||
playWrong(); | |||
} | |||
var question = categories[state.current.cat].questions[state.current.q]; | |||
var pts = question.pts; | |||
var key = state.current.cat + '-' + state.current.q; | |||
if (state.currentTeam === 1) { | |||
state.scores.team1 += correct ? pts : -pts; | |||
} else { | |||
state.scores.team2 += correct ? pts : -pts; | |||
} | |||
state.answered[key] = true; | |||
state.currentTeam = state.currentTeam === 1 ? 2 : 1; | |||
state.current = null; | |||
buildBoard(); | |||
updateScores(); | |||
if (Object.keys(state.answered).length === categories.length * 5) { | |||
setTimeout(showGameOver, 300); | |||
} else { | |||
showView('jepBoardView'); | |||
} | |||
} | |||
function showGameOver() { | |||
var winner; | |||
if (state.scores.team1 > state.scores.team2) { | |||
winner = "Team 1 Wins!"; | |||
} else if (state.scores.team2 > state.scores.team1) { | |||
winner = "Team 2 Wins!"; | |||
} else { | |||
winner = "It's a Tie!"; | |||
} | |||
document.getElementById('jepFinalScores').innerHTML = 'Team 1: $' + state.scores.team1 + '<br>Team 2: $' + state.scores.team2; | |||
document.getElementById('jepWinner').textContent = winner; | |||
showView('jepGameOverView'); | |||
} | |||
function resetGame() { | |||
stopTimer(); | |||
state.scores = {team1: 0, team2: 0}; | |||
state.currentTeam = 1; | |||
state.answered = {}; | |||
state.current = null; | |||
state.timer = 30; | |||
buildBoard(); | |||
updateScores(); | |||
showView('jepBoardView'); | |||
} | |||
function toggleMute() { | |||
state.muted = !state.muted; | |||
document.getElementById('jepMuteBtn').textContent = state.muted ? '🔇' : '🔊'; | |||
} | |||
function init() { | |||
buildBoard(); | |||
updateScores(); | |||
showView('jepBoardView'); | |||
} | |||
if (document.readyState === 'loading') { | |||
document.addEventListener('DOMContentLoaded', init); | |||
} else { | |||
init(); | |||
} | |||
return { | |||
showAnswer: showAnswer, | |||
answer: answer, | |||
resetGame: resetGame, | |||
toggleMute: toggleMute | |||
}; | |||
})(); | })(); | ||
</script> | </script> | ||
</div></includeonly> | </div></includeonly> | ||
Revision as of 01:00, 11 January 2026
Nursing Pharmacology Jeopardy Game for NSG 520 - Pathophysiology and Pharmacology
Usage
{{#widget:520Jeapordy}}