{"id":27092,"date":"2026-08-26T00:15:27","date_gmt":"2026-08-25T18:45:27","guid":{"rendered":"https:\/\/qsh.in\/boards\/wbbse\/?p=27092"},"modified":"2026-08-26T00:16:24","modified_gmt":"2026-08-25T18:46:24","slug":"multiplying-by-4-and-8-doubling","status":"publish","type":"post","link":"https:\/\/qsh.in\/boards\/wbbse\/mental-math\/multiplying-by-4-and-8-doubling\/","title":{"rendered":"\u09ea \u098f\u09ac\u0982 \u09ee \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3\u09c7\u09b0 \u09ae\u09cd\u09af\u09be\u099c\u09bf\u0995! (Shadow Ninja)"},"content":{"rendered":"<p>\u0986\u099c\u0995\u09c7\u09b0 \u0997\u09c7\u09ae\u099f\u09bf \u098f\u0995\u099f\u09bf \u099c\u09be\u09a6\u09c1\u0995\u09b0\u09c0 \u09af\u09c1\u09a6\u09cd\u09a7\u09c7\u09b0! \u09a4\u09cb\u09ae\u09be\u09b0 \u09b8\u09be\u09ae\u09a8\u09c7 \u09b0\u09df\u09c7\u099b\u09c7 \u098f\u0995 \u09ac\u09bf\u09b6\u09be\u09b2 \u09a6\u09c8\u09a4\u09cd\u09af\u0964 \u09a4\u09be\u0995\u09c7 \u09b9\u09be\u09b0\u09be\u09a4\u09c7 \u09b9\u09b2\u09c7 \u09a4\u09cb\u09ae\u09be\u09b0 \u09a8\u09bf\u09a8\u099c\u09be \u09b8\u09cd\u099f\u09be\u09b0\u0995\u09c7 (Shuriken) \u099c\u09be\u09a6\u09c1\u09b0 \u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af\u09c7 \u09ea \u0997\u09c1\u09a3 \u09ac\u09be \u09ee \u0997\u09c1\u09a3 \u0995\u09b0\u09c7 \u099b\u09c1\u0981\u09dc\u09a4\u09c7 \u09b9\u09ac\u09c7\u0964 \u0986\u09b0 \u098f\u0987 \u099c\u09be\u09a6\u09c1\u09b0 \u099a\u09be\u09ac\u09bf\u0995\u09be\u09a0\u09bf \u09b9\u09b2\u09cb\u2014\u09ac\u09dc \u09b8\u0982\u0996\u09cd\u09af\u09be\u0995\u09c7 \u09ea \u09ac\u09be \u09ee \u09a6\u09bf\u09df\u09c7 \u0996\u09be\u09a4\u09be-\u0995\u09b2\u09ae \u099b\u09be\u09dc\u09be \u09a6\u09cd\u09b0\u09c1\u09a4 \u0997\u09c1\u09a3 \u0995\u09b0\u09be!<\/p>\n<p>\u09ea \u098f\u09ac\u0982 \u09ee \u098f\u09b0 \u09a8\u09be\u09ae\u09a4\u09be \u09ac\u09dc \u09b8\u0982\u0996\u09cd\u09af\u09be\u09b0 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7 \u09ae\u09a8\u09c7 \u09b0\u09be\u0996\u09be \u098f\u0995\u099f\u09c1 \u0995\u09a0\u09bf\u09a8 \u09b9\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u0964 \u09a4\u09be\u0987 \u0986\u099c \u0986\u09ae\u09b0\u09be \u0997\u09c1\u09a3 \u0995\u09b0\u09be\u09b0 \u09ac\u09a6\u09b2\u09c7 <strong>\u09af\u09cb\u0997 \u09ac\u09be \u201c\u09a6\u09cd\u09ac\u09bf\u0997\u09c1\u09a3\u201d (Doubling)<\/strong> \u0995\u09b0\u09be\u09b0 \u0995\u09cc\u09b6\u09b2 \u09b6\u09bf\u0996\u09ac\u0964 \u0986\u09ae\u09be\u09a6\u09c7\u09b0 \u09ae\u09b8\u09cd\u09a4\u09bf\u09b8\u09cd\u0995 \u0997\u09c1\u09a3\u09c7\u09b0 \u099a\u09c7\u09df\u09c7 \u09af\u09cb\u0997 (\u09a6\u09cd\u09ac\u09bf\u0997\u09c1\u09a3 \u0995\u09b0\u09be) \u0985\u09a8\u09c7\u0995 \u09a6\u09cd\u09b0\u09c1\u09a4 \u09aa\u09cd\u09b0\u09b8\u09c7\u09b8 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u0964<\/p>\n<h2>\u09ae\u09cd\u09af\u09be\u099c\u09bf\u0995 \u099f\u09cd\u09b0\u09bf\u0995 \u09e7: \u09ea \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3 (Double and Double Again) <\/h2>\n<p>\u09af\u09c7\u0995\u09cb\u09a8\u09cb \u09b8\u0982\u0996\u09cd\u09af\u09be\u0995\u09c7 \u09ea \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3 \u0995\u09b0\u09a4\u09c7 \u09b9\u09b2\u09c7, \u09b8\u0982\u0996\u09cd\u09af\u09be\u099f\u09bf\u0995\u09c7 \u09ae\u09a8\u09c7 \u09ae\u09a8\u09c7 \u09aa\u09b0\u09aa\u09b0 \u09e8 \u09ac\u09be\u09b0 \u09a1\u09be\u09ac\u09b2 (\u09a6\u09cd\u09ac\u09bf\u0997\u09c1\u09a3) \u0995\u09b0\u09cb!<\/p>\n<p><strong>\u0989\u09a6\u09be\u09b9\u09b0\u09a3: \u09e9\u09eb \u00d7 \u09ea = ?<\/strong><\/p>\n<ul>\n<li><strong>\u09a7\u09be\u09aa \u09e7 (\u09aa\u09cd\u09b0\u09a5\u09ae \u09a1\u09be\u09ac\u09b2):<\/strong> \u09e9\u09eb \u098f\u09b0 \u09a1\u09be\u09ac\u09b2 \u0995\u09b0\u09cb (\u09e9\u09eb + \u09e9\u09eb) = <strong>\u09ed\u09e6<\/strong>\u0964<\/li>\n<li><strong>\u09a7\u09be\u09aa \u09e8 (\u09a6\u09cd\u09ac\u09bf\u09a4\u09c0\u09df \u09a1\u09be\u09ac\u09b2):<\/strong> \u098f\u09ac\u09be\u09b0 \u09ed\u09e6 \u098f\u09b0 \u09a1\u09be\u09ac\u09b2 \u0995\u09b0\u09cb (\u09ed\u09e6 + \u09ed\u09e6) = <strong>\u09e7\u09ea\u09e6<\/strong>\u0964<\/li>\n<\/ul>\n<p>\u09a6\u09c7\u0996\u09c7\u099b? \u0995\u09cb\u09a8\u09cb \u09a8\u09be\u09ae\u09a4\u09be \u09a8\u09be \u09aa\u09dc\u09c7\u0987 \u0989\u09a4\u09cd\u09a4\u09b0 \u09aa\u09c7\u09df\u09c7 \u0997\u09c7\u09b2\u09c7 \u2794 <strong>\u09e7\u09ea\u09e6<\/strong>!<\/p>\n<p><strong>\u0986\u09b0\u0993 \u098f\u0995\u099f\u09bf \u0989\u09a6\u09be\u09b9\u09b0\u09a3:<\/strong> \u09e7\u09e8\u09e6 \u00d7 \u09ea \u2794 \u09e7\u09e8\u09e6 \u098f\u09b0 \u09a1\u09be\u09ac\u09b2 \u09e8\u09ea\u09e6 \u2794 \u09e8\u09ea\u09e6 \u098f\u09b0 \u09a1\u09be\u09ac\u09b2 <strong>\u09ea\u09ee\u09e6<\/strong>\u0964<\/p>\n<h3>\u09ae\u09cd\u09af\u09be\u099c\u09bf\u0995 \u099f\u09cd\u09b0\u09bf\u0995 \u09e8: \u09ee \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3 (Double, Double and Double) \ud83d\ude80<\/h3>\n<p>\u09ee \u09b9\u09b2\u09cb \u09ea \u098f\u09b0 \u09a6\u09cd\u09ac\u09bf\u0997\u09c1\u09a3\u0964 \u09a4\u09be\u0987 \u09ee \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3 \u0995\u09b0\u09a4\u09c7 \u09b9\u09b2\u09c7 \u09b8\u0982\u0996\u09cd\u09af\u09be\u099f\u09bf\u0995\u09c7 \u09aa\u09b0\u09aa\u09b0 \u09e9 \u09ac\u09be\u09b0 \u09a1\u09be\u09ac\u09b2 \u0995\u09b0\u09a4\u09c7 \u09b9\u09ac\u09c7!<\/p>\n<p><strong>\u0989\u09a6\u09be\u09b9\u09b0\u09a3: \u09e7\u09ec \u00d7 \u09ee = ?<\/strong><\/p>\n<ul>\n<li><strong>\u09a7\u09be\u09aa \u09e7:<\/strong> \u09e7\u09ec \u098f\u09b0 \u09a1\u09be\u09ac\u09b2 = <strong>\u09e9\u09e8<\/strong>\u0964<\/li>\n<li><strong>\u09a7\u09be\u09aa \u09e8:<\/strong> \u09e9\u09e8 \u098f\u09b0 \u09a1\u09be\u09ac\u09b2 = <strong>\u09ec\u09ea<\/strong>\u0964<\/li>\n<li><strong>\u09a7\u09be\u09aa \u09e9:<\/strong> \u09ec\u09ea \u098f\u09b0 \u09a1\u09be\u09ac\u09b2 = <strong>\u09e7\u09e8\u09ee<\/strong>\u0964<\/li>\n<\/ul>\n<h3>\u098f\u09ac\u09be\u09b0 \u09a4\u09cb\u09ae\u09be\u09b0 \u09aa\u09be\u09b2\u09be! \u09a6\u09c8\u09a4\u09cd\u09af\u0995\u09c7 \u09b9\u09be\u09b0\u09be\u0993! \u2694\ufe0f<\/h3>\n<p>\u0996\u09be\u09a4\u09be-\u0995\u09b2\u09ae \u09a6\u09c2\u09b0\u09c7 \u09b8\u09b0\u09bf\u09df\u09c7 \u09b0\u09be\u0996\u09cb! \u09a8\u09bf\u099a\u09c7 \u09a5\u09be\u0995\u09be \u0997\u09c7\u09ae\u099f\u09bf\u09a4\u09c7 <strong>\u201c\u09af\u09c1\u09a6\u09cd\u09a7 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09cb\u201d<\/strong> \u09ac\u09be\u099f\u09a8\u09c7 \u0995\u09cd\u09b2\u09bf\u0995 \u0995\u09b0\u09cb\u0964 \u09b8\u09cd\u0995\u09cd\u09b0\u09bf\u09a8\u09c7 \u09ea \u09ac\u09be \u09ee \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3\u09c7\u09b0 \u0985\u0999\u09cd\u0995 \u098f\u09b2\u09c7\u0987 \u09b8\u0982\u0996\u09cd\u09af\u09be\u099f\u09bf\u0995\u09c7 \u09ae\u09a8\u09c7 \u09ae\u09a8\u09c7 \u09a1\u09be\u09ac\u09b2 \u0995\u09b0\u09c7 \u09b8\u09a0\u09bf\u0995 \u0989\u09a4\u09cd\u09a4\u09b0\u099f\u09bf \u09ac\u09c7\u099b\u09c7 \u09a8\u09be\u0993\u0964 \u098f\u0996\u09be\u09a8\u09c7 \u098f\u0995\u099f\u09bf <strong>\u09ae\u099c\u09be<\/strong> \u0986\u099b\u09c7\u2014\u09b8\u09ac\u0997\u09c1\u09b2\u09cb \u0985\u09aa\u09b6\u09a8\u09c7\u09b0 \u09b6\u09c7\u09b7\u09c7\u09b0 \u09b8\u0982\u0996\u09cd\u09af\u09be (Ones digit) \u098f\u0995\u0987 \u09a5\u09be\u0995\u09ac\u09c7, \u09a4\u09be\u0987 \u099a\u09be\u09b2\u09be\u0995\u09bf \u0995\u09b0\u09c7 \u09b6\u09c1\u09a7\u09c1 \u09b6\u09c7\u09b7\u09c7\u09b0 \u09b8\u0982\u0996\u09cd\u09af\u09be \u09ae\u09c7\u09b2\u09be\u09b2\u09c7 \u099a\u09b2\u09ac\u09c7 \u09a8\u09be, \u09a4\u09cb\u09ae\u09be\u0995\u09c7 \u09aa\u09c1\u09b0\u09cb \u09b9\u09bf\u09b8\u09be\u09ac\u099f\u09be\u0987 \u0995\u09b0\u09a4\u09c7 \u09b9\u09ac\u09c7!<\/p>\n<p>\u09b8\u09a0\u09bf\u0995 \u0989\u09a4\u09cd\u09a4\u09b0 \u09a6\u09bf\u09b2\u09c7\u0987 \u09a4\u09cb\u09ae\u09be\u09b0 \u09a8\u09bf\u09a8\u099c\u09be \u09b8\u09cd\u099f\u09be\u09b0 \u09a6\u09cd\u09ac\u09bf\u0997\u09c1\u09a3 \u09b9\u09df\u09c7 \u09a6\u09c8\u09a4\u09cd\u09af\u0995\u09c7 \u0986\u0998\u09be\u09a4 \u0995\u09b0\u09ac\u09c7! \u099a\u09b2\u09cb \u0996\u09c7\u09b2\u09bf\u2026<\/p>\n    <div id=\"qsh-27092-395\" class=\"qsh-sim-frame-wrap\" style=\"--qsh-aspect: 1\/1;\">\n        <div class=\"qsh-sim-bar\">\n            <div class=\"qsh-sim-label\"><span class=\"qsh-dot\"><\/span> Interactive Simulator<\/div>\n            <div class=\"qsh-sim-controls\">\n                <button type=\"button\" class=\"qsh-sim-btn qsh-btn-reload\" onclick=\"document.getElementById('if-qsh-27092-395').srcdoc = document.getElementById('if-qsh-27092-395').srcdoc;\" aria-label=\"Restart\">\n                    <svg viewbox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\"><path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"><\/path><\/svg>\n                <\/button>\n                <button type=\"button\" class=\"qsh-sim-btn qsh-btn-fs\" id=\"fs-btn-qsh-27092-395\" aria-label=\"Fullscreen\">\n                    <svg viewbox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"><\/path><\/svg>\n                    <span>Expand<\/span>\n                <\/button>\n            <\/div>\n        <\/div>\n        <div class=\"qsh-sim-viewport\">\n            <iframe id=\"if-qsh-27092-395\" srcdoc=\"&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;base href=&quot;https:\/\/qsh.in\/boards\/wbbse\/&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot;&gt;&lt;style&gt;*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}html,body{width:100%;height:100%;margin:0;padding:0;overflow:hidden;touch-action:manipulation;background:#0b0f19;color:#f8fafc;font-family:system-ui,-apple-system,sans-serif;}&lt;\/style&gt;&lt;style&gt;#sim-root {\r\n    position: relative;\r\n    width: 100%;\r\n    height: 100vh;\r\n    min-height: 600px;\r\n    background-color: #0f172a;\r\n    color: #f8fafc;\r\n    font-family: 'Noto Sans Bengali', system-ui, sans-serif;\r\n    overflow: hidden;\r\n    display: flex;\r\n    flex-direction: column;\r\n    touch-action: manipulation;\r\n    -webkit-tap-highlight-color: transparent;\r\n    user-select: none;\r\n}\r\n\r\n.screen {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    display: none;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    align-items: center;\r\n    background: radial-gradient(circle at bottom, #1e293b 0%, #020617 100%);\r\n    z-index: 10;\r\n}\r\n\r\n.screen.active {\r\n    display: flex;\r\n}\r\n\r\n#game-screen {\r\n    z-index: 1;\r\n    background: transparent;\r\n}\r\n\r\n.panel {\r\n    background: rgba(15, 23, 42, 0.9);\r\n    border: 2px solid #38bdf8;\r\n    border-radius: 16px;\r\n    padding: 2rem;\r\n    max-width: 90%;\r\n    width: 500px;\r\n    text-align: center;\r\n    box-shadow: 0 0 30px rgba(56, 189, 248, 0.4);\r\n    backdrop-filter: blur(10px);\r\n}\r\n\r\n.panel h2 {\r\n    color: #7dd3fc;\r\n    margin-top: 0;\r\n    font-size: clamp(1.8rem, 5vw, 2.5rem);\r\n    text-shadow: 0 0 10px rgba(125, 211, 252, 0.5);\r\n    margin-bottom: 1rem;\r\n}\r\n\r\n.panel p {\r\n    font-size: 1.1rem;\r\n    line-height: 1.6;\r\n    margin-bottom: 1.5rem;\r\n}\r\n\r\n.trick-box {\r\n    background: rgba(56, 189, 248, 0.15);\r\n    border-left: 4px solid #38bdf8;\r\n    padding: 12px;\r\n    font-size: 1rem !important;\r\n    text-align: left;\r\n    color: #e0f2fe;\r\n    border-radius: 0 8px 8px 0;\r\n    margin-bottom: 1.5rem;\r\n}\r\n\r\n.action-btn {\r\n    background: linear-gradient(45deg, #0284c7, #0369a1);\r\n    color: #fff;\r\n    border: none;\r\n    padding: 12px 35px;\r\n    font-size: 1.3rem;\r\n    border-radius: 8px;\r\n    cursor: pointer;\r\n    font-weight: bold;\r\n    transition: all 0.2s;\r\n    box-shadow: 0 5px 20px rgba(2, 132, 199, 0.5);\r\n}\r\n\r\n.action-btn:active {\r\n    transform: scale(0.95);\r\n    box-shadow: 0 2px 10px rgba(2, 132, 199, 0.5);\r\n}\r\n\r\n\/* HUD *\/\r\n#hud {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    padding: 15px 20px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    box-sizing: border-box;\r\n    font-size: 1.2rem;\r\n    font-weight: bold;\r\n    color: #38bdf8;\r\n    z-index: 5;\r\n    background: linear-gradient(to bottom, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0) 100%);\r\n    text-shadow: 2px 2px 4px #000;\r\n}\r\n\r\n\/* Chakra Bar *\/\r\n#timer-container {\r\n    position: absolute;\r\n    top: 60px;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    width: 80%;\r\n    max-width: 400px;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    z-index: 5;\r\n}\r\n\r\n#timer-label {\r\n    font-size: 0.9rem;\r\n    font-weight: bold;\r\n    color: #7dd3fc;\r\n    text-transform: uppercase;\r\n}\r\n\r\n#timer-bar-wrap {\r\n    flex-grow: 1;\r\n    height: 12px;\r\n    background: rgba(0,0,0,0.7);\r\n    border-radius: 6px;\r\n    overflow: hidden;\r\n    border: 2px solid #0284c7;\r\n}\r\n\r\n#timer-bar {\r\n    width: 100%;\r\n    height: 100%;\r\n    background: linear-gradient(90deg, #38bdf8, #0284c7);\r\n    transition: width 0.1s linear, background 0.3s;\r\n}\r\n\r\n\/* Problem Display *\/\r\n#problem-display {\r\n    position: absolute;\r\n    top: 95px;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    z-index: 5;\r\n    background: rgba(15, 23, 42, 0.85);\r\n    border: 2px solid #38bdf8;\r\n    padding: 10px 40px;\r\n    border-radius: 12px;\r\n    backdrop-filter: blur(5px);\r\n    box-shadow: 0 5px 25px rgba(56, 189, 248, 0.3);\r\n}\r\n\r\n.problem-text {\r\n    font-size: clamp(2.2rem, 6vw, 3.2rem);\r\n    font-weight: bold;\r\n    color: #ffffff;\r\n    letter-spacing: 3px;\r\n    text-shadow: 0 0 15px rgba(56, 189, 248, 0.8);\r\n}\r\n\r\n\/* Canvas *\/\r\n#game-canvas {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: 2;\r\n    background: linear-gradient(to bottom, #050b14 0%, #0f172a 100%);\r\n}\r\n\r\n\/* Control Dock *\/\r\n#control-dock {\r\n    position: absolute;\r\n    bottom: 25px;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    width: 95%;\r\n    max-width: 600px;\r\n    display: grid;\r\n    grid-template-columns: repeat(3, 1fr);\r\n    gap: 12px;\r\n    z-index: 10;\r\n}\r\n\r\n.option-btn {\r\n    background: rgba(15, 23, 42, 0.95);\r\n    border: 2px solid #0284c7;\r\n    color: #ffffff;\r\n    font-size: clamp(1.5rem, 4vw, 2.2rem);\r\n    padding: 15px 0;\r\n    border-radius: 12px;\r\n    cursor: pointer;\r\n    font-weight: bold;\r\n    transition: all 0.1s;\r\n    backdrop-filter: blur(8px);\r\n    box-shadow: 0 6px 15px rgba(0,0,0,0.5);\r\n}\r\n\r\n.option-btn:active {\r\n    background: #0ea5e9;\r\n    color: #fff;\r\n    transform: scale(0.95);\r\n}\r\n\r\n.option-btn.correct {\r\n    background: #10b981;\r\n    color: #fff;\r\n    border-color: #10b981;\r\n}\r\n\r\n.option-btn.wrong {\r\n    background: #ef4444;\r\n    color: #fff;\r\n    border-color: #ef4444;\r\n    animation: shake 0.3s;\r\n}\r\n\r\n@keyframes shake {\r\n    0%, 100% { transform: translateX(0); }\r\n    25% { transform: translateX(-6px); }\r\n    75% { transform: translateX(6px); }\r\n}&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;&lt;div id=&quot;sim-root&quot;&gt;\r\n    <!-- Start Screen -->\r\n    &lt;div id=&quot;start-screen&quot; class=&quot;screen active&quot;&gt;\r\n        &lt;div class=&quot;panel&quot;&gt;\r\n            &lt;h2&gt;\u09b6\u09cd\u09af\u09be\u09a1\u09cb \u09a8\u09bf\u09a8\u099c\u09be (Shadow Ninja)&lt;\/h2&gt;\r\n            &lt;p&gt;\u09b8\u09be\u09ae\u09a8\u09c7 \u09ac\u09bf\u09b6\u09be\u09b2 \u098f\u0995 \u09a6\u09c8\u09a4\u09cd\u09af! \u09a4\u09be\u0995\u09c7 \u09b9\u09be\u09b0\u09be\u09a4\u09c7 \u09b9\u09b2\u09c7 \u09a4\u09cb\u09ae\u09be\u09b0 \u09a8\u09bf\u09a8\u099c\u09be \u09b8\u09cd\u099f\u09be\u09b0\u0995\u09c7 (Shuriken) \u099c\u09be\u09a6\u09c1\u09b0 \u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af\u09c7 \u09ea \u0997\u09c1\u09a3 \u09ac\u09be \u09ee \u0997\u09c1\u09a3 \u0995\u09b0\u09a4\u09c7 \u09b9\u09ac\u09c7\u0964&lt;\/p&gt;\r\n            &lt;p class=&quot;trick-box&quot;&gt;&lt;strong&gt;\u09a1\u09be\u09ac\u09b2-\u09a1\u09be\u09ac\u09b2 \u099f\u09cd\u09b0\u09bf\u0995:&lt;\/strong&gt; \u09ea \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3 \u0995\u09b0\u09a4\u09c7 \u09b8\u0982\u0996\u09cd\u09af\u09be\u099f\u09bf\u0995\u09c7 \u09aa\u09b0\u09aa\u09b0 \u09e8 \u09ac\u09be\u09b0 \u09a1\u09be\u09ac\u09b2 \u0995\u09b0\u09cb! \u0986\u09b0 \u09ee \u09a6\u09bf\u09df\u09c7 \u0997\u09c1\u09a3 \u0995\u09b0\u09a4\u09c7 \u09e9 \u09ac\u09be\u09b0 \u09a1\u09be\u09ac\u09b2 \u0995\u09b0\u09cb!&lt;\/p&gt;\r\n            &lt;p&gt;\u09b8\u09a0\u09bf\u0995 \u0989\u09a4\u09cd\u09a4\u09b0 \u09a6\u09be\u0993 \u098f\u09ac\u0982 \u0995\u09cd\u09b2\u09cb\u09a8 \u099c\u09c1\u099f\u09b8\u09c1 \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c7 \u09a6\u09c8\u09a4\u09cd\u09af\u0995\u09c7 \u09aa\u09b0\u09be\u099c\u09bf\u09a4 \u0995\u09b0\u09cb!&lt;\/p&gt;\r\n            &lt;button id=&quot;start-btn&quot; class=&quot;action-btn&quot;&gt;\u09af\u09c1\u09a6\u09cd\u09a7 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09cb&lt;\/button&gt;\r\n        &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n\r\n    <!-- Game Screen -->\r\n    &lt;div id=&quot;game-screen&quot; class=&quot;screen&quot;&gt;\r\n        <!-- HUD -->\r\n        &lt;div id=&quot;hud&quot;&gt;\r\n            &lt;div class=&quot;hud-item&quot;&gt;\u09b8\u09cd\u0995\u09cb\u09b0: &lt;span id=&quot;score-display&quot;&gt;\u09e6&lt;\/span&gt;&lt;\/div&gt;\r\n            &lt;div class=&quot;hud-item&quot;&gt;\u09b2\u09c7\u09ad\u09c7\u09b2: &lt;span id=&quot;level-display&quot;&gt;\u09e7&lt;\/span&gt;&lt;\/div&gt;\r\n            &lt;div class=&quot;hud-item&quot;&gt;\u09b2\u09be\u0987\u09ab: &lt;span id=&quot;lives-display&quot;&gt;\ud83e\udd77\ud83e\udd77\ud83e\udd77&lt;\/span&gt;&lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n        \r\n        <!-- Timer Bar (Chakra) -->\r\n        &lt;div id=&quot;timer-container&quot;&gt;\r\n            &lt;div id=&quot;timer-label&quot;&gt;\u099a\u0995\u09cd\u09b0 (Chakra)&lt;\/div&gt;\r\n            &lt;div id=&quot;timer-bar-wrap&quot;&gt;&lt;div id=&quot;timer-bar&quot;&gt;&lt;\/div&gt;&lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n\r\n        <!-- Problem Display -->\r\n        &lt;div id=&quot;problem-display&quot;&gt;\r\n            &lt;div class=&quot;problem-text&quot; id=&quot;math-problem&quot;&gt;\u09e9\u09eb \u00d7 \u09ea = ?&lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n\r\n        <!-- Canvas for Animation -->\r\n        &lt;canvas id=&quot;game-canvas&quot;&gt;&lt;\/canvas&gt;\r\n\r\n        <!-- Controls \/ Numpad Dock (3 Options) -->\r\n        &lt;div id=&quot;control-dock&quot;&gt;\r\n            &lt;button class=&quot;option-btn&quot; data-index=&quot;0&quot;&gt;\u09e6&lt;\/button&gt;\r\n            &lt;button class=&quot;option-btn&quot; data-index=&quot;1&quot;&gt;\u09e6&lt;\/button&gt;\r\n            &lt;button class=&quot;option-btn&quot; data-index=&quot;2&quot;&gt;\u09e6&lt;\/button&gt;\r\n        &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n\r\n    <!-- Game Over Screen -->\r\n    &lt;div id=&quot;game-over-screen&quot; class=&quot;screen&quot;&gt;\r\n        &lt;div class=&quot;panel&quot;&gt;\r\n            &lt;h2 id=&quot;end-title&quot;&gt;\u09a8\u09bf\u09a8\u099c\u09be \u09aa\u09b0\u09be\u099c\u09bf\u09a4!&lt;\/h2&gt;\r\n            &lt;p id=&quot;end-message&quot;&gt;\u09a4\u09cb\u09ae\u09be\u09b0 \u099a\u0995\u09cd\u09b0 \u09b6\u09c7\u09b7 \u0985\u09a5\u09ac\u09be \u09a6\u09c8\u09a4\u09cd\u09af \u09a4\u09cb\u09ae\u09be\u0995\u09c7 \u09b9\u09be\u09b0\u09bf\u09df\u09c7 \u09a6\u09bf\u09df\u09c7\u099b\u09c7\u0964&lt;\/p&gt;\r\n            &lt;p&gt;\u09a4\u09cb\u09ae\u09be\u09b0 \u099a\u09c2\u09dc\u09be\u09a8\u09cd\u09a4 \u09b8\u09cd\u0995\u09cb\u09b0: &lt;span id=&quot;final-score&quot;&gt;\u09e6&lt;\/span&gt;&lt;\/p&gt;\r\n            &lt;button id=&quot;restart-btn&quot; class=&quot;action-btn&quot;&gt;\u0986\u09ac\u09be\u09b0 \u0996\u09c7\u09b2\u09cb&lt;\/button&gt;\r\n        &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;&lt;script&gt;\n        window.GameController = {\n            saveScore: function(score, time, extraData) {\n                window.parent.postMessage({\n                    action: 'qsh_save_score',\n                    sim_id: 27092,\n                    score: score,\n                    time: time || 0,\n                    meta: extraData || {}\n                }, 'https:\/\/qsh.in\/boards\/wbbse');\n            }\n        };\n    &lt;\/script&gt;&lt;script&gt;(function() {\r\n    'use strict';\r\n\r\n    \/\/ --- Utility: Bengali Numerals ---\r\n    const EN_TO_BN = { '0':'\u09e6', '1':'\u09e7', '2':'\u09e8', '3':'\u09e9', '4':'\u09ea', '5':'\u09eb', '6':'\u09ec', '7':'\u09ed', '8':'\u09ee', '9':'\u09ef' };\r\n    \r\n    function toBengali(num) {\r\n        return num.toString().split('').map(d =&gt; EN_TO_BN[d] || d).join('');\r\n    }\r\n\r\n    \/\/ --- State &amp; Variables ---\r\n    let state = {\r\n        isPlaying: false,\r\n        score: 0,\r\n        level: 1,\r\n        lives: 3,\r\n        timeLeft: 15000,\r\n        maxTime: 15000,\r\n        lastTime: 0,\r\n        currentProblem: null,\r\n        correctIndex: 0,\r\n        sceneState: 'idle', \/\/ idle, throw, hit_ninja\r\n        accuracy: { correct: 0, total: 0 }\r\n    };\r\n\r\n    let animPhase = 0;\r\n    let shurikens = [];\r\n    let enemyFireball = null;\r\n    let particles = [];\r\n    let monsterDamage = 0;\r\n\r\n    \/\/ --- Audio System ---\r\n    const AudioCtx = window.AudioContext || window.webkitAudioContext;\r\n    let actx;\r\n\r\n    function initAudio() {\r\n        if (!actx) actx = new AudioCtx();\r\n        if (actx.state === 'suspended') actx.resume();\r\n    }\r\n\r\n    function playSound(type) {\r\n        if (!actx) return;\r\n        const osc = actx.createOscillator();\r\n        const gain = actx.createGain();\r\n        osc.connect(gain);\r\n        gain.connect(actx.destination);\r\n        const now = actx.currentTime;\r\n\r\n        if (type === 'throw') {\r\n            osc.type = 'triangle';\r\n            osc.frequency.setValueAtTime(800, now);\r\n            osc.frequency.exponentialRampToValueAtTime(300, now + 0.2);\r\n            gain.gain.setValueAtTime(0.3, now);\r\n            gain.gain.exponentialRampToValueAtTime(0.01, now + 0.2);\r\n            osc.start(now); osc.stop(now + 0.2);\r\n        } else if (type === 'split') {\r\n            osc.type = 'sine';\r\n            osc.frequency.setValueAtTime(1000, now);\r\n            osc.frequency.linearRampToValueAtTime(1500, now + 0.1);\r\n            gain.gain.setValueAtTime(0.2, now);\r\n            gain.gain.linearRampToValueAtTime(0.01, now + 0.1);\r\n            osc.start(now); osc.stop(now + 0.1);\r\n        } else if (type === 'hit') {\r\n            osc.type = 'sawtooth';\r\n            osc.frequency.setValueAtTime(150, now);\r\n            osc.frequency.exponentialRampToValueAtTime(40, now + 0.3);\r\n            gain.gain.setValueAtTime(0.5, now);\r\n            gain.gain.exponentialRampToValueAtTime(0.01, now + 0.3);\r\n            osc.start(now); osc.stop(now + 0.3);\r\n        } else if (type === 'fire') {\r\n            osc.type = 'square';\r\n            osc.frequency.setValueAtTime(100, now);\r\n            osc.frequency.exponentialRampToValueAtTime(30, now + 0.5);\r\n            gain.gain.setValueAtTime(0.4, now);\r\n            gain.gain.exponentialRampToValueAtTime(0.01, now + 0.5);\r\n            osc.start(now); osc.stop(now + 0.5);\r\n        }\r\n    }\r\n\r\n    function announce(text) {\r\n        if ('speechSynthesis' in window) {\r\n            window.speechSynthesis.cancel();\r\n            const msg = new SpeechSynthesisUtterance(text);\r\n            msg.rate = 1.3; msg.pitch = 0.9; msg.lang = 'bn-IN'; \r\n            window.speechSynthesis.speak(msg);\r\n        }\r\n    }\r\n\r\n    \/\/ --- Canvas Rendering (Vector Art) ---\r\n    const canvas = document.getElementById('game-canvas');\r\n    const ctx = canvas.getContext('2d');\r\n    let animationId;\r\n\r\n    function resizeCanvas() {\r\n        const dpr = window.devicePixelRatio || 1;\r\n        const rect = canvas.parentElement.getBoundingClientRect();\r\n        canvas.width = rect.width * dpr;\r\n        canvas.height = rect.height * dpr;\r\n        ctx.scale(dpr, dpr);\r\n        canvas.style.width = `${rect.width}px`;\r\n        canvas.style.height = `${rect.height}px`;\r\n    }\r\n\r\n    function createSparks(x, y, color) {\r\n        for (let i = 0; i &lt; 20; i++) {\r\n            particles.push({\r\n                x: x, y: y,\r\n                vx: (Math.random() - 0.5) * 15,\r\n                vy: (Math.random() - 0.5) * 15,\r\n                size: Math.random() * 5 + 2,\r\n                color: color,\r\n                life: 1.0,\r\n                decay: 0.03 + Math.random() * 0.03\r\n            });\r\n        }\r\n    }\r\n\r\n    function drawDojo(w, h) {\r\n        \/\/ Floor\r\n        ctx.fillStyle = '#0f172a';\r\n        ctx.fillRect(0, h * 0.7, w, h * 0.3);\r\n        ctx.strokeStyle = '#1e293b';\r\n        ctx.lineWidth = 2;\r\n        for(let i=0; i&lt;w; i+=40) {\r\n            ctx.beginPath(); ctx.moveTo(i, h*0.7); ctx.lineTo(i-40, h); ctx.stroke();\r\n        }\r\n\r\n        \/\/ Background Moon\r\n        ctx.fillStyle = '#f1f5f9';\r\n        ctx.beginPath(); ctx.arc(w * 0.5, h * 0.3, 60, 0, Math.PI*2); ctx.fill();\r\n        ctx.fillStyle = 'rgba(241, 245, 249, 0.1)';\r\n        ctx.beginPath(); ctx.arc(w * 0.5, h * 0.3, 120, 0, Math.PI*2); ctx.fill();\r\n\r\n        \/\/ Bamboo Silhouettes\r\n        ctx.fillStyle = '#020617';\r\n        for(let i=0; i&lt;w; i+=80) {\r\n            ctx.fillRect(i, h * 0.4, 10, h * 0.3);\r\n            \/\/ Leaves\r\n            ctx.beginPath(); ctx.ellipse(i-10, h*0.5, 15, 4, Math.PI\/4, 0, Math.PI*2); ctx.fill();\r\n            ctx.beginPath(); ctx.ellipse(i+15, h*0.6, 15, 4, -Math.PI\/4, 0, Math.PI*2); ctx.fill();\r\n        }\r\n    }\r\n\r\n    function drawNinja(x, y, scale, isThrowing) {\r\n        ctx.save();\r\n        ctx.translate(x, y);\r\n        ctx.scale(scale, scale);\r\n\r\n        \/\/ Shadow\r\n        ctx.fillStyle = 'rgba(0,0,0,0.5)';\r\n        ctx.beginPath(); ctx.ellipse(0, 45, 30, 8, 0, 0, Math.PI*2); ctx.fill();\r\n\r\n        \/\/ Body\r\n        ctx.fillStyle = '#1e293b';\r\n        ctx.beginPath(); ctx.roundRect(-15, -20, 30, 40, 5); ctx.fill();\r\n\r\n        \/\/ Legs\r\n        ctx.fillRect(-15, 20, 10, 25);\r\n        ctx.fillRect(5, 20, 10, 25);\r\n\r\n        \/\/ Head\r\n        ctx.beginPath(); ctx.arc(0, -35, 15, 0, Math.PI*2); ctx.fill();\r\n        \r\n        \/\/ Headband &amp; Eye opening\r\n        ctx.fillStyle = '#0ea5e9'; \/\/ Blue accent\r\n        ctx.fillRect(-15, -42, 30, 6);\r\n        ctx.fillStyle = '#f8fafc'; \/\/ Skin\/Eyes area\r\n        ctx.fillRect(-12, -36, 24, 8);\r\n        ctx.fillStyle = '#020617'; \/\/ Eyes\r\n        ctx.beginPath(); ctx.arc(-5, -32, 2, 0, Math.PI*2); ctx.fill();\r\n        ctx.beginPath(); ctx.arc(5, -32, 2, 0, Math.PI*2); ctx.fill();\r\n        \/\/ Headband tail\r\n        ctx.fillStyle = '#0ea5e9';\r\n        ctx.beginPath(); ctx.moveTo(-15, -40); ctx.quadraticCurveTo(-30, -30, -35, -50); ctx.lineTo(-25, -45); ctx.fill();\r\n\r\n        \/\/ Arms\r\n        if (isThrowing) {\r\n            ctx.strokeStyle = '#1e293b'; ctx.lineWidth = 10; ctx.lineCap = 'round';\r\n            ctx.beginPath(); ctx.moveTo(-10, -10); ctx.lineTo(30, -20); ctx.stroke(); \/\/ Throwing arm\r\n            ctx.beginPath(); ctx.moveTo(-10, -10); ctx.lineTo(-25, 0); ctx.stroke(); \/\/ Back arm\r\n        } else {\r\n            ctx.strokeStyle = '#1e293b'; ctx.lineWidth = 10; ctx.lineCap = 'round';\r\n            ctx.beginPath(); ctx.moveTo(-10, -10); ctx.lineTo(15, 0); ctx.lineTo(15, -15); ctx.stroke(); \/\/ Holding ready\r\n        }\r\n\r\n        ctx.restore();\r\n    }\r\n\r\n    function drawMonster(x, y, scale, hitDamage) {\r\n        ctx.save();\r\n        ctx.translate(x, y);\r\n        ctx.scale(scale, scale);\r\n\r\n        \/\/ If hit, flash white\/red and shrink slightly\r\n        if (hitDamage &gt; 0) {\r\n            ctx.fillStyle = (hitDamage % 2 === 0) ? '#f8fafc' : '#ef4444';\r\n            ctx.scale(0.9, 0.9);\r\n        } else {\r\n            ctx.fillStyle = '#4c1d95'; \/\/ Dark purple monster\r\n        }\r\n\r\n        \/\/ Shadow\r\n        ctx.fillStyle = 'rgba(0,0,0,0.5)';\r\n        ctx.beginPath(); ctx.ellipse(0, 55, 40, 10, 0, 0, Math.PI*2); ctx.fill();\r\n\r\n        ctx.fillStyle = hitDamage &gt; 0 ? ((hitDamage % 2 === 0) ? '#f8fafc' : '#ef4444') : '#4c1d95';\r\n\r\n        \/\/ Body\r\n        ctx.beginPath();\r\n        ctx.ellipse(0, 10, 45, 50, 0, 0, Math.PI*2);\r\n        ctx.fill();\r\n\r\n        \/\/ Head\/Horns\r\n        ctx.beginPath(); ctx.moveTo(-20, -30); ctx.lineTo(-40, -60); ctx.lineTo(0, -40); ctx.fill();\r\n        ctx.beginPath(); ctx.moveTo(20, -30); ctx.lineTo(40, -60); ctx.lineTo(0, -40); ctx.fill();\r\n\r\n        \/\/ Eyes\r\n        ctx.fillStyle = '#ef4444';\r\n        ctx.shadowBlur = 10; ctx.shadowColor = '#ef4444';\r\n        ctx.beginPath(); ctx.ellipse(-15, -10, 8, 4, 0.2, 0, Math.PI*2); ctx.fill();\r\n        ctx.beginPath(); ctx.ellipse(15, -10, 8, 4, -0.2, 0, Math.PI*2); ctx.fill();\r\n        ctx.shadowBlur = 0;\r\n\r\n        \/\/ Mouth\r\n        ctx.fillStyle = '#020617';\r\n        ctx.beginPath(); ctx.arc(0, 20, 15, 0, Math.PI, false); ctx.fill();\r\n\r\n        ctx.restore();\r\n    }\r\n\r\n    function drawShuriken(x, y, rot) {\r\n        ctx.save();\r\n        ctx.translate(x, y);\r\n        ctx.rotate(rot);\r\n        \r\n        ctx.fillStyle = '#cbd5e1';\r\n        ctx.beginPath();\r\n        ctx.moveTo(0, -15); ctx.lineTo(5, -5);\r\n        ctx.lineTo(15, 0); ctx.lineTo(5, 5);\r\n        ctx.lineTo(0, 15); ctx.lineTo(-5, 5);\r\n        ctx.lineTo(-15, 0); ctx.lineTo(-5, -5);\r\n        ctx.fill();\r\n        \r\n        ctx.fillStyle = '#0f172a';\r\n        ctx.beginPath(); ctx.arc(0, 0, 3, 0, Math.PI*2); ctx.fill();\r\n        ctx.restore();\r\n    }\r\n\r\n    function drawScene() {\r\n        const w = canvas.width \/ (window.devicePixelRatio || 1);\r\n        const h = canvas.height \/ (window.devicePixelRatio || 1);\r\n        \r\n        ctx.clearRect(0, 0, w, h);\r\n\r\n        drawDojo(w, h);\r\n\r\n        let ninjaX = w * 0.2;\r\n        let ninjaY = h * 0.65;\r\n        let monsterX = w * 0.8;\r\n        let monsterY = h * 0.65;\r\n\r\n        \/\/ Draw Player &amp; Enemy\r\n        drawNinja(ninjaX, ninjaY, 1.2, state.sceneState === 'throw');\r\n        drawMonster(monsterX, monsterY, 1.2, monsterDamage);\r\n\r\n        if (monsterDamage &gt; 0) monsterDamage--;\r\n\r\n        if (state.sceneState === 'throw') {\r\n            \/\/ Move shurikens\r\n            shurikens.forEach(sh =&gt; {\r\n                drawShuriken(sh.x, sh.y, animPhase * 0.5);\r\n                sh.x += sh.vx;\r\n                sh.y += sh.vy;\r\n                \r\n                \/\/ Splitting Logic (Double-Double effect)\r\n                if (sh.splitLimit &gt; 0 &amp;&amp; sh.x &gt; w * 0.4 &amp;&amp; !sh.hasSplit1) {\r\n                    sh.hasSplit1 = true;\r\n                    playSound('split');\r\n                    shurikens.push({x: sh.x, y: sh.y - 40, vx: 15, vy: 0, splitLimit: sh.splitLimit-1, hasSplit1: false});\r\n                    shurikens.push({x: sh.x, y: sh.y + 40, vx: 15, vy: 0, splitLimit: sh.splitLimit-1, hasSplit1: false});\r\n                    sh.vx = 0; sh.vy = 0; sh.active = false; \/\/ Kill parent\r\n                }\r\n\r\n                \/\/ Hit detection\r\n                if (sh.active !== false &amp;&amp; Math.abs(sh.x - monsterX) &lt; 30) {\r\n                    sh.active = false;\r\n                    monsterDamage = 10;\r\n                    playSound('hit');\r\n                    createSparks(sh.x, sh.y, '#38bdf8');\r\n                }\r\n            });\r\n\r\n            \/\/ Cleanup inactive shurikens\r\n            shurikens = shurikens.filter(s =&gt; s.active !== false);\r\n\r\n            if (animPhase &gt; 40 &amp;&amp; shurikens.length === 0) {\r\n                \/\/ Done throwing\r\n            }\r\n            animPhase++;\r\n        } else if (state.sceneState === 'hit_ninja') {\r\n            \/\/ Monster fires back\r\n            if (enemyFireball) {\r\n                ctx.fillStyle = '#ef4444';\r\n                ctx.shadowBlur = 20; ctx.shadowColor = '#ef4444';\r\n                ctx.beginPath(); ctx.arc(enemyFireball.x, enemyFireball.y, 20, 0, Math.PI*2); ctx.fill();\r\n                ctx.shadowBlur = 0;\r\n                \r\n                enemyFireball.x -= 15;\r\n                \r\n                if (enemyFireball.x &lt; ninjaX) {\r\n                    createSparks(ninjaX, ninjaY, '#ef4444');\r\n                    playSound('hit');\r\n                    enemyFireball = null;\r\n                    \/\/ Flash screen red\r\n                    ctx.fillStyle = 'rgba(239, 68, 68, 0.4)';\r\n                    ctx.fillRect(0, 0, w, h);\r\n                }\r\n            }\r\n        }\r\n\r\n        \/\/ Draw Particles\r\n        particles.forEach(p =&gt; {\r\n            ctx.globalAlpha = p.life;\r\n            ctx.fillStyle = p.color;\r\n            ctx.beginPath(); ctx.arc(p.x, p.y, p.size, 0, Math.PI*2); ctx.fill();\r\n            p.x += p.vx; p.y += p.vy; p.life -= p.decay;\r\n        });\r\n        ctx.globalAlpha = 1.0;\r\n        particles = particles.filter(p =&gt; p.life &gt; 0);\r\n    }\r\n\r\n    function gameLoop(timestamp) {\r\n        if (!state.isPlaying) return;\r\n        \r\n        if (!state.lastTime) state.lastTime = timestamp;\r\n        const dt = timestamp - state.lastTime;\r\n        state.lastTime = timestamp;\r\n\r\n        if (state.sceneState === 'idle') {\r\n            state.timeLeft -= dt;\r\n            const timerBar = document.getElementById('timer-bar');\r\n            const pct = Math.max(0, (state.timeLeft \/ state.maxTime) * 100);\r\n            timerBar.style.width = `${pct}%`;\r\n            \r\n            if (pct &lt; 30) timerBar.style.background = 'linear-gradient(90deg, #ef4444, #f87171)';\r\n            else timerBar.style.background = 'linear-gradient(90deg, #38bdf8, #0284c7)';\r\n\r\n            if (state.timeLeft &lt;= 0) {\r\n                handleAnswer(-1); \r\n            }\r\n        }\r\n\r\n        drawScene();\r\n        animationId = requestAnimationFrame(gameLoop);\r\n    }\r\n\r\n    \/\/ --- Game Logic ---\r\n    function generateProblem() {\r\n        \/\/ Lesson 15: Multiplying by 4 and 8\r\n        const multipliers = [4, 8];\r\n        const mult = multipliers[Math.floor(Math.random() * multipliers.length)];\r\n        \r\n        \/\/ Base numbers: 12 to 99, sometimes up to 150 for variety\r\n        let baseNum = Math.floor(Math.random() * 88) + 12;\r\n        if (state.level &gt; 3 &amp;&amp; Math.random() &gt; 0.5) baseNum = (Math.floor(Math.random() * 15) + 5) * 10; \/\/ e.g. 120, 150\r\n        \r\n        const correct = baseNum * mult;\r\n        \r\n        \/\/ Advanced Wrong Options: Must have the SAME LAST DIGIT to prevent guessing!\r\n        const lastDigit = correct % 10;\r\n        \r\n        \/\/ Ensure wrongs have the same last digit\r\n        let wrong1 = correct + 10;\r\n        let wrong2 = correct - 10;\r\n        \r\n        \/\/ Vary the tens or hundreds place realistically based on common doubling mistakes\r\n        if (Math.random() &gt; 0.5) wrong1 = correct + 20;\r\n        if (wrong2 &lt;= 0) wrong2 = correct + 30; \/\/ Safety check\r\n\r\n        let options = [correct, wrong1, wrong2];\r\n        options.sort(() =&gt; Math.random() - 0.5);\r\n\r\n        state.currentProblem = { baseNum, mult, correct, options };\r\n        state.correctIndex = options.indexOf(correct);\r\n\r\n        document.getElementById('math-problem').innerText = `${toBengali(baseNum)} \u00d7 ${toBengali(mult)} = ?`;\r\n        \r\n        const btns = document.querySelectorAll('.option-btn');\r\n        btns.forEach((btn, idx) =&gt; {\r\n            if(idx &lt; 3) {\r\n                btn.innerText = toBengali(options[idx]);\r\n                btn.className = 'option-btn'; \r\n            }\r\n        });\r\n\r\n        state.maxTime = Math.max(5000, 15000 - (state.level * 400));\r\n        state.timeLeft = state.maxTime;\r\n        state.lastTime = performance.now();\r\n        state.sceneState = 'idle';\r\n        \r\n        animPhase = 0;\r\n        shurikens = [];\r\n        enemyFireball = null;\r\n        particles = [];\r\n        monsterDamage = 0;\r\n    }\r\n\r\n    function handleAnswer(selectedIndex) {\r\n        if (state.sceneState !== 'idle') return;\r\n        state.accuracy.total++;\r\n\r\n        const isCorrect = selectedIndex === state.correctIndex;\r\n        const btns = document.querySelectorAll('.option-btn');\r\n        \r\n        if (selectedIndex &gt;= 0) {\r\n            btns[selectedIndex].classList.add(isCorrect ? 'correct' : 'wrong');\r\n        }\r\n\r\n        const w = canvas.width \/ (window.devicePixelRatio || 1);\r\n        const h = canvas.height \/ (window.devicePixelRatio || 1);\r\n\r\n        if (isCorrect) {\r\n            state.sceneState = 'throw';\r\n            state.accuracy.correct++;\r\n            state.score += Math.ceil(state.timeLeft \/ 100);\r\n            state.level++;\r\n            \r\n            playSound('throw');\r\n            \r\n            \/\/ If x4, split limit = 2 (1-&gt;2-&gt;4). If x8, limit = 3 (1-&gt;2-&gt;4-&gt;8).\r\n            const splitAmount = state.currentProblem.mult === 4 ? 2 : 3;\r\n            shurikens.push({x: w * 0.25, y: h * 0.6, vx: 12, vy: 0, splitLimit: splitAmount, hasSplit1: false});\r\n            \r\n            announce(&quot;\u0995\u09cd\u09b2\u09cb\u09a8 \u099c\u09c1\u099f\u09b8\u09c1!&quot;);\r\n            \r\n            document.getElementById('score-display').innerText = toBengali(state.score);\r\n            document.getElementById('level-display').innerText = toBengali(state.level);\r\n            \r\n            setTimeout(generateProblem, 2500);\r\n\r\n        } else {\r\n            state.sceneState = 'hit_ninja';\r\n            state.lives--;\r\n            updateLivesUI();\r\n            \r\n            playSound('fire');\r\n            enemyFireball = {x: w * 0.75, y: h * 0.6};\r\n            announce(&quot;\u0993\u09b9 \u09a8\u09be! \u09a1\u09cd\u09af\u09be\u09ae\u09c7\u099c!&quot;);\r\n            \r\n            if (state.correctIndex &gt;= 0) {\r\n                btns[state.correctIndex].classList.add('correct');\r\n            }\r\n\r\n            setTimeout(() =&gt; {\r\n                if (state.lives &gt; 0) {\r\n                    generateProblem();\r\n                } else {\r\n                    endGame();\r\n                }\r\n            }, 2000);\r\n        }\r\n    }\r\n\r\n    function updateLivesUI() {\r\n        let hearts = '';\r\n        for(let i=0; i&lt;state.lives; i++) hearts += '\ud83e\udd77';\r\n        document.getElementById('lives-display').innerText = hearts || '\ud83d\udc80';\r\n    }\r\n\r\n    function startGame() {\r\n        initAudio();\r\n        state.isPlaying = true;\r\n        state.score = 0;\r\n        state.level = 1;\r\n        state.lives = 3;\r\n        state.accuracy = { correct: 0, total: 0 };\r\n        \r\n        updateLivesUI();\r\n        document.getElementById('score-display').innerText = toBengali(state.score);\r\n        document.getElementById('level-display').innerText = toBengali(state.level);\r\n        \r\n        document.querySelectorAll('.screen').forEach(s =&gt; s.classList.remove('active'));\r\n        document.getElementById('game-screen').classList.add('active');\r\n        \r\n        resizeCanvas();\r\n        generateProblem();\r\n        announce(&quot;\u09af\u09c1\u09a6\u09cd\u09a7 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09cb!&quot;);\r\n        \r\n        if (!animationId) animationId = requestAnimationFrame(gameLoop);\r\n    }\r\n\r\n    function endGame() {\r\n        state.isPlaying = false;\r\n        cancelAnimationFrame(animationId);\r\n        animationId = null;\r\n        \r\n        document.querySelectorAll('.screen').forEach(s =&gt; s.classList.remove('active'));\r\n        document.getElementById('game-over-screen').classList.add('active');\r\n        document.getElementById('final-score').innerText = toBengali(state.score);\r\n        \r\n        if (window.GameController &amp;&amp; typeof window.GameController.saveScore === 'function') {\r\n            const acc = state.accuracy.total &gt; 0 ? Math.round((state.accuracy.correct \/ state.accuracy.total) * 100) : 0;\r\n            window.GameController.saveScore(state.score, state.level * 10, { level: state.level, accuracy: acc });\r\n        }\r\n    }\r\n\r\n    \/\/ --- Event Listeners ---\r\n    document.getElementById('start-btn').addEventListener('pointerdown', startGame);\r\n    document.getElementById('restart-btn').addEventListener('pointerdown', startGame);\r\n    \r\n    document.querySelectorAll('.option-btn').forEach(btn =&gt; {\r\n        btn.addEventListener('pointerdown', function(e) {\r\n            e.preventDefault();\r\n            const idx = parseInt(this.getAttribute('data-index'));\r\n            handleAnswer(idx);\r\n        });\r\n    });\r\n\r\n    window.addEventListener('resize', resizeCanvas);\r\n\r\n})();&lt;\/script&gt;&lt;\/body&gt;&lt;\/html&gt;\" sandbox=\"allow-scripts allow-forms allow-same-origin allow-pointer-lock\" allow=\"fullscreen; accelerometer; gyroscope\" allowfullscreen><\/iframe>\n        <\/div>\n    <\/div>\n    <script data-cfasync=\"false\">\n    (function() {\n        var wrap = document.getElementById('qsh-27092-395');\n        var btn  = document.getElementById('fs-btn-qsh-27092-395');\n        if (!wrap || !btn) return;\n        btn.addEventListener('click', function() {\n            if (!document.fullscreenElement) {\n                if (wrap.requestFullscreen) wrap.requestFullscreen();\n                else if (wrap.webkitRequestFullscreen) wrap.webkitRequestFullscreen();\n            } else {\n                if (document.exitFullscreen) document.exitFullscreen();\n            }\n        });\n        document.addEventListener('fullscreenchange', function() {\n            if (document.fullscreenElement === wrap) {\n                btn.classList.add('is-active');\n                btn.querySelector('span').textContent = 'Exit';\n            } else {\n                btn.classList.remove('is-active');\n                btn.querySelector('span').textContent = 'Expand';\n            }\n        });\n    })();\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"<p>\u0986\u099c\u0995\u09c7\u09b0 \u0997\u09c7\u09ae\u099f\u09bf \u098f\u0995\u099f\u09bf \u099c\u09be\u09a6\u09c1\u0995\u09b0\u09c0 \u09af\u09c1\u09a6\u09cd\u09a7\u09c7\u09b0! \u09a4\u09cb\u09ae\u09be\u09b0 \u09b8\u09be\u09ae\u09a8\u09c7 \u09b0\u09df\u09c7\u099b\u09c7 \u098f\u0995 \u09ac\u09bf\u09b6\u09be\u09b2 \u09a6\u09c8\u09a4\u09cd\u09af\u0964 \u09a4\u09be\u0995\u09c7 \u09b9\u09be\u09b0\u09be\u09a4\u09c7 \u09b9\u09b2\u09c7 \u09a4\u09cb\u09ae\u09be\u09b0 \u09a8\u09bf\u09a8\u099c\u09be \u09b8\u09cd\u099f\u09be\u09b0\u0995\u09c7 (Shuriken) \u099c\u09be\u09a6\u09c1\u09b0 \u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af\u09c7 \u09ea \u0997\u09c1\u09a3 \u09ac\u09be \u09ee \u0997\u09c1\u09a3 \u0995\u09b0\u09c7 \u099b\u09c1\u0981\u09dc\u09a4\u09c7 \u09b9\u09ac\u09c7\u0964 \u0986\u09b0 \u098f\u0987 \u099c\u09be\u09a6\u09c1\u09b0 \u099a\u09be\u09ac\u09bf\u0995\u09be\u09a0\u09bf \u09b9\u09b2\u09cb\u2014\u09ac\u09dc \u09b8\u0982\u0996\u09cd\u09af\u09be\u0995\u09c7 \u09ea \u09ac\u09be \u09ee \u09a6\u09bf\u09df\u09c7 \u0996\u09be\u09a4\u09be-\u0995\u09b2\u09ae \u099b\u09be\u09dc\u09be \u09a6\u09cd\u09b0\u09c1\u09a4 \u0997\u09c1\u09a3 \u0995\u09b0\u09be! \u09ea \u098f\u09ac\u0982 \u09ee \u098f\u09b0 \u09a8\u09be\u09ae\u09a4\u09be \u09ac\u09dc \u09b8\u0982\u0996\u09cd\u09af\u09be\u09b0 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7 \u09ae\u09a8\u09c7 \u09b0\u09be\u0996\u09be \u098f\u0995\u099f\u09c1 \u0995\u09a0\u09bf\u09a8 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-27092","post","type-post","status-publish","format-standard","hentry","category-mental-math-tricks"],"_links":{"self":[{"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/posts\/27092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/comments?post=27092"}],"version-history":[{"count":1,"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/posts\/27092\/revisions"}],"predecessor-version":[{"id":27093,"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/posts\/27092\/revisions\/27093"}],"wp:attachment":[{"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/media?parent=27092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/categories?post=27092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qsh.in\/boards\/wbbse\/wp-json\/wp\/v2\/tags?post=27092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}