{"id":5671,"date":"2025-02-05T21:33:50","date_gmt":"2025-02-05T20:33:50","guid":{"rendered":"https:\/\/fahrtauglich.ch\/?page_id=5671"},"modified":"2026-10-12T16:16:46","modified_gmt":"2026-10-12T14:16:46","slug":"vier-gewinnt","status":"publish","type":"page","link":"https:\/\/fahrtauglich.ch\/fr\/praxisportal\/vier-gewinnt\/","title":{"rendered":"Puissance Quatre"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5671\" class=\"elementor elementor-5671\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-279daf0 e-flex e-con-boxed e-con e-parent\" data-id=\"279daf0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1f2f64f elementor-widget elementor-widget-html\" data-id=\"1f2f64f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!--\r\n    Vier gewinnt \u2014 fahrtauglich.ch\/praxisportal\/vier-gewinnt\/\r\n    Einbau: Inhalt dieser Datei vollstaendig in EIN Elementor-HTML-Widget einfuegen.\r\n    Das Snippet deckt die ganze Seite zwischen Header und Footer ab (Titel,\r\n    Einleitung mit Link auf trainmybrain.ch, Spiel, Spielanleitung, Texte, Quellen).\r\n    Alle uebrigen Elementor-Widgets der Seite werden geloescht. Kein\r\n    <html>\/<head>\/<body>: Header und Footer liefert das Theme.\r\n\r\n    Grundlage: trainmybrain-viergewinnt.html (Stand 2026-10-12, mit dem dort\r\n    gleichzeitig verbesserten Computergegner: Sofortgewinne werden immer\r\n    genommen, Zeitbudget 0.7 s, Bedienung per Tastatur).\r\n\r\n    Optik: fahrtauglich.ch \u2014 Poppins, Gelb #FFBF00, Flaechen #F3F5F8, Pill-Buttons.\r\n    Alles CSS haengt an #ftvg, damit nichts in die Elementor-Seite durchschlaegt.\r\n-->\r\n<style>\r\n    #ftvg {\r\n        --ftvg-gelb: #FFBF00;\r\n        --ftvg-gelb-dunkel: #E6AB00;\r\n        --ftvg-gelb-hell: #FFF4CC;\r\n        --ftvg-schwarz: #000000;\r\n        --ftvg-text: #1F2937;\r\n        --ftvg-text-2: #4B5563;\r\n        --ftvg-flaeche: #F3F5F8;\r\n        --ftvg-linie: #C8D5DC;\r\n        --ftvg-gruen: #047857;\r\n        --ftvg-fehler: #B91C1C;\r\n\r\n        font-family: 'Poppins', sans-serif;\r\n        color: var(--ftvg-text);\r\n        line-height: 1.5;\r\n        width: 100%;\r\n        max-width: 850px;\r\n        margin: 20px auto 60px;\r\n        box-sizing: border-box;\r\n    }\r\n    #ftvg *, #ftvg *::before, #ftvg *::after { box-sizing: border-box; }\r\n    #ftvg [hidden] { display: none !important; }\r\n\r\n    \/* ===== Seitenkopf \u2014 Masse wie die bisherigen Elementor-Widgets ===== *\/\r\n    #ftvg .ftvg-titel {\r\n        margin: 0;\r\n        font-family: inherit;\r\n        font-size: 48px;\r\n        font-weight: 600;\r\n        line-height: 1.2;\r\n        letter-spacing: 0;\r\n        text-align: center;\r\n        color: var(--ftvg-schwarz);\r\n    }\r\n    #ftvg .ftvg-intro {\r\n        max-width: 760px;\r\n        margin: 50px auto 0;\r\n        font-size: 20px;\r\n        font-weight: 300;\r\n        line-height: 1.5;\r\n        text-align: center;\r\n        color: var(--ftvg-schwarz);\r\n    }\r\n    \/* Links: schwarz mit gelber Unterstreichung \u2014 Gelb als Schrift auf Weiss\r\n       hielte nur 1.65:1. *\/\r\n    #ftvg .ftvg-intro a,\r\n    #ftvg .ftvg-box a {\r\n        color: var(--ftvg-schwarz);\r\n        font-weight: 400;\r\n        text-decoration: underline;\r\n        text-decoration-color: var(--ftvg-gelb);\r\n        text-decoration-thickness: 3px;\r\n        text-underline-offset: 3px;\r\n        overflow-wrap: anywhere;\r\n    }\r\n    #ftvg .ftvg-intro a:hover, #ftvg .ftvg-box a:hover,\r\n    #ftvg .ftvg-intro a:focus, #ftvg .ftvg-box a:focus { color: var(--ftvg-schwarz); background: rgba(255, 191, 0, 0.18); }\r\n    #ftvg a:focus-visible { outline: 3px solid var(--ftvg-schwarz); outline-offset: 2px; }\r\n\r\n    \/* Spielkarte (Optik wie Wordle auf fahrtauglich.ch). overflow: clip statt\r\n       hidden \u2014 sonst verschiebt ein Fokus\/scrollIntoView den Karteninhalt. *\/\r\n    #ftvg .ftvg-karte {\r\n        position: relative;\r\n        overflow: clip;\r\n        background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\r\n        border: 2px solid #dee2e6;\r\n        border-radius: 20px;\r\n        box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);\r\n        padding: 36px 30px;\r\n    }\r\n    #ftvg .ftvg-karte::before {\r\n        content: '';\r\n        position: absolute;\r\n        top: -50%; left: -50%;\r\n        width: 200%; height: 200%;\r\n        background: radial-gradient(circle, rgba(52, 58, 64, 0.05) 1px, transparent 1px);\r\n        background-size: 30px 30px;\r\n        animation: ftvg-hintergrund 25s linear infinite;\r\n        z-index: 0;\r\n        pointer-events: none;\r\n    }\r\n    @keyframes ftvg-hintergrund {\r\n        0%   { transform: translate(0, 0) rotate(0deg); }\r\n        100% { transform: translate(-30px, -30px) rotate(360deg); }\r\n    }\r\n\r\n    \/* ===== Buttons (Pill-Stil der fahrtauglich.ch-Buttons) ===== *\/\r\n    #ftvg .ftvg-knopf {\r\n        -webkit-appearance: none;\r\n        appearance: none;\r\n        margin: 0;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        min-height: 48px;\r\n        padding: 10px 28px;\r\n        background: var(--ftvg-gelb);\r\n        border: 2px solid var(--ftvg-gelb);\r\n        border-radius: 100px;\r\n        box-shadow: none;\r\n        font-family: inherit;\r\n        font-size: 1rem;\r\n        font-weight: 500;\r\n        line-height: 1.2;\r\n        text-transform: none;\r\n        text-decoration: none;\r\n        color: var(--ftvg-schwarz);\r\n        cursor: pointer;\r\n        transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;\r\n    }\r\n    #ftvg .ftvg-knopf:hover,\r\n    #ftvg .ftvg-knopf:focus {\r\n        background: var(--ftvg-gelb-dunkel);\r\n        border-color: var(--ftvg-gelb-dunkel);\r\n        color: var(--ftvg-schwarz);\r\n    }\r\n    #ftvg .ftvg-knopf:hover { transform: translateY(-1px); }\r\n    #ftvg .ftvg-knopf-hell { background: #ffffff; border-color: var(--ftvg-schwarz); }\r\n    #ftvg .ftvg-knopf-hell:hover,\r\n    #ftvg .ftvg-knopf-hell:focus { background: var(--ftvg-flaeche); border-color: var(--ftvg-schwarz); }\r\n    #ftvg .ftvg-knopf-klein { min-height: 44px; padding: 8px 20px; font-size: 0.9rem; }\r\n\r\n    #ftvg .ftvg-knopf:focus-visible,\r\n    #ftvg summary:focus-visible {\r\n        outline: 3px solid var(--ftvg-schwarz);\r\n        outline-offset: 2px;\r\n    }\r\n\r\n    \/* ===== Spielanleitung ===== *\/\r\n    #ftvg .ftvg-anleitung {\r\n        margin-top: 24px;\r\n        text-align: left;\r\n        background: #ffffff;\r\n        border-radius: 8px;\r\n        box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);\r\n        padding: 15px 18px;\r\n    }\r\n    #ftvg .ftvg-anleitung summary {\r\n        cursor: pointer;\r\n        list-style: none;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 1rem;\r\n        padding: 4px 0;\r\n        font-size: 1.15rem;\r\n        font-weight: 600;\r\n        color: var(--ftvg-schwarz);\r\n        user-select: none;\r\n    }\r\n    #ftvg .ftvg-anleitung summary::-webkit-details-marker { display: none; }\r\n    #ftvg .ftvg-chev { width: 20px; height: 20px; flex: 0 0 auto; transition: transform 0.2s ease; }\r\n    #ftvg .ftvg-anleitung[open] .ftvg-chev { transform: rotate(180deg); }\r\n    #ftvg .ftvg-anleitung-liste {\r\n        list-style: none;\r\n        margin: 12px 0 4px;\r\n        padding: 0;\r\n        display: grid;\r\n        gap: 8px;\r\n    }\r\n    #ftvg .ftvg-anleitung-liste li {\r\n        margin: 0;\r\n        padding: 10px 14px;\r\n        background: var(--ftvg-flaeche);\r\n        border-left: 3px solid var(--ftvg-gelb);\r\n        border-radius: 6px;\r\n        font-size: 0.95rem;\r\n        font-weight: 300;\r\n        line-height: 1.55;\r\n        color: var(--ftvg-schwarz);\r\n    }\r\n    #ftvg .ftvg-anleitung-liste li strong { font-weight: 600; }\r\n\r\n    \/* ===== Textabschnitte (Kartenstil der bisherigen Textboxen) ===== *\/\r\n    #ftvg .ftvg-abschnitt { margin-top: 70px; }\r\n    #ftvg .ftvg-abschnitt h2 {\r\n        margin: 0 0 20px;\r\n        font-family: inherit;\r\n        font-size: 36px;\r\n        font-weight: 600;\r\n        line-height: 1.2;\r\n        letter-spacing: 0;\r\n        text-transform: none;\r\n        text-align: center;\r\n        color: var(--ftvg-schwarz);\r\n    }\r\n    #ftvg .ftvg-box {\r\n        background: #ffffff;\r\n        border-radius: 8px;\r\n        box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\r\n        padding: 15px 20px;\r\n        font-size: 22px;\r\n        font-weight: 300;\r\n        line-height: 1.5;\r\n        color: var(--ftvg-schwarz);\r\n        text-align: left;\r\n    }\r\n    #ftvg .ftvg-box p { margin: 0 0 14px; }\r\n    #ftvg .ftvg-box p:last-child { margin-bottom: 0; }\r\n    #ftvg .ftvg-box strong { font-weight: 500; }\r\n\r\n    #ftvg .ftvg-tipps { margin: 0; padding-left: 1.2em; }\r\n    #ftvg .ftvg-tipps li { margin: 0 0 14px; padding-left: 0.2em; }\r\n    #ftvg .ftvg-tipps li:last-child { margin-bottom: 0; }\r\n    #ftvg .ftvg-tipps li::marker { color: var(--ftvg-gelb-dunkel); }\r\n    #ftvg .ftvg-tipps strong { display: block; }\r\n\r\n    #ftvg .ftvg-nutzen { list-style: none; margin: 6px 0 14px; padding: 0; }\r\n    #ftvg .ftvg-nutzen li {\r\n        display: grid;\r\n        grid-template-columns: 2.4em 1fr;\r\n        gap: 0 0.6em;\r\n        padding: 14px 0;\r\n        border-top: 1px solid var(--ftvg-linie);\r\n    }\r\n    #ftvg .ftvg-nutzen li:last-child { border-bottom: 1px solid var(--ftvg-linie); }\r\n    #ftvg .ftvg-nutzen-nr { font-weight: 600; line-height: 1.5; color: var(--ftvg-gelb-dunkel); }\r\n    #ftvg .ftvg-nutzen strong { display: block; }\r\n    #ftvg .ftvg-vermerk {\r\n        padding: 10px 14px;\r\n        background: var(--ftvg-flaeche);\r\n        border-left: 3px solid var(--ftvg-gelb);\r\n        border-radius: 6px;\r\n        font-size: 0.85em;\r\n    }\r\n    #ftvg .ftvg-quellen-titel { margin-top: 20px !important; font-weight: 500; }\r\n    #ftvg .ftvg-quellen { list-style: none; margin: 0; padding: 0; font-size: 0.8em; }\r\n    #ftvg .ftvg-quellen li { margin: 0 0 10px; }\r\n    #ftvg .ftvg-quellen li:last-child { margin-bottom: 0; }\r\n\r\n    #ftvg .ftvg-sr { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }\r\n    #ftvg {\r\n        --disc-p1: #E53935;\r\n        --disc-p2: #FFBF00;\r\n        \/* Zellgroesse aus der verfuegbaren Breite: 7 Zellen + 6 Luecken (5px)\r\n           + Brettrand (2 x 8px) + Kartenpolster *\/\r\n        --vg-cell: clamp(28px, calc((min(95vw, 680px) - 110px) \/ 7), 62px);\r\n    }\r\n\r\n    \/* ===== Spielbereich ===== *\/\r\n    #ftvg .ftvg-spiel {\r\n        max-width: 680px;\r\n        margin: 34px auto 0;\r\n        text-align: center;\r\n    }\r\n    #ftvg .vg-screen {\r\n        position: relative;\r\n        z-index: 1;\r\n        display: none;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        gap: 18px;\r\n        width: 100%;\r\n    }\r\n    #ftvg .vg-screen.aktiv { display: flex; }\r\n    #ftvg .vg-modus-h2 { margin: 0; font-size: 1.3rem; font-weight: 600; color: var(--ftvg-schwarz); }\r\n    #ftvg .vg-modus-buttons,\r\n    #ftvg .vg-schwierigkeit-buttons { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }\r\n    #ftvg .ftvg-text { max-width: 44ch; margin: 0; font-size: 0.9rem; color: var(--ftvg-text-2); }\r\n\r\n    \/* Zuganzeige *\/\r\n    #ftvg .vg-zug-anzeige {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        min-height: 2rem;\r\n        font-size: 1.05rem;\r\n        font-weight: 600;\r\n        color: var(--ftvg-schwarz);\r\n    }\r\n    #ftvg .vg-zug-chip { width: 22px; height: 22px; border-radius: 50%; display: inline-block; flex-shrink: 0; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); }\r\n\r\n    \/* Vorschau-Zeile: gleiche Spalten wie das Brett *\/\r\n    #ftvg .vg-vorschau {\r\n        display: grid;\r\n        grid-template-columns: repeat(7, var(--vg-cell));\r\n        gap: 5px;\r\n        padding: 0 8px;\r\n        height: calc(var(--vg-cell) * 0.9);\r\n        align-items: center;\r\n        margin-bottom: -10px;\r\n    }\r\n    #ftvg .vg-vorschau-disc {\r\n        width: calc(var(--vg-cell) * 0.82);\r\n        height: calc(var(--vg-cell) * 0.82);\r\n        border-radius: 50%;\r\n        margin: auto;\r\n        opacity: 0;\r\n        transition: opacity 0.12s;\r\n    }\r\n    #ftvg .vg-vorschau-disc.aktiv    { opacity: 0.55; }\r\n    #ftvg .vg-vorschau-disc.aktiv.p1 { background: var(--disc-p1); }\r\n    #ftvg .vg-vorschau-disc.aktiv.p2 { background: var(--disc-p2); }\r\n\r\n    \/* Brett *\/\r\n    #ftvg .vg-brett-wrapper { position: relative; touch-action: manipulation; border-radius: 16px; }\r\n    #ftvg .vg-brett-wrapper:focus { outline: none; }\r\n    #ftvg .vg-brett-wrapper:focus-visible { outline: 3px solid var(--ftvg-schwarz); outline-offset: 4px; }\r\n    #ftvg .vg-brett-wrapper.warten .vg-zelle { pointer-events: none; }\r\n    #ftvg .vg-brett-wrapper.warten .vg-brett { cursor: default; }\r\n    #ftvg .vg-brett {\r\n        display: grid;\r\n        grid-template-columns: repeat(7, var(--vg-cell));\r\n        gap: 5px;\r\n        padding: 8px;\r\n        background: #343a40;\r\n        border-radius: 16px;\r\n        box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);\r\n        cursor: pointer;\r\n    }\r\n    #ftvg .vg-zelle {\r\n        width: var(--vg-cell);\r\n        height: var(--vg-cell);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        background: #F8F9FA;\r\n        border-radius: 50%;\r\n        box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.25);\r\n        transition: background 0.12s;\r\n    }\r\n    #ftvg .vg-zelle:hover { background: #ffffff; }\r\n    #ftvg .vg-disc {\r\n        width: 0;\r\n        height: 0;\r\n        border-radius: 50%;\r\n        transition: width 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), height 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);\r\n    }\r\n    #ftvg .vg-zelle.besetzt .vg-disc { width: calc(var(--vg-cell) * 0.82); height: calc(var(--vg-cell) * 0.82); }\r\n    #ftvg .vg-disc.p1 { background: var(--disc-p1); box-shadow: 0 2px 8px rgba(229, 57, 53, 0.45); }\r\n    #ftvg .vg-disc.p2 { background: var(--disc-p2); box-shadow: 0 2px 8px rgba(230, 171, 0, 0.45); }\r\n    @keyframes ftvg-gewinn {\r\n        0%   { transform: scale(1); }\r\n        40%  { transform: scale(1.18); }\r\n        100% { transform: scale(1); }\r\n    }\r\n    #ftvg .vg-zelle.gewinn .vg-disc { animation: ftvg-gewinn 0.8s ease-in-out infinite; }\r\n    \/* Gewinnreihe auch ohne Animation erkennbar *\/\r\n    #ftvg .vg-zelle.gewinn { box-shadow: 0 0 0 3px #ffffff, inset 0 2px 6px rgba(0, 0, 0, 0.25); }\r\n\r\n    #ftvg .vg-menu-zeile { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; align-items: center; }\r\n    #ftvg .vg-bestaetigung { display: contents; }\r\n    #ftvg .ftvg-knopf-warnung { background: #ffffff; border-color: var(--ftvg-fehler); color: var(--ftvg-fehler); }\r\n    #ftvg .ftvg-knopf-warnung:hover, #ftvg .ftvg-knopf-warnung:focus { background: #FEF2F2; border-color: var(--ftvg-fehler); color: var(--ftvg-fehler); }\r\n\r\n    \/* ===== Ergebnisdialog ===== *\/\r\n    #ftvg .modal {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 100000;\r\n        display: none;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 20px;\r\n    }\r\n    #ftvg .modal.active { display: flex; }\r\n    #ftvg .modal-overlay { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.4); backdrop-filter: blur(5px); }\r\n    #ftvg .modal-content {\r\n        position: relative;\r\n        width: 100%;\r\n        max-width: 420px;\r\n        background: #ffffff;\r\n        border-radius: 15px;\r\n        box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\r\n        padding: 30px 24px 24px;\r\n        text-align: center;\r\n        animation: ftvg-modal-ein 0.25s ease;\r\n    }\r\n    @keyframes ftvg-modal-ein {\r\n        from { opacity: 0; transform: scale(0.96) translateY(12px); }\r\n        to   { opacity: 1; transform: none; }\r\n    }\r\n    #ftvg .modal h2 { margin: 0 0 6px; font-family: inherit; font-size: 1.6rem; font-weight: 600; line-height: 1.2; color: var(--ftvg-text); }\r\n    #ftvg .modal p { margin: 0; color: var(--ftvg-text-2); }\r\n    #ftvg .vg-modal-disc-row { display: flex; justify-content: center; gap: 10px; margin: 14px 0 16px; }\r\n    #ftvg .vg-modal-disc { width: 34px; height: 34px; border-radius: 50%; }\r\n    #ftvg .vg-modal-disc.p1 { background: var(--disc-p1); }\r\n    #ftvg .vg-modal-disc.p2 { background: var(--disc-p2); }\r\n    #ftvg .vg-modal-knopfe { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: 18px; }\r\n\r\n    #ftvg .ftvg-sr { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }\r\n\r\n    \/* ===== Responsive (Elementor: Tablet <= 1024px, Handy <= 767px) ===== *\/\r\n    @media (max-width: 1024px) {\r\n        #ftvg .ftvg-titel { font-size: 45px; }\r\n        #ftvg .ftvg-intro { font-size: 16px; margin-top: 30px; }\r\n        #ftvg .ftvg-box   { font-size: 16px; }\r\n    }\r\n    @media (max-width: 768px) {\r\n        #ftvg { max-width: 95%; }\r\n        #ftvg .ftvg-karte { padding: 24px 20px; }\r\n    }\r\n    @media (max-width: 767px) {\r\n        #ftvg .ftvg-titel { font-size: 28px; }\r\n        #ftvg .ftvg-intro { margin-top: 20px; }\r\n        #ftvg .ftvg-spiel { margin-top: 24px; }\r\n        #ftvg .ftvg-abschnitt { margin-top: 50px; }\r\n        #ftvg .ftvg-abschnitt h2 { font-size: 28px; }\r\n        #ftvg .ftvg-box   { padding: 15px; }\r\n    }\r\n    @media (max-width: 520px) {\r\n        #ftvg { --vg-cell: clamp(28px, calc((95vw - 76px) \/ 7), 62px); }\r\n        #ftvg .ftvg-karte { padding: 18px 8px; border-radius: 16px; }\r\n        #ftvg .vg-modus-buttons, #ftvg .vg-schwierigkeit-buttons { flex-direction: column; align-items: stretch; width: 100%; max-width: 280px; }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n        #ftvg *, #ftvg *::before, #ftvg *::after {\r\n            animation-duration: 0.01ms !important;\r\n            animation-iteration-count: 1 !important;\r\n            transition-duration: 0.01ms !important;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<div id=\"ftvg\">\r\n\r\n    <div class=\"ftvg-sr\" aria-live=\"polite\" aria-atomic=\"true\" id=\"ftvg-sr\"><\/div>\r\n\r\n    <h1 class=\"ftvg-titel\">Vier gewinnt<\/h1>\r\n\r\n    <p class=\"ftvg-intro\">Bringen Sie vier Steine in eine Reihe, bevor es Ihr Gegner tut. Spielen Sie gegen den Computer oder zu zweit am selben Ger\u00e4t. Weitere Spiele f\u00fcr Ged\u00e4chtnis, Konzentration und Logik finden Sie auf <a href=\"https:\/\/trainmybrain.ch\/\">trainmybrain.ch<\/a>, unserer Plattform f\u00fcr kognitive Spiele.<\/p>\r\n\r\n    <div class=\"ftvg-spiel\">\r\n\r\n        <section class=\"ftvg-karte\" aria-label=\"Vier gewinnt Spielbereich\">\r\n\r\n            <!-- 1: Spielmodus -->\r\n            <div class=\"vg-screen aktiv\" id=\"ftvg-screen-modus\">\r\n                <p class=\"vg-modus-h2\">Spielmodus w\u00e4hlen<\/p>\r\n                <div class=\"vg-modus-buttons\">\r\n                    <button type=\"button\" class=\"ftvg-knopf\" id=\"ftvg-btn-pvc\">Gegen den Computer<\/button>\r\n                    <button type=\"button\" class=\"ftvg-knopf ftvg-knopf-hell\" id=\"ftvg-btn-pvp\">Zu zweit<\/button>\r\n                <\/div>\r\n                <p class=\"ftvg-text\">Sie spielen mit den roten Steinen und beginnen.<\/p>\r\n            <\/div>\r\n\r\n            <!-- 2: Schwierigkeit -->\r\n            <div class=\"vg-screen\" id=\"ftvg-screen-schwierigkeit\">\r\n                <p class=\"vg-modus-h2\">Schwierigkeit<\/p>\r\n                <div class=\"vg-schwierigkeit-buttons\">\r\n                    <button type=\"button\" class=\"ftvg-knopf ftvg-knopf-hell\" id=\"ftvg-btn-einfach\">Einfach<\/button>\r\n                    <button type=\"button\" class=\"ftvg-knopf\" id=\"ftvg-btn-mittel\">Mittel<\/button>\r\n                    <button type=\"button\" class=\"ftvg-knopf ftvg-knopf-hell\" id=\"ftvg-btn-schwer\">Schwer<\/button>\r\n                <\/div>\r\n                <button type=\"button\" class=\"ftvg-knopf ftvg-knopf-hell ftvg-knopf-klein\" id=\"ftvg-btn-zurueck\">\u2190 Zur\u00fcck<\/button>\r\n            <\/div>\r\n\r\n            <!-- 3: Spiel -->\r\n            <div class=\"vg-screen\" id=\"ftvg-screen-spiel\">\r\n                <div class=\"vg-zug-anzeige\">\r\n                    <span class=\"vg-zug-chip\" id=\"ftvg-zug-chip\"><\/span>\r\n                    <span id=\"ftvg-zug-text\">Spieler 1 ist dran<\/span>\r\n                <\/div>\r\n                <div class=\"vg-vorschau\" id=\"ftvg-vorschau\" aria-hidden=\"true\"><\/div>\r\n                <div class=\"vg-brett-wrapper\" id=\"ftvg-brett-wrapper\" tabindex=\"0\" aria-label=\"Spielbrett. Mit Pfeil links und rechts die Spalte w\u00e4hlen, mit Enter setzen, oder Taste 1 bis 7.\">\r\n                    <div class=\"vg-brett\" id=\"ftvg-brett\" role=\"grid\" aria-label=\"Vier gewinnt Brett\"><\/div>\r\n                <\/div>\r\n                <div class=\"vg-menu-zeile\">\r\n                    <button type=\"button\" class=\"ftvg-knopf ftvg-knopf-hell ftvg-knopf-klein\" id=\"ftvg-btn-menue\">Men\u00fc<\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/section>\r\n\r\n        <!-- Spielanleitung -->\r\n        <details class=\"ftvg-anleitung\" id=\"ftvg-anleitung\">\r\n            <summary>\r\n                Spielanleitung\r\n                <svg class=\"ftvg-chev\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n            <\/summary>\r\n            <ul class=\"ftvg-anleitung-liste\">\r\n                <li><strong>Spielmodus:<\/strong> \u00abGegen den Computer\u00bb oder \u00abZu zweit\u00bb abwechselnd am selben Ger\u00e4t.<\/li>\r\n                <li><strong>Schwierigkeit:<\/strong> Einfach rechnet 2 Z\u00fcge voraus, Mittel 4, Schwer bis zu 6, jeweils eigene und gegnerische Z\u00fcge zusammengez\u00e4hlt.<\/li>\r\n                <li><strong>Stein setzen:<\/strong> Tippen oder klicken Sie auf eine Spalte. Der Stein f\u00e4llt auf den untersten freien Platz.<\/li>\r\n                <li><strong>Tastatur:<\/strong> Brett mit der Tabulatortaste anw\u00e4hlen, mit \u2190 \u2192 die Spalte w\u00e4hlen und mit Enter setzen. Die Tasten 1 bis 7 setzen direkt.<\/li>\r\n                <li><strong>Gewinnen:<\/strong> Wer zuerst vier Steine in einer Reihe hat, waagrecht, senkrecht oder diagonal, gewinnt. Ist das Brett voll, endet das Spiel unentschieden.<\/li>\r\n                <li><strong>Men\u00fc:<\/strong> Bricht die Partie nach einer R\u00fcckfrage ab.<\/li>\r\n            <\/ul>\r\n        <\/details>\r\n\r\n    <\/div><!-- \/.ftvg-spiel -->\r\n\r\n    <!-- ===== Wie funktioniert Vier gewinnt? ===== -->\r\n    <section class=\"ftvg-abschnitt\" aria-labelledby=\"ftvg-h-regeln\">\r\n        <h2 id=\"ftvg-h-regeln\">Wie funktioniert Vier gewinnt?<\/h2>\r\n        <div class=\"ftvg-box\">\r\n            <p>Vier gewinnt wird auf einem senkrecht stehenden Brett mit 7 Spalten und 6 Reihen gespielt. Zwei Spieler werfen abwechselnd einen Stein in eine Spalte, der Stein f\u00e4llt bis auf den untersten freien Platz. Wer zuerst vier eigene Steine in einer Linie hat, waagrecht, senkrecht oder diagonal, gewinnt.<\/p>\r\n            <p>Auf dieser Seite spielen Sie gegen einen Computergegner in drei Stufen oder zu zweit am selben Ger\u00e4t. Der Computer pr\u00fcft vor jedem Zug, wie sich die Partie in den n\u00e4chsten Z\u00fcgen entwickeln kann, und w\u00e4hlt den besten Zug. Je h\u00f6her die Stufe, desto weiter rechnet er voraus.<\/p>\r\n        <\/div>\r\n    <\/section>\r\n\r\n    <!-- ===== Nutzen ===== -->\r\n    <section class=\"ftvg-abschnitt\" aria-labelledby=\"ftvg-h-nutzen\">\r\n        <h2 id=\"ftvg-h-nutzen\">Was ist der Nutzen von Vier gewinnt?<\/h2>\r\n        <div class=\"ftvg-box\">\r\n            <p>Hinter den einfachen Regeln steckt ein echtes Strategiespiel. Gefordert sind:<\/p>\r\n            <ol class=\"ftvg-nutzen\">\r\n                <li><span class=\"ftvg-nutzen-nr\" aria-hidden=\"true\">01<\/span><div><strong>Vorausdenken<\/strong>Was passiert, wenn ich hier setze, und was antwortet der Gegner? Gute Z\u00fcge entstehen aus mehreren Schritten Planung.<\/div><\/li>\r\n                <li><span class=\"ftvg-nutzen-nr\" aria-hidden=\"true\">02<\/span><div><strong>Muster erkennen<\/strong>Drohende Viererreihen schnell erkennen, auch die schr\u00e4g verlaufenden.<\/div><\/li>\r\n                <li><span class=\"ftvg-nutzen-nr\" aria-hidden=\"true\">03<\/span><div><strong>Aufmerksamkeit<\/strong>Ein einziger \u00fcbersehener Zug des Gegners kann die Partie entscheiden.<\/div><\/li>\r\n                <li><span class=\"ftvg-nutzen-nr\" aria-hidden=\"true\">04<\/span><div><strong>Umschalten<\/strong>Zwischen Angriff und Verteidigung wechseln, oft im selben Zug.<\/div><\/li>\r\n            <\/ol>\r\n            <p class=\"ftvg-vermerk\">Vier gewinnt ist ein Denkspiel zur Unterhaltung und zum \u00dcben. Es ist kein Test und sagt nichts \u00fcber die Fahreignung aus.<\/p>\r\n        <\/div>\r\n    <\/section>\r\n\r\n    <!-- ===== Tipps ===== -->\r\n    <section class=\"ftvg-abschnitt\" aria-labelledby=\"ftvg-h-tipps\">\r\n        <h2 id=\"ftvg-h-tipps\">Tipps f\u00fcr Vier gewinnt<\/h2>\r\n        <div class=\"ftvg-box\">\r\n            <ul class=\"ftvg-tipps\">\r\n                <li><strong>Die Mitte besetzen<\/strong>Ein Stein in der mittleren Spalte kann zu mehr Viererreihen geh\u00f6ren als einer am Rand.<\/li>\r\n                <li><strong>Erst schauen, dann setzen<\/strong>Pr\u00fcfen Sie vor jedem Zug: Hat der Gegner irgendwo drei in einer Reihe, auch schr\u00e4g? Dann zuerst blockieren.<\/li>\r\n                <li><strong>Zwei Drohungen gleichzeitig<\/strong>Bauen Sie zwei Stellen auf, an denen Sie im n\u00e4chsten Zug gewinnen k\u00f6nnten. Der Gegner kann nur eine davon verhindern.<\/li>\r\n                <li><strong>Nicht unter die gegnerische L\u00fccke setzen<\/strong>Ein Stein direkt unter dem Feld, das dem Gegner zum Sieg fehlt, \u00f6ffnet ihm genau dieses Feld.<\/li>\r\n            <\/ul>\r\n        <\/div>\r\n    <\/section>\r\n\r\n    <!-- ===== Geschichte ===== -->\r\n    <section class=\"ftvg-abschnitt\" aria-labelledby=\"ftvg-h-geschichte\">\r\n        <h2 id=\"ftvg-h-geschichte\">Geschichte<\/h2>\r\n        <div class=\"ftvg-box\">\r\n            <p>Vier gewinnt stammt von Howard Wexler, mit Ideen von Ned Strongin. Der Spielwarenhersteller Milton Bradley brachte es 1974 unter dem Namen \u00abConnect Four\u00bb heraus, auf Deutsch erschien es als \u00abVier gewinnt\u00bb.<\/p>\r\n            <p>Mathematisch ist das Spiel gel\u00f6st: 1988 zeigten James D. Allen und unabh\u00e4ngig davon Victor Allis, dass der beginnende Spieler bei fehlerfreiem Spiel immer gewinnen kann, wenn er in der mittleren Spalte beginnt. F\u00fcr Menschen ist dieser Weg allerdings viel zu lang, um ihn auswendig zu spielen.<\/p>\r\n            <p class=\"ftvg-quellen-titel\">Quellen<\/p>\r\n            <ul class=\"ftvg-quellen\">\r\n                <li>Allis, L. V. (1988). <em>A Knowledge-based Approach of Connect-Four. The Game is Solved: White Wins.<\/em> Masterarbeit, Vrije Universiteit Amsterdam.<\/li>\r\n                <li>Wikipedia: Vier gewinnt. <a href=\"https:\/\/de.wikipedia.org\/wiki\/Vier_gewinnt\" target=\"_blank\" rel=\"noopener\">https:\/\/de.wikipedia.org\/wiki\/Vier_gewinnt<\/a><\/li>\r\n            <\/ul>\r\n        <\/div>\r\n    <\/section>\r\n\r\n    <!-- Ergebnisdialog: Klick daneben schliesst ihn bewusst nicht -->\r\n    <div class=\"modal\" id=\"ftvg-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"ftvg-ergebnis-titel\">\r\n        <div class=\"modal-overlay\"><\/div>\r\n        <div class=\"modal-content\">\r\n            <h2 id=\"ftvg-ergebnis-titel\">Spieler 1 gewinnt!<\/h2>\r\n            <div class=\"vg-modal-disc-row\" id=\"ftvg-gewinn-scheiben\"><\/div>\r\n            <p id=\"ftvg-ergebnis-text\"><\/p>\r\n            <div class=\"vg-modal-knopfe\">\r\n                <button type=\"button\" class=\"ftvg-knopf\" id=\"ftvg-btn-nochmal\">Nochmal<\/button>\r\n                <button type=\"button\" class=\"ftvg-knopf ftvg-knopf-hell\" id=\"ftvg-btn-menu-modal\">Men\u00fc<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n(function () {\r\n    'use strict';\r\n\r\n    \/\/ Elementor oder ein Optimierungs-Plugin kann das Skript nach\r\n    \/\/ DOMContentLoaded ausfuehren \u2014 dann wuerde ein reiner Listener nie feuern.\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', ftvgStart);\r\n    } else {\r\n        ftvgStart();\r\n    }\r\n\r\n    function ftvgStart() {\r\n        const root = document.getElementById('ftvg');\r\n        if (!root || root.dataset.ftvgBereit) return;\r\n        root.dataset.ftvgBereit = '1';\r\n\r\n        \/** Spielereignis an GTM (dataLayer). Nur Spieldaten, keine Personendaten. *\/\r\n        function ftEvent(daten) {\r\n            try {\r\n                window.dataLayer = window.dataLayer || [];\r\n                window.dataLayer.push(Object.assign({ spiel_seite: 'fahrtauglich' }, daten));\r\n            } catch (e) {}\r\n        }\r\n\r\n        const REIHEN  = 6;\r\n        const SPALTEN = 7;\r\n        const LEER    = 0;\r\n        const SP1     = 1;   \/\/ Player 1 \u2014 red\r\n        const SP2     = 2;   \/\/ Player 2 \/ Computer \u2014 yellow\r\n\r\n        \/\/ Center-first column order gives AI better pruning\r\n        const KI_REIHENFOLGE = [3, 2, 4, 1, 5, 0, 6];\r\n\r\n        let brett        = [];\r\n        let spielModus   = 'pvc';\r\n        let ki_tiefe     = 4;\r\n        let aktSpieler   = SP1;\r\n        let spielVorbei  = false;\r\n        let computerDran = false;\r\n\r\n        \/\/ Timer IDs \u2014 stored so they can be cancelled when leaving the game\r\n        let kiZugTimer    = null;\r\n        let ergebnisTimer = null;\r\n\r\n        \/* --- DOM refs --- *\/\r\n        const scrModus    = document.getElementById('ftvg-screen-modus');\r\n        const scrSchw     = document.getElementById('ftvg-screen-schwierigkeit');\r\n        const scrSpiel    = document.getElementById('ftvg-screen-spiel');\r\n        const brett_el    = document.getElementById('ftvg-brett');\r\n        const vorschau_el = document.getElementById('ftvg-vorschau');\r\n        const zugChip     = document.getElementById('ftvg-zug-chip');\r\n        const zugText     = document.getElementById('ftvg-zug-text');\r\n        const brettWrap   = document.getElementById('ftvg-brett-wrapper');\r\n        const meldung     = document.getElementById('ftvg-sr');\r\n\r\n        \/* ============================================================\r\n           SCREEN SWITCHING\r\n           ============================================================ *\/\r\n        function zeigeScreen(name) {\r\n            scrModus.classList.remove('aktiv');\r\n            scrSchw.classList.remove('aktiv');\r\n            scrSpiel.classList.remove('aktiv');\r\n            if      (name === 'modus') scrModus.classList.add('aktiv');\r\n            else if (name === 'schw')  scrSchw.classList.add('aktiv');\r\n            else if (name === 'spiel') scrSpiel.classList.add('aktiv');\r\n        }\r\n\r\n        \/* ============================================================\r\n           BOARD RENDERING\r\n           ============================================================ *\/\r\n        function neuBrett() {\r\n            brett = Array.from({length: REIHEN}, () => Array(SPALTEN).fill(LEER));\r\n        }\r\n\r\n        function renderBrett() {\r\n            brett_el.innerHTML = '';\r\n            for (let r = 0; r < REIHEN; r++) {\r\n                for (let c = 0; c < SPALTEN; c++) {\r\n                    const zelle = document.createElement('div');\r\n                    zelle.className = 'vg-zelle';\r\n                    zelle.dataset.r = r;\r\n                    zelle.dataset.c = c;\r\n                    zelle.setAttribute('role', 'gridcell');\r\n                    const disc = document.createElement('div');\r\n                    disc.className = 'vg-disc';\r\n                    if      (brett[r][c] === SP1) { disc.classList.add('p1'); zelle.classList.add('besetzt'); }\r\n                    else if (brett[r][c] === SP2) { disc.classList.add('p2'); zelle.classList.add('besetzt'); }\r\n                    zelle.appendChild(disc);\r\n                    brett_el.appendChild(zelle);\r\n                }\r\n            }\r\n        }\r\n\r\n        \/\/ Update a single cell after a move \u2014 avoids full re-render\r\n        function renderZelle(r, c) {\r\n            const idx  = r * SPALTEN + c;\r\n            const zelle = brett_el.children[idx];\r\n            const disc  = zelle.querySelector('.vg-disc');\r\n            disc.classList.add(brett[r][c] === SP1 ? 'p1' : 'p2');\r\n            zelle.classList.add('besetzt');\r\n        }\r\n\r\n        function renderVorschau() {\r\n            vorschau_el.innerHTML = '';\r\n            for (let c = 0; c < SPALTEN; c++) {\r\n                const d = document.createElement('div');\r\n                d.className = 'vg-vorschau-disc';\r\n                d.dataset.c = c;\r\n                vorschau_el.appendChild(d);\r\n            }\r\n        }\r\n\r\n        \/* ============================================================\r\n           PREVIEW ROW\r\n           ============================================================ *\/\r\n        function zeigeVorschau(spalte) {\r\n            if (spielVorbei || computerDran) return;\r\n            const klasse = aktSpieler === SP1 ? 'p1' : 'p2';\r\n            vorschau_el.querySelectorAll('.vg-vorschau-disc').forEach((d, i) => {\r\n                d.className = 'vg-vorschau-disc';\r\n                if (i === spalte && istGueltig(spalte)) {\r\n                    d.classList.add('aktiv', klasse);\r\n                }\r\n            });\r\n        }\r\n\r\n        function versteckeVorschau() {\r\n            vorschau_el.querySelectorAll('.vg-vorschau-disc').forEach(d => {\r\n                d.className = 'vg-vorschau-disc';\r\n            });\r\n        }\r\n\r\n        \/* ============================================================\r\n           TURN INDICATOR\r\n           ============================================================ *\/\r\n        function aktualisiereTurn() {\r\n            zugChip.style.background = aktSpieler === SP1 ? 'var(--disc-p1)' : 'var(--disc-p2)';\r\n            if (spielModus === 'pvc') {\r\n                zugText.textContent = aktSpieler === SP1 ? 'Ihr Zug' : 'Computer denkt\u2026';\r\n            } else {\r\n                zugText.textContent = aktSpieler === SP1 ? 'Spieler 1 ist dran' : 'Spieler 2 ist dran';\r\n            }\r\n            meldung.textContent = zugText.textContent;\r\n        }\r\n\r\n        \/* ============================================================\r\n           GAME LOGIC\r\n           ============================================================ *\/\r\n        function istGueltig(spalte) {\r\n            return brett[0][spalte] === LEER;\r\n        }\r\n\r\n        function naechsteReihe(spalte) {\r\n            for (let r = REIHEN - 1; r >= 0; r--) {\r\n                if (brett[r][spalte] === LEER) return r;\r\n            }\r\n            return -1;\r\n        }\r\n\r\n        function setzeScheibe(spalte, spieler) {\r\n            const r = naechsteReihe(spalte);\r\n            if (r === -1) return null;\r\n            brett[r][spalte] = spieler;\r\n            return {r, c: spalte};\r\n        }\r\n\r\n        \/\/ Returns array of 4 winning {r,c} objects, or null\r\n        function pruefeGewinn(spieler) {\r\n            \/\/ Horizontal\r\n            for (let r = 0; r < REIHEN; r++) {\r\n                for (let c = 0; c <= SPALTEN - 4; c++) {\r\n                    if (brett[r][c] === spieler && brett[r][c+1] === spieler &&\r\n                        brett[r][c+2] === spieler && brett[r][c+3] === spieler) {\r\n                        return [{r, c}, {r, c:c+1}, {r, c:c+2}, {r, c:c+3}];\r\n                    }\r\n                }\r\n            }\r\n            \/\/ Vertical\r\n            for (let c = 0; c < SPALTEN; c++) {\r\n                for (let r = 0; r <= REIHEN - 4; r++) {\r\n                    if (brett[r][c] === spieler && brett[r+1][c] === spieler &&\r\n                        brett[r+2][c] === spieler && brett[r+3][c] === spieler) {\r\n                        return [{r, c}, {r:r+1, c}, {r:r+2, c}, {r:r+3, c}];\r\n                    }\r\n                }\r\n            }\r\n            \/\/ Diagonal \u2198 (rows increase, columns increase)\r\n            for (let r = 0; r <= REIHEN - 4; r++) {\r\n                for (let c = 0; c <= SPALTEN - 4; c++) {\r\n                    if (brett[r][c] === spieler && brett[r+1][c+1] === spieler &&\r\n                        brett[r+2][c+2] === spieler && brett[r+3][c+3] === spieler) {\r\n                        return [{r, c}, {r:r+1, c:c+1}, {r:r+2, c:c+2}, {r:r+3, c:c+3}];\r\n                    }\r\n                }\r\n            }\r\n            \/\/ Diagonal \u2197 (rows decrease, columns increase)\r\n            \/\/ Note: source had a bug here \u2014 third element was brett[r][c+2] instead of brett[r-2][c+2]\r\n            for (let r = 3; r < REIHEN; r++) {\r\n                for (let c = 0; c <= SPALTEN - 4; c++) {\r\n                    if (brett[r][c] === spieler && brett[r-1][c+1] === spieler &&\r\n                        brett[r-2][c+2] === spieler && brett[r-3][c+3] === spieler) {\r\n                        return [{r, c}, {r:r-1, c:c+1}, {r:r-2, c:c+2}, {r:r-3, c:c+3}];\r\n                    }\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        function istUnentschieden() {\r\n            return brett[0].every(v => v !== LEER);\r\n        }\r\n\r\n        function markiereGewinn(felder) {\r\n            felder.forEach(({r, c}) => {\r\n                brett_el.children[r * SPALTEN + c].classList.add('gewinn');\r\n            });\r\n        }\r\n\r\n        \/* ============================================================\r\n           MINIMAX AI WITH ALPHA-BETA PRUNING\r\n           Positive scores favour SP2 (computer), negative favour SP1 (player).\r\n           ============================================================ *\/\r\n        function bewerteFenster(fenster, spieler) {\r\n            const gegner = spieler === SP2 ? SP1 : SP2;\r\n            const eigene = fenster.filter(v => v === spieler).length;\r\n            const leere  = fenster.filter(v => v === LEER).length;\r\n            const geg    = fenster.filter(v => v === gegner).length;\r\n            let punkte = 0;\r\n            if      (eigene === 4)               punkte += 100;\r\n            else if (eigene === 3 && leere === 1) punkte +=   5;\r\n            else if (eigene === 2 && leere === 2) punkte +=   2;\r\n            if (geg === 3 && leere === 1)         punkte -=   4;\r\n            return punkte;\r\n        }\r\n\r\n        function bewerteBrett(spieler) {\r\n            let punkte = 0;\r\n            \/\/ Center column bonus \u2014 center pieces are most versatile\r\n            for (let r = 0; r < REIHEN; r++) {\r\n                if (brett[r][3] === spieler) punkte += 3;\r\n            }\r\n            \/\/ Horizontal windows\r\n            for (let r = 0; r < REIHEN; r++) {\r\n                for (let c = 0; c <= SPALTEN - 4; c++) {\r\n                    punkte += bewerteFenster(\r\n                        [brett[r][c], brett[r][c+1], brett[r][c+2], brett[r][c+3]], spieler);\r\n                }\r\n            }\r\n            \/\/ Vertical windows\r\n            for (let c = 0; c < SPALTEN; c++) {\r\n                for (let r = 0; r <= REIHEN - 4; r++) {\r\n                    punkte += bewerteFenster(\r\n                        [brett[r][c], brett[r+1][c], brett[r+2][c], brett[r+3][c]], spieler);\r\n                }\r\n            }\r\n            \/\/ Diagonal \u2198\r\n            for (let r = 0; r <= REIHEN - 4; r++) {\r\n                for (let c = 0; c <= SPALTEN - 4; c++) {\r\n                    punkte += bewerteFenster(\r\n                        [brett[r][c], brett[r+1][c+1], brett[r+2][c+2], brett[r+3][c+3]], spieler);\r\n                }\r\n            }\r\n            \/\/ Diagonal \u2197 (same fix applied)\r\n            for (let r = 3; r < REIHEN; r++) {\r\n                for (let c = 0; c <= SPALTEN - 4; c++) {\r\n                    punkte += bewerteFenster(\r\n                        [brett[r][c], brett[r-1][c+1], brett[r-2][c+2], brett[r-3][c+3]], spieler);\r\n                }\r\n            }\r\n            return punkte;\r\n        }\r\n\r\n        \/\/ Gewinnpruefung nur um den zuletzt gesetzten Stein. Im Suchbaum ersetzt\r\n        \/\/ das drei Komplett-Durchsuchungen des Bretts je Knoten.\r\n        function gewinntMit(r, c, spieler) {\r\n            for (const [dr, dc] of [[0, 1], [1, 0], [1, 1], [1, -1]]) {\r\n                let n = 1;\r\n                for (const s of [1, -1]) {\r\n                    for (let k = 1; k < 4; k++) {\r\n                        const rr = r + s * dr * k, cc = c + s * dc * k;\r\n                        if (rr < 0 || rr >= REIHEN || cc < 0 || cc >= SPALTEN || brett[rr][cc] !== spieler) break;\r\n                        n++;\r\n                    }\r\n                }\r\n                if (n >= 4) return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        \/**\r\n         * Minimax mit Alpha-Beta. Gewinne zaehlen umso mehr, je frueher sie\r\n         * kommen, Niederlagen umso weniger, je spaeter (SIEG + Resttiefe). Vorher\r\n         * waren alle Gewinne gleich viel wert: gemessen liess der Computer auf\r\n         * \u00abSchwer\u00bb in 19 von 60 Stellungen einen Sofortgewinn liegen und blockte\r\n         * eine Doppeldrohung in 10 von 17 Faellen nicht einmal zum Schein.\r\n         *\/\r\n        const SIEG = 10000000;\r\n\r\n        \/\/ Zeitbudget: Die Suche laeuft im Hauptthread und friert die Seite ein.\r\n        \/\/ Gemessen brauchte Tiefe 6 in einzelnen Stellungen ueber 1.4 s (schneller\r\n        \/\/ PC, Handys deutlich langsamer). Deshalb Tiefe 2, 4, 6 nacheinander; wird\r\n        \/\/ das Budget ueberschritten, gilt das Ergebnis der letzten fertigen Tiefe.\r\n        const ZEITBUDGET_MS = 700;\r\n        const ABBRUCH = {};\r\n        let frist = Infinity, knoten = 0;\r\n\r\n        function minimax(tiefe, alpha, beta, istMax, frei) {\r\n            if ((++knoten & 1023) === 0 && performance.now() > frist) throw ABBRUCH;\r\n            if (frei === 0) return 0;                       \/\/ Brett voll: unentschieden\r\n            if (tiefe === 0) return bewerteBrett(SP2);\r\n            const spieler = istMax ? SP2 : SP1;\r\n            let best = istMax ? -Infinity : Infinity;\r\n            for (const c of KI_REIHENFOLGE) {\r\n                if (!istGueltig(c)) continue;\r\n                const r = naechsteReihe(c);\r\n                brett[r][c] = spieler;\r\n                const wert = gewinntMit(r, c, spieler)\r\n                    ? (istMax ? SIEG + tiefe : -SIEG - tiefe)\r\n                    : minimax(tiefe - 1, alpha, beta, !istMax, frei - 1);\r\n                brett[r][c] = LEER;\r\n                if (istMax) { best = Math.max(best, wert); alpha = Math.max(alpha, best); }\r\n                else        { best = Math.min(best, wert); beta  = Math.min(beta, best); }\r\n                if (alpha >= beta) break; \/\/ prune\r\n            }\r\n            return best;\r\n        }\r\n\r\n        function sucheMitTiefe(tiefe) {\r\n            const valide = KI_REIHENFOLGE.filter(c => istGueltig(c));\r\n            let frei = 0;\r\n            brett.forEach(reihe => reihe.forEach(v => { if (v === LEER) frei++; }));\r\n            let besteWert = -Infinity;\r\n            let besteSpalte = valide[0];\r\n            for (const c of valide) {\r\n                const r = naechsteReihe(c);\r\n                brett[r][c] = SP2;\r\n                const wert = gewinntMit(r, c, SP2)\r\n                    ? SIEG + tiefe\r\n                    : minimax(tiefe - 1, besteWert, Infinity, false, frei - 1);\r\n                brett[r][c] = LEER;\r\n                if (wert > besteWert) { besteWert = wert; besteSpalte = c; }\r\n            }\r\n            return besteSpalte;\r\n        }\r\n\r\n        function besterKIZug() {\r\n            \/\/ Tiefe 2 immer vollstaendig (findet Sofortgewinne und blockt Drohungen)\r\n            frist = Infinity;\r\n            let beste = sucheMitTiefe(Math.min(2, ki_tiefe));\r\n            frist = performance.now() + ZEITBUDGET_MS;\r\n            knoten = 0;\r\n            for (let t = 4; t <= ki_tiefe; t += 2) {\r\n                const sicherung = brett.map(reihe => reihe.slice());\r\n                try {\r\n                    beste = sucheMitTiefe(t);\r\n                } catch (e) {\r\n                    if (e !== ABBRUCH) throw e;\r\n                    brett = sicherung;   \/\/ abgebrochene Suche hinterlaesst gesetzte Steine\r\n                    break;\r\n                }\r\n            }\r\n            frist = Infinity;\r\n            return beste;\r\n        }\r\n\r\n        \/* ============================================================\r\n           MODALS\r\n           ============================================================ *\/\r\n        function zeigeGewinnModal(spieler) {\r\n            const modal   = document.getElementById('ftvg-modal');\r\n            const titel   = document.getElementById('ftvg-ergebnis-titel');\r\n            const scheiben= document.getElementById('ftvg-gewinn-scheiben');\r\n            const text    = document.getElementById('ftvg-ergebnis-text');\r\n            const klasse  = spieler === SP1 ? 'p1' : 'p2';\r\n\r\n            if (spielModus === 'pvc') {\r\n                titel.textContent = spieler === SP1 ? 'Sie gewinnen!' : 'Computer gewinnt!';\r\n                text.textContent  = spieler === SP1\r\n                    ? 'Gl\u00fcckwunsch! Sie haben den Computer besiegt.'\r\n                    : 'Der Computer hat gewonnen. Noch einmal versuchen?';\r\n            } else {\r\n                titel.textContent = spieler === SP1 ? 'Spieler 1 gewinnt!' : 'Spieler 2 gewinnt!';\r\n                text.textContent  = 'Gut gespielt! M\u00f6chten Sie nochmals spielen?';\r\n            }\r\n\r\n            scheiben.innerHTML = '';\r\n            for (let i = 0; i < 4; i++) {\r\n                const d = document.createElement('div');\r\n                d.className = `vg-modal-disc ${klasse}`;\r\n                scheiben.appendChild(d);\r\n            }\r\n\r\n            meldung.textContent = titel.textContent;\r\n            modal.classList.add('active');\r\n        }\r\n\r\n        function zeigeUnentschiedenModal() {\r\n            document.getElementById('ftvg-ergebnis-titel').textContent = 'Unentschieden!';\r\n            document.getElementById('ftvg-gewinn-scheiben').innerHTML  = '';\r\n            document.getElementById('ftvg-ergebnis-text').textContent  = 'Das Brett ist voll \u2013 kein Gewinner.';\r\n            meldung.textContent = 'Unentschieden!';\r\n            document.getElementById('ftvg-modal').classList.add('active');\r\n        }\r\n\r\n        \/* ============================================================\r\n           GAME FLOW\r\n           ============================================================ *\/\r\n        \/\/ Cancel all pending game timers \u2014 call before any screen transition\r\n        function verlasseSpiel() {\r\n            clearTimeout(kiZugTimer);\r\n            clearTimeout(ergebnisTimer);\r\n            kiZugTimer    = null;\r\n            ergebnisTimer = null;\r\n            spielVorbei   = true;\r\n            computerDran  = false;\r\n        }\r\n\r\n        \/\/ Check win\/draw after a move. Returns true if game ended.\r\n        function nachZug(spieler) {\r\n            const gewinn = pruefeGewinn(spieler);\r\n            if (gewinn) {\r\n                spielVorbei = true;\r\n                ftEvent({ event: 'viergewinnt_ende', viergewinnt_modus: spielModus, viergewinnt_stufe: spielModus === 'pvc' ? ki_tiefe : null,\r\n                          viergewinnt_ergebnis: spielModus === 'pvc' ? (spieler === SP1 ? 'sieg' : 'niederlage') : 'spieler' + spieler });\r\n                markiereGewinn(gewinn);\r\n                brettWrap.classList.add('warten');\r\n                ergebnisTimer = setTimeout(() => zeigeGewinnModal(spieler), 700);\r\n                return true;\r\n            }\r\n            if (istUnentschieden()) {\r\n                spielVorbei = true;\r\n                ftEvent({ event: 'viergewinnt_ende', viergewinnt_modus: spielModus, viergewinnt_stufe: spielModus === 'pvc' ? ki_tiefe : null, viergewinnt_ergebnis: 'unentschieden' });\r\n                brettWrap.classList.add('warten');\r\n                ergebnisTimer = setTimeout(zeigeUnentschiedenModal, 700);\r\n                return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        function spielerZug(spalte) {\r\n            if (!istGueltig(spalte) || spielVorbei || computerDran) return;\r\n            versteckeVorschau();\r\n\r\n            const pos = setzeScheibe(spalte, aktSpieler);\r\n            if (!pos) return;\r\n            renderZelle(pos.r, pos.c);\r\n\r\n            if (nachZug(aktSpieler)) return;\r\n\r\n            aktSpieler = aktSpieler === SP1 ? SP2 : SP1;\r\n            aktualisiereTurn();\r\n\r\n            if (spielModus === 'pvc' && aktSpieler === SP2) {\r\n                computerDran = true;\r\n                brettWrap.classList.add('warten');\r\n                kiZugTimer = setTimeout(kiZug, 300);\r\n            }\r\n        }\r\n\r\n        function kiZug() {\r\n            kiZugTimer = null;\r\n            const spalte = besterKIZug();\r\n            const pos    = setzeScheibe(spalte, SP2);\r\n            renderZelle(pos.r, pos.c);\r\n            computerDran = false;\r\n            brettWrap.classList.remove('warten');\r\n\r\n            if (nachZug(SP2)) return;\r\n\r\n            aktSpieler = SP1;\r\n            aktualisiereTurn();\r\n        }\r\n\r\n        function startSpiel(modus, tiefe) {\r\n            verlasseSpiel();      \/\/ cancel any pending timers from previous game\r\n            resetMenueKnopf();    \/\/ clear confirmation state if Nochmal was clicked\r\n            spielModus   = modus;\r\n            ki_tiefe     = tiefe || 4;\r\n            aktSpieler   = SP1;\r\n            spielVorbei  = false;\r\n            computerDran = false;\r\n            neuBrett();\r\n            renderBrett();\r\n            renderVorschau();\r\n            brettWrap.classList.remove('warten');\r\n            aktualisiereTurn();\r\n            zeigeScreen('spiel');\r\n        }\r\n\r\n        \/* ============================================================\r\n           EVENT LISTENERS\r\n           ============================================================ *\/\r\n\r\n        \/\/ Mode selection\r\n        document.getElementById('ftvg-btn-pvp').addEventListener('click', () => startSpiel('pvp', 0));\r\n        document.getElementById('ftvg-btn-pvc').addEventListener('click', () => zeigeScreen('schw'));\r\n        document.getElementById('ftvg-btn-zurueck').addEventListener('click', () => zeigeScreen('modus'));\r\n\r\n        \/\/ Difficulty \u2014 depth 2 \/ 4 \/ 6\r\n        document.getElementById('ftvg-btn-einfach').addEventListener('click', () => startSpiel('pvc', 2));\r\n        document.getElementById('ftvg-btn-mittel').addEventListener('click',  () => startSpiel('pvc', 4));\r\n        document.getElementById('ftvg-btn-schwer').addEventListener('click',  () => startSpiel('pvc', 6));\r\n\r\n        \/\/ Board \u2014 preview on mousemove, place on click\r\n        \/\/ (click also fires on mobile tap \u2014 no separate touchstart needed)\r\n        brett_el.addEventListener('mousemove', e => {\r\n            const zelle = e.target.closest('.vg-zelle');\r\n            if (!zelle) { versteckeVorschau(); return; }\r\n            zeigeVorschau(parseInt(zelle.dataset.c));\r\n        });\r\n\r\n        brett_el.addEventListener('mouseleave', versteckeVorschau);\r\n\r\n        \/\/ Tastatur: Pfeile waehlen die Spalte (Vorschau zeigt sie), Enter, Leertaste\r\n        \/\/ oder Pfeil runter setzt. Die Tasten 1 bis 7 setzen direkt. Vorher war das\r\n        \/\/ Spiel nur mit Maus oder Finger bedienbar.\r\n        let tastenSpalte = 3;\r\n        brettWrap.addEventListener('keydown', e => {\r\n            if (e.ctrlKey || e.altKey || e.metaKey) return;\r\n            if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\r\n                e.preventDefault();\r\n                tastenSpalte = Math.max(0, Math.min(SPALTEN - 1, tastenSpalte + (e.key === 'ArrowLeft' ? -1 : 1)));\r\n                zeigeVorschau(tastenSpalte);\r\n                meldung.textContent = 'Spalte ' + (tastenSpalte + 1);\r\n            } else if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\r\n                e.preventDefault();\r\n                spielerZug(tastenSpalte);\r\n            } else if (\/^[1-7]$\/.test(e.key)) {\r\n                e.preventDefault();\r\n                tastenSpalte = Number(e.key) - 1;\r\n                spielerZug(tastenSpalte);\r\n            }\r\n        });\r\n        brettWrap.addEventListener('focus', () => zeigeVorschau(tastenSpalte));\r\n        brettWrap.addEventListener('blur', versteckeVorschau);\r\n\r\n        brett_el.addEventListener('click', e => {\r\n            const zelle = e.target.closest('.vg-zelle');\r\n            if (!zelle) return;\r\n            spielerZug(parseInt(zelle.dataset.c));\r\n        });\r\n\r\n        \/\/ Menu button \u2014 two-step confirmation to prevent accidental exits\r\n        const btnMenue    = document.getElementById('ftvg-btn-menue');\r\n        const menuZeile   = root.querySelector('.vg-menu-zeile');\r\n        let menueBestaetigung = false;\r\n        let menueTimer        = null;\r\n\r\n        function resetMenueKnopf() {\r\n            menueBestaetigung = false;\r\n            clearTimeout(menueTimer);\r\n            btnMenue.textContent = 'Men\u00fc';\r\n            btnMenue.className   = 'ftvg-knopf ftvg-knopf-hell ftvg-knopf-klein';\r\n            \/\/ Remove confirm buttons if present\r\n            const alt = menuZeile.querySelector('.vg-bestaetigung');\r\n            if (alt) alt.remove();\r\n        }\r\n\r\n        btnMenue.addEventListener('click', () => {\r\n            if (!menueBestaetigung) {\r\n                \/\/ First click \u2014 show confirmation\r\n                menueBestaetigung = true;\r\n                btnMenue.textContent = 'Abbrechen?';\r\n                btnMenue.className   = 'ftvg-knopf ftvg-knopf-warnung ftvg-knopf-klein';\r\n\r\n                \/\/ Add Ja \/ Nein buttons\r\n                const wrap = document.createElement('span');\r\n                wrap.className = 'vg-bestaetigung';\r\n\r\n                const jaBtn = document.createElement('button');\r\n                jaBtn.textContent = 'Ja';\r\n                jaBtn.className   = 'ftvg-knopf ftvg-knopf-klein';\r\n                jaBtn.addEventListener('click', e => {\r\n                    e.stopPropagation();\r\n                    resetMenueKnopf();\r\n                    verlasseSpiel();\r\n                    zeigeScreen('modus');\r\n                });\r\n\r\n                const neinBtn = document.createElement('button');\r\n                neinBtn.textContent = 'Nein';\r\n                neinBtn.className   = 'ftvg-knopf ftvg-knopf-hell ftvg-knopf-klein';\r\n                neinBtn.addEventListener('click', e => {\r\n                    e.stopPropagation();\r\n                    resetMenueKnopf();\r\n                });\r\n\r\n                wrap.appendChild(jaBtn);\r\n                wrap.appendChild(neinBtn);\r\n                menuZeile.appendChild(wrap);\r\n\r\n                \/\/ Auto-cancel after 3 seconds if no action\r\n                menueTimer = setTimeout(resetMenueKnopf, 3000);\r\n            }\r\n        });\r\n\r\n        \/\/ Game result modal buttons\r\n        document.getElementById('ftvg-btn-nochmal').addEventListener('click', () => {\r\n            document.getElementById('ftvg-modal').classList.remove('active');\r\n            startSpiel(spielModus, ki_tiefe);\r\n        });\r\n\r\n        document.getElementById('ftvg-btn-menu-modal').addEventListener('click', () => {\r\n            document.getElementById('ftvg-modal').classList.remove('active');\r\n            zeigeScreen('modus');\r\n        });\r\n\r\n        \/\/ Schnittstelle fuer Tests (nur Lesen)\r\n        root.__vg = { get brett() { return brett.map(r => r.slice()); }, get aktSpieler() { return aktSpieler; },\r\n                      get spielVorbei() { return spielVorbei; }, get computerDran() { return computerDran; } };\r\n\r\n\r\n        \/\/ Nach einem Mausklick den Fokus abgeben, Tastatur (detail 0) unveraendert\r\n        root.querySelectorAll('.ftvg-knopf').forEach(btn => {\r\n            btn.addEventListener('click', e => { if (e.detail > 0) btn.blur(); });\r\n        });\r\n\r\n        try {\r\n            if (!localStorage.getItem('ft_viergewinnt_seen')) {\r\n                document.getElementById('ftvg-anleitung').open = true;\r\n                localStorage.setItem('ft_viergewinnt_seen', '1');\r\n            }\r\n        } catch (e) {}\r\n    }\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Spielen Sie Vier Gewinnt online &#8211; kostenlos und ohne Installation. Treten Sie gegen den Computer in verschiedenen Schwierigkeitsgraden an oder fordern Sie Freunde am gleichen Ger\u00e4t heraus.<\/p>","protected":false},"author":1,"featured_media":5741,"parent":1467,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"content-type":"","iawp_total_views":2354,"footnotes":""},"class_list":["post-5671","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Vier Gewinnt: Ohne Anmeldung kostenlos online spielen<\/title>\n<meta name=\"description\" content=\"Vier Gewinnt online - kostenlos spielen gegen den Computer oder Freunde am gleichen Ger\u00e4t. Klassischer Spielspass f\u00fcr Jung und Alt.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fahrtauglich.ch\/fr\/praxisportal\/vier-gewinnt\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vier Gewinnt: Ohne Anmeldung kostenlos online spielen\" \/>\n<meta property=\"og:description\" content=\"Vier Gewinnt online - kostenlos spielen gegen den Computer oder Freunde am gleichen Ger\u00e4t. Klassischer Spielspass f\u00fcr Jung und Alt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fahrtauglich.ch\/fr\/praxisportal\/vier-gewinnt\/\" \/>\n<meta property=\"og:site_name\" content=\"Fahrtauglich\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-12T14:16:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/\",\"url\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/\",\"name\":\"Vier Gewinnt: Ohne Anmeldung kostenlos online spielen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fahrtauglich.ch\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/Vier-gewinnt.jpg\",\"datePublished\":\"2025-02-05T20:33:50+00:00\",\"dateModified\":\"2026-10-12T14:16:46+00:00\",\"description\":\"Vier Gewinnt online - kostenlos spielen gegen den Computer oder Freunde am gleichen Ger\u00e4t. Klassischer Spielspass f\u00fcr Jung und Alt.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/#primaryimage\",\"url\":\"https:\\\/\\\/fahrtauglich.ch\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/Vier-gewinnt.jpg\",\"contentUrl\":\"https:\\\/\\\/fahrtauglich.ch\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/Vier-gewinnt.jpg\",\"width\":2560,\"height\":1440},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/vier-gewinnt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/fahrtauglich.ch\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Praxisportal\",\"item\":\"https:\\\/\\\/fahrtauglich.ch\\\/praxisportal\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Vier Gewinnt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/#website\",\"url\":\"https:\\\/\\\/fahrtauglich.ch\\\/\",\"name\":\"Fahrtauglich\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fahrtauglich.ch\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/#organization\",\"name\":\"Fahrtauglich\",\"url\":\"https:\\\/\\\/fahrtauglich.ch\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/fahrtauglich.ch\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/cropped-Logo-2.jpg\",\"contentUrl\":\"https:\\\/\\\/fahrtauglich.ch\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/cropped-Logo-2.jpg\",\"width\":307,\"height\":188,\"caption\":\"Fahrtauglich\"},\"image\":{\"@id\":\"https:\\\/\\\/fahrtauglich.ch\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Vier Gewinnt: Ohne Anmeldung kostenlos online spielen","description":"Vier Gewinnt online - kostenlos spielen gegen den Computer oder Freunde am gleichen Ger\u00e4t. Klassischer Spielspass f\u00fcr Jung und Alt.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fahrtauglich.ch\/fr\/praxisportal\/vier-gewinnt\/","og_locale":"fr_FR","og_type":"article","og_title":"Vier Gewinnt: Ohne Anmeldung kostenlos online spielen","og_description":"Vier Gewinnt online - kostenlos spielen gegen den Computer oder Freunde am gleichen Ger\u00e4t. Klassischer Spielspass f\u00fcr Jung und Alt.","og_url":"https:\/\/fahrtauglich.ch\/fr\/praxisportal\/vier-gewinnt\/","og_site_name":"Fahrtauglich","article_modified_time":"2026-10-12T14:16:46+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/","url":"https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/","name":"Vier Gewinnt: Ohne Anmeldung kostenlos online spielen","isPartOf":{"@id":"https:\/\/fahrtauglich.ch\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/#primaryimage"},"image":{"@id":"https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/#primaryimage"},"thumbnailUrl":"https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg","datePublished":"2025-02-05T20:33:50+00:00","dateModified":"2026-10-12T14:16:46+00:00","description":"Vier Gewinnt online - kostenlos spielen gegen den Computer oder Freunde am gleichen Ger\u00e4t. Klassischer Spielspass f\u00fcr Jung und Alt.","breadcrumb":{"@id":"https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/#primaryimage","url":"https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg","contentUrl":"https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg","width":2560,"height":1440},{"@type":"BreadcrumbList","@id":"https:\/\/fahrtauglich.ch\/praxisportal\/vier-gewinnt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/fahrtauglich.ch\/"},{"@type":"ListItem","position":2,"name":"Praxisportal","item":"https:\/\/fahrtauglich.ch\/praxisportal\/"},{"@type":"ListItem","position":3,"name":"Vier Gewinnt"}]},{"@type":"WebSite","@id":"https:\/\/fahrtauglich.ch\/#website","url":"https:\/\/fahrtauglich.ch\/","name":"Fahrtauglich","description":"","publisher":{"@id":"https:\/\/fahrtauglich.ch\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fahrtauglich.ch\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/fahrtauglich.ch\/#organization","name":"Fahrtauglich","url":"https:\/\/fahrtauglich.ch\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/fahrtauglich.ch\/#\/schema\/logo\/image\/","url":"https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2024\/08\/cropped-Logo-2.jpg","contentUrl":"https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2024\/08\/cropped-Logo-2.jpg","width":307,"height":188,"caption":"Fahrtauglich"},"image":{"@id":"https:\/\/fahrtauglich.ch\/#\/schema\/logo\/image\/"}}]}},"rttpg_featured_image_url":{"full":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg",2560,1440,false],"landscape":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg",2560,1440,false],"portraits":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt.jpg",2560,1440,false],"thumbnail":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-150x150.jpg",150,150,true],"medium":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-300x169.jpg",300,169,true],"large":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-1024x576.jpg",800,450,true],"1536x1536":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-1536x864.jpg",1536,864,true],"2048x2048":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-2048x1152.jpg",2048,1152,true],"trp-custom-language-flag":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-18x10.jpg",18,10,true],"woocommerce_thumbnail":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-300x169.jpg",300,169,true],"woocommerce_single":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-600x338.jpg",600,338,true],"woocommerce_gallery_thumbnail":["https:\/\/fahrtauglich.ch\/wp-content\/uploads\/2025\/02\/Vier-gewinnt-100x100.jpg",100,100,true]},"rttpg_author":{"display_name":"fahrtauglich.ch","author_link":"https:\/\/fahrtauglich.ch\/fr\/blog\/author\/mintcream-quetzal-259960-hostingersite-com\/"},"rttpg_comment":0,"rttpg_category":null,"rttpg_excerpt":"Spielen Sie Vier Gewinnt online - kostenlos und ohne Installation. Treten Sie gegen den Computer in verschiedenen Schwierigkeitsgraden an oder fordern Sie Freunde am gleichen Ger\u00e4t heraus.","_links":{"self":[{"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/pages\/5671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/comments?post=5671"}],"version-history":[{"count":80,"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/pages\/5671\/revisions"}],"predecessor-version":[{"id":8600,"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/pages\/5671\/revisions\/8600"}],"up":[{"embeddable":true,"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/pages\/1467"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/media\/5741"}],"wp:attachment":[{"href":"https:\/\/fahrtauglich.ch\/fr\/wp-json\/wp\/v2\/media?parent=5671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}