Widget:520FamilyFeud: Difference between revisions
Jump to navigation
Jump to search
Created page with "<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Family Feud: Nursing Edition</title> <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Oswald:wght@400;600;700&display=swap" rel="stylesheet"> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Oswald', sans-serif; backgro..." |
No edit summary |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
< | <noinclude> | ||
This widget displays the Family Feud Nursing Edition study game. | |||
< | |||
== Usage == | |||
<pre>{{#widget:FamilyFeudNursing}}</pre> | |||
</noinclude><includeonly><html> | |||
<div class="family-feud-nursing-game"> | |||
<style> | |||
.family-feud-nursing-game * { margin: 0; padding: 0; box-sizing: border-box; } | |||
.family-feud-nursing-game { | |||
font-family: 'Oswald', sans-serif; | |||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%); | |||
min-height: 700px; | |||
height: 700px; | |||
color: white; | |||
padding: 20px; | |||
border-radius: 12px; | |||
position: relative; | |||
overflow: hidden; | |||
} | |||
.family-feud-nursing-game .ff-container { max-width: 1000px; margin: 0 auto; height: 100%; } | |||
.family-feud-nursing-game .ff-title { text-align: center; margin-bottom: 15px; } | |||
.family-feud-nursing-game .ff-title h1 { | |||
font-family: 'Bebas Neue', sans-serif; | |||
font-size: 2.8rem; | |||
background: linear-gradient(180deg, #ffd700, #ff8c00, #ff4500); | |||
-webkit-background-clip: text; | |||
-webkit-text-fill-color: transparent; | |||
background-clip: text; | |||
letter-spacing: 6px; | |||
} | |||
.family-feud-nursing-game .ff-subtitle { font-size: 1.1rem; color: #00d4ff; letter-spacing: 4px; } | |||
.family-feud-nursing-game .ff-steve { | |||
display: flex; align-items: center; gap: 15px; | |||
background: linear-gradient(145deg, #2d2d44, #1a1a2e); | |||
border-radius: 15px; padding: 15px; margin-bottom: 15px; | |||
border: 2px solid #ffd700; | |||
} | |||
.family-feud-nursing-game .ff-steve-avatar { | |||
width: 60px; height: 60px; | |||
background: linear-gradient(135deg, #ffd700, #ff8c00); | |||
border-radius: 50%; display: flex; align-items: center; | |||
justify-content: center; font-size: 2rem; border: 3px solid #fff; | |||
flex-shrink: 0; | |||
} | |||
.family-feud-nursing-game .ff-steve-avatar.ff-happy { animation: ffHappy 0.5s ease-out; } | |||
.family-feud-nursing-game .ff-steve-avatar.ff-shocked { animation: ffShock 0.5s ease-out; } | |||
@keyframes ffHappy { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.2) rotate(10deg); } } | |||
@keyframes ffShock { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.3) rotate(-10deg); } } | |||
.family-feud-nursing-game .ff-steve-name { font-family: 'Bebas Neue', sans-serif; color: #ffd700; letter-spacing: 2px; font-size: 0.9rem; } | |||
.family-feud-nursing-game .ff-steve-dialogue { font-size: 1.1rem; line-height: 1.3; margin-top: 3px; } | |||
.family-feud-nursing-game .ff-scores { display: flex; justify-content: center; gap: 20px; margin-bottom: 15px; } | |||
.family-feud-nursing-game .ff-score-box { | |||
background: linear-gradient(145deg, #0f3460, #16213e); | |||
padding: 10px 30px; border-radius: 12px; border: 2px solid #00d4ff; text-align: center; | |||
} | |||
.family-feud-nursing-game .ff-score-label { font-size: 0.75rem; color: #00d4ff; text-transform: uppercase; letter-spacing: 2px; } | |||
.family-feud-nursing-game .ff-score-value { font-family: 'Bebas Neue', sans-serif; font-size: 2rem; color: #ffd700; } | |||
.family-feud-nursing-game .ff-strikes { display: flex; justify-content: center; gap: 12px; margin-bottom: 15px; } | |||
.family-feud-nursing-game .ff-strike { | |||
width: 60px; height: 60px; background: #1a1a2e; border: 3px solid #333; | |||
border-radius: 10px; display: flex; align-items: center; justify-content: center; | |||
font-size: 2.2rem; color: transparent; | |||
} | |||
.family-feud-nursing-game .ff-strike.ff-active { | |||
background: linear-gradient(135deg, #ff0000, #8b0000); | |||
border-color: #ff4444; color: #fff; | |||
animation: ffStrikeFlash 0.3s ease-out; | |||
} | |||
@keyframes ffStrikeFlash { 0% { transform: scale(1.4); } 100% { transform: scale(1); } } | |||
.family-feud-nursing-game .ff-x-overlay, .family-feud-nursing-game .ff-ding-overlay { | |||
position: absolute; top: 0; left: 0; width: 100%; height: 100%; | |||
display: none; align-items: center; justify-content: center; z-index: 50; | |||
pointer-events: none; border-radius: 12px; | |||
} | |||
.family-feud-nursing-game .ff-x-overlay { background: rgba(139, 0, 0, 0.9); } | |||
.family-feud-nursing-game .ff-x-overlay.ff-show, .family-feud-nursing-game .ff-ding-overlay.ff-show { display: flex; animation: ffOverlayFade 1s forwards; } | |||
.family-feud-nursing-game .ff-ding-overlay { background: rgba(0, 100, 0, 0.8); } | |||
.family-feud-nursing-game .ff-ding-overlay.ff-show { animation: ffOverlayFade 0.7s forwards; } | |||
@keyframes ffOverlayFade { 0%, 60% { opacity: 1; } 100% { opacity: 0; } } | |||
.family-feud-nursing-game .ff-big-x { font-size: 15rem; color: #fff; font-family: 'Bebas Neue', sans-serif; animation: ffPopIn 0.2s ease-out; } | |||
.family-feud-nursing-game .ff-ding-text { font-size: 12rem; color: #90EE90; font-family: 'Bebas Neue', sans-serif; animation: ffPopIn 0.2s ease-out; } | |||
@keyframes ffPopIn { 0% { transform: scale(0); } 100% { transform: scale(1); } } | |||
.family-feud-nursing-game .ff-board { | |||
background: linear-gradient(180deg, #1a237e, #0d47a1); | |||
border-radius: 15px; padding: 20px; margin-bottom: 15px; | |||
border: 4px solid #ffd700; | |||
} | |||
.family-feud-nursing-game .ff-question { | |||
text-align: center; margin-bottom: 15px; padding: 12px; | |||
background: rgba(0,0,0,0.4); border-radius: 10px; border: 2px solid #ffd700; | |||
} | |||
.family-feud-nursing-game .ff-category { font-size: 0.8rem; color: #00d4ff; text-transform: uppercase; letter-spacing: 2px; margin-bottom: 6px; } | |||
.family-feud-nursing-game .ff-question-text { font-size: 1.2rem; line-height: 1.3; } | |||
.family-feud-nursing-game .ff-answers { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; } | |||
.family-feud-nursing-game .ff-answer { | |||
background: linear-gradient(145deg, #0d47a1, #1565c0); | |||
border: 2px solid #2196f3; border-radius: 8px; padding: 10px 12px; | |||
display: flex; justify-content: space-between; align-items: center; min-height: 48px; | |||
} | |||
.family-feud-nursing-game .ff-answer.ff-revealed { | |||
background: linear-gradient(145deg, #ffd700, #ff8c00); | |||
border-color: #fff; animation: ffReveal 0.5s ease-out; | |||
} | |||
@keyframes ffReveal { 0% { transform: rotateX(90deg); } 100% { transform: rotateX(0); } } | |||
.family-feud-nursing-game .ff-answer-num { font-family: 'Bebas Neue', sans-serif; font-size: 1.5rem; color: #ffd700; width: 30px; text-align: center; } | |||
.family-feud-nursing-game .ff-answer.ff-revealed .ff-answer-num { color: #1a1a2e; } | |||
.family-feud-nursing-game .ff-answer-text { flex: 1; font-size: 0.9rem; text-align: center; text-transform: uppercase; letter-spacing: 1px; } | |||
.family-feud-nursing-game .ff-answer.ff-revealed .ff-answer-text { color: #1a1a2e; font-weight: 700; } | |||
.family-feud-nursing-game .ff-answer-pts { font-family: 'Bebas Neue', sans-serif; font-size: 1.4rem; color: #00d4ff; width: 40px; text-align: center; } | |||
.family-feud-nursing-game .ff-answer.ff-revealed .ff-answer-pts { color: #1a1a2e; } | |||
.family-feud-nursing-game .ff-input-area { display: flex; gap: 10px; justify-content: center; margin-bottom: 15px; } | |||
.family-feud-nursing-game .ff-input { | |||
flex: 1; max-width: 400px; padding: 10px 18px; font-size: 1.1rem; | |||
font-family: 'Oswald', sans-serif; border: 2px solid #00d4ff; border-radius: 50px; | |||
background: rgba(255,255,255,0.1); color: #fff; text-align: center; | |||
text-transform: uppercase; letter-spacing: 2px; outline: none; | |||
} | |||
.family-feud-nursing-game .ff-input:focus { border-color: #ffd700; box-shadow: 0 0 15px rgba(255,215,0,0.4); } | |||
.family-feud-nursing-game .ff-input::placeholder { color: rgba(255,255,255,0.5); } | |||
.family-feud-nursing-game .ff-submit { | |||
padding: 10px 30px; font-family: 'Bebas Neue', sans-serif; font-size: 1.2rem; | |||
background: linear-gradient(145deg, #ffd700, #ff8c00); border: none; | |||
border-radius: 50px; color: #1a1a2e; cursor: pointer; letter-spacing: 2px; | |||
} | |||
.family-feud-nursing-game .ff-submit:hover { transform: scale(1.05); } | |||
.family-feud-nursing-game .ff-buttons { display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; } | |||
.family-feud-nursing-game .ff-btn { | |||
padding: 8px 18px; font-family: 'Oswald', sans-serif; font-size: 0.85rem; | |||
border: 2px solid; border-radius: 8px; cursor: pointer; text-transform: uppercase; | |||
} | |||
.family-feud-nursing-game .ff-btn-next { background: linear-gradient(145deg, #00d4ff, #0099cc); border-color: #00d4ff; color: #1a1a2e; } | |||
.family-feud-nursing-game .ff-btn-reveal { background: linear-gradient(145deg, #9c27b0, #7b1fa2); border-color: #9c27b0; color: #fff; } | |||
.family-feud-nursing-game .ff-btn-sound { background: linear-gradient(145deg, #4caf50, #388e3c); border-color: #4caf50; color: #fff; } | |||
.family-feud-nursing-game .ff-btn-restart { background: linear-gradient(145deg, #ff5722, #e64a19); border-color: #ff5722; color: #fff; } | |||
.family-feud-nursing-game .ff-btn:hover { transform: translateY(-2px); } | |||
/* Start and Game Over screens - positioned within container */ | |||
.family-feud-nursing-game .ff-start, .family-feud-nursing-game .ff-gameover { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
right: 0; | |||
bottom: 0; | |||
background: linear-gradient(135deg, #1a1a2e, #0f3460); | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
justify-content: center; | |||
z-index: 100; | |||
border-radius: 12px; | |||
} | |||
.family-feud-nursing-game .ff-start.ff-hidden { display: none; } | |||
.family-feud-nursing-game .ff-gameover { display: none; } | |||
.family-feud-nursing-game .ff-gameover.ff-show { display: flex; } | |||
.family-feud-nursing-game .ff-start-title { | |||
font-family: 'Bebas Neue', sans-serif; font-size: 3.5rem; | |||
background: linear-gradient(180deg, #ffd700, #ff8c00, #ff4500); | |||
-webkit-background-clip: text; -webkit-text-fill-color: transparent; | |||
letter-spacing: 8px; animation: ffPulse 2s infinite; | |||
} | |||
@keyframes ffPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.02); } } | |||
.family-feud-nursing-game .ff-start-sub { font-size: 1.4rem; color: #00d4ff; margin-bottom: 20px; letter-spacing: 4px; } | |||
.family-feud-nursing-game .ff-start-emoji { font-size: 5rem; margin-bottom: 20px; animation: ffWave 1s infinite; } | |||
@keyframes ffWave { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(5deg); } } | |||
.family-feud-nursing-game .ff-play-btn { | |||
padding: 15px 60px; font-family: 'Bebas Neue', sans-serif; font-size: 2rem; | |||
background: linear-gradient(145deg, #ffd700, #ff8c00); border: none; | |||
border-radius: 50px; color: #1a1a2e; cursor: pointer; letter-spacing: 4px; | |||
} | |||
.family-feud-nursing-game .ff-play-btn:hover { transform: scale(1.1); } | |||
.family-feud-nursing-game .ff-start-info { margin-top: 20px; text-align: center; color: rgba(255,255,255,0.7); max-width: 400px; line-height: 1.6; font-size: 0.95rem; } | |||
.family-feud-nursing-game .ff-final-score { font-family: 'Bebas Neue', sans-serif; font-size: 5rem; color: #ffd700; } | |||
.family-feud-nursing-game .ff-final-msg { font-size: 1.4rem; color: #00d4ff; margin-bottom: 20px; text-align: center; } | |||
.family-feud-nursing-game .ff-confetti { | |||
position: absolute; width: 10px; height: 10px; z-index: 90; | |||
animation: ffFall 3s linear forwards; | |||
} | |||
@keyframes ffFall { | |||
0% { transform: translateY(-50px) rotate(0); opacity: 1; } | |||
100% { transform: translateY(700px) rotate(720deg); opacity: 0; } | |||
} | |||
.family-feud-nursing-game .ff-progress { width: 100%; height: 6px; background: rgba(255,255,255,0.1); border-radius: 3px; margin-bottom: 12px; } | |||
.family-feud-nursing-game .ff-progress-fill { height: 100%; background: linear-gradient(90deg, #00d4ff, #ffd700); border-radius: 3px; transition: width 0.5s; } | |||
.family-feud-nursing-game .ff-game-content { display: none; } | |||
.family-feud-nursing-game .ff-game-content.ff-visible { display: block; } | |||
@media (max-width: 768px) { | |||
.family-feud-nursing-game .ff-title h1 { font-size: 2rem; } | |||
.family-feud-nursing-game .ff-answers { grid-template-columns: 1fr; } | |||
.family-feud-nursing-game .ff-steve { flex-direction: column; text-align: center; } | |||
.family-feud-nursing-game .ff-input-area { flex-direction: column; align-items: center; } | |||
.family-feud-nursing-game .ff-input { width: 100%; } | |||
.family-feud-nursing-game .ff-start-title { font-size: 2.5rem; } | |||
} | |||
</style> | |||
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Oswald:wght@400;600;700&display=swap" rel="stylesheet"> | |||
<!-- Overlays --> | |||
<div class="ff-x-overlay" id="ffXOverlay"><div class="ff-big-x">✖</div></div> | |||
<div class="ff-ding-overlay" id="ffDingOverlay"><div class="ff-ding-text">✓</div></div> | |||
<!-- Start Screen - inside main container --> | |||
<div class="ff-start" id="ffStart"> | |||
<div class="ff-start-title">FAMILY FEUD</div> | |||
<div class="ff-start-sub">✨ NURSING EDITION ✨</div> | |||
<div class="ff-start-emoji">🎤</div> | |||
<button class="ff-play-btn" onclick="FFGame.start()">PLAY!</button> | |||
<div class="ff-start-info"> | |||
Study for your NCLEX with Steve Harvey!<br><br> | |||
🎯 Cardiovascular, Pharmacology, Pain, Geriatrics & more<br> | |||
🔊 Sound effects included! | |||
</div> | </div> | ||
</div> | |||
<!-- Game Over Screen --> | |||
<div class="ff-gameover" id="ffGameOver"> | |||
<div class="ff-start-emoji">🏆</div> | |||
<div class="ff-final-score" id="ffFinalScore">0</div> | |||
<div class="ff-final-msg" id="ffFinalMsg"></div> | |||
<button class="ff-play-btn" onclick="FFGame.restart()">PLAY AGAIN!</button> | |||
</div> | |||
<!-- Game Content - hidden until play is clicked --> | |||
<div class="ff-game-content" id="ffGameContent"> | |||
<div class="ff-title"> | |||
<h1>FAMILY FEUD</h1> | |||
<div class="ff-subtitle">Nursing Edition</div> | |||
</div> | |||
<div class="ff-progress"><div class="ff-progress-fill" id="ffProgress" style="width:0%"></div></div> | |||
<div class="ff-steve"> | |||
<div class="ff-steve-avatar" id="ffSteve">🎤</div> | |||
<div> | |||
<div class="ff-steve-name">STEVE HARVEY</div> | |||
<div class="ff-steve-dialogue" id="ffDialogue">Welcome to Family Feud!</div> | |||
<div class=" | |||
</div> | </div> | ||
</div> | |||
<div class="ff-scores"> | |||
<div class="ff-score-box"> | |||
<div class=" | <div class="ff-score-label">Score</div> | ||
<div class=" | <div class="ff-score-value" id="ffScore">0</div> | ||
</div> | </div> | ||
<div class="ff-score-box"> | |||
<div class=" | <div class="ff-score-label">Round</div> | ||
<div class=" | <div class="ff-score-value" id="ffRound">1</div> | ||
</div> | </div> | ||
</div> | |||
<div class="ff-strikes"> | |||
<div class="ff-strike" id="ffStrike1">✖</div> | |||
<div class="ff-strike" id="ffStrike2">✖</div> | |||
<div class="ff-strike" id="ffStrike3">✖</div> | |||
</div> | |||
<div class="ff-board"> | |||
<div class="ff-question"> | |||
< | <div class="ff-category" id="ffCategory">LOADING</div> | ||
< | <div class="ff-question-text" id="ffQuestion">Loading...</div> | ||
</div> | </div> | ||
<div class="ff-answers" id="ffAnswers"></div> | |||
</div> | </div> | ||
< | <div class="ff-input-area"> | ||
<input type="text" class="ff-input" id="ffInput" placeholder="TYPE YOUR ANSWER..." autocomplete="off"> | |||
<button class="ff-submit" onclick="FFGame.submit()">SUBMIT</button> | |||
</div> | |||
<div class="ff-buttons"> | |||
<button class="ff-btn ff-btn-sound" id="ffSoundBtn" onclick="FFGame.toggleSound()">🔊 SOUND ON</button> | |||
<button class="ff-btn ff-btn-reveal" onclick="FFGame.revealAll()">REVEAL ALL</button> | |||
<button class="ff-btn ff-btn-next" onclick="FFGame.next()">NEXT →</button> | |||
<button class="ff-btn ff-btn-restart" onclick="FFGame.restart()">🔄 RESTART</button> | |||
</div> | |||
</div> | |||
</div> | |||
<script> | |||
(function() { | |||
var audioCtx = null; | |||
var soundEnabled = true; | |||
var currentQ = 0; | |||
var score = 0; | |||
var strikes = 0; | |||
var revealed = []; | |||
var intros = [ | |||
"Alright NURSING STUDENTS! Survey says... what's on the board?", | |||
"This is a GOOD ONE! Think like a nurse!", | |||
"Oh LAWD! This question is gonna test you!", | |||
"Top answers on the board! Show me what you got!", | |||
"You better KNOW THIS for your NCLEX!", | |||
"Survey says... name something a good nurse knows!" | |||
]; | |||
var correct = [ | |||
"GOOD ANSWER! GOOD ANSWER! 👏", | |||
"OH! Look at that! You know your stuff!", | |||
"YES! That's what I'm talking about!", | |||
"DING DING DING! You got it!", | |||
"BOOM! That's nursing knowledge!", | |||
"NICE ONE! Keep it going!" | |||
]; | |||
var wrong = [ | |||
"Ehhhh... That ain't up there! ❌", | |||
"Really? ...STRIKE!", | |||
"Ohhh no no no... STRIKE!", | |||
"What?! ...STRIKE!", | |||
"That's a strike! Come on now!", | |||
"Survey says... WRONG! ❌" | |||
]; | |||
var questions = [ | |||
{ category: "CARDIOVASCULAR PHARMACOLOGY", question: "Name a common side effect of beta-blockers that nurses should monitor.", answers: [ | |||
{ text: "Bradycardia", points: 35, keywords: ["bradycardia", "brady", "slow heart rate", "slow pulse", "low heart rate"] }, | |||
/ | { text: "Hypotension", points: 25, keywords: ["hypotension", "low blood pressure", "low bp", "decreased bp"] }, | ||
{ text: "Fatigue", points: 15, keywords: ["fatigue", "tired", "tiredness", "weakness", "lethargy"] }, | |||
{ text: "Bronchospasm", points: 12, keywords: ["bronchospasm", "bronchoconstriction", "wheezing", "breathing difficulty"] }, | |||
{ text: "Depression", points: 8, keywords: ["depression", "depressed", "mood changes"] }, | |||
{ text: "Cold Extremities", points: 5, keywords: ["cold extremities", "cold hands", "cold feet", "peripheral vasoconstriction"] } | |||
]}, | |||
{ category: "PAIN MANAGEMENT", question: "Name a NON-drug intervention for pain.", answers: [ | |||
{ text: "Heat/Cold Therapy", points: 30, keywords: ["heat therapy", "cold therapy", "ice pack", "warm compress", "heating pad", "cryotherapy"] }, | |||
] | { text: "Massage", points: 22, keywords: ["massage", "massage therapy", "therapeutic touch", "rubbing"] }, | ||
{ text: "Distraction", points: 18, keywords: ["distraction", "music therapy", "television", "talking", "diversion"] }, | |||
{ text: "Positioning", points: 12, keywords: ["positioning", "repositioning", "elevation", "elevate", "pillow support"] }, | |||
{ text: "Deep Breathing", points: 10, keywords: ["deep breathing", "breathing exercises", "relaxation", "relaxation techniques"] }, | |||
{ text: "Guided Imagery", points: 8, keywords: ["guided imagery", "visualization", "meditation", "imagery"] } | |||
]}, | |||
{ category: "GERIATRIC NURSING", question: "Name an age-related change affecting drug metabolism.", answers: [ | |||
{ text: "Decreased Liver Function", points: 32, keywords: ["decreased liver", "liver function", "hepatic function", "reduced liver"] }, | |||
{ text: "Reduced Kidney Function", points: 28, keywords: ["reduced kidney", "kidney function", "renal function", "decreased gfr", "renal impairment"] }, | |||
{ text: "Decreased Body Water", points: 15, keywords: ["decreased body water", "reduced body water", "dehydration", "less body water"] }, | |||
{ text: "Increased Body Fat", points: 12, keywords: ["increased body fat", "increased fat", "more body fat", "adipose tissue"] }, | |||
{ text: "Slower GI Motility", points: 8, keywords: ["slower gi", "decreased motility", "slow digestion", "gi motility", "gastric motility"] }, | |||
{ text: "Reduced Albumin", points: 5, keywords: ["reduced albumin", "decreased albumin", "low albumin", "hypoalbuminemia"] } | |||
} | ]}, | ||
} | { category: "PATIENT TEACHING", question: "Name an essential part of discharge teaching.", answers: [ | ||
{ text: "Medication Instructions", points: 28, keywords: ["medication instructions", "medication teaching", "drug instructions", "medicine instructions", "prescription instructions"] }, | |||
{ text: "Warning Signs", points: 24, keywords: ["warning signs", "red flags", "when to call", "return precautions", "danger signs", "emergency signs"] }, | |||
{ text: "Follow-up Appointments", points: 18, keywords: ["follow-up", "followup", "follow up appointment", "return visit", "next appointment"] }, | |||
{ text: "Written Instructions", points: 12, keywords: ["written instructions", "handout", "printed instructions", "discharge papers", "written materials"] }, | |||
{ text: "Teach-Back", points: 10, keywords: ["teach-back", "teach back", "return demonstration", "patient understanding", "verify understanding"] }, | |||
{ text: "Diet Instructions", points: 8, keywords: ["diet instructions", "dietary", "nutrition", "food restrictions", "eating instructions"] } | |||
]}, | |||
{ category: "LEFT HEART FAILURE", question: "Name a sign of LEFT-sided heart failure.", answers: [ | |||
{ text: "Shortness of Breath", points: 30, keywords: ["shortness of breath", "dyspnea", "difficulty breathing", "breathlessness", "hard to breathe"] }, | |||
{ text: "Lung Crackles", points: 25, keywords: ["crackles", "rales", "lung crackles", "pulmonary crackles", "lung sounds"] }, | |||
{ text: "Orthopnea", points: 18, keywords: ["orthopnea", "cant lay flat", "needs pillows", "difficulty lying flat"] }, | |||
{ text: "Pink Frothy Sputum", points: 12, keywords: ["pink frothy", "frothy sputum", "pink sputum", "pulmonary edema"] }, | |||
{ text: "Fatigue", points: 10, keywords: ["fatigue", "tired", "exhaustion", "weakness", "lethargy"] }, | |||
{ text: "Tachycardia", points: 5, keywords: ["tachycardia", "fast heart", "rapid pulse", "elevated heart rate", "racing heart"] } | |||
]}, | |||
{ category: "MEDICATION RIGHTS", question: "Name one of the 'Rights' of medication administration.", answers: [ | |||
{ text: "Right Patient", points: 20, keywords: ["right patient", "correct patient", "patient identification", "verify patient"] }, | |||
{ text: "Right Drug", points: 20, keywords: ["right drug", "right medication", "correct drug", "correct medication", "right medicine"] }, | |||
{ text: "Right Dose", points: 18, keywords: ["right dose", "correct dose", "right amount", "correct amount", "proper dose"] }, | |||
{ text: "Right Route", points: 15, keywords: ["right route", "correct route", "administration route", "proper route"] }, | |||
{ text: "Right Time", points: 14, keywords: ["right time", "correct time", "proper time", "scheduled time", "timing"] }, | |||
{ text: "Right Documentation", points: 13, keywords: ["right documentation", "documentation", "charting", "recording", "right record"] } | |||
]}, | |||
{ category: "ASTHMA DRUGS", question: "Name a medication class for asthma.", answers: [ | |||
{ text: "Beta-2 Agonists", points: 30, keywords: ["beta-2 agonist", "beta agonist", "albuterol", "bronchodilator", "saba", "laba"] }, | |||
{ text: "Corticosteroids", points: 25, keywords: ["corticosteroid", "steroid", "prednisone", "inhaled steroid", "glucocorticoid"] }, | |||
{ text: "Anticholinergics", points: 18, keywords: ["anticholinergic", "ipratropium", "atrovent", "tiotropium", "muscarinic antagonist"] }, | |||
{ text: "Leukotriene Inhibitors", points: 12, keywords: ["leukotriene", "montelukast", "singulair", "leukotriene modifier"] }, | |||
{ text: "Mast Cell Stabilizers", points: 10, keywords: ["mast cell", "cromolyn", "nedocromil", "mast cell stabilizer"] }, | |||
{ text: "Theophylline", points: 5, keywords: ["theophylline", "aminophylline", "methylxanthine", "xanthine"] } | |||
]}, | |||
{ category: "LIVER FAILURE", question: "Name a sign of hepatic encephalopathy.", answers: [ | |||
{ text: "Confusion", points: 30, keywords: ["confusion", "altered mental status", "disorientation", "altered consciousness", "mental status changes"] }, | |||
{ text: "Asterixis", points: 25, keywords: ["asterixis", "liver flap", "flapping tremor", "hand flapping"] }, | |||
{ text: "Ammonia Breath", points: 18, keywords: ["ammonia breath", "fetor hepaticus", "musty breath", "sweet breath"] }, | |||
{ text: "Sleep Changes", points: 12, keywords: ["sleep changes", "insomnia", "sleep reversal", "sleep disturbance", "day night reversal"] }, | |||
{ text: "Personality Changes", points: 10, keywords: ["personality changes", "behavior changes", "mood changes", "irritability"] }, | |||
{ text: "Slurred Speech", points: 5, keywords: ["slurred speech", "speech difficulty", "dysarthria", "difficulty speaking"] } | |||
]}, | |||
{ category: "HEARING LOSS CARE", question: "Name a nursing intervention for hearing-impaired patients.", answers: [ | |||
{ text: "Face the Patient", points: 28, keywords: ["face the patient", "face them", "eye contact", "look at patient", "face to face"] }, | |||
{ text: "Reduce Noise", points: 22, keywords: ["reduce noise", "quiet environment", "minimize noise", "background noise", "decrease noise"] }, | |||
{ text: "Speak Clearly", points: 18, keywords: ["speak clearly", "clear speech", "speak slowly", "enunciate", "articulate"] }, | |||
{ text: "Write Things Down", points: 14, keywords: ["write things down", "written communication", "write notes", "use paper", "writing"] }, | |||
{ text: "Check Hearing Aid", points: 10, keywords: ["check hearing aid", "hearing aid", "hearing device", "assistive device"] }, | |||
{ text: "Use Gestures", points: 8, keywords: ["use gestures", "gestures", "hand signals", "pointing", "nonverbal", "body language"] } | |||
]}, | |||
{ category: "INFECTION CONTROL", question: "Name a Standard Precaution.", answers: [ | |||
{ text: "Hand Hygiene", points: 30, keywords: ["hand hygiene", "hand washing", "wash hands", "hand sanitizer", "hand sanitizing"] }, | |||
{ text: "Gloves", points: 22, keywords: ["gloves", "wear gloves", "gloving", "disposable gloves"] }, | |||
{ text: "Gown", points: 16, keywords: ["gown", "isolation gown", "protective gown", "wear gown"] }, | |||
{ text: "Mask", points: 14, keywords: ["mask", "face mask", "n95", "surgical mask", "respirator"] }, | |||
{ text: "Sharps Disposal", points: 10, keywords: ["sharps disposal", "sharps container", "needle disposal", "sharp disposal", "needle safety"] }, | |||
{ text: "Cough Etiquette", points: 8, keywords: ["cough etiquette", "respiratory hygiene", "cover cough", "cover mouth", "respiratory etiquette"] } | |||
]} | |||
]; | |||
function initAudio() { | |||
if (!audioCtx) { audioCtx = new (window.AudioContext || window.webkitAudioContext)(); } | |||
if (audioCtx.state === 'suspended') { audioCtx.resume(); } | |||
} | |||
function playDing() { | |||
if (!soundEnabled || !audioCtx) return; | |||
var freqs = [880, 1108.73, 1318.51]; | |||
freqs.forEach(function(freq, i) { | |||
var osc = audioCtx.createOscillator(); | |||
var gain = audioCtx.createGain(); | |||
osc.connect(gain); gain.connect(audioCtx.destination); | |||
osc.type = 'sine'; osc.frequency.setValueAtTime(freq, audioCtx.currentTime); | |||
gain.gain.setValueAtTime(0, audioCtx.currentTime); | |||
gain.gain.linearRampToValueAtTime(0.3, audioCtx.currentTime + 0.01); | |||
gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.6); | |||
osc.start(audioCtx.currentTime + i * 0.05); | |||
osc.stop(audioCtx.currentTime + 0.6); | |||
}); | |||
} | |||
function playBuzzer() { | |||
if (!soundEnabled || !audioCtx) return; | |||
var osc1 = audioCtx.createOscillator(); | |||
var osc2 = audioCtx.createOscillator(); | |||
var gain = audioCtx.createGain(); | |||
osc1.connect(gain); osc2.connect(gain); gain.connect(audioCtx.destination); | |||
osc1.type = 'sawtooth'; osc2.type = 'square'; | |||
osc1.frequency.setValueAtTime(120, audioCtx.currentTime); | |||
osc2.frequency.setValueAtTime(123, audioCtx.currentTime); | |||
gain.gain.setValueAtTime(0.4, audioCtx.currentTime); | |||
gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.8); | |||
osc1.start(audioCtx.currentTime); osc2.start(audioCtx.currentTime); | |||
osc1.stop(audioCtx.currentTime + 0.8); osc2.stop(audioCtx.currentTime + 0.8); | |||
} | |||
function playReveal() { | |||
if (!soundEnabled || !audioCtx) return; | |||
var notes = [523.25, 659.25, 783.99, 1046.50]; | |||
notes.forEach(function(freq, i) { | |||
var osc = audioCtx.createOscillator(); | |||
var gain = audioCtx.createGain(); | |||
osc.connect(gain); gain.connect(audioCtx.destination); | |||
osc.type = 'sine'; osc.frequency.value = freq; | |||
gain.gain.setValueAtTime(0.2, audioCtx.currentTime + i * 0.1); | |||
gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + i * 0.1 + 0.3); | |||
osc.start(audioCtx.currentTime + i * 0.1); | |||
osc.stop(audioCtx.currentTime + i * 0.1 + 0.3); | |||
}); | |||
} | |||
function playApplause() { | |||
if (!soundEnabled || !audioCtx) return; | |||
var duration = 2; | |||
var bufferSize = audioCtx.sampleRate * duration; | |||
var buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate); | |||
var data = buffer.getChannelData(0); | |||
for (var i = 0; i < bufferSize; i++) { | |||
var envelope = Math.sin((i / bufferSize) * Math.PI); | |||
data[i] = (Math.random() * 2 - 1) * envelope * 0.3; | |||
} | } | ||
var source = audioCtx.createBufferSource(); | |||
var gain = audioCtx.createGain(); | |||
var filter = audioCtx.createBiquadFilter(); | |||
source.buffer = buffer; | |||
filter.type = 'bandpass'; filter.frequency.value = 2000; filter.Q.value = 0.5; | |||
source.connect(filter); filter.connect(gain); gain.connect(audioCtx.destination); | |||
gain.gain.setValueAtTime(0.5, audioCtx.currentTime); | |||
source.start(); | |||
} | |||
function showSteve(text, mood) { | |||
var avatar = document.getElementById('ffSteve'); | |||
avatar.classList.remove('ff-happy', 'ff-shocked'); | |||
if (mood) avatar.classList.add('ff-' + mood); | |||
document.getElementById('ffDialogue').textContent = text; | |||
setTimeout(function() { avatar.classList.remove('ff-happy', 'ff-shocked'); }, 600); | |||
} | |||
function loadQuestion() { | |||
var q = questions[currentQ]; | |||
document.getElementById('ffCategory').textContent = q.category; | |||
document.getElementById('ffQuestion').textContent = q.question; | |||
document.getElementById('ffRound').textContent = currentQ + 1; | |||
document.getElementById('ffProgress').style.width = ((currentQ / questions.length) * 100) + '%'; | |||
strikes = 0; revealed = []; | |||
for (var i = 1; i <= 3; i++) document.getElementById('ffStrike' + i).classList.remove('ff-active'); | |||
var grid = document.getElementById('ffAnswers'); | |||
grid.innerHTML = ''; | |||
q.answers.forEach(function(a, i) { | |||
var slot = document.createElement('div'); | |||
slot.className = 'ff-answer'; | |||
slot.id = 'ffAnswer' + i; | |||
slot.innerHTML = '<div class="ff-answer-num">' + (i + 1) + '</div><div class="ff-answer-text">?????</div><div class="ff-answer-pts">??</div>'; | |||
grid.appendChild(slot); | |||
}); | |||
showSteve(intros[Math.floor(Math.random() * intros.length)]); | |||
document.getElementById('ffInput').value = ''; | |||
document.getElementById('ffInput').focus(); | |||
} | |||
function revealAnswer(index) { | |||
if (revealed.indexOf(index) !== -1) return; | |||
playDing(); | |||
var overlay = document.getElementById('ffDingOverlay'); | |||
overlay.classList.add('ff-show'); | |||
setTimeout(function() { overlay.classList.remove('ff-show'); }, 700); | |||
var q = questions[currentQ]; | |||
var a = q.answers[index]; | |||
var slot = document.getElementById('ffAnswer' + index); | |||
slot.classList.add('ff-revealed'); | |||
slot.innerHTML = '<div class="ff-answer-num">' + (index + 1) + '</div><div class="ff-answer-text">' + a.text + '</div><div class="ff-answer-pts">' + a.points + '</div>'; | |||
revealed.push(index); | |||
score += a.points; | |||
document.getElementById('ffScore').textContent = score; | |||
showSteve(correct[Math.floor(Math.random() * correct.length)], 'happy'); | |||
} | |||
function addStrike() { | |||
strikes++; | |||
document.getElementById('ffStrike' + strikes).classList.add('ff-active'); | |||
} | playBuzzer(); | ||
var overlay = document.getElementById('ffXOverlay'); | |||
overlay.classList.add('ff-show'); | |||
setTimeout(function() { overlay.classList.remove('ff-show'); }, 1000); | |||
showSteve(wrong[Math.floor(Math.random() * wrong.length)], 'shocked'); | |||
if (strikes >= 3) setTimeout(function() { FFGame.revealAll(); }, 1200); | |||
} | |||
function createConfetti() { | |||
var colors = ['#ffd700', '#ff8c00', '#00d4ff', '#ff4500', '#9c27b0', '#4caf50']; | |||
var container = document.querySelector('.family-feud-nursing-game'); | |||
for (var i = 0; i < 60; i++) { | |||
var c = document.createElement('div'); | |||
setTimeout(() | c.className = 'ff-confetti'; | ||
c.style.left = Math.random() * 100 + '%'; | |||
c.style.background = colors[Math.floor(Math.random() * colors.length)]; | |||
c.style.animationDelay = Math.random() * 2 + 's'; | |||
container.appendChild(c); | |||
setTimeout(function(el) { el.remove(); }, 4000, c); | |||
} | } | ||
} | |||
function | window.FFGame = { | ||
start: function() { | |||
initAudio(); | |||
if (!guess) return; | playReveal(); | ||
document.getElementById('ffStart').classList.add('ff-hidden'); | |||
document.getElementById('ffGameContent').classList.add('ff-visible'); | |||
loadQuestion(); | |||
}, | |||
q.answers.forEach((a, i) | submit: function() { | ||
if ( | var input = document.getElementById('ffInput'); | ||
var guess = input.value.trim().toLowerCase(); | |||
found = true; | if (!guess || guess.length < 3) return; // Minimum 3 characters | ||
var q = questions[currentQ]; | |||
var found = false; | |||
var foundIndex = -1; | |||
// Find the best match (prioritize exact matches and longer keywords) | |||
q.answers.forEach(function(a, i) { | |||
if (revealed.indexOf(i) === -1 && !found) { | |||
var match = a.keywords.some(function(k) { | |||
// Require keyword to be at least 3 chars | |||
if (k.length < 3) return false; | |||
// Check for word-based matching | |||
var guessWords = guess.split(/\s+/); | |||
var keyWords = k.split(/\s+/); | |||
// Exact match of full keyword | |||
if (guess === k) return true; | |||
// Guess contains the full keyword (for multi-word keywords) | |||
if (k.length >= 4 && guess.indexOf(k) !== -1) return true; | |||
// Keyword starts with guess (at least 4 chars) | |||
if (guess.length >= 4 && k.indexOf(guess) === 0) return true; | |||
// Any word in guess matches start of keyword (at least 4 chars) | |||
for (var w = 0; w < guessWords.length; w++) { | |||
if (guessWords[w].length >= 4) { | |||
if (k.indexOf(guessWords[w]) === 0) return true; | |||
for (var kw = 0; kw < keyWords.length; kw++) { | |||
if (keyWords[kw].length >= 4 && keyWords[kw].indexOf(guessWords[w]) === 0) return true; | |||
if (guessWords[w].indexOf(keyWords[kw]) === 0 && keyWords[kw].length >= 4) return true; | |||
} | |||
} | |||
} | |||
return false; | |||
}); | |||
if (match) { | |||
found = true; | |||
foundIndex = i; | |||
} | |||
} | } | ||
}); | }); | ||
if ( | if (found && foundIndex >= 0) { | ||
revealAnswer(foundIndex); | |||
} else { | |||
addStrike(); | |||
} | |||
input.value = ''; | input.value = ''; | ||
input.focus(); | input.focus(); | ||
} | }, | ||
revealAll: function() { | |||
var q = questions[currentQ]; | |||
q.answers.forEach(function(a, i) { | |||
if (revealed.indexOf(i) === -1) { | |||
var slot = document.getElementById('ffAnswer' + i); | |||
slot.classList.add('ff-revealed'); | |||
slot.innerHTML = '<div class="ff-answer-num">' + (i + 1) + '</div><div class="ff-answer-text">' + a.text + '</div><div class="ff-answer-pts">' + a.points + '</div>'; | |||
revealed.push(i); | |||
q.answers.forEach((a, i) | |||
if ( | |||
slot.classList.add('revealed'); | |||
slot.innerHTML = | |||
} | } | ||
}); | }); | ||
playReveal(); | playReveal(); | ||
showSteve("There's all the answers! Study these! 📚"); | showSteve("There's all the answers! Study these! 📚"); | ||
}, | |||
next: function() { | |||
currentQ++; | |||
if (currentQ >= questions.length) { | |||
playApplause(); | |||
document.getElementById('ffGameContent').classList.remove('ff-visible'); | |||
document.getElementById('ffGameOver').classList.add('ff-show'); | |||
document.getElementById('ffFinalScore').textContent = score; | |||
var msg = score >= 800 ? "🌟 INCREDIBLE! You're NCLEX ready! 🌟" : score >= 500 ? "👏 Great job! Keep studying!" : "📚 Good effort! Review and try again!"; | |||
document.getElementById('ffFinalMsg').textContent = msg; | |||
if (score >= 400) createConfetti(); | |||
} else { loadQuestion(); } | |||
}, | |||
restart: function() { | |||
currentQ = 0; score = 0; | |||
document.getElementById('ffScore').textContent = '0'; | |||
document.getElementById('ffGameOver').classList.remove('ff-show'); | |||
document.getElementById('ffGameContent').classList.remove('ff-visible'); | |||
document.getElementById('ffStart').classList.remove('ff-hidden'); | |||
}, | |||
toggleSound: function() { | |||
soundEnabled = !soundEnabled; | |||
document.getElementById('ffSoundBtn').innerHTML = soundEnabled ? '🔊 SOUND ON' : '🔇 SOUND OFF'; | |||
if (soundEnabled) initAudio(); | |||
} | } | ||
}; | |||
document.getElementById('ffInput').addEventListener('keypress', function(e) { if (e.key === 'Enter') FFGame.submit(); }); | |||
})(); | |||
</script> | |||
</html></includeonly> | |||
</ | |||
</ | |||
Latest revision as of 01:24, 11 January 2026
This widget displays the Family Feud Nursing Edition study game.
Usage
{{#widget:FamilyFeudNursing}}