{"id":89813,"date":"2026-06-24T11:47:00","date_gmt":"2026-06-24T09:47:00","guid":{"rendered":"https:\/\/webraketen.space\/weltraum-shooter\/"},"modified":"2026-06-24T13:35:24","modified_gmt":"2026-06-24T11:35:24","slug":"space-shooter","status":"publish","type":"page","link":"https:\/\/webraketen.space\/en\/weltraum-shooter\/","title":{"rendered":"Space shooter"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"89813\" class=\"elementor elementor-89813\" data-elementor-settings=\"{&quot;element_pack_global_tooltip_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_padding&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true}}\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-wgSec e-con-full e-flex e-con e-parent\" data-id=\"wgSec\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-wgBoot elementor-widget elementor-widget-html\" data-id=\"wgBoot\" 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<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Archivo:wdth,wght@125,800;125,900&display=swap\"><link rel=\"stylesheet\" href=\"\/wp-content\/uploads\/wr-design\/webraketen-design.css?v=p120\"><script>document.body.classList.add('wr-app');<\/script><style>.wrg-page{width:100vw;margin-left:calc(50% - 50vw);background:radial-gradient(120% 90% at 50% -10%, #1E1A3E 0%, #0B0814 65%);padding:60px 16px 88px;font-family:\"Geist\",system-ui,-apple-system,sans-serif}\n.wrg-head{max-width:760px;margin:0 auto 26px;text-align:center}\n.wrg-head .wrg-eb2{font-family:\"Geist Mono\",ui-monospace,monospace;font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:#FF4F9D}\n.wrg-head h2{font-family:\"Archivo\",\"Geist\",sans-serif;font-weight:900;text-transform:uppercase;letter-spacing:.01em;color:#fff;font-size:clamp(32px,5.5vw,58px);margin:12px 0 0;line-height:1.02}\n.wrg-head p{margin:14px auto 0;max-width:640px;font-size:15px;line-height:1.65;color:rgba(232,230,240,.82)}\n.wrg-head p b{color:#fff}\n.wrg-wrap{position:relative;width:100%;max-width:1300px;margin:0 auto;aspect-ratio:16\/9;border-radius:18px;overflow:hidden;background:radial-gradient(130% 110% at 50% 0%, #251f49 0%, #0B0814 72%);border:1px solid rgba(255,255,255,.12);box-shadow:0 50px 120px -50px rgba(0,0,0,.8), inset 0 0 80px rgba(199,59,126,.06);user-select:none;-webkit-user-select:none}\n.wrg-wrap canvas{position:absolute;inset:0;display:block;cursor:none;touch-action:none}\n.wrg-hud{position:absolute;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;gap:14px;padding:14px 18px;pointer-events:none;z-index:3}\n.wrg-l{font-family:\"Geist Mono\",ui-monospace,monospace;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:rgba(232,230,240,.7)}\n.wrg-l b{color:#fff;font-size:17px;margin-left:8px;font-family:\"Archivo\",\"Geist\",sans-serif}\n.wrg-time{font-family:\"Archivo\",\"Geist\",sans-serif;font-weight:900;font-size:clamp(22px,3vw,30px);color:#fff;letter-spacing:.02em}\n.wrg-time.low{color:#FF4F9D}\n.wrg-mute{pointer-events:auto;width:36px;height:36px;border-radius:50%;border:1px solid rgba(255,255,255,.2);background:rgba(11,8,20,.5);color:#fff;cursor:pointer;display:grid;place-items:center;padding:0}\n.wrg-mute svg{display:block}\n.wrg-br{position:absolute;right:16px;bottom:14px;z-index:4;display:flex;flex-direction:column;align-items:flex-end;gap:8px}\n.wrg-magrow{display:flex;align-items:center;gap:10px}\n.wrg-ammonum{font-family:\"Archivo\",\"Geist\",sans-serif;font-weight:800;font-size:15px;color:#fff}\n.wrg-ammonum span{color:rgba(232,230,240,.55);font-weight:600}\n.wrg-ammo{display:flex;gap:4px;align-items:center}\n.wrg-ammo i{width:6px;height:17px;border-radius:2px;background:#FF4F9D;box-shadow:0 0 6px rgba(255,79,157,.7)}\n.wrg-ammo i.spent{background:rgba(255,255,255,.16);box-shadow:none}\n.wrg-reload{pointer-events:auto;display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:999px;border:1px solid rgba(255,79,157,.5);background:rgba(199,59,126,.16);color:#fff;font-family:\"Geist Mono\",monospace;font-size:11px;letter-spacing:.06em;text-transform:uppercase;cursor:pointer}\n.wrg-reload svg{display:block}\n.wrg-overlay{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px;background:rgba(11,8,20,.82);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}\n.wrg-eb{font-family:\"Geist Mono\",monospace;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:#FF4F9D;margin-bottom:14px}\n.wrg-overlay h1,.wrg-overlay h2{font-family:\"Archivo\",\"Geist\",sans-serif;font-weight:900;text-transform:uppercase;letter-spacing:.01em;color:#fff;margin:0;line-height:1.02}\n.wrg-overlay h1{font-size:clamp(28px,5vw,48px)}\n.wrg-overlay h2{font-size:clamp(26px,4vw,40px)}\n.wrg-lead{max-width:480px;margin:14px auto 0;font-size:14px;line-height:1.6;color:rgba(232,230,240,.82)}\n.wrg-tip{margin:18px auto 0;max-width:480px;font-family:\"Geist Mono\",monospace;font-size:11px;letter-spacing:.03em;color:rgba(255,211,107,.85)}\n.wrg-btn{margin-top:22px;display:inline-block;padding:14px 30px;border:0;border-radius:999px;background:linear-gradient(135deg,#FF4F9D,#C73B7E);color:#fff;font-family:\"Archivo\",\"Geist\",sans-serif;font-weight:800;font-size:14px;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;box-shadow:0 10px 30px -10px rgba(199,59,126,.7);transition:transform .15s,box-shadow .15s}\n.wrg-btn:hover{transform:translateY(-2px);box-shadow:0 16px 40px -12px rgba(255,79,157,.8)}\n.wrg-btn--ghost{background:transparent;border:1px solid rgba(255,255,255,.25);box-shadow:none}\n.wrg-newhs{margin-top:18px}\n.wrg-newhs p{font-family:\"Geist Mono\",monospace;font-size:12px;letter-spacing:.06em;color:#FFD36B;margin:0 0 10px}\n.wrg-form{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}\n.wrg-form input{padding:11px 14px;border-radius:10px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#fff;font-family:\"Geist\",sans-serif;font-size:14px;width:180px;outline:none}\n.wrg-form input:focus{border-color:#FF4F9D}\n.wrg-form .wrg-btn{margin-top:0;padding:11px 20px}\n.wrg-lb{list-style:none;margin:16px auto 0;padding:0;width:min(380px,92%);text-align:left;max-height:340px;overflow-y:auto;counter-reset:lb;scrollbar-width:thin;scrollbar-color:#FF4F9D rgba(255,255,255,.08)}\n.wrg-lb::-webkit-scrollbar{width:8px}\n.wrg-lb::-webkit-scrollbar-track{background:rgba(255,255,255,.05);border-radius:4px;margin:4px 0}\n.wrg-lb::-webkit-scrollbar-thumb{background:linear-gradient(#FF4F9D,#C73B7E);border-radius:4px}\n.wrg-rank{margin-top:8px;display:inline-flex;align-items:center;justify-content:center;gap:10px;font-family:\"Archivo\",\"Geist\",sans-serif;font-weight:800;font-size:clamp(22px,3.5vw,34px);letter-spacing:.01em;text-transform:uppercase;color:#FFD36B}\n.wrg-rank svg{width:.92em;height:.92em;flex-shrink:0}\n.wrg-note{margin:16px auto 0;max-width:400px;font-size:14px;line-height:1.55;color:rgba(232,230,240,.82)}\n.wrg-lb li{display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:8px;font-size:14px;color:rgba(232,230,240,.9);counter-increment:lb}\n.wrg-lb li:nth-child(odd){background:rgba(255,255,255,.04)}\n.wrg-lb li::before{content:counter(lb);font-family:\"Geist Mono\",monospace;font-size:12px;color:#FF4F9D;width:22px;flex-shrink:0}\n.wrg-lb li span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.wrg-lb li b{color:#fff;font-family:\"Archivo\",\"Geist\",sans-serif}\n.wrg-lb .wrg-empty{justify-content:center;color:rgba(232,230,240,.5)}\n.wrg-lb .wrg-empty::before{content:''}\n.wrg-hint{position:absolute;left:50%;bottom:64px;transform:translateX(-50%);z-index:4;padding:9px 18px;border-radius:999px;background:rgba(199,59,126,.18);border:1px solid rgba(255,79,157,.5);color:#fff;font-family:\"Geist Mono\",monospace;font-size:12px;letter-spacing:.04em;opacity:0;transition:opacity .25s;pointer-events:none;white-space:nowrap}\n.wrg-hint.show{opacity:1}\n.wrg-hidden{display:none!important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-wgBody elementor-widget elementor-widget-html\" data-id=\"wgBody\" 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<div class=\"wrg-page\">\n  <div class=\"wrg-head\">\n    <h1 class=\"wrg-eb2\">Weltraum Shooter Online<\/h1>\n    <h2>\u25b6\ufe0e Let's Play<\/h2>\n    <p>Unser kleiner Weltraum-Shooter: Ziele mit <b>Maus oder Finger<\/b> auf die Raumschiffe, feuer den Laser per <b>Klick\/Tipp<\/b> und lade dein Magazin mit der <b>Leertaste<\/b> (oder dem Nachlade-Button) wieder auf. Du hast <b>60 Sekunden<\/b> \u2014 danach kannst du dich in die Bestenliste eintragen. Goldene UFOs geben Extrapunkte, nur auf die eigene Rakete solltest du nicht schie\u00dfen.<\/p>\n  <\/div>\n  <div class=\"wrg-wrap\" id=\"wrg-wrap\">\n    <canvas id=\"wrg-canvas\"><\/canvas>\n    <div class=\"wrg-hud\">\n      <div class=\"wrg-l\">Score <b id=\"wrg-score\">0<\/b><\/div>\n      <div class=\"wrg-time\" id=\"wrg-time\">60<\/div>\n      <button class=\"wrg-mute\" id=\"wrg-mute\" title=\"Ton an\/aus\" aria-label=\"Ton an\/aus\"><\/button>\n    <\/div>\n    <div class=\"wrg-br\">\n      <div class=\"wrg-magrow\">\n        <span class=\"wrg-ammonum\"><b id=\"wrg-ammocount\">8<\/b><span>\/8<\/span><\/span>\n        <span class=\"wrg-ammo\" id=\"wrg-ammo\"><\/span>\n      <\/div>\n      <button class=\"wrg-reload\" id=\"wrg-reload\"><\/button>\n    <\/div>\n    <div class=\"wrg-hint\" id=\"wrg-hint\">Magazin leer \u2014 <b>Leertaste<\/b> oder Button zum Nachladen<\/div>\n    <div class=\"wrg-overlay\" id=\"wrg-start\">\n      <span class=\"wrg-eb\">Mission-Briefing<\/span>\n      <h1>Weltraum-Shooter<\/h1>\n      <p class=\"wrg-lead\">Knall in 60 Sekunden so viele Raumschiffe ab, wie du kannst. Kleine, schnelle Schiffe geben die meisten Punkte.<\/p>\n      <button class=\"wrg-btn\" id=\"wrg-startbtn\">Mission starten<\/button>\n      <p class=\"wrg-tip\">Goldene UFOs = +200 \u00b7 Combos bringen Bonus \u00b7 Konami-Code f\u00fcr \u00dcberraschung<\/p>\n    <\/div>\n    <div class=\"wrg-overlay wrg-hidden\" id=\"wrg-over\">\n      <span class=\"wrg-eb\">Mission beendet<\/span>\n      <h2 id=\"wrg-final\">0 Punkte<\/h2>\n      <div class=\"wrg-rank wrg-hidden\" id=\"wrg-rank\"><\/div>\n      <div class=\"wrg-newhs wrg-hidden\" id=\"wrg-newhs\">\n        <p>Neuer Highscore! Trag dich ein:<\/p>\n        <div class=\"wrg-form\"><input id=\"wrg-name\" maxlength=\"16\" placeholder=\"Dein Name\" autocomplete=\"off\"><button class=\"wrg-btn\" id=\"wrg-submit\">Eintragen<\/button><\/div>\n      <\/div>\n      <p class=\"wrg-note wrg-hidden\" id=\"wrg-note\"><\/p>\n      <ol class=\"wrg-lb\" id=\"wrg-lb\"><\/ol>\n      <button class=\"wrg-btn wrg-btn--ghost\" id=\"wrg-again\">Nochmal spielen<\/button>\n    <\/div>\n  <\/div>\n<\/div><script>\n(function(){\n  var wrap=document.getElementById('wrg-wrap'); if(!wrap) return;\n  var cv=document.getElementById('wrg-canvas'), ctx=cv.getContext('2d');\n  var API='\/wp-json\/wr-game\/v1\/scores';\n  var ICON_ON='<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"currentColor\"><path d=\"M3 9v6h4l5 5V4L7 9H3z\"\/><path d=\"M16 8.5a4 4 0 0 1 0 7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/svg>';\n  var ICON_OFF='<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"currentColor\"><path d=\"M3 9v6h4l5 5V4L7 9H3z\"\/><line x1=\"16\" y1=\"9.5\" x2=\"22\" y2=\"15.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><line x1=\"22\" y1=\"9.5\" x2=\"16\" y2=\"15.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/svg>';\n  var ICON_RELOAD='<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-2.6-6.4\"\/><path d=\"M21 4v5h-5\"\/><\/svg>';\n  var rocketImg=new Image(); rocketImg.src='\/wp-content\/uploads\/wr-design\/webraketen-rocket-icon-white.png';\n  var ICON_TROPHY='<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 5h-2V3H7v2H5a2 2 0 0 0-2 2v1a4 4 0 0 0 4 4 5 5 0 0 0 4 3.9V18H8a1 1 0 0 0 0 2h8a1 1 0 0 0 0-2h-3v-2.1A5 5 0 0 0 17 12a4 4 0 0 0 4-4V7a2 2 0 0 0-2-2zM5 8V7h2v3a2 2 0 0 1-2-2zm14 0a2 2 0 0 1-2 2V7h2v1z\"\/><\/svg>';\n  var DPR=1,W=0,H=0;\n  function resize(){ DPR=Math.min(window.devicePixelRatio||1,2); var b=wrap.getBoundingClientRect(); W=b.width; H=b.height; cv.width=Math.round(W*DPR); cv.height=Math.round(H*DPR); ctx.setTransform(DPR,0,0,DPR,0,0); }\n  window.addEventListener('resize',resize); resize();\n\n  var ROUND=60, MAG=8;\n  var state='start', score=0, ammo=MAG, reloading=false, timeLeft=ROUND, last=0, spawnAcc=0.6, rapid=false, submitted=false, streak=0;\n  var ships=[], parts=[], shots=[], msgs=[], stars=[];\n  var mouse={x:0,y:0,in:false};\n  var z; for(z=0;z<90;z++) stars.push({x:Math.random()*1100,y:Math.random()*620,zz:0.2+Math.random()*0.8,s:0.4+Math.random()*1.4});\n\n  \/* ---- Audio ---- *\/\n  var AC=null, muted=false, music=null;\n  function ac(){ if(!AC){ try{AC=new (window.AudioContext||window.webkitAudioContext)();}catch(e){} } return AC; }\n  function snd(kind){ if(muted) return; var c=ac(); if(!c) return; var o=c.createOscillator(), g=c.createGain(); o.connect(g); g.connect(c.destination); var t=c.currentTime;\n    if(kind==='laser'){ o.type='square'; o.frequency.setValueAtTime(900,t); o.frequency.exponentialRampToValueAtTime(170,t+0.11); g.gain.setValueAtTime(0.09,t); g.gain.exponentialRampToValueAtTime(0.001,t+0.12); o.start(t); o.stop(t+0.13); }\n    else if(kind==='boom'){ o.type='sawtooth'; o.frequency.setValueAtTime(170,t); o.frequency.exponentialRampToValueAtTime(42,t+0.24); g.gain.setValueAtTime(0.15,t); g.gain.exponentialRampToValueAtTime(0.001,t+0.27); o.start(t); o.stop(t+0.28); }\n    else if(kind==='reload'){ o.type='triangle'; o.frequency.setValueAtTime(320,t); g.gain.setValueAtTime(0.06,t); g.gain.exponentialRampToValueAtTime(0.001,t+0.09); o.start(t); o.stop(t+0.1); }\n    else if(kind==='bad'){ o.type='sawtooth'; o.frequency.setValueAtTime(130,t); o.frequency.linearRampToValueAtTime(55,t+0.28); g.gain.setValueAtTime(0.12,t); g.gain.exponentialRampToValueAtTime(0.001,t+0.3); o.start(t); o.stop(t+0.31); }\n    else if(kind==='ufo'){ o.type='sine'; o.frequency.setValueAtTime(520,t); o.frequency.exponentialRampToValueAtTime(1300,t+0.18); g.gain.setValueAtTime(0.1,t); g.gain.exponentialRampToValueAtTime(0.001,t+0.24); o.start(t); o.stop(t+0.25); }\n  }\n  function reloadSnd(){ snd('reload'); setTimeout(function(){snd('reload');},120); }\n  function initMusic(){ if(music) return; try{ music=new Audio('\/wp-content\/uploads\/2024\/07\/space-sound.mp3'); music.loop=true; music.volume=0.22; }catch(e){} }\n  function musicPlay(){ if(music && !muted){ var p=music.play(); if(p&&p.catch)p.catch(function(){}); } }\n  function musicStop(){ if(music){ music.pause(); } }\n\n  \/* ---- Schiffstypen ---- *\/\n  var TYPES=[\n    {k:'fighter', r:16, pts:30, col:'#FF4F9D', sp:[170,250], w:34},\n    {k:'cruiser', r:24, pts:15, col:'#9A6BE0', sp:[95,150],  w:32},\n    {k:'hauler',  r:36, pts:10, col:'#5A8DD0', sp:[55,95],   w:22},\n    {k:'friendly',r:20, pts:-50,col:'#ffffff', sp:[120,170], w:6},\n    {k:'ufo',     r:22, pts:200,col:'#FFD36B', sp:[230,320], w:3}\n  ];\n  function pick(){ var tot=0,j; for(j=0;j<TYPES.length;j++) tot+=TYPES[j].w; var rnd=Math.random()*tot; for(j=0;j<TYPES.length;j++){ rnd-=TYPES[j].w; if(rnd<=0) return TYPES[j]; } return TYPES[0]; }\n  function spawn(){ var T=pick(); var fromLeft=Math.random()<0.5; var y=46+Math.random()*(H-150); var sp=T.sp[0]+Math.random()*(T.sp[1]-T.sp[0]);\n    ships.push({type:T.k,r:T.r,pts:T.pts,col:T.col,x:fromLeft?-44:W+44,y:y,baseY:y,vx:(fromLeft?1:-1)*sp,amp:8+Math.random()*42,ph:Math.random()*6.28,freq:0.8+Math.random()*1.8,dir:fromLeft?1:-1}); }\n\n  \/* ---- Input ---- *\/\n  function setAim(cx,cy){ var b=cv.getBoundingClientRect(); mouse.x=cx-b.left; mouse.y=cy-b.top; mouse.in=true; }\n  cv.addEventListener('mousemove',function(e){ setAim(e.clientX,e.clientY); });\n  cv.addEventListener('mouseenter',function(){mouse.in=true;});\n  cv.addEventListener('mouseleave',function(){mouse.in=false;});\n  cv.addEventListener('mousedown',function(e){ e.preventDefault(); if(state==='playing') fire(); });\n  cv.addEventListener('touchstart',function(e){ e.preventDefault(); if(state!=='playing') return; var t=e.changedTouches[0]; setAim(t.clientX,t.clientY); fire(); },{passive:false});\n  cv.addEventListener('touchmove',function(e){ e.preventDefault(); var t=e.changedTouches[0]; setAim(t.clientX,t.clientY); },{passive:false});\n  var kona=[38,38,40,40,37,39,37,39,66,65], kp=0;\n  window.addEventListener('keydown',function(e){\n    if(e.keyCode===32){ if(state==='playing'){ e.preventDefault(); reload(); } }\n    if(e.keyCode===kona[kp]){ kp++; if(kp===kona.length){ kp=0; rapid=true; toast('CHEAT: Schnell-Nachladen aktiv!'); } } else { kp=(e.keyCode===kona[0])?1:0; }\n  });\n\n  function fire(){ if(reloading) return; if(ammo<=0){ hint(true); snd('bad'); return; } ammo--; updAmmo(); snd('laser');\n    var lp=launcherTip(); shots.push({ox:lp.x,oy:lp.y,x:mouse.x,y:mouse.y,t:performance.now()});\n    var k, got=false;\n    for(k=ships.length-1;k>=0;k--){ var s=ships[k]; var dx=mouse.x-s.x, dy=mouse.y-s.y; if(dx*dx+dy*dy < (s.r+9)*(s.r+9)){ hit(s,k); got=true; break; } }\n    if(got){ streak++; if(streak%5===0){ var bonus=streak*2; score+=bonus; toast('Combo x'+streak+'! +'+bonus); } }\n    else { streak=0; score-=5; msg(mouse.x,mouse.y,'-5','rgba(255,255,255,.65)'); }\n    updScore();\n    if(ammo===0) hint(true);\n  }\n  function hit(s,k){ ships.splice(k,1);\n    if(s.type==='friendly'){ score-=50; explode(s.x,s.y,'#fff',16); msg(s.x,s.y,'Friendly Fire! -50','#fff'); toast('Autsch \u2014 das war unsere eigene Rakete!'); snd('bad'); streak=0; }\n    else { score+=s.pts; explode(s.x,s.y,s.col, s.type==='ufo'?36:18); msg(s.x,s.y,'+'+s.pts,s.col); snd(s.type==='ufo'?'ufo':'boom'); if(s.type==='ufo') toast('UFO erwischt! +200'); }\n    updScore();\n  }\n  function reload(){ if(reloading||ammo===MAG) return; reloading=true; hint(false); reloadSnd(); var d=rapid?320:900; setTimeout(function(){ ammo=MAG; reloading=false; updAmmo(); },d); }\n\n  function explode(x,y,col,n){ var p; for(p=0;p<n;p++){ var a=Math.random()*6.28, sp=50+Math.random()*230; parts.push({x:x,y:y,vx:Math.cos(a)*sp,vy:Math.sin(a)*sp,life:0.45+Math.random()*0.45,age:0,col:col,r:1+Math.random()*3}); } }\n  function msg(x,y,t,col){ msgs.push({x:x,y:y,t:t,col:col,age:0,life:1.0,big:false}); }\n  function toast(t){ msgs.push({x:W\/2,y:H*0.24,t:t,col:'#FFD36B',age:0,life:1.8,big:true}); }\n\n  \/* ---- HUD ---- *\/\n  var elScore=document.getElementById('wrg-score'), elTime=document.getElementById('wrg-time'), elAmmo=document.getElementById('wrg-ammo'), elAmmoN=document.getElementById('wrg-ammocount'), elHint=document.getElementById('wrg-hint');\n  function updScore(){ elScore.textContent=score; }\n  function updTime(){ var v=Math.max(0,Math.ceil(timeLeft)); elTime.textContent=v; elTime.classList.toggle('low',v<=10); }\n  function updAmmo(){ var h='',a; for(a=0;a<MAG;a++) h+='<i class=\"'+(a<ammo?'':'spent')+'\"><\/i>'; elAmmo.innerHTML=h; elAmmoN.textContent=ammo; }\n  function hint(s){ elHint.classList.toggle('show',!!s); }\n\n  \/* ---- Launcher (webraketen-Rakete unten) ---- *\/\n  function rocketPath(r){ ctx.beginPath(); ctx.moveTo(0,-r); ctx.bezierCurveTo(r*0.7,-r*0.4,r*0.55,r*0.45,r*0.4,r*0.62); ctx.lineTo(-r*0.4,r*0.62); ctx.bezierCurveTo(-r*0.55,r*0.45,-r*0.7,-r*0.4,0,-r); ctx.closePath(); }\n  function launcherAng(){ var lx=W\/2, ly=H-22; var ax=mouse.in?mouse.x:W\/2, ay=mouse.in?mouse.y:0; var rot=Math.atan2(ay-ly,ax-lx)+Math.PI\/2; return Math.max(-1.15,Math.min(1.15,rot)); }\n  function launcherTip(){ var lx=W\/2, ly=H-22, L=30, rot=launcherAng(); return {x:lx+L*Math.sin(rot), y:ly-L*Math.cos(rot)}; }\n  function drawLauncher(){ var lx=W\/2, ly=H-22, rot=launcherAng(); ctx.save(); ctx.translate(lx,ly); ctx.rotate(rot); ctx.shadowColor='#FF4F9D'; ctx.shadowBlur=14; ctx.fillStyle='#fff'; rocketPath(22); ctx.fill(); ctx.fillStyle='#FF4F9D'; ctx.beginPath(); ctx.arc(0,-2,4.5,0,6.28); ctx.fill(); ctx.shadowBlur=0;\n    if(state==='playing' && performance.now()%900<450){ ctx.fillStyle='rgba(255,79,157,.6)'; ctx.beginPath(); ctx.moveTo(-5,14); ctx.lineTo(5,14); ctx.lineTo(0,26); ctx.closePath(); ctx.fill(); } ctx.restore(); }\n\n  \/* ---- Update \/ Render ---- *\/\n  function update(dt){\n    timeLeft-=dt; updTime(); if(timeLeft<=0){ endGame(); return; }\n    spawnAcc-=dt; var rate=0.62 - Math.min(0.32,(ROUND-timeLeft)\/ROUND*0.32);\n    if(spawnAcc<=0){ spawn(); spawnAcc=rate+Math.random()*0.4; }\n    var k; for(k=ships.length-1;k>=0;k--){ var s=ships[k]; s.x+=s.vx*dt; s.ph+=dt*s.freq; s.y=s.baseY+Math.sin(s.ph)*s.amp; if(s.x<-70||s.x>W+70) ships.splice(k,1); }\n    var p; for(p=parts.length-1;p>=0;p--){ var q=parts[p]; q.age+=dt; if(q.age>=q.life){parts.splice(p,1);continue;} q.x+=q.vx*dt; q.y+=q.vy*dt; q.vy+=130*dt; }\n    var m; for(m=msgs.length-1;m>=0;m--){ msgs[m].age+=dt; msgs[m].y-=22*dt; if(msgs[m].age>=msgs[m].life) msgs.splice(m,1); }\n    var st; for(st=0;st<stars.length;st++){ stars[st].x-=stars[st].zz*16*dt; if(stars[st].x<0){ stars[st].x=W; stars[st].y=Math.random()*H; } }\n  }\n  function drawShip(s){ ctx.save(); ctx.translate(s.x,s.y); ctx.shadowColor=s.col; ctx.shadowBlur=14;\n    if(s.type==='ufo'){ ctx.fillStyle=s.col; ctx.beginPath(); ctx.ellipse(0,4,s.r,s.r*0.5,0,0,6.28); ctx.fill(); ctx.fillStyle='rgba(255,255,255,.9)'; ctx.beginPath(); ctx.arc(0,-3,s.r*0.5,Math.PI,0); ctx.fill(); }\n    else if(s.type==='friendly'){ ctx.rotate(s.dir>0?0.35:-0.35); if(rocketImg.complete && rocketImg.naturalWidth){ var iw=s.r*1.9, ih=iw*((rocketImg.naturalHeight\/rocketImg.naturalWidth)||2.1); ctx.shadowColor='#FF4F9D'; ctx.shadowBlur=12; ctx.drawImage(rocketImg,-iw\/2,-ih\/2,iw,ih); } else { ctx.fillStyle='#fff'; rocketPath(s.r); ctx.fill(); } }\n    else if(s.type==='fighter'){ ctx.shadowColor=s.col; ctx.shadowBlur=12; ctx.fillStyle='#C73B7E'; ctx.fillRect(-s.r*1.5,-s.r*0.3,s.r*0.78,s.r*0.6); ctx.fillRect(s.r*0.72,-s.r*0.3,s.r*0.78,s.r*0.6); ctx.strokeStyle='rgba(11,8,20,.45)'; ctx.lineWidth=1; ctx.beginPath(); ctx.moveTo(-s.r*1.11,-s.r*0.3); ctx.lineTo(-s.r*1.11,s.r*0.3); ctx.moveTo(s.r*1.11,-s.r*0.3); ctx.lineTo(s.r*1.11,s.r*0.3); ctx.stroke(); ctx.strokeStyle=s.col; ctx.lineWidth=2; ctx.beginPath(); ctx.moveTo(-s.r*0.72,0); ctx.lineTo(-s.r*0.42,0); ctx.moveTo(s.r*0.72,0); ctx.lineTo(s.r*0.42,0); ctx.stroke(); ctx.fillStyle=s.col; ctx.beginPath(); ctx.arc(0,0,s.r*0.42,0,6.28); ctx.fill(); ctx.strokeStyle=s.col; ctx.lineWidth=1.5; ctx.beginPath(); ctx.moveTo(0,-s.r*0.42); ctx.lineTo(0,-s.r*0.6); ctx.stroke(); ctx.fillStyle='rgba(255,255,255,.85)'; ctx.beginPath(); ctx.arc(0,-s.r*0.64,s.r*0.2,0,6.28); ctx.fill(); }\n    else { ctx.fillStyle=s.col; ctx.beginPath(); ctx.ellipse(0,0,s.r,s.r*0.55,0,0,6.28); ctx.fill(); ctx.fillStyle='rgba(255,255,255,.85)'; ctx.beginPath(); ctx.arc(0,-s.r*0.18,s.r*0.42,Math.PI,0); ctx.fill(); }\n    ctx.restore();\n  }\n  function render(){\n    ctx.clearRect(0,0,W,H); ctx.shadowBlur=0;\n    var st; for(st=0;st<stars.length;st++){ ctx.globalAlpha=0.25+stars[st].zz*0.6; ctx.fillStyle='#fff'; ctx.fillRect(stars[st].x,stars[st].y,stars[st].s,stars[st].s); }\n    ctx.globalAlpha=1;\n    var k; for(k=0;k<ships.length;k++) drawShip(ships[k]); ctx.shadowBlur=0;\n    var now=performance.now(), sh; for(sh=shots.length-1;sh>=0;sh--){ var o=shots[sh]; var age=(now-o.t)\/130; if(age>=1){shots.splice(sh,1);continue;} ctx.globalAlpha=1-age; ctx.strokeStyle='#FF4F9D'; ctx.lineWidth=3; ctx.shadowColor='#FF4F9D'; ctx.shadowBlur=14; ctx.beginPath(); ctx.moveTo(o.ox,o.oy); ctx.lineTo(o.x,o.y); ctx.stroke(); ctx.shadowBlur=0; ctx.globalAlpha=1; }\n    if(state==='playing') drawLauncher();\n    var p; for(p=0;p<parts.length;p++){ var q=parts[p]; ctx.globalAlpha=Math.max(0,1-q.age\/q.life); ctx.fillStyle=q.col; ctx.beginPath(); ctx.arc(q.x,q.y,q.r,0,6.28); ctx.fill(); }\n    ctx.globalAlpha=1; ctx.textAlign='center';\n    var m; for(m=0;m<msgs.length;m++){ var mm=msgs[m]; ctx.globalAlpha=Math.max(0,1-mm.age\/mm.life); ctx.fillStyle=mm.col; ctx.font=(mm.big?'700 21px ':'700 16px ')+'\"Archivo\",\"Geist\",sans-serif'; ctx.fillText(mm.t,mm.x,mm.y); }\n    ctx.globalAlpha=1; ctx.textAlign='left';\n    if(mouse.in && state==='playing') reticle(mouse.x,mouse.y);\n  }\n  function reticle(x,y){ var c=reloading?'rgba(255,255,255,.5)':(ammo>0?'#FF4F9D':'rgba(255,79,157,.45)'); ctx.strokeStyle=c; ctx.lineWidth=2; ctx.shadowColor='#FF4F9D'; ctx.shadowBlur=8; ctx.lineCap='round';\n    var s=15, a=7, corners=[[-1,-1],[1,-1],[-1,1],[1,1]],ci; for(ci=0;ci<4;ci++){ var d=corners[ci]; ctx.beginPath(); ctx.moveTo(x+d[0]*s, y+d[1]*(s-a)); ctx.lineTo(x+d[0]*s, y+d[1]*s); ctx.lineTo(x+d[0]*(s-a), y+d[1]*s); ctx.stroke(); }\n    ctx.fillStyle=c; ctx.beginPath(); ctx.arc(x,y,2,0,6.28); ctx.fill(); ctx.shadowBlur=0; ctx.lineCap='butt'; }\n\n  function loop(t){ if(!last) last=t; var dt=Math.min((t-last)\/1000,0.05); last=t; if(state==='playing') update(dt); render(); requestAnimationFrame(loop); }\n  requestAnimationFrame(loop);\n\n  \/* ---- Ablauf ---- *\/\n  var ovStart=document.getElementById('wrg-start'), ovOver=document.getElementById('wrg-over');\n  function startGame(){ score=0; ammo=MAG; reloading=false; timeLeft=ROUND; streak=0; submitted=false; ships.length=0; parts.length=0; msgs.length=0; state='playing'; updScore(); updTime(); updAmmo(); hint(false); ovStart.classList.add('wrg-hidden'); ovOver.classList.add('wrg-hidden'); var sb=document.getElementById('wrg-submit'); if(sb){sb.disabled=false;} var c=ac(); if(c&&c.state==='suspended') c.resume(); initMusic(); musicPlay(); }\n  function endGame(){ state='over'; timeLeft=0; musicStop(); document.getElementById('wrg-final').textContent=score+' Punkte'; ovOver.classList.remove('wrg-hidden'); loadBoard(score); }\n  document.getElementById('wrg-startbtn').addEventListener('click',startGame);\n  document.getElementById('wrg-again').addEventListener('click',startGame);\n  document.getElementById('wrg-reload').addEventListener('click',function(e){ e.preventDefault(); if(state==='playing') reload(); });\n\n  \/* ---- Highscore ---- *\/\n  var elLb=document.getElementById('wrg-lb'), elNew=document.getElementById('wrg-newhs'), elName=document.getElementById('wrg-name');\n  function esc(s){ return (''+s).replace(\/[<>&\"]\/g,function(c){return {'<':'&lt;','>':'&gt;','&':'&amp;','\"':'&quot;'}[c];}); }\n  var elRank=document.getElementById('wrg-rank'), elNote=document.getElementById('wrg-note');\n  function renderBoard(list){ list=(list||[]).slice(0,10); if(!list.length){ elLb.innerHTML='<li class=\"wrg-empty\">Noch keine Eintr\u00e4ge \u2014 sei der Erste!<\/li>'; return; } var h='',n; for(n=0;n<list.length;n++) h+='<li><span>'+esc(list[n].name)+'<\/span><b>'+list[n].score+'<\/b><\/li>'; elLb.innerHTML=h; }\n  function showRank(p){ if(elRank){ elRank.innerHTML=ICON_TROPHY+'<span>Platz '+p+'<\/span>'; elRank.classList.remove('wrg-hidden'); } }\n  function loadBoard(my){ elNew.classList.add('wrg-hidden'); if(elRank) elRank.classList.add('wrg-hidden'); if(elNote) elNote.classList.add('wrg-hidden');\n    fetch(API).then(function(r){return r.json();}).then(function(list){ if(!Array.isArray(list)) list=[]; renderBoard(list);\n      if(my>0){ var pr=1,i; for(i=0;i<list.length;i++){ if(list[i].score>=my) pr++; } showRank(pr); }\n      var low=list.length?list[list.length-1].score:0; var qual=(my>0 && (list.length<20 || my>low));\n      if(!submitted){ if(qual){ elNew.classList.remove('wrg-hidden'); if(elName) elName.focus(); } else if(elNote){ elNote.textContent=(my<=0)?'Leider reicht es diesmal nicht f\u00fcr die Bestenliste \u2014 daf\u00fcr brauchst du positive Punkte. Probier es gleich nochmal! \ud83d\ude80':'Knapp! Diesmal hat es nicht in die Top-Liste gereicht. Noch ein Versuch?'; elNote.classList.remove('wrg-hidden'); } }\n    }).catch(function(){ renderBoard([]); });\n  }\n  document.getElementById('wrg-submit').addEventListener('click',function(){ if(submitted) return; submitted=true; this.disabled=true; var nm=(elName.value||'Anonym');\n    fetch(API,{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({name:nm,score:score})}).then(function(r){return r.json();}).then(function(d){ if(d&&d.top) renderBoard(d.top); if(d&&d.rank) showRank(d.rank); elNew.classList.add('wrg-hidden'); }).catch(function(){ elNew.classList.add('wrg-hidden'); });\n  });\n  if(elName) elName.addEventListener('keydown',function(e){ if(e.keyCode===13) document.getElementById('wrg-submit').click(); });\n\n  var elMute=document.getElementById('wrg-mute');\n  function setMuteIcon(){ elMute.innerHTML=muted?ICON_OFF:ICON_ON; }\n  elMute.addEventListener('click',function(){ muted=!muted; setMuteIcon(); if(muted) musicStop(); else if(state==='playing') musicPlay(); });\n\n  document.getElementById('wrg-reload').innerHTML=ICON_RELOAD+'<span>Nachladen<\/span>';\n  setMuteIcon(); updAmmo();\n})();\n<\/script>\t\t\t\t<\/div>\n\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>Weltraum Shooter Online \u25b6\ufe0e Let&#8217;s Play Unser kleiner Weltraum-Shooter: Ziele mit Maus oder Finger auf die Raumschiffe, feuer den Laser per Klick\/Tipp und lade dein Magazin mit der Leertaste (oder dem Nachlade-Button) wieder auf. Du hast 60 Sekunden \u2014 danach kannst du dich in die Bestenliste eintragen. Goldene UFOs geben Extrapunkte, nur auf die eigene [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-89813","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/webraketen.space\/en\/wp-json\/wp\/v2\/pages\/89813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webraketen.space\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/webraketen.space\/en\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/webraketen.space\/en\/wp-json\/wp\/v2\/comments?post=89813"}],"version-history":[{"count":6,"href":"https:\/\/webraketen.space\/en\/wp-json\/wp\/v2\/pages\/89813\/revisions"}],"predecessor-version":[{"id":89821,"href":"https:\/\/webraketen.space\/en\/wp-json\/wp\/v2\/pages\/89813\/revisions\/89821"}],"wp:attachment":[{"href":"https:\/\/webraketen.space\/en\/wp-json\/wp\/v2\/media?parent=89813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}