{"id":1816,"date":"2025-08-22T15:26:36","date_gmt":"2025-08-22T15:26:36","guid":{"rendered":"https:\/\/www.game4fun.eu\/?page_id=1816"},"modified":"2026-03-09T19:21:18","modified_gmt":"2026-03-09T19:21:18","slug":"piskvorky4fun","status":"publish","type":"page","link":"https:\/\/www.game4fun.eu\/?page_id=1816","title":{"rendered":"Pi\u0161kvorky 4fun"},"content":{"rendered":"<p>    <div id=\"piskvorky_secure7-app\" class=\"piskvorky-wrap\">\r\n        <h2>Pi\u0161kvorky 7\u00d77 \u2013 Pot\u0159eba 4 v \u0159ad\u011b \ud83d\ude42 Hr\u00e1\u010d vs. Mani\u00e1k aka Piplovic.<\/h2>\r\n\r\n                <div class=\"piskvorky-note piskvorky-note-warning\">\r\n            Nep\u0159ihl\u00e1\u0161en\u00fd hr\u00e1\u010d: m\u016f\u017ee\u0161 hr\u00e1t, ale v\u00fdsledky se <strong>neukl\u00e1daj\u00ed<\/strong>.\r\n        <\/div>\r\n        \r\n        <div class=\"piskvorky-status\" id=\"piskvorky_secure7-status\">Na tahu: X (Hr\u00e1\u010d)<\/div>\r\n        <div class=\"piskvorky-board\" id=\"piskvorky_secure7-board\"><\/div>\r\n\r\n        <div class=\"piskvorky-controls\">\r\n            <button type=\"button\" class=\"piskvorky-btn piskvorky-primary\" id=\"piskvorky_secure7-reset\">\u21bb Nov\u00e1 hra<\/button>\r\n                    <\/div>\r\n\r\n<div class=\"piskvorky-hof\">\r\n    <h3>Tabulka sl\u00e1vy (pouze p\u0159ihl\u00e1\u0161en\u00ed)<\/h3>\r\n    <table class=\"piskvorky-table\" style=\"width:100%; border-collapse: collapse; border:1px solid #000;\">\r\n        <thead>\r\n            <tr>\r\n                <th style=\"background-color: black; color: white; padding:5px;\">#<\/th>\r\n                <th style=\"background-color: black; color: white; padding:5px;\">Hr\u00e1\u010d<\/th>\r\n                <th style=\"background-color: black; color: white; padding:5px;\">V\u00fdhry<\/th>\r\n                <th style=\"background-color: black; color: white; padding:5px;\">Prohry<\/th>\r\n                <th style=\"background-color: black; color: white; padding:5px;\">Rem\u00edzy<\/th>\r\n            <\/tr>\r\n        <\/thead>\r\n        <tbody id=\"piskvorky_secure7-hof-body\">\r\n            <tr>\r\n                <td colspan=\"5\" style=\"background-color: white; color: black; text-align:center; padding:5px;\">Zat\u00edm \u017e\u00e1dn\u00e1 data. Odehrajte prvn\u00ed hru!<\/td>\r\n            <\/tr>\r\n        <\/tbody>\r\n    <\/table>\r\n<\/div>\r\n\r\n\r\n    <style>\r\n    .piskvorky-wrap{max-width:760px;margin:20px auto;background:#fff;border-radius:12px;padding:18px;box-shadow:0 6px 18px rgba(0,0,0,.06);font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Noto Sans,sans-serif}\r\n    .piskvorky-board{display:grid;grid-template-columns:repeat(7,58px);gap:6px;justify-content:center;margin:14px 0}\r\n    .piskvorky-cell{width:58px;height:58px;border:2px solid #e2e8f0;border-radius:8px;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.4rem;cursor:pointer;background:#fafafa;transition:background .12s; user-select:none}\r\n    .piskvorky-cell:hover{background:#f3f4f6}\r\n    .piskvorky-cell.win{background:#bbf7d0;border-color:#22c55e}\r\n    .piskvorky-status{font-weight:700;margin-top:6px;margin-bottom:6px}\r\n    .piskvorky-controls{display:flex;gap:10px;justify-content:center;margin:8px 0 12px}\r\n    .piskvorky-btn{padding:8px 12px;border-radius:8px;border:1px solid #cbd5e1;background:#e2e8f0;cursor:pointer}\r\n    .piskvorky-primary{background:#2563eb;color:#fff;border-color:#2563eb}\r\n    .piskvorky-danger{background:#ef4444;color:#fff;border-color:#ef4444}\r\n    .piskvorky-table{width:100%;border-collapse:collapse;margin-top:8px}\r\n    .piskvorky-table th{background:#1e3a8a;color:#fff;padding:8px;text-align:left}\r\n    .piskvorky-table td{border-bottom:1px solid #e5e7eb;padding:8px;text-align:left}\r\n    .piskvorky-note{padding:10px;border-radius:8px;margin-bottom:10px}\r\n    .piskvorky-note-warning{background:#fff7ed;border:1px solid #fdba74}\r\n    .piskvorky-note-ok{background:#ecfeff;border:1px solid #67e8f9}\r\n    @media (max-width:480px){.piskvorky-board{grid-template-columns:repeat(7,42px)}.piskvorky-cell{width:42px;height:42px;font-size:1rem}}\r\n    <\/style>\r\n\r\n    <script>\r\n    (function(){\r\n        \/\/ CONFIG\r\n        const SIZE = 7;\r\n        const WINLEN = 4;\r\n        const MAX_DEPTH = 6;\r\n        const TIME_LIMIT_MS = 900;\r\n        const SEARCH_RADIUS = 2;\r\n\r\n        const ajax = {\r\n            url: \"https:\\\/\\\/www.game4fun.eu\\\/wp-admin\\\/admin-ajax.php\",\r\n            nonce: \"eb9bb38b02\",\r\n            loggedIn: false        };\r\n\r\n        \/\/ DOM\r\n        const boardEl = document.getElementById('piskvorky_secure7-board');\r\n        const statusEl = document.getElementById('piskvorky_secure7-status');\r\n        const resetBtn = document.getElementById('piskvorky_secure7-reset');\r\n        const resetHofBtn = document.getElementById('piskvorky_secure7-reset-hof');\r\n        const hofBody = document.getElementById('piskvorky_secure7-hof-body');\r\n\r\n        \/\/ State\r\n        let board = Array(SIZE*SIZE).fill(null);\r\n        let history = []; \/\/ array of indices in order of play (0 -> X, 1 -> O, ...)\r\n        let xIsNext = true; \/\/ player X\r\n        let gameOver = false;\r\n        let savedOnce = false;\r\n        let aiThinking = false;\r\n\r\n        \/\/ Helpers\r\n        const idx = (x,y) => y*SIZE + x;\r\n        const inBounds = (x,y) => x>=0 && x<SIZE && y>=0 && y<SIZE;\r\n        const boardKey = (b) => b.map(v=>v?v:'.').join('');\r\n\r\n        \/\/ Render\r\n        function renderBoard(){\r\n            boardEl.innerHTML = '';\r\n            board.forEach((v,i)=>{\r\n                const cell = document.createElement('div');\r\n                cell.className = 'piskvorky-cell';\r\n                cell.textContent = v || '';\r\n                cell.onclick = ()=>playerMove(i);\r\n                boardEl.appendChild(cell);\r\n            });\r\n        }\r\n\r\n        \/\/ Player move\r\n        function playerMove(i){\r\n            if (gameOver || aiThinking) return;\r\n            if (!xIsNext) return;\r\n            if (board[i]) return;\r\n\r\n            board[i] = 'X';\r\n            history.push(i);\r\n            xIsNext = false;\r\n            updateStatus();\r\n            if (!gameOver) setTimeout(aiMove, 120);\r\n        }\r\n\r\n        \/\/ AI driver (strong): iterative deepening + negamax + transposition, candidate moves near stones\r\n        const transposition = new Map();\r\n\r\n        function generateCandidates(b){\r\n            const set = new Set();\r\n            for (let y=0;y<SIZE;y++){\r\n                for (let x=0;x<SIZE;x++){\r\n                    if (!b[idx(x,y)]) continue;\r\n                    for (let ry=-SEARCH_RADIUS; ry<=SEARCH_RADIUS; ry++){\r\n                        for (let rx=-SEARCH_RADIUS; rx<=SEARCH_RADIUS; rx++){\r\n                            const nx = x+rx, ny = y+ry;\r\n                            if (!inBounds(nx,ny)) continue;\r\n                            const id = idx(nx,ny);\r\n                            if (!b[id]) set.add(id);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (set.size === 0){\r\n                set.add(idx(Math.floor(SIZE\/2), Math.floor(SIZE\/2)));\r\n            }\r\n            return Array.from(set);\r\n        }\r\n\r\n        function evaluateBoard(b, ai, human){\r\n            const dirs = [[1,0],[0,1],[1,1],[1,-1]];\r\n            const wOpen = [0, 10, 200, 2500, 100000];\r\n            const wHalf = [0, 5, 60, 600, 50000];\r\n            let score = 0;\r\n            for (let y=0;y<SIZE;y++){\r\n                for (let x=0;x<SIZE;x++){\r\n                    const p = b[idx(x,y)];\r\n                    if (!p) continue;\r\n                    for (const [dx,dy] of dirs){\r\n                        const px = x - dx, py = y - dy;\r\n                        if (inBounds(px,py) && b[idx(px,py)] === p) continue;\r\n                        let len = 0;\r\n                        for (let k=0;k<WINLEN;k++){\r\n                            const nx = x + dx*k, ny = y + dy*k;\r\n                            if (!inBounds(nx,ny)) break;\r\n                            if (b[idx(nx,ny)] === p) len++;\r\n                            else break;\r\n                        }\r\n                        if (len <= 0) continue;\r\n                        if (len >= WINLEN) return p === ai ? 1e7 : -1e7;\r\n                        const beforeX = x - dx, beforeY = y - dy;\r\n                        const afterX = x + dx*len, afterY = y + dy*len;\r\n                        let openEnds = 0;\r\n                        if (inBounds(beforeX,beforeY) && b[idx(beforeX,beforeY)] === null) openEnds++;\r\n                        if (inBounds(afterX,afterY) && b[idx(afterX,afterY)] === null) openEnds++;\r\n                        const w = (openEnds === 2) ? wOpen[len] : wHalf[len];\r\n                        score += (p === ai) ? w : -w;\r\n                    }\r\n                }\r\n            }\r\n            return score;\r\n        }\r\n\r\n        function calcWinner(b){\r\n            const dirs = [[1,0],[0,1],[1,1],[1,-1]];\r\n            for (let y=0;y<SIZE;y++){\r\n                for (let x=0;x<SIZE;x++){\r\n                    const p = b[idx(x,y)];\r\n                    if (!p) continue;\r\n                    for (const [dx,dy] of dirs){\r\n                        let line=[idx(x,y)];\r\n                        for (let k=1;k<WINLEN;k++){\r\n                            const nx = x + dx*k, ny = y + dy*k;\r\n                            if (!inBounds(nx,ny)) break;\r\n                            if (b[idx(nx,ny)] === p) line.push(idx(nx,ny)); else break;\r\n                        }\r\n                        if (line.length >= WINLEN) return { player: p, line };\r\n                    }\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        \/\/ negamax + alpha-beta + transposition + depth limit + time cutoff\r\n        function negamax(b, depth, alpha, beta, player, opponent, depthLimit, startTime){\r\n            if (performance.now() - startTime > TIME_LIMIT_MS) return 0;\r\n            const key = boardKey(b) + '|' + player + '|' + depthLimit;\r\n            if (transposition.has(key)) {\r\n                const cached = transposition.get(key);\r\n                if (cached.depth >= depthLimit - depth) return cached.value;\r\n            }\r\n\r\n            const win = calcWinner(b);\r\n            if (win) return (win.player === player) ? 1e7 : -1e7;\r\n            if (b.every(Boolean)) return 0;\r\n            if (depth >= depthLimit) return evaluateBoard(b, player, opponent);\r\n\r\n            const cand = generateCandidates(b);\r\n            \/\/ order candidates\r\n            const moves = cand.map(i=>{\r\n                b[i] = player;\r\n                const v = evaluateBoard(b, player, opponent);\r\n                b[i] = null;\r\n                return {i,v};\r\n            }).sort((a,b)=>b.v-a.v).map(o=>o.i);\r\n\r\n            let value = -Infinity;\r\n            for (const m of moves){\r\n                if (performance.now() - startTime > TIME_LIMIT_MS) break;\r\n                b[m] = player;\r\n                const score = -negamax(b, depth+1, -beta, -alpha, opponent, player, depthLimit, startTime);\r\n                b[m] = null;\r\n                if (score > value) value = score;\r\n                if (value > alpha) alpha = value;\r\n                if (alpha >= beta) break;\r\n            }\r\n\r\n            transposition.set(key, {depth: depthLimit-depth, value});\r\n            return value;\r\n        }\r\n\r\n        async function aiMove(){\r\n            if (gameOver || aiThinking) return;\r\n            aiThinking = true;\r\n            transposition.clear();\r\n            const startTime = performance.now();\r\n\r\n            let candidates = generateCandidates(board);\r\n            if (candidates.length === 0) candidates = [idx(Math.floor(SIZE\/2), Math.floor(SIZE\/2))];\r\n\r\n            \/\/ order quick\r\n            candidates = candidates.map(i=>{\r\n                board[i] = 'O';\r\n                const v = evaluateBoard(board, 'O', 'X');\r\n                board[i] = null;\r\n                return {i,v};\r\n            }).sort((a,b)=>b.v - a.v).map(o=>o.i);\r\n\r\n            let bestMove = null;\r\n            for (let depth = 1; depth <= MAX_DEPTH; depth++){\r\n                if (performance.now() - startTime > TIME_LIMIT_MS) break;\r\n                let bestScore = -Infinity;\r\n                let localBest = null;\r\n                for (const mv of candidates){\r\n                    if (performance.now() - startTime > TIME_LIMIT_MS) break;\r\n                    board[mv] = 'O';\r\n                    const score = -negamax(board, 1, -Infinity, Infinity, 'X', 'O', depth, startTime);\r\n                    board[mv] = null;\r\n                    if (score > bestScore){\r\n                        bestScore = score;\r\n                        localBest = mv;\r\n                    }\r\n                }\r\n                if (performance.now() - startTime > TIME_LIMIT_MS) break;\r\n                if (localBest !== null) bestMove = localBest;\r\n            }\r\n            if (bestMove == null){\r\n                bestMove = candidates.length ? candidates[0] : board.findIndex(v=>!v);\r\n            }\r\n            if (bestMove != null){\r\n                board[bestMove] = 'O';\r\n                history.push(bestMove);\r\n            }\r\n            xIsNext = true;\r\n            aiThinking = false;\r\n            updateStatus();\r\n        }\r\n\r\n        \/\/ SAVE_RESULT: send history to server (history = array of indices)\r\n        function sendHistoryToServer(){\r\n            if (!ajax.loggedIn) return;\r\n            if (!history || !history.length) return;\r\n            const f = new FormData();\r\n            f.append('action','piskvorky_secure7_save_result');\r\n            f.append('nonce', ajax.nonce);\r\n            f.append('history', JSON.stringify(history));\r\n            fetch(ajax.url, { method:'POST', body:f, credentials:'same-origin' })\r\n                .then(r=>r.json())\r\n                .then(resp=>{\r\n                    \/\/ we simply reload leaderboard afterwards\r\n                    loadLeaderboard();\r\n                });\r\n        }\r\n\r\n        \/\/ Status \/ endgame (server-validated)\r\n        function updateStatus(){\r\n            renderBoard();\r\n            const win = calcWinner(board);\r\n            if (win){\r\n                statusEl.textContent = 'Vyhr\u00e1l: ' + (win.player === 'X' ? 'Hr\u00e1\u010d (X)' : 'Po\u010d\u00edta\u010d (O)');\r\n                win.line.forEach(i=>boardEl.children[i].classList.add('win'));\r\n                if (!savedOnce && ajax.loggedIn){\r\n                    \/\/ send full history to server for verification & save\r\n                    sendHistoryToServer();\r\n                    savedOnce = true;\r\n                }\r\n                gameOver = true;\r\n                return;\r\n            }\r\n            if (board.every(Boolean)){\r\n                statusEl.textContent = 'Rem\u00edza';\r\n                if (!savedOnce && ajax.loggedIn){\r\n                    sendHistoryToServer();\r\n                    savedOnce = true;\r\n                }\r\n                gameOver = true;\r\n                return;\r\n            }\r\n            statusEl.textContent = 'Na tahu: ' + (xIsNext ? 'X (Hr\u00e1\u010d)' : 'O (Po\u010d\u00edta\u010d)');\r\n        }\r\n\r\n        \/\/ Load leaderboard\r\n        function loadLeaderboard(){\r\n            const f = new FormData();\r\n            f.append('action','piskvorky_secure7_get_leaderboard');\r\n            f.append('nonce', ajax.nonce);\r\n            fetch(ajax.url, { method:'POST', body:f, credentials:'same-origin' })\r\n                .then(r=>r.json())\r\n                .then(data=>{\r\n                    if (!Array.isArray(data) || !data.length){\r\n                        hofBody.innerHTML = '<tr><td colspan=\"5\">Zat\u00edm \u017e\u00e1dn\u00e1 data. Odehrajte prvn\u00ed hru!<\/td><\/tr>';\r\n                    } else {\r\n                        hofBody.innerHTML = data.map((row,i)=>\r\n                            `<tr><td>${i+1}<\/td><td>${row.name}<\/td><td>${row.wins}<\/td><td>${row.losses}<\/td><td>${row.draws}<\/td><\/tr>`\r\n                        ).join('');\r\n                    }\r\n                });\r\n        }\r\n\r\n        \/\/ Buttons\r\n        resetBtn.onclick = ()=>{\r\n            board = Array(SIZE*SIZE).fill(null);\r\n            history = [];\r\n            xIsNext = true;\r\n            gameOver = false;\r\n            savedOnce = false;\r\n            aiThinking = false;\r\n            transposition.clear();\r\n            updateStatus();\r\n        };\r\n\r\n        if (resetHofBtn){\r\n            resetHofBtn.onclick = ()=>{\r\n                if (!confirm('Opravdu smazat tabulku sl\u00e1vy (jen admin)?')) return;\r\n                const f = new FormData();\r\n                f.append('action','piskvorky_secure7_reset_leaderboard');\r\n                f.append('nonce', ajax.nonce);\r\n                fetch(ajax.url, { method:'POST', body:f, credentials:'same-origin' })\r\n                    .then(r=>r.json()).then(()=>loadLeaderboard());\r\n            };\r\n        }\r\n\r\n        \/\/ init\r\n        renderBoard();\r\n        updateStatus();\r\n        loadLeaderboard();\r\n    })();\r\n    <\/script>\r\n    <br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1032 aligncenter\" src=\"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner.png\" alt=\"\" width=\"500\" height=\"500\" srcset=\"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner.png 500w, https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner-300x300.png 300w, https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner-150x150.png 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/p>\n<p><!DOCTYPE html><br \/>\n<html lang=\"cs\"><br \/>\n<head><br \/>\n  <meta charset=\"UTF-8\"><br \/>\n  <title>Demo<\/title><\/p>\n<style>\n    body {\n      font-family: Arial, sans-serif;\n    }\n    .autor {\n      position: fixed;\n      bottom: 10px;\n      right: 10px;\n      font-size: 16px;\n      font-weight: bold;\n      color: red;\n      cursor: pointer;\n      opacity: 0.8;\n      transition: 0.3s;\n    }\n    .autor:hover {\n      opacity: 1;\n      color: darkred;\n    }\n    .popup {\n      position: fixed;\n      bottom: 60px;\n      right: 10px;\n      padding: 10px 15px;\n      background: black;\n      color: white;\n      border-radius: 8px;\n      display: none;\n      animation: fadeIn 0.5s ease-out;\n    }\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(20px); }\n      to   { opacity: 1; transform: translateY(0); }\n    }\n  <\/style>\n<p><\/head><br \/>\n<body><\/p>\n<div class=\"autor\" onclick=\"zobrazPopup()\">\ud83d\udc49 Autor n\u00e1padu Hry<\/div>\n<div class=\"popup\" id=\"popup\">\u2728 Inici\u00e1tor: Piplovic. \u2728<\/div>\n<p>  <script>\n    function zobrazPopup() {\n      const popup = document.getElementById(\"popup\");\n      popup.style.display = \"block\";\n      setTimeout(() => {\n        popup.style.display = \"none\";\n      }, 3000); \/\/ zmiz\u00ed po 3 vte\u0159in\u00e1ch\n    }\n  <\/script><br \/>\n<\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Demo \ud83d\udc49 Autor n\u00e1padu Hry \u2728 Inici\u00e1tor: Piplovic. \u2728<\/p>\n","protected":false},"author":19,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1816","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pi\u0161kvorky 4fun | Game4Fun.eu - Hern\u00ed sv\u011bt<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.game4fun.eu\/?page_id=1816\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pi\u0161kvorky 4fun | Game4Fun.eu - Hern\u00ed sv\u011bt\" \/>\n<meta property=\"og:description\" content=\"Demo \ud83d\udc49 Autor n\u00e1padu Hry \u2728 Inici\u00e1tor: Piplovic. \u2728\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.game4fun.eu\/?page_id=1816\" \/>\n<meta property=\"og:site_name\" content=\"Game4Fun.eu - Hern\u00ed sv\u011bt\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-09T19:21:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Odhadovan\u00e1 doba \u010dten\u00ed\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816\",\"url\":\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816\",\"name\":\"Pi\u0161kvorky 4fun | Game4Fun.eu - Hern\u00ed sv\u011bt\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.game4fun.eu\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/reklamnibanner.png\",\"datePublished\":\"2025-08-22T15:26:36+00:00\",\"dateModified\":\"2026-03-09T19:21:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816#breadcrumb\"},\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816#primaryimage\",\"url\":\"https:\\\/\\\/www.game4fun.eu\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/reklamnibanner.png\",\"contentUrl\":\"https:\\\/\\\/www.game4fun.eu\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/reklamnibanner.png\",\"width\":500,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/?page_id=1816#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Dom\u016f\",\"item\":\"https:\\\/\\\/www.game4fun.eu\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pi\u0161kvorky 4fun\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/#website\",\"url\":\"https:\\\/\\\/www.game4fun.eu\\\/\",\"name\":\"Game4Fun.eu | \u010cesk\u00fd hern\u00ed port\u00e1l\",\"description\":\"\u010cesk\u00fd hern\u00ed port\u00e1l se servery San Andreas Multiplayer (SAMP), Call of Duty, SCUM, OpenTTD. P\u0159ij\u010fte si zahr\u00e1t!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.game4fun.eu\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"cs\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/#organization\",\"name\":\"Game4Fun.eu | \u010cesk\u00fd hern\u00ed port\u00e1l\",\"url\":\"https:\\\/\\\/www.game4fun.eu\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.game4fun.eu\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Game4funlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.game4fun.eu\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Game4funlogo.png\",\"width\":210,\"height\":94,\"caption\":\"Game4Fun.eu | \u010cesk\u00fd hern\u00ed port\u00e1l\"},\"image\":{\"@id\":\"https:\\\/\\\/www.game4fun.eu\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pi\u0161kvorky 4fun | Game4Fun.eu - Hern\u00ed sv\u011bt","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:\/\/www.game4fun.eu\/?page_id=1816","og_locale":"cs_CZ","og_type":"article","og_title":"Pi\u0161kvorky 4fun | Game4Fun.eu - Hern\u00ed sv\u011bt","og_description":"Demo \ud83d\udc49 Autor n\u00e1padu Hry \u2728 Inici\u00e1tor: Piplovic. \u2728","og_url":"https:\/\/www.game4fun.eu\/?page_id=1816","og_site_name":"Game4Fun.eu - Hern\u00ed sv\u011bt","article_modified_time":"2026-03-09T19:21:18+00:00","og_image":[{"width":500,"height":500,"url":"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Odhadovan\u00e1 doba \u010dten\u00ed":"1 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.game4fun.eu\/?page_id=1816","url":"https:\/\/www.game4fun.eu\/?page_id=1816","name":"Pi\u0161kvorky 4fun | Game4Fun.eu - Hern\u00ed sv\u011bt","isPartOf":{"@id":"https:\/\/www.game4fun.eu\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.game4fun.eu\/?page_id=1816#primaryimage"},"image":{"@id":"https:\/\/www.game4fun.eu\/?page_id=1816#primaryimage"},"thumbnailUrl":"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner.png","datePublished":"2025-08-22T15:26:36+00:00","dateModified":"2026-03-09T19:21:18+00:00","breadcrumb":{"@id":"https:\/\/www.game4fun.eu\/?page_id=1816#breadcrumb"},"inLanguage":"cs","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.game4fun.eu\/?page_id=1816"]}]},{"@type":"ImageObject","inLanguage":"cs","@id":"https:\/\/www.game4fun.eu\/?page_id=1816#primaryimage","url":"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner.png","contentUrl":"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2022\/12\/reklamnibanner.png","width":500,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/www.game4fun.eu\/?page_id=1816#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Dom\u016f","item":"https:\/\/www.game4fun.eu\/"},{"@type":"ListItem","position":2,"name":"Pi\u0161kvorky 4fun"}]},{"@type":"WebSite","@id":"https:\/\/www.game4fun.eu\/#website","url":"https:\/\/www.game4fun.eu\/","name":"Game4Fun.eu | \u010cesk\u00fd hern\u00ed port\u00e1l","description":"\u010cesk\u00fd hern\u00ed port\u00e1l se servery San Andreas Multiplayer (SAMP), Call of Duty, SCUM, OpenTTD. P\u0159ij\u010fte si zahr\u00e1t!","publisher":{"@id":"https:\/\/www.game4fun.eu\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.game4fun.eu\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"cs"},{"@type":"Organization","@id":"https:\/\/www.game4fun.eu\/#organization","name":"Game4Fun.eu | \u010cesk\u00fd hern\u00ed port\u00e1l","url":"https:\/\/www.game4fun.eu\/","logo":{"@type":"ImageObject","inLanguage":"cs","@id":"https:\/\/www.game4fun.eu\/#\/schema\/logo\/image\/","url":"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2025\/10\/Game4funlogo.png","contentUrl":"https:\/\/www.game4fun.eu\/wp-content\/uploads\/2025\/10\/Game4funlogo.png","width":210,"height":94,"caption":"Game4Fun.eu | \u010cesk\u00fd hern\u00ed port\u00e1l"},"image":{"@id":"https:\/\/www.game4fun.eu\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=\/wp\/v2\/pages\/1816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1816"}],"version-history":[{"count":17,"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=\/wp\/v2\/pages\/1816\/revisions"}],"predecessor-version":[{"id":3041,"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=\/wp\/v2\/pages\/1816\/revisions\/3041"}],"wp:attachment":[{"href":"https:\/\/www.game4fun.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}