{"id":34,"date":"2026-05-27T13:10:46","date_gmt":"2026-05-27T10:10:46","guid":{"rendered":"https:\/\/urasuzay.com\/?page_id=34"},"modified":"2026-06-17T18:01:15","modified_gmt":"2026-06-17T15:01:15","slug":"tank-oyunu","status":"publish","type":"page","link":"https:\/\/urasuzay.com\/index.php\/tank-oyunu\/","title":{"rendered":"tank oyunu"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"34\" class=\"elementor elementor-34\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dab4a2b e-con e-atomic-element e-flexbox-base \" data-id=\"dab4a2b\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"dab4a2b\">\n    \t\t\t<p class=\"e-1bca94b-4412765 e-paragraph-base\" data-interaction-id=\"1bca94b\"><a href=\"https:\/\/urasuzay.com\/\" target=\"_self\" class=\"e-paragraph-link-base\">\n\t\tAna Sayfa\n\t<\/a><\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-85e752e e-flex e-con-boxed e-con e-parent\" data-id=\"85e752e\" 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-5fef421 elementor-widget elementor-widget-html\" data-id=\"5fef421\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n<meta charset=\"UTF-8\">\n<title>3D Tank 1P \/ 2P<\/title>\n\n<style>\nbody{\n    margin:0;\n    overflow:hidden;\n    background:#111;\n    font-family:Arial,sans-serif;\n}\n\n#ui{\n    position:fixed;\n    top:12px;\n    left:12px;\n    color:white;\n    background:rgba(0,0,0,.58);\n    padding:10px 14px;\n    border-radius:12px;\n    z-index:20;\n    font-size:15px;\n}\n\n#ui2{\n    position:fixed;\n    top:12px;\n    right:145px;\n    color:white;\n    background:rgba(0,0,0,.58);\n    padding:10px 14px;\n    border-radius:12px;\n    z-index:20;\n    font-size:15px;\n    display:none;\n}\n\n#exitBtn{\n    position:fixed;\n    left:12px;\n    bottom:12px;\n    z-index:60;\n    display:none;\n    border:0;\n    border-radius:14px;\n    padding:12px 18px;\n    color:white;\n    font-weight:bold;\n    background:linear-gradient(135deg,#ef4444,#991b1b);\n    box-shadow:0 5px 0 #450a0a;\n    cursor:pointer;\n}\n\n#exitBtn:active{\n    transform:translateY(3px);\n    box-shadow:0 2px 0 #450a0a;\n}\n\n.nitroBox{\n    width:120px;\n    height:11px;\n    border:2px solid white;\n    border-radius:999px;\n    margin-top:4px;\n    background:rgba(255,255,255,.18);\n    overflow:hidden;\n}\n\n.nitroBar{\n    height:100%;\n    width:100%;\n    background:cyan;\n}\n\n#minimapBox{\n    position:fixed;\n    right:12px;\n    top:12px;\n    width:118px;\n    height:128px;\n    background:rgba(0,0,0,.62);\n    border:2px solid rgba(255,255,255,.65);\n    border-radius:12px;\n    z-index:45;\n    padding:5px;\n}\n\n#minimapTitle{\n    color:white;\n    font-size:10px;\n    text-align:center;\n    margin-bottom:3px;\n    font-weight:bold;\n}\n\n#minimap{\n    width:108px;\n    height:100px;\n    background:rgba(20,40,20,.9);\n    border-radius:7px;\n}\n\n#menu{\n    position:fixed;\n    inset:0;\n    z-index:100;\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    color:white;\n    background:\n        radial-gradient(circle at top left,#ffd43b,transparent 30%),\n        radial-gradient(circle at bottom right,#22d3ee,transparent 35%),\n        linear-gradient(135deg,#1d4ed8,#7c3aed,#111827);\n}\n\n.box{\n    width:840px;\n    max-width:95vw;\n    min-height:475px;\n    background:rgba(0,0,0,.52);\n    border:4px solid rgba(255,255,255,.35);\n    border-radius:28px;\n    padding:24px;\n    text-align:center;\n    box-shadow:0 0 45px rgba(0,0,0,.45);\n}\n\nh1{\n    font-size:48px;\n    margin:6px 0 12px;\n    text-shadow:4px 4px 0 #000;\n}\n\n.btn{\n    width:260px;\n    padding:16px;\n    margin:10px;\n    border:0;\n    border-radius:18px;\n    font-size:21px;\n    font-weight:bold;\n    color:white;\n    cursor:pointer;\n    background:linear-gradient(135deg,#22c55e,#16a34a);\n    box-shadow:0 7px 0 #14532d;\n    text-shadow:2px 2px #000;\n}\n\n.btn.blue{\n    background:linear-gradient(135deg,#06b6d4,#2563eb);\n    box-shadow:0 7px 0 #1e3a8a;\n}\n\n.btn.orange{\n    background:linear-gradient(135deg,#f97316,#dc2626);\n    box-shadow:0 7px 0 #7f1d1d;\n}\n\n.btn.purple{\n    background:linear-gradient(135deg,#a855f7,#7e22ce);\n    box-shadow:0 7px 0 #4c1d95;\n}\n\n.btn:active{\n    transform:translateY(4px);\n    box-shadow:0 3px 0 #111;\n}\n\n#readyScreen,\n#controlsScreen,\n#shopScreen,\n#resultScreen{\n    display:none;\n}\n\n#shopScreen{\n    max-height:82vh;\n    overflow-y:auto;\n    padding-right:16px;\n}\n\n#shopScreen::-webkit-scrollbar{\n    width:12px;\n}\n\n#shopScreen::-webkit-scrollbar-track{\n    background:rgba(255,255,255,.12);\n    border-radius:999px;\n}\n\n#shopScreen::-webkit-scrollbar-thumb{\n    background:#facc15;\n    border-radius:999px;\n}\n\n.readyGrid{\n    display:grid;\n    grid-template-columns:1fr 1fr;\n    gap:18px;\n    margin-top:20px;\n}\n\n.readyCard{\n    background:rgba(255,255,255,.13);\n    border:3px solid rgba(255,255,255,.28);\n    border-radius:22px;\n    padding:20px;\n}\n\n.ready{\n    border-color:#22c55e;\n    box-shadow:0 0 22px #22c55e;\n}\n\n.shopGrid{\n    display:grid;\n    grid-template-columns:repeat(4,1fr);\n    gap:12px;\n    margin-top:15px;\n}\n\n.shopCard{\n    background:linear-gradient(135deg,#334155,#111827);\n    border:3px solid rgba(255,255,255,.3);\n    border-radius:18px;\n    padding:12px;\n    min-height:125px;\n    box-shadow:0 6px 0 #020617;\n}\n\n.shopTag{\n    display:inline-block;\n    background:#facc15;\n    color:#111827;\n    padding:7px 10px;\n    border-radius:999px;\n    font-weight:bold;\n    font-size:12px;\n    margin-top:6px;\n    border:0;\n    cursor:pointer;\n}\n\n.shopTag.owned{\n    background:#22c55e;\n    color:white;\n    cursor:default;\n}\n\n.shopTag.noMoney{\n    background:#ef4444;\n    color:white;\n}\n\n.codeBox{\n    margin-top:25px;\n    background:rgba(255,255,255,.12);\n    border:3px solid rgba(255,255,255,.28);\n    border-radius:20px;\n    padding:18px;\n}\n\n#codeInput{\n    width:260px;\n    max-width:80%;\n    padding:13px;\n    border-radius:14px;\n    border:3px solid #facc15;\n    font-size:18px;\n    text-align:center;\n    outline:none;\n}\n\n#codeBtn{\n    padding:13px 20px;\n    border:0;\n    border-radius:14px;\n    background:linear-gradient(135deg,#facc15,#f97316);\n    color:#111827;\n    font-size:18px;\n    font-weight:bold;\n    cursor:pointer;\n    margin-left:8px;\n}\n\n#codeMessage{\n    margin-top:10px;\n    font-weight:bold;\n    color:#facc15;\n}\n\n.tankIcon{\n    width:72px;\n    height:48px;\n    margin:0 auto;\n    position:relative;\n}\n\n.tankIcon .tankBody{\n    position:absolute;\n    left:8px;\n    top:20px;\n    width:56px;\n    height:22px;\n    border-radius:10px;\n    background:var(--body);\n    border:3px solid #020617;\n}\n\n.tankIcon .tankTop{\n    position:absolute;\n    left:25px;\n    top:5px;\n    width:25px;\n    height:24px;\n    border-radius:8px;\n    background:var(--top);\n    border:3px solid #020617;\n}\n\n.tankIcon .tankGun{\n    position:absolute;\n    left:48px;\n    top:14px;\n    width:25px;\n    height:7px;\n    border-radius:99px;\n    background:#020617;\n}\n\n.rocketIcon{\n    width:62px;\n    height:32px;\n    margin:0 auto;\n    position:relative;\n}\n\n.rocketIcon .fire{\n    position:absolute;\n    left:0;\n    top:12px;\n    width:13px;\n    height:8px;\n    border-radius:50%;\n    background:orange;\n}\n\n.rocketIcon .body{\n    position:absolute;\n    left:9px;\n    top:10px;\n    width:38px;\n    height:12px;\n    border-radius:999px;\n    background:var(--c);\n    border:2px solid #020617;\n}\n\n.rocketIcon .tip{\n    position:absolute;\n    left:45px;\n    top:9px;\n    border-left:15px solid #020617;\n    border-top:8px solid transparent;\n    border-bottom:8px solid transparent;\n}\n\n.crosshair{\n    position:fixed;\n    width:32px;\n    height:32px;\n    transform:translate(-50%,-50%);\n    z-index:30;\n    pointer-events:none;\n}\n\n.crosshair:before,\n.crosshair:after{\n    content:\"\";\n    position:absolute;\n    background:white;\n    box-shadow:0 0 6px black;\n}\n\n.crosshair:before{\n    left:15px;\n    top:0;\n    width:3px;\n    height:32px;\n}\n\n.crosshair:after{\n    top:15px;\n    left:0;\n    height:3px;\n    width:32px;\n}\n\n#cross1{\n    left:50vw;\n    top:50vh;\n    display:none;\n}\n\n#crossP1{\n    left:25vw;\n    top:50vh;\n    display:none;\n}\n\n#crossP2{\n    left:75vw;\n    top:50vh;\n    display:none;\n}\n\n.scope{\n    position:fixed;\n    top:0;\n    bottom:0;\n    pointer-events:none;\n    z-index:25;\n    display:none;\n    background:radial-gradient(circle at center,transparent 0%,transparent 30%,rgba(0,0,0,.35) 45%,rgba(0,0,0,.88) 100%);\n}\n\n#scope1{\n    left:0;\n    right:0;\n}\n\n#scopeP1{\n    left:0;\n    width:50vw;\n}\n\n#scopeP2{\n    right:0;\n    width:50vw;\n}\n\n#weaponBar{\n    position:fixed;\n    left:50%;\n    bottom:12px;\n    transform:translateX(-50%);\n    display:flex;\n    gap:6px;\n    z-index:30;\n    background:rgba(0,0,0,.5);\n    padding:7px;\n    border-radius:14px;\n}\n\n.slot{\n    width:58px;\n    height:54px;\n    border:2px solid rgba(255,255,255,.35);\n    border-radius:9px;\n    color:white;\n    display:flex;\n    flex-direction:column;\n    justify-content:center;\n    align-items:center;\n    font-size:12px;\n    position:relative;\n    overflow:hidden;\n}\n\n.slot.selected{\n    border-color:yellow;\n    background:rgba(255,255,0,.22);\n    box-shadow:0 0 12px yellow;\n}\n\n.cd{\n    position:absolute;\n    left:0;\n    bottom:0;\n    width:100%;\n    height:0;\n    background:rgba(0,0,0,.7);\n}\n\n.rocket{\n    width:34px;\n    height:15px;\n    position:relative;\n    z-index:2;\n}\n\n.rocket .body{\n    position:absolute;\n    left:4px;\n    top:4px;\n    width:22px;\n    height:7px;\n    border-radius:999px;\n    background:var(--c);\n    border:1px solid #111;\n}\n\n.rocket .tip{\n    position:absolute;\n    left:26px;\n    top:4px;\n    border-left:8px solid #111;\n    border-top:5px solid transparent;\n    border-bottom:5px solid transparent;\n}\n\n.rocket .fire{\n    position:absolute;\n    left:0;\n    top:5px;\n    width:7px;\n    height:5px;\n    background:orange;\n    border-radius:50%;\n}\n\n#splitLine{\n    position:fixed;\n    top:0;\n    bottom:0;\n    left:50%;\n    width:4px;\n    background:rgba(255,255,255,.7);\n    z-index:22;\n    display:none;\n}\n\n.resultWin{\n    color:#22c55e;\n}\n\n.resultLose{\n    color:#f87171;\n}\n<\/style>\n<\/head>\n\n<body>\n\n<div id=\"ui\">\n    <b>Oyuncu 1<\/b><br>\n    Mod: <span id=\"modeText\">Men\u00fc<\/span><br>\n    Can: <span id=\"hp1\">100<\/span><br>\n    Skor: <span id=\"scoreText\">0<\/span><br>\n    U Papel: <span id=\"paperText\">0<\/span><br>\n    F\u00fcze: <span id=\"weaponName\">Normal<\/span><br>\n    Nitro\n    <div class=\"nitroBox\">\n        <div class=\"nitroBar\" id=\"nitro1\"><\/div>\n    <\/div>\n<\/div>\n\n<div id=\"ui2\">\n    <b>Oyuncu 2<\/b><br>\n    Can: <span id=\"hp2\">100<\/span><br>\n    Nitro\n    <div class=\"nitroBox\">\n        <div class=\"nitroBar\" id=\"nitro2\"><\/div>\n    <\/div>\n<\/div>\n\n<button id=\"exitBtn\">\u00c7IKI\u015e<\/button>\n\n<div id=\"minimapBox\">\n    <div id=\"minimapTitle\">HAR\u0130TA<\/div>\n    <canvas id=\"minimap\" width=\"108\" height=\"100\"><\/canvas>\n<\/div>\n\n<div id=\"cross1\" class=\"crosshair\"><\/div>\n<div id=\"crossP1\" class=\"crosshair\"><\/div>\n<div id=\"crossP2\" class=\"crosshair\"><\/div>\n\n<div id=\"scope1\" class=\"scope\"><\/div>\n<div id=\"scopeP1\" class=\"scope\"><\/div>\n<div id=\"scopeP2\" class=\"scope\"><\/div>\n\n<div id=\"splitLine\"><\/div>\n\n<div id=\"weaponBar\">\n    <div class=\"slot selected\" id=\"slot1\"><div class=\"cd\" id=\"cd1\"><\/div>1<div class=\"rocket\" style=\"--c:#ffff00\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div><\/div>\n    <div class=\"slot\" id=\"slot2\"><div class=\"cd\" id=\"cd2\"><\/div>2<div class=\"rocket\" style=\"--c:#00ffff\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div><\/div>\n    <div class=\"slot\" id=\"slot3\"><div class=\"cd\" id=\"cd3\"><\/div>3<div class=\"rocket\" style=\"--c:#ffaa00\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div><\/div>\n    <div class=\"slot\" id=\"slot4\"><div class=\"cd\" id=\"cd4\"><\/div>4<div class=\"rocket\" style=\"--c:#ff3300\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div><\/div>\n    <div class=\"slot\" id=\"slot5\"><div class=\"cd\" id=\"cd5\"><\/div>5<div class=\"rocket\" style=\"--c:#66ff66\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div><\/div>\n    <div class=\"slot\" id=\"slot6\"><div class=\"cd\" id=\"cd6\"><\/div>6<div class=\"rocket\" style=\"--c:#ff00ff\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div><\/div>\n<\/div>\n\n<div id=\"menu\">\n    <div class=\"box\" id=\"mainMenu\">\n        <h1>TANK STARS<\/h1>\n        <p>U Papel: <b id=\"menuPaperText\">0<\/b><\/p>\n        <p>1 Player botlara kar\u015f\u0131, 2 Player ayn\u0131 bilgisayarda b\u00f6l\u00fcnm\u00fc\u015f ekran.<\/p>\n        <button class=\"btn\" id=\"onePlayerBtn\">1 PLAYER<\/button>\n        <button class=\"btn orange\" id=\"twoPlayerBtn\">2 PLAYER<\/button>\n        <button class=\"btn purple\" id=\"shopBtn\">MA\u011eAZA<\/button>\n        <button class=\"btn blue\" id=\"controlsBtn\">KONTROLLER<\/button>\n    <\/div>\n\n    <div class=\"box\" id=\"shopScreen\">\n        <h1>MA\u011eAZA<\/h1>\n        <p>Fare tekerle\u011fiyle a\u015fa\u011f\u0131 inebilirsin.<\/p>\n        <p>U Papel: <b id=\"shopPaperText\">0<\/b><\/p>\n\n        <h2>Tanklar<\/h2>\n        <div class=\"shopGrid\">\n            <div class=\"shopCard\">\n                <div class=\"tankIcon\" style=\"--body:#166534;--top:#22c55e\"><div class=\"tankGun\"><\/div><div class=\"tankTop\"><\/div><div class=\"tankBody\"><\/div><\/div>\n                <h3>Ye\u015fil Tank<\/h3>\n                <p>Dengeli<\/p>\n                <button class=\"shopTag owned\">Sahip<\/button>\n            <\/div>\n            <div class=\"shopCard\">\n                <div class=\"tankIcon\" style=\"--body:#1d4ed8;--top:#60a5fa\"><div class=\"tankGun\"><\/div><div class=\"tankTop\"><\/div><div class=\"tankBody\"><\/div><\/div>\n                <h3>Mavi Tank<\/h3>\n                <p>H\u0131zl\u0131 d\u00f6n\u00fc\u015f<\/p>\n                <button class=\"shopTag\" onclick=\"buyItem('blueTank',60,this)\">60 U Papel<\/button>\n            <\/div>\n            <div class=\"shopCard\">\n                <div class=\"tankIcon\" style=\"--body:#7f1d1d;--top:#ef4444\"><div class=\"tankGun\"><\/div><div class=\"tankTop\"><\/div><div class=\"tankBody\"><\/div><\/div>\n                <h3>K\u0131rm\u0131z\u0131 Tank<\/h3>\n                <p>G\u00fc\u00e7l\u00fc z\u0131rh<\/p>\n                <button class=\"shopTag\" onclick=\"buyItem('redTank',90,this)\">90 U Papel<\/button>\n            <\/div>\n            <div class=\"shopCard\">\n                <div class=\"tankIcon\" style=\"--body:#27272a;--top:#a1a1aa\"><div class=\"tankGun\"><\/div><div class=\"tankTop\"><\/div><div class=\"tankBody\"><\/div><\/div>\n                <h3>Metal Tank<\/h3>\n                <p>Yava\u015f ama a\u011f\u0131r<\/p>\n                <button class=\"shopTag\" onclick=\"buyItem('metalTank',130,this)\">130 U Papel<\/button>\n            <\/div>\n        <\/div>\n\n        <h2>F\u00fczeler<\/h2>\n        <div class=\"shopGrid\">\n            <div class=\"shopCard\">\n                <div class=\"rocketIcon\" style=\"--c:#ffff00\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div>\n                <h3>Normal<\/h3>\n                <p>Dengeli f\u00fcze<\/p>\n                <button class=\"shopTag owned\">Sahip<\/button>\n            <\/div>\n            <div class=\"shopCard\">\n                <div class=\"rocketIcon\" style=\"--c:#00ffff\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div>\n                <h3>H\u0131zl\u0131<\/h3>\n                <p>\u00c7abuk dolar<\/p>\n                <button class=\"shopTag\" onclick=\"buyItem('fastRocket',40,this)\">40 U Papel<\/button>\n            <\/div>\n            <div class=\"shopCard\">\n                <div class=\"rocketIcon\" style=\"--c:#ff3300\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div>\n                <h3>Patlay\u0131c\u0131<\/h3>\n                <p>Alan hasar\u0131<\/p>\n                <button class=\"shopTag\" onclick=\"buyItem('explosiveRocket',75,this)\">75 U Papel<\/button>\n            <\/div>\n            <div class=\"shopCard\">\n                <div class=\"rocketIcon\" style=\"--c:#ff00ff\"><div class=\"fire\"><\/div><div class=\"body\"><\/div><div class=\"tip\"><\/div><\/div>\n                <h3>Dev F\u00fcze<\/h3>\n                <p>A\u011f\u0131r hasar<\/p>\n                <button class=\"shopTag\" onclick=\"buyItem('giantRocket',110,this)\">110 U Papel<\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"codeBox\">\n            <h2>Kod Gir<\/h2>\n            <p><b>2846Uras<\/b> kodunu istedi\u011fin kadar kullanabilirsin.<\/p>\n            <input id=\"codeInput\" type=\"text\" placeholder=\"Kodu yaz\">\n            <button id=\"codeBtn\">KULLAN<\/button>\n            <div id=\"codeMessage\"><\/div>\n        <\/div>\n\n        <button class=\"btn blue\" id=\"shopBackBtn\">GER\u0130<\/button>\n    <\/div>\n\n    <div class=\"box\" id=\"readyScreen\">\n        <h1>2 PLAYER HAZIRLIK<\/h1>\n        <p>\u0130ki oyuncu da haz\u0131r verince ma\u00e7 ba\u015flar.<\/p>\n        <div class=\"readyGrid\">\n            <div class=\"readyCard\" id=\"p1ReadyCard\">\n                <h2>Oyuncu 1<\/h2>\n                <p>Haz\u0131r olmak i\u00e7in <b>R<\/b> bas<\/p>\n                <p id=\"p1ReadyText\">Bekliyor...<\/p>\n            <\/div>\n            <div class=\"readyCard\" id=\"p2ReadyCard\">\n                <h2>Oyuncu 2<\/h2>\n                <p>Haz\u0131r olmak i\u00e7in <b>O<\/b> bas<\/p>\n                <p id=\"p2ReadyText\">Bekliyor...<\/p>\n            <\/div>\n        <\/div>\n        <button class=\"btn blue\" id=\"readyBackBtn\">GER\u0130<\/button>\n    <\/div>\n\n    <div class=\"box\" id=\"controlsScreen\">\n        <h1>KONTROLLER<\/h1>\n        <p>\n            <b>1 Player:<\/b><br>\n            WASD hareket, Space nitro, sa\u011f t\u0131k d\u00fcrb\u00fcn, sol t\u0131k ate\u015f, 0 kamera, 1-6 f\u00fcze se\u00e7<br><br>\n            <b>2 Player:<\/b><br>\n            Oyuncu 1: W A S D hareket, E ni\u015fan, R ate\u015f, C nitro<br>\n            Oyuncu 2: Ok tu\u015flar\u0131 hareket, P ni\u015fan, O ate\u015f, \u00d6 nitro\n        <\/p>\n        <button class=\"btn blue\" id=\"controlsBackBtn\">GER\u0130<\/button>\n    <\/div>\n\n    <div class=\"box\" id=\"resultScreen\">\n        <h1 id=\"resultTitle\">KAZANDIN!<\/h1>\n        <p id=\"resultText\">+10 U Papel kazand\u0131n.<\/p>\n        <p>Toplam U Papel: <b id=\"resultPaperText\">0<\/b><\/p>\n        <button class=\"btn\" id=\"playAgainBtn\">TEKRAR OYNA<\/button>\n        <button class=\"btn blue\" id=\"resultMenuBtn\">ANA MEN\u00dc<\/button>\n    <\/div>\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.160.0\/build\/three.min.js\"><\/script>\n\n<script>\nlet scene, renderer;\nlet cam1, cam2;\nlet keys = {};\nlet gameMode = \"menu\";\nlet lastMode = \"one\";\nlet selectedWeapon = 1;\nlet score = 0;\nlet uPapel = 0;\n\nlet ownedItems = {\n    greenTank:true,\n    blueTank:false,\n    redTank:false,\n    metalTank:false,\n    normalRocket:true,\n    fastRocket:false,\n    explosiveRocket:false,\n    giantRocket:false\n};\n\nlet walls = [];\nlet bullets = [];\nlet enemyBullets = [];\nlet enemies = [];\n\nlet player1, player2;\nlet p1Ready = false;\nlet p2Ready = false;\n\nconst MAP_SIZE = 460;\nconst MAX_ENEMIES = 10;\n\nconst weapons = {\n    1:{name:\"Normal\", color:0xffff00, speed:1.9, size:.34, damage:1, reload:36, explosion:0, count:1, spread:0, hit:5, life:180},\n    2:{name:\"H\u0131zl\u0131\", color:0x00ffff, speed:2.8, size:.24, damage:1, reload:27, explosion:0, count:1, spread:0, hit:4.5, life:160},\n    3:{name:\"G\u00fc\u00e7l\u00fc\", color:0xffaa00, speed:1.6, size:.42, damage:2, reload:66, explosion:0, count:1, spread:0, hit:5.3, life:180},\n    4:{name:\"Patlar\", color:0xff3300, speed:1.45, size:.42, damage:1, reload:96, explosion:12, count:1, spread:0, hit:5.2, life:170},\n    5:{name:\"\u00dc\u00e7l\u00fc\", color:0x66ff66, speed:1.8, size:.28, damage:1, reload:78, explosion:0, count:3, spread:.20, hit:4.6, life:170},\n    6:{name:\"Dev\", color:0xff00ff, speed:1.05, size:.72, damage:3, reload:132, explosion:9, count:1, spread:0, hit:6.2, life:200}\n};\n\nconst spawnPoints = [\n    [-185,-185],[-90,-185],[90,-185],[185,-185],\n    [-185,-90],[-40,-90],[90,-90],[185,-90],\n    [-185,40],[-70,40],[70,40],[185,40],\n    [-185,150],[-80,150],[80,150],[185,150]\n];\n\nconst modeText = document.getElementById(\"modeText\");\nconst hp1Text = document.getElementById(\"hp1\");\nconst hp2Text = document.getElementById(\"hp2\");\nconst scoreText = document.getElementById(\"scoreText\");\nconst paperText = document.getElementById(\"paperText\");\nconst menuPaperText = document.getElementById(\"menuPaperText\");\nconst shopPaperText = document.getElementById(\"shopPaperText\");\nconst resultPaperText = document.getElementById(\"resultPaperText\");\nconst weaponName = document.getElementById(\"weaponName\");\nconst nitro1 = document.getElementById(\"nitro1\");\nconst nitro2 = document.getElementById(\"nitro2\");\n\nconst menu = document.getElementById(\"menu\");\nconst mainMenu = document.getElementById(\"mainMenu\");\nconst readyScreen = document.getElementById(\"readyScreen\");\nconst controlsScreen = document.getElementById(\"controlsScreen\");\nconst shopScreen = document.getElementById(\"shopScreen\");\nconst resultScreen = document.getElementById(\"resultScreen\");\nconst resultTitle = document.getElementById(\"resultTitle\");\nconst resultText = document.getElementById(\"resultText\");\n\nconst cross1 = document.getElementById(\"cross1\");\nconst crossP1 = document.getElementById(\"crossP1\");\nconst crossP2 = document.getElementById(\"crossP2\");\nconst scope1 = document.getElementById(\"scope1\");\nconst scopeP1 = document.getElementById(\"scopeP1\");\nconst scopeP2 = document.getElementById(\"scopeP2\");\nconst splitLine = document.getElementById(\"splitLine\");\nconst ui2 = document.getElementById(\"ui2\");\nconst exitBtn = document.getElementById(\"exitBtn\");\n\nconst minimap = document.getElementById(\"minimap\");\nconst minimapCtx = minimap.getContext(\"2d\");\n\ndocument.getElementById(\"onePlayerBtn\").onclick = startOnePlayer;\ndocument.getElementById(\"twoPlayerBtn\").onclick = showReady;\ndocument.getElementById(\"shopBtn\").onclick = showShop;\ndocument.getElementById(\"controlsBtn\").onclick = showControls;\ndocument.getElementById(\"controlsBackBtn\").onclick = showMainMenu;\ndocument.getElementById(\"shopBackBtn\").onclick = showMainMenu;\ndocument.getElementById(\"readyBackBtn\").onclick = showMainMenu;\ndocument.getElementById(\"codeBtn\").onclick = useCode;\ndocument.getElementById(\"resultMenuBtn\").onclick = showMainMenu;\ndocument.getElementById(\"playAgainBtn\").onclick = function(){\n    if(lastMode === \"two\") startTwoPlayer();\n    else startOnePlayer();\n};\nexitBtn.onclick = showMainMenu;\n\ninit();\nanimate();\n\nfunction init(){\n    scene = new THREE.Scene();\n    scene.background = new THREE.Color(0x7ec8ff);\n\n    renderer = new THREE.WebGLRenderer({antialias:true});\n    renderer.setSize(innerWidth,innerHeight);\n    renderer.setScissorTest(true);\n    document.body.appendChild(renderer.domElement);\n\n    cam1 = new THREE.PerspectiveCamera(75,innerWidth\/innerHeight,.1,1500);\n    cam2 = new THREE.PerspectiveCamera(75,innerWidth\/innerHeight,.1,1500);\n\n    const sun = new THREE.DirectionalLight(0xffffff,1.2);\n    sun.position.set(40,80,40);\n    scene.add(sun);\n    scene.add(new THREE.AmbientLight(0xffffff,.65));\n\n    createGround();\n    createMaze();\n\n    player1 = createTank(0x1f7a1f,0x2fa82f);\n    player2 = createTank(0x1d4ed8,0x60a5fa);\n\n    scene.add(player1.group);\n    scene.add(player2.group);\n\n    addPlayerHealthBar(player1);\n    addPlayerHealthBar(player2);\n\n    resetPlayers();\n\n    addEventListener(\"resize\",resize);\n    document.addEventListener(\"contextmenu\",e=>e.preventDefault());\n\n    document.addEventListener(\"keydown\",e=>{\n        keys[e.key.toLowerCase()] = true;\n\n        if(e.code === \"Space\"){\n            keys.space = true;\n            e.preventDefault();\n        }\n\n        if(gameMode === \"ready\"){\n            if(e.key.toLowerCase() === \"r\"){\n                p1Ready = true;\n                updateReady();\n            }\n            if(e.key.toLowerCase() === \"o\"){\n                p2Ready = true;\n                updateReady();\n            }\n            if(p1Ready && p2Ready){\n                startTwoPlayer();\n            }\n        }\n\n        if(gameMode === \"one\"){\n            if([\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"].includes(e.key)){\n                selectedWeapon = Number(e.key);\n                updateWeaponUI();\n            }\n            if(e.key === \"0\"){\n                player1.cameraMode = player1.cameraMode === 1 ? 2 : 1;\n            }\n        }\n    });\n\n    document.addEventListener(\"keyup\",e=>{\n        keys[e.key.toLowerCase()] = false;\n        if(e.code === \"Space\"){\n            keys.space = false;\n            e.preventDefault();\n        }\n    });\n\n    document.addEventListener(\"mousedown\",e=>{\n        if(gameMode !== \"one\") return;\n        if(e.button === 2) player1.aim = true;\n        if(e.button === 0) firePlayer(player1, selectedWeapon, \"player\");\n    });\n\n    document.addEventListener(\"mouseup\",e=>{\n        if(e.button === 2) player1.aim = false;\n    });\n\n    updateWeaponUI();\n    updatePapelUI();\n}\n\nfunction useCode(){\n    const input = document.getElementById(\"codeInput\");\n    const msg = document.getElementById(\"codeMessage\");\n    const code = input.value.trim();\n\n    if(code === \"2846Uras\"){\n        uPapel += 1000;\n        updatePapelUI();\n        msg.textContent = \"Kod do\u011fru! 1000 U Papel kazand\u0131n.\";\n        msg.style.color = \"#22c55e\";\n        input.value = \"\";\n        return;\n    }\n\n    msg.textContent = \"Kod yanl\u0131\u015f.\";\n    msg.style.color = \"#f87171\";\n}\n\nfunction buyItem(itemName, price, button){\n    if(ownedItems[itemName]){\n        button.textContent = \"Sahip\";\n        button.classList.add(\"owned\");\n        return;\n    }\n\n    if(uPapel < price){\n        button.textContent = \"Yetersiz\";\n        button.classList.add(\"noMoney\");\n\n        setTimeout(function(){\n            button.textContent = price + \" U Papel\";\n            button.classList.remove(\"noMoney\");\n        },900);\n\n        return;\n    }\n\n    uPapel -= price;\n    ownedItems[itemName] = true;\n    updatePapelUI();\n\n    button.textContent = \"Sahip\";\n    button.classList.add(\"owned\");\n}\n\nfunction refreshShopButtons(){\n    const buttons = document.querySelectorAll(\".shopTag\");\n\n    buttons.forEach(function(btn){\n        const onclickText = btn.getAttribute(\"onclick\");\n        if(!onclickText) return;\n\n        const match = onclickText.match(\/buyItem\\('(.+?)',\/);\n        if(!match) return;\n\n        const itemName = match[1];\n\n        if(ownedItems[itemName]){\n            btn.textContent = \"Sahip\";\n            btn.classList.add(\"owned\");\n        }\n    });\n}\n\nfunction createGround(){\n    const g = new THREE.Mesh(\n        new THREE.PlaneGeometry(MAP_SIZE,MAP_SIZE),\n        new THREE.MeshStandardMaterial({color:0x3d8f3d})\n    );\n    g.rotation.x = -Math.PI\/2;\n    scene.add(g);\n    scene.add(new THREE.GridHelper(MAP_SIZE,92,0x222222,0x444444));\n}\n\nfunction addWall(x,z,w,d){\n    const wall = new THREE.Mesh(\n        new THREE.BoxGeometry(w,4,d),\n        new THREE.MeshStandardMaterial({color:0x777777})\n    );\n    wall.position.set(x,2,z);\n    wall.userData.w = w;\n    wall.userData.d = d;\n    scene.add(wall);\n    walls.push(wall);\n}\n\nfunction createMaze(){\n    addWall(0,-230,460,4);\n    addWall(0,230,460,4);\n    addWall(-230,0,4,460);\n    addWall(230,0,4,460);\n\n    addWall(-150,-175,90,4);\n    addWall(0,-175,90,4);\n    addWall(150,-175,90,4);\n\n    addWall(-185,-125,4,70);\n    addWall(-70,-125,4,70);\n    addWall(70,-125,4,70);\n    addWall(185,-125,4,70);\n\n    addWall(-120,-80,95,4);\n    addWall(120,-80,95,4);\n\n    addWall(-185,-20,75,4);\n    addWall(185,-20,75,4);\n\n    addWall(-105,0,4,95);\n    addWall(105,0,4,95);\n\n    addWall(-35,-35,70,4);\n    addWall(35,35,70,4);\n\n    addWall(0,-105,4,70);\n    addWall(0,105,4,70);\n\n    addWall(-150,175,90,4);\n    addWall(0,175,90,4);\n    addWall(150,175,90,4);\n\n    addWall(-185,125,4,70);\n    addWall(-70,125,4,70);\n    addWall(70,125,4,70);\n    addWall(185,125,4,70);\n\n    addWall(-120,80,95,4);\n    addWall(120,80,95,4);\n\n    addWall(-35,-155,4,45);\n    addWall(35,155,4,45);\n    addWall(-155,35,45,4);\n    addWall(155,-35,45,4);\n}\n\nfunction createTank(bodyColor,topColor){\n    const group = new THREE.Group();\n    const parts = [];\n\n    const body = new THREE.Mesh(\n        new THREE.BoxGeometry(4,1.2,6),\n        new THREE.MeshStandardMaterial({color:bodyColor})\n    );\n    body.position.y = 1;\n    group.add(body);\n    parts.push(body);\n\n    const top = new THREE.Mesh(\n        new THREE.BoxGeometry(2.5,.8,2.5),\n        new THREE.MeshStandardMaterial({color:topColor})\n    );\n    top.position.y = 2;\n    group.add(top);\n    parts.push(top);\n\n    const barrel = new THREE.Mesh(\n        new THREE.BoxGeometry(.45,.45,4),\n        new THREE.MeshStandardMaterial({color:0x222222})\n    );\n    barrel.position.set(0,2.1,-3);\n    group.add(barrel);\n    parts.push(barrel);\n\n    const wheelMat = new THREE.MeshStandardMaterial({color:0x111111});\n    for(const x of [-2.3,2.3]){\n        for(const z of [-2,0,2]){\n            const wheel = new THREE.Mesh(new THREE.CylinderGeometry(.55,.55,.5,18),wheelMat);\n            wheel.rotation.z = Math.PI\/2;\n            wheel.position.set(x,.55,z);\n            group.add(wheel);\n            parts.push(wheel);\n        }\n    }\n\n    return {\n        group,\n        parts,\n        hp:100,\n        maxHp:100,\n        yaw:0,\n        aim:false,\n        nitro:100,\n        cameraMode:1,\n        cooldowns:{1:0,2:0,3:0,4:0,5:0,6:0},\n        weapon:1,\n        healthSprite:null\n    };\n}\n\nfunction createHealthSprite(owner, y, sx, sy){\n    const canvas = document.createElement(\"canvas\");\n    canvas.width = 128;\n    canvas.height = 32;\n\n    const ctx = canvas.getContext(\"2d\");\n    const texture = new THREE.CanvasTexture(canvas);\n\n    const material = new THREE.SpriteMaterial({\n        map:texture,\n        transparent:true,\n        depthTest:true,\n        depthWrite:false\n    });\n\n    const sprite = new THREE.Sprite(material);\n    sprite.position.set(0,y,0);\n    sprite.scale.set(sx,sy,1);\n\n    owner.healthCanvas = canvas;\n    owner.healthCtx = ctx;\n    owner.healthTexture = texture;\n    owner.healthSprite = sprite;\n\n    owner.group.add(sprite);\n}\n\nfunction addEnemyHealthBar(enemy){\n    createHealthSprite(enemy,3.15,7,1.7);\n    updateHealthBar(enemy);\n}\n\nfunction addPlayerHealthBar(player){\n    createHealthSprite(player,3.15,8,1.8);\n    player.healthSprite.visible = false;\n    updateHealthBar(player);\n}\n\nfunction updateHealthBar(obj){\n    if(!obj.healthCtx) return;\n\n    const ctx = obj.healthCtx;\n    const canvas = obj.healthCanvas;\n\n    ctx.clearRect(0,0,canvas.width,canvas.height);\n\n    const hpRatio = Math.max(0,obj.hp\/obj.maxHp);\n\n    ctx.fillStyle = \"rgba(0,0,0,0.68)\";\n    ctx.fillRect(0,0,128,32);\n\n    ctx.fillStyle = \"#7f1d1d\";\n    ctx.fillRect(8,8,112,14);\n\n    ctx.fillStyle = \"#22c55e\";\n    ctx.fillRect(8,8,112*hpRatio,14);\n\n    ctx.strokeStyle = \"white\";\n    ctx.lineWidth = 2;\n    ctx.strokeRect(8,8,112,14);\n\n    ctx.fillStyle = \"white\";\n    ctx.font = \"bold 9px Arial\";\n    ctx.textAlign = \"center\";\n    ctx.fillText(Math.ceil(obj.hp) + \"\/\" + obj.maxHp,64,29);\n\n    obj.healthTexture.needsUpdate = true;\n}\n\nfunction resetPlayers(){\n    player1.hp = 100;\n    player1.maxHp = 100;\n    player1.yaw = 0;\n    player1.weapon = 1;\n    player1.aim = false;\n    player1.nitro = 100;\n    player1.cameraMode = 1;\n    player1.cooldowns = {1:0,2:0,3:0,4:0,5:0,6:0};\n    player1.group.position.set(-30,0,190);\n    player1.group.rotation.y = 0;\n\n    player2.hp = 100;\n    player2.maxHp = 100;\n    player2.yaw = Math.PI;\n    player2.weapon = 1;\n    player2.aim = false;\n    player2.nitro = 100;\n    player2.cameraMode = 1;\n    player2.cooldowns = {1:0,2:0,3:0,4:0,5:0,6:0};\n    player2.group.position.set(30,0,-190);\n    player2.group.rotation.y = Math.PI;\n\n    updateHealthBar(player1);\n    updateHealthBar(player2);\n\n    setTankVisible(player1,true);\n    setTankVisible(player2,true);\n}\n\nfunction showMainMenu(){\n    gameMode = \"menu\";\n    menu.style.display = \"flex\";\n    mainMenu.style.display = \"block\";\n    readyScreen.style.display = \"none\";\n    controlsScreen.style.display = \"none\";\n    shopScreen.style.display = \"none\";\n    resultScreen.style.display = \"none\";\n    splitLine.style.display = \"none\";\n    ui2.style.display = \"none\";\n    exitBtn.style.display = \"none\";\n\n    document.getElementById(\"ui\").style.display = \"block\";\n    document.getElementById(\"minimapBox\").style.display = \"block\";\n    document.getElementById(\"weaponBar\").style.display = \"flex\";\n\n    resetRoundOnly();\n    hideCross();\n\n    modeText.textContent = \"Men\u00fc\";\n    updatePapelUI();\n}\n\nfunction showControls(){\n    mainMenu.style.display = \"none\";\n    controlsScreen.style.display = \"block\";\n    shopScreen.style.display = \"none\";\n    resultScreen.style.display = \"none\";\n}\n\nfunction showShop(){\n    mainMenu.style.display = \"none\";\n    controlsScreen.style.display = \"none\";\n    shopScreen.style.display = \"block\";\n    resultScreen.style.display = \"none\";\n    shopScreen.scrollTop = 0;\n    updatePapelUI();\n    refreshShopButtons();\n}\n\nfunction showReady(){\n    gameMode = \"ready\";\n    p1Ready = false;\n    p2Ready = false;\n    mainMenu.style.display = \"none\";\n    readyScreen.style.display = \"block\";\n    resultScreen.style.display = \"none\";\n    updateReady();\n}\n\nfunction showResult(isWin, text){\n    gameMode = \"result\";\n\n    menu.style.display = \"flex\";\n    mainMenu.style.display = \"none\";\n    readyScreen.style.display = \"none\";\n    controlsScreen.style.display = \"none\";\n    shopScreen.style.display = \"none\";\n    resultScreen.style.display = \"block\";\n\n    splitLine.style.display = \"none\";\n    ui2.style.display = \"none\";\n    exitBtn.style.display = \"none\";\n    hideCross();\n\n    if(isWin){\n        resultTitle.textContent = \"KAZANDIN!\";\n        resultTitle.className = \"resultWin\";\n        resultText.textContent = text || \"+10 U Papel kazand\u0131n.\";\n    }else{\n        resultTitle.textContent = \"KAYBETT\u0130N!\";\n        resultTitle.className = \"resultLose\";\n        resultText.textContent = text || \"Bu tur U Papel kazanamad\u0131n.\";\n    }\n\n    resultPaperText.textContent = uPapel;\n}\n\nfunction updateReady(){\n    document.getElementById(\"p1ReadyCard\").classList.toggle(\"ready\",p1Ready);\n    document.getElementById(\"p2ReadyCard\").classList.toggle(\"ready\",p2Ready);\n    document.getElementById(\"p1ReadyText\").textContent = p1Ready ? \"HAZIR!\" : \"Bekliyor...\";\n    document.getElementById(\"p2ReadyText\").textContent = p2Ready ? \"HAZIR!\" : \"Bekliyor...\";\n}\n\nfunction startOnePlayer(){\n    lastMode = \"one\";\n    gameMode = \"one\";\n    menu.style.display = \"none\";\n    splitLine.style.display = \"none\";\n    ui2.style.display = \"none\";\n    exitBtn.style.display = \"block\";\n\n    document.getElementById(\"ui\").style.display = \"block\";\n    document.getElementById(\"minimapBox\").style.display = \"block\";\n    document.getElementById(\"weaponBar\").style.display = \"flex\";\n\n    score = 0;\n    clearAllShots();\n    clearEnemies();\n    resetPlayers();\n\n    player1.healthSprite.visible = false;\n    player2.healthSprite.visible = false;\n    player2.group.visible = false;\n\n    createEnemies(MAX_ENEMIES);\n\n    modeText.textContent = \"1 Player\";\n    updateWeaponUI();\n    updateUI();\n    updateMinimap();\n}\n\nfunction startTwoPlayer(){\n    lastMode = \"two\";\n    gameMode = \"two\";\n    menu.style.display = \"none\";\n    splitLine.style.display = \"block\";\n    ui2.style.display = \"block\";\n    exitBtn.style.display = \"block\";\n\n    document.getElementById(\"ui\").style.display = \"block\";\n    document.getElementById(\"minimapBox\").style.display = \"block\";\n    document.getElementById(\"weaponBar\").style.display = \"flex\";\n\n    score = 0;\n    clearAllShots();\n    clearEnemies();\n    resetPlayers();\n\n    player2.group.visible = true;\n\n    player1.healthSprite.visible = true;\n    player2.healthSprite.visible = true;\n\n    modeText.textContent = \"2 Player - Oyuncu 1\";\n    updateUI();\n    updateMinimap();\n}\n\nfunction resetRoundOnly(){\n    clearAllShots();\n    clearEnemies();\n    resetPlayers();\n    player2.group.visible = true;\n    player1.healthSprite.visible = false;\n    player2.healthSprite.visible = false;\n}\n\nfunction winAndShowResult(message){\n    uPapel += 10;\n    updatePapelUI();\n    resetRoundOnly();\n    showResult(true, message || \"+10 U Papel kazand\u0131n.\");\n}\n\nfunction loseAndShowResult(message){\n    resetRoundOnly();\n    showResult(false, message || \"Bu tur U Papel kazanamad\u0131n.\");\n}\n\nfunction clearAllShots(){\n    for(const b of bullets) scene.remove(b.mesh);\n    for(const b of enemyBullets) scene.remove(b.mesh);\n    bullets = [];\n    enemyBullets = [];\n}\n\nfunction clearEnemies(){\n    for(const e of enemies) scene.remove(e.group);\n    enemies = [];\n}\n\nfunction createEnemies(count){\n    const arr = spawnPoints.slice().sort(()=>Math.random()-.5);\n\n    for(let i=0; i<count && i<arr.length; i++){\n        const e = createTank(0xaa2222,0xdd3333);\n        e.group.position.set(arr[i][0],0,arr[i][1]);\n\n        e.hp = 3;\n        e.maxHp = 3;\n        addEnemyHealthBar(e);\n\n        e.moveAngle = Math.random()*Math.PI*2;\n        e.moveTimer = 60+Math.random()*120;\n        e.lastShot = Math.random()*100;\n        e.canSee = false;\n\n        scene.add(e.group);\n        enemies.push(e);\n    }\n}\n\nfunction forwardOf(tank){\n    return new THREE.Vector3(\n        -Math.sin(tank.group.rotation.y),\n        0,\n        -Math.cos(tank.group.rotation.y)\n    );\n}\n\nfunction checkWallCollision(pos,radius){\n    for(const wall of walls){\n        const box = new THREE.Box3().setFromObject(wall);\n        const closest = pos.clone();\n        closest.x = Math.max(box.min.x,Math.min(closest.x,box.max.x));\n        closest.z = Math.max(box.min.z,Math.min(closest.z,box.max.z));\n        if(closest.distanceTo(pos) < radius) return true;\n    }\n    return false;\n}\n\nfunction moveTank(tank, controls){\n    const aiming = controls.aim();\n    tank.aim = aiming;\n\n    const normalSpeed = aiming ? .12 : .28;\n    const nitroSpeed = aiming ? .23 : .62;\n    const turnSpeed = aiming ? .006 : .045;\n\n    let nitroUsing = false;\n    if(controls.nitro && controls.nitro() && tank.nitro > 0){\n        nitroUsing = true;\n        tank.nitro -= .65;\n        if(tank.nitro < 0) tank.nitro = 0;\n    }else{\n        tank.nitro += .28;\n        if(tank.nitro > 100) tank.nitro = 100;\n    }\n\n    let autoMove = false;\n    if(controls.left()){\n        tank.yaw += turnSpeed;\n        autoMove = true;\n    }\n    if(controls.right()){\n        tank.yaw -= turnSpeed;\n        autoMove = true;\n    }\n\n    const smooth = aiming ? .055 : .18;\n    tank.group.rotation.y += (tank.yaw - tank.group.rotation.y) * smooth;\n\n    const old = tank.group.position.clone();\n    const f = forwardOf(tank);\n    const speed = nitroUsing ? nitroSpeed : normalSpeed;\n\n    if(controls.forward() || autoMove) tank.group.position.add(f.clone().multiplyScalar(speed));\n    if(controls.back()) tank.group.position.add(f.clone().multiplyScalar(-speed*.7));\n\n    if(checkWallCollision(tank.group.position,3)) tank.group.position.copy(old);\n\n    const limit = MAP_SIZE\/2 - 8;\n    tank.group.position.x = Math.max(-limit,Math.min(limit,tank.group.position.x));\n    tank.group.position.z = Math.max(-limit,Math.min(limit,tank.group.position.z));\n}\n\nfunction updateCamera(camera,tank,aspect){\n    const f = forwardOf(tank);\n    camera.aspect = aspect;\n\n    const targetFov = tank.aim ? 30 : 75;\n    camera.fov += (targetFov - camera.fov)*.14;\n    camera.updateProjectionMatrix();\n\n    if(gameMode === \"one\" && tank.cameraMode === 2){\n        setTankVisible(tank,false);\n        const eye = tank.aim ? 3.4 : 2.9;\n        const far = tank.aim ? 100 : 45;\n        camera.position.set(\n            tank.group.position.x + f.x*eye,\n            tank.group.position.y + 2.25,\n            tank.group.position.z + f.z*eye\n        );\n        camera.lookAt(\n            tank.group.position.x + f.x*far,\n            tank.group.position.y + 2.08,\n            tank.group.position.z + f.z*far\n        );\n    }else{\n        setTankVisible(tank,true);\n        let back = tank.aim ? 8.2 : 13;\n        let height = tank.aim ? 4.0 : 5.5;\n        let far = tank.aim ? 70 : 13;\n        camera.position.set(\n            tank.group.position.x - f.x*back,\n            tank.group.position.y + height,\n            tank.group.position.z - f.z*back\n        );\n        camera.lookAt(\n            tank.group.position.x + f.x*far,\n            tank.group.position.y + 1.6,\n            tank.group.position.z + f.z*far\n        );\n    }\n}\n\nfunction setTankVisible(tank,visible){\n    for(const p of tank.parts) p.visible = visible;\n}\n\nfunction firePlayer(tank, weaponId, owner){\n    const w = weapons[weaponId];\n    if(tank.cooldowns[weaponId] > 0) return;\n\n    if(w.count === 1){\n        createBullet(tank,w,0,owner);\n    }else{\n        createBullet(tank,w,-w.spread,owner);\n        createBullet(tank,w,0,owner);\n        createBullet(tank,w,w.spread,owner);\n    }\n\n    tank.cooldowns[weaponId] = w.reload;\n}\n\nfunction createBullet(tank,w,offset,owner){\n    const mesh = new THREE.Mesh(\n        new THREE.SphereGeometry(w.size,16,16),\n        new THREE.MeshStandardMaterial({color:w.color})\n    );\n\n    let dir = forwardOf(tank);\n    if(offset !== 0) dir.applyAxisAngle(new THREE.Vector3(0,1,0),offset);\n    dir.y = 0;\n    dir.normalize();\n\n    mesh.position.copy(tank.group.position);\n    mesh.position.y = 1.7;\n    mesh.position.add(dir.clone().multiplyScalar(4.5));\n\n    scene.add(mesh);\n    bullets.push({\n        mesh,\n        dir,\n        speed:w.speed,\n        life:w.life,\n        damage:w.damage,\n        hit:w.hit,\n        explosion:w.explosion,\n        owner\n    });\n}\n\nfunction updateBullets(){\n    for(let i=bullets.length-1;i>=0;i--){\n        const b = bullets[i];\n        b.mesh.position.add(b.dir.clone().multiplyScalar(b.speed));\n        b.life--;\n\n        if(checkWallCollision(b.mesh.position,.65)){\n            if(b.explosion) explode(b.mesh.position,b.explosion,b.damage,b.owner);\n            scene.remove(b.mesh);\n            bullets.splice(i,1);\n            continue;\n        }\n\n        if(gameMode === \"one\"){\n            for(let j=enemies.length-1;j>=0;j--){\n                const e = enemies[j];\n                if(horizontalDist(b.mesh.position,e.group.position) < b.hit){\n                    if(b.explosion) explode(b.mesh.position,b.explosion,b.damage,b.owner);\n                    else damageEnemy(j,b.damage);\n\n                    scene.remove(b.mesh);\n                    bullets.splice(i,1);\n                    break;\n                }\n            }\n        }\n\n        if(gameMode === \"two\"){\n            const target = b.owner === \"p1\" ? player2 : player1;\n            if(horizontalDist(b.mesh.position,target.group.position) < b.hit){\n                target.hp -= b.damage*12;\n                updateHealthBar(target);\n\n                scene.remove(b.mesh);\n                bullets.splice(i,1);\n\n                if(target.hp <= 0){\n                    target.hp = 0;\n                    updateHealthBar(target);\n                    const winner = b.owner === \"p1\" ? \"Oyuncu 1 kazand\u0131! +10 U Papel.\" : \"Oyuncu 2 kazand\u0131! +10 U Papel.\";\n                    winAndShowResult(winner);\n                }\n                continue;\n            }\n        }\n\n        if(b.life <= 0){\n            scene.remove(b.mesh);\n            bullets.splice(i,1);\n        }\n    }\n}\n\nfunction horizontalDist(a,b){\n    const dx = a.x-b.x;\n    const dz = a.z-b.z;\n    return Math.sqrt(dx*dx+dz*dz);\n}\n\nfunction damageEnemy(index,dmg){\n    const e = enemies[index];\n    e.hp -= dmg;\n\n    updateHealthBar(e);\n\n    if(e.hp <= 0){\n        scene.remove(e.group);\n        enemies.splice(index,1);\n        score += 10;\n\n        if(enemies.length === 0){\n            winAndShowResult(\"T\u00fcm d\u00fc\u015fmanlar\u0131 yok ettin! +10 U Papel.\");\n        }\n    }\n}\n\nfunction explode(pos,radius,dmg,owner){\n    const boom = new THREE.Mesh(\n        new THREE.SphereGeometry(radius,24,24),\n        new THREE.MeshStandardMaterial({color:0xff5500,transparent:true,opacity:.35})\n    );\n    boom.position.copy(pos);\n    scene.add(boom);\n    setTimeout(()=>scene.remove(boom),120);\n\n    if(gameMode === \"one\"){\n        for(let i=enemies.length-1;i>=0;i--){\n            if(horizontalDist(pos,enemies[i].group.position) < radius){\n                damageEnemy(i,dmg);\n            }\n        }\n    }else{\n        const target = owner === \"p1\" ? player2 : player1;\n        if(horizontalDist(pos,target.group.position) < radius){\n            target.hp -= dmg*12;\n            updateHealthBar(target);\n\n            if(target.hp <= 0){\n                target.hp = 0;\n                updateHealthBar(target);\n                const winner = owner === \"p1\" ? \"Oyuncu 1 kazand\u0131! +10 U Papel.\" : \"Oyuncu 2 kazand\u0131! +10 U Papel.\";\n                winAndShowResult(winner);\n            }\n        }\n    }\n}\n\nfunction hasLineOfSight(from,to,maxDist){\n    const dx = to.position.x-from.position.x;\n    const dz = to.position.z-from.position.z;\n    const dist = Math.sqrt(dx*dx+dz*dz);\n    if(dist > maxDist) return false;\n\n    const steps = Math.ceil(dist\/4);\n    for(let i=1;i<steps;i++){\n        const t = i\/steps;\n        const p = new THREE.Vector3(\n            from.position.x + dx*t,\n            0,\n            from.position.z + dz*t\n        );\n        if(checkWallCollision(p,1.6)) return false;\n    }\n    return true;\n}\n\nfunction updateEnemies(){\n    for(const e of enemies){\n        const see = hasLineOfSight(e.group,player1.group,115);\n        e.canSee = see;\n        let dir;\n\n        if(see){\n            dir = player1.group.position.clone().sub(e.group.position).normalize();\n        }else{\n            e.moveTimer--;\n            if(e.moveTimer <= 0){\n                e.moveTimer = 45+Math.random()*140;\n                e.moveAngle = Math.random()*Math.PI*2;\n            }\n            dir = new THREE.Vector3(Math.sin(e.moveAngle),0,Math.cos(e.moveAngle));\n        }\n\n        e.group.rotation.y = Math.atan2(-dir.x,-dir.z);\n        const old = e.group.position.clone();\n        e.group.position.add(dir.multiplyScalar(see ? .08 : .055));\n\n        if(checkWallCollision(e.group.position,3.4)){\n            e.group.position.copy(old);\n            e.moveAngle += Math.PI\/2 + Math.random();\n        }\n\n        e.lastShot++;\n        if(see && e.lastShot > 120){\n            enemyShoot(e);\n            e.lastShot = 0;\n        }\n    }\n}\n\nfunction enemyShoot(e){\n    const mesh = new THREE.Mesh(\n        new THREE.SphereGeometry(.22,12,12),\n        new THREE.MeshStandardMaterial({color:0xff6600})\n    );\n\n    let dir = player1.group.position.clone().sub(e.group.position).normalize();\n    dir.y = 0;\n    dir.normalize();\n\n    mesh.position.copy(e.group.position);\n    mesh.position.y = 1.8;\n    mesh.position.add(dir.clone().multiplyScalar(4));\n\n    scene.add(mesh);\n    enemyBullets.push({mesh,dir,life:190});\n}\n\nfunction updateEnemyBullets(){\n    for(let i=enemyBullets.length-1;i>=0;i--){\n        const b = enemyBullets[i];\n        b.mesh.position.add(b.dir.clone().multiplyScalar(.75));\n        b.life--;\n\n        if(checkWallCollision(b.mesh.position,.4)){\n            scene.remove(b.mesh);\n            enemyBullets.splice(i,1);\n            continue;\n        }\n\n        if(horizontalDist(b.mesh.position,player1.group.position) < 3){\n            player1.hp -= 10;\n            scene.remove(b.mesh);\n            enemyBullets.splice(i,1);\n\n            if(player1.hp <= 0){\n                player1.hp = 0;\n                loseAndShowResult(\"Botlar kazand\u0131. Bu tur U Papel kazanamad\u0131n.\");\n            }\n            continue;\n        }\n\n        if(b.life <= 0){\n            scene.remove(b.mesh);\n            enemyBullets.splice(i,1);\n        }\n    }\n}\n\nfunction updateCooldowns(tank){\n    for(let i=1;i<=6;i++){\n        if(tank.cooldowns[i] > 0) tank.cooldowns[i]--;\n    }\n}\n\nfunction updateWeaponUI(){\n    for(let i=1;i<=6;i++){\n        document.getElementById(\"slot\"+i).classList.toggle(\"selected\",i===selectedWeapon);\n    }\n    weaponName.textContent = weapons[selectedWeapon].name;\n}\n\nfunction updateCdUI(){\n    for(let i=1;i<=6;i++){\n        const h = player1.cooldowns[i] \/ weapons[i].reload * 100;\n        document.getElementById(\"cd\"+i).style.height = h + \"%\";\n    }\n}\n\nfunction updatePapelUI(){\n    paperText.textContent = uPapel;\n    menuPaperText.textContent = uPapel;\n    shopPaperText.textContent = uPapel;\n    resultPaperText.textContent = uPapel;\n}\n\nfunction updateUI(){\n    hp1Text.textContent = Math.max(0,Math.floor(player1.hp));\n    hp2Text.textContent = Math.max(0,Math.floor(player2.hp));\n    scoreText.textContent = score;\n    nitro1.style.width = player1.nitro + \"%\";\n    nitro2.style.width = player2.nitro + \"%\";\n    updatePapelUI();\n}\n\nfunction updateCross(){\n    hideCross();\n\n    if(gameMode === \"one\"){\n        cross1.style.display = \"block\";\n        if(player1.aim) scope1.style.display = \"block\";\n    }\n\n    if(gameMode === \"two\"){\n        crossP1.style.display = \"block\";\n        crossP2.style.display = \"block\";\n        if(player1.aim) scopeP1.style.display = \"block\";\n        if(player2.aim) scopeP2.style.display = \"block\";\n    }\n}\n\nfunction hideCross(){\n    cross1.style.display = \"none\";\n    crossP1.style.display = \"none\";\n    crossP2.style.display = \"none\";\n    scope1.style.display = \"none\";\n    scopeP1.style.display = \"none\";\n    scopeP2.style.display = \"none\";\n}\n\nfunction updateMinimap(){\n    const w = minimap.width;\n    const h = minimap.height;\n\n    minimapCtx.clearRect(0,0,w,h);\n    minimapCtx.fillStyle = \"rgba(25,60,25,.95)\";\n    minimapCtx.fillRect(0,0,w,h);\n\n    function mapX(x){\n        return ((x + MAP_SIZE\/2) \/ MAP_SIZE) * w;\n    }\n\n    function mapZ(z){\n        return ((z + MAP_SIZE\/2) \/ MAP_SIZE) * h;\n    }\n\n    minimapCtx.fillStyle = \"rgba(180,180,180,.85)\";\n    for(const wall of walls){\n        const ww = wall.userData.w;\n        const dd = wall.userData.d;\n        minimapCtx.fillRect(\n            mapX(wall.position.x - ww\/2),\n            mapZ(wall.position.z - dd\/2),\n            ww \/ MAP_SIZE * w,\n            dd \/ MAP_SIZE * h\n        );\n    }\n\n    if(gameMode === \"one\"){\n        for(const e of enemies){\n            minimapCtx.beginPath();\n            minimapCtx.fillStyle = e.canSee ? \"orange\" : \"red\";\n            minimapCtx.arc(mapX(e.group.position.x),mapZ(e.group.position.z),2.5,0,Math.PI*2);\n            minimapCtx.fill();\n        }\n    }\n\n    minimapCtx.beginPath();\n    minimapCtx.fillStyle = \"lime\";\n    minimapCtx.arc(mapX(player1.group.position.x),mapZ(player1.group.position.z),3.5,0,Math.PI*2);\n    minimapCtx.fill();\n\n    if(gameMode === \"two\"){\n        minimapCtx.beginPath();\n        minimapCtx.fillStyle = \"#60a5fa\";\n        minimapCtx.arc(mapX(player2.group.position.x),mapZ(player2.group.position.z),3.5,0,Math.PI*2);\n        minimapCtx.fill();\n    }\n}\n\nfunction controlsP1One(){\n    return {\n        forward:()=>keys.w,\n        back:()=>keys.s,\n        left:()=>keys.a,\n        right:()=>keys.d,\n        aim:()=>player1.aim,\n        nitro:()=>keys.space\n    };\n}\n\nfunction controlsP1Two(){\n    return {\n        forward:()=>keys.w,\n        back:()=>keys.s,\n        left:()=>keys.a,\n        right:()=>keys.d,\n        aim:()=>keys.e,\n        nitro:()=>keys.c\n    };\n}\n\nfunction controlsP2Two(){\n    return {\n        forward:()=>keys.arrowup,\n        back:()=>keys.arrowdown,\n        left:()=>keys.arrowleft,\n        right:()=>keys.arrowright,\n        aim:()=>keys.p,\n        nitro:()=>keys[\"\u00f6\"]\n    };\n}\n\nfunction updateTwoPlayerFire(){\n    player1.aim = keys.e;\n    player2.aim = keys.p;\n\n    if(keys.r && !keys.rLock){\n        firePlayer(player1,1,\"p1\");\n        keys.rLock = true;\n    }\n    if(!keys.r) keys.rLock = false;\n\n    if(keys.o && !keys.oLock){\n        firePlayer(player2,1,\"p2\");\n        keys.oLock = true;\n    }\n    if(!keys.o) keys.oLock = false;\n}\n\nfunction renderFull(){\n    renderer.setViewport(0,0,innerWidth,innerHeight);\n    renderer.setScissor(0,0,innerWidth,innerHeight);\n    renderer.render(scene,cam1);\n}\n\nfunction renderSplit(){\n    const w = innerWidth\/2;\n    const h = innerHeight;\n\n    player1.healthSprite.visible = false;\n    player2.healthSprite.visible = true;\n\n    renderer.setViewport(0,0,w,h);\n    renderer.setScissor(0,0,w,h);\n    renderer.render(scene,cam1);\n\n    player1.healthSprite.visible = true;\n    player2.healthSprite.visible = false;\n\n    renderer.setViewport(w,0,w,h);\n    renderer.setScissor(w,0,w,h);\n    renderer.render(scene,cam2);\n\n    player1.healthSprite.visible = true;\n    player2.healthSprite.visible = true;\n}\n\nfunction animate(){\n    requestAnimationFrame(animate);\n\n    if(gameMode === \"one\"){\n        moveTank(player1,controlsP1One());\n        updateCooldowns(player1);\n        updateCdUI();\n        updateBullets();\n        updateEnemies();\n        updateEnemyBullets();\n        updateCamera(cam1,player1,innerWidth\/innerHeight);\n        updateCross();\n        updateUI();\n        updateMinimap();\n        renderFull();\n        return;\n    }\n\n    if(gameMode === \"two\"){\n        moveTank(player1,controlsP1Two());\n        moveTank(player2,controlsP2Two());\n        updateTwoPlayerFire();\n        updateCooldowns(player1);\n        updateCooldowns(player2);\n        updateBullets();\n        updateCamera(cam1,player1,(innerWidth\/2)\/innerHeight);\n        updateCamera(cam2,player2,(innerWidth\/2)\/innerHeight);\n        updateCross();\n        updateUI();\n        updateMinimap();\n        renderSplit();\n        return;\n    }\n\n    updateCamera(cam1,player1,innerWidth\/innerHeight);\n    updateUI();\n    updateMinimap();\n    hideCross();\n    renderFull();\n}\n\nfunction resize(){\n    renderer.setSize(innerWidth,innerHeight);\n}\n<\/script>\n\n<\/body>\n<\/html>\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>Ana Sayfa 3D Tank 1P \/ 2P Oyuncu 1 Mod: Men\u00fc Can: 100 Skor: 0 U Papel: 0 F\u00fcze: Normal Nitro Oyuncu 2 Can: 100 Nitro \u00c7IKI\u015e HAR\u0130TA 1 2 3 4 5 6 TANK STARS U Papel: 0 1 Player botlara kar\u015f\u0131, 2 Player ayn\u0131 bilgisayarda b\u00f6l\u00fcnm\u00fc\u015f ekran. 1 PLAYER 2 PLAYER MA\u011eAZA KONTROLLER [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-34","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/pages\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/comments?post=34"}],"version-history":[{"count":16,"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/pages\/34\/revisions"}],"predecessor-version":[{"id":176,"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/pages\/34\/revisions\/176"}],"wp:attachment":[{"href":"https:\/\/urasuzay.com\/index.php\/wp-json\/wp\/v2\/media?parent=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}