Pannello Admin - Bug Reports

Data Gioco Gravità Descrizione Step Riproduzione
2026-01-26 14:57:06sitehighSono sempre io Festo gay
2026-01-26 14:56:37sitelowCiao mina sono Diego non è un vero e propio bug... lo avrai fatto ti proposito però è brutto che quasi tutti i giochi hanno una icona ma tipo pac-man e altri 2 non ce la hanno.... risorvi sta cosa mettendo i loghi a chi manca. Grazie mille
2026-01-25 17:46:42targetslowtest
























































2026-01-24 09:38:30jumpsmediumil punteggio non va
2026-01-23 07:41:30jumpshighnUOVO CODIXE


































<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Neon Jump | Tuned Version</title>
<link href="https://fonts.googleapis.com/css2?family=Lilita+One&family=Inter:wght@400;700;900&display=swap" rel="stylesheet">
<script src="https://unpkg.com/@phosphor-icons/web@2.0.3"></script>

<style>
:root {
--bg-base: #020617;
--bg-gradient: radial-gradient(circle at 50% 100%, #1e1b4b 0%, #020617 70%);
--card-bg: rgba(30, 41, 59, 0.6);
--card-border: rgba(34, 211, 238, 0.2);
--text-main: #f1f5f9;
--text-muted: #94a3b8;
--player: #22d3ee;
--platform: #4ade80;
--spike: #ef4444;
--pad: #d946ef;
--orb: #facc15;
--font-main: 'Inter', sans-serif;
--font-title: 'Lilita One', cursive;
}
body {
font-family: var(--font-main);
background-color: var(--bg-base);
background-image: var(--bg-gradient);
background-attachment: fixed;
color: var(--text-main);
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
min-height: 100vh;
margin: 0;
padding: 20px;
box-sizing: border-box;
overflow: hidden;
user-select: none;
touch-action: none;
}
.back-btn {
align-self: flex-start;
margin-bottom: 20px;
color: var(--text-muted);
text-decoration: none;
font-family: var(--font-main);
font-weight: 700;
display: flex; align-items: center; gap: 8px;
transition: color 0.3s;
z-index: 100;
}
.back-btn:hover { color: var(--player); }
h1 {
font-family: var(--font-title);
background: linear-gradient(to right, var(--player), var(--pad));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 3rem;
margin-bottom: 20px;
text-align: center;
letter-spacing: 2px;
filter: drop-shadow(0 0 10px rgba(34, 211, 238, 0.3));
}
.game-wrapper {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
max-width: 600px;
}
.game-container {
display: flex;
flex-direction: column;
align-items: center;
padding: 25px;
background-color: var(--card-bg);
border: 1px solid var(--card-border);
border-radius: 16px;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
backdrop-filter: blur(12px);
position: relative;
width: 100%;
box-sizing: border-box;
}
.hud-display {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
background: rgba(15, 23, 42, 0.5);
padding: 10px;
border-radius: 8px;
border: 1px solid rgba(255,255,255,0.05);
}
.score-box { text-align: center; line-height: 1.2; }
.score-label { font-size: 0.7em; color: var(--text-muted); display: block; letter-spacing: 1px; }
.score-val { font-size: 1.5em; font-family: var(--font-title); }

#score { color: var(--player); text-shadow: 0 0 10px rgba(34,211,238,0.3); }
#high-score-val { color: var(--orb); }

#game-wrapper {
position: relative;
width: 100%;
height: 350px;
background-color: #020617;
border: 2px solid rgba(255,255,255,0.1);
border-radius: 8px;
overflow: hidden;
box-shadow: inset 0 0 30px #000;
background-image:
linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
background-size: 40px 40px;
}
canvas { display: block; width: 100%; height: 100%; }

.modal-overlay {
position: absolute; top: 0; left: 0; width: 100%; height: 100%;
background: rgba(2, 6, 23, 0.9);
display: none; flex-direction: column; justify-content: center; align-items: center;
z-index: 100; backdrop-filter: blur(4px);
}
.modal-content {
font-family: var(--font-title);
font-size: 3em;
color: var(--spike);
text-shadow: 0 0 20px var(--spike);
margin-bottom: 10px;
}
#final-score-text { color: #fff; font-size: 1.2rem; margin-bottom: 20px; font-weight: bold; font-family: var(--font-main); }

#highscore-list {
width: 80%;
max-height: 120px;
overflow-y: auto;
background: rgba(255,255,255,0.05);
border: 1px solid var(--card-border);
border-radius: 8px;
padding: 30px;
margin-bottom: 20px;
font-size: 0.9rem;
text-align: left;
}
#highscore-list h3 { margin-top: 0; color: var(--player); text-align: center; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 5px; }
#highscore-list ol { padding-left: 20px; margin: 0; }

.controls-panel { width: 100%; display: flex; justify-content: center; margin-top: 20px; }

button {
font-family: var(--font-title);
font-size: 1.2em;
padding: 15px 40px;
border: 1px solid var(--player);
border-radius: 8px;
cursor: pointer;
transition: all 0.2s ease;
color: var(--player);
text-transform: uppercase;
background-color: rgba(34, 211, 238, 0.1);
display: flex; align-items: center; gap: 10px;
}
button:hover { background: var(--player); color: #000; box-shadow: 0 0 20px rgba(34, 211, 238, 0.4); }

.instructions {
font-size: 0.9em;
color: var(--text-muted);
margin-top: 15px;
text-align: center;
line-height: 1.6;
background: rgba(0,0,0,0.2);
padding: 10px;
border-radius: 8px;
}
</style>
</head>
<body>

<a href="#" class="back-btn" onclick="history.back()"><i class="ph-bold ph-arrow-left"></i> HUB</a>

<div class="game-wrapper">
<h1>Neon Jump</h1>

<div class="game-container">
<div class="hud-display">
<div class="score-box">
<span class="score-label">DISTANZA</span>
<span id="score" class="score-val">0m</span>
</div>
<div class="score-box">
<span class="score-label">RECORD</span>
<span id="high-score-val" class="score-val">0m</span>
</div>
</div>

<div id="game-wrapper">
<canvas id="gameCanvas"></canvas>

<div id="modal" class="modal-overlay">
<div class="modal-content">CRASHED</div>
<div id="final-score-text">Distanza: 0m</div>
<div id="highscore-list"><p style="text-align:center">Nessun record salvato.</p></div>
<button onclick="resetGame()">RIPROVA <i class="ph-bold ph-arrow-counter-clockwise"></i></button>
</div>
</div>

<div class="controls-panel">
<button id="start-btn" onclick="startGame()">Start Run <i class="ph-bold ph-person-simple-run"></i></button>
</div>

<div class="instructions">
<span style="color: var(--pad)">Viola</span> = Super Salto | <span style="color: var(--orb)">Oro</span> = Salto Doppio (Aria)<br>
Tieni premuto per saltare più in alto.
</div>
</div>
</div>

<script>
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');

let W, H;

// --- FISICA CALIBRATA (FINAL MIX) ---
const GRAVITY_NORMAL = 0.65; // Gravità standard
const GRAVITY_HEAVY = 1.6; // Gravità quando lasci il tasto (ridotta da 1.8)

const JUMP_FORCE = -12.5;
const PAD_FORCE = -18;
const ORB_FORCE = -14; // Aumentata forza orba per compensare la gravità

const SPEED_BASE = 5.5;
const SPEED_MAX = 11;
const GROUND_H = 50;

const COYOTE_MAX = 8;
const BUFFER_MAX = 10; // Buffer aumentato per input più reattivi

const C_PLAYER = '#22d3ee';
const C_PLAT = '#4ade80';
const C_SPIKE = '#ef4444';
const C_PAD = '#d946ef';
const C_ORB = '#facc15';

let player = { x: 100, y: 0, w: 30, h: 30, vy: 0, grounded: false, rot: 0, activeOrb: null };
let coyoteTimer = 0, jumpBuffer = 0, minJumpFrames = 0;
let platforms = [], spikes = [], pads = [], orbs = [], particles = [];
let score = 0, highScore = 0, speed = SPEED_BASE, dist = 0;
let active = false, animId, jumpInput = false;

function resize() {
const el = document.getElementById('game-wrapper');
W = el.clientWidth; H = el.clientHeight;
canvas.width = W; canvas.height = H;
if(!active) drawStatic();
}
window.addEventListener('resize', resize);
resize();

function startGame() {
if(active) return;
player = { x: 50, y: H-GROUND_H-30, w: 30, h: 30, vy: 0, grounded: true, rot: 0, activeOrb: null };
platforms = []; spikes = []; pads = []; orbs = []; particles = [];
score = 0; dist = 0; speed = SPEED_BASE;
active = true;
coyoteTimer = COYOTE_MAX;
jumpBuffer = 0;
minJumpFrames = 0;
platforms.push({ x: 0, y: H-GROUND_H, w: W*1.5, h: GROUND_H });
document.getElementById('modal').style.display = 'none';
document.getElementById('start-btn').style.display = 'none';
loop();
}

function loop() {
if(!active) return;
update();
draw();
animId = requestAnimationFrame(loop);
}

function update() {
if(speed < SPEED_MAX) speed += 0.0008;
dist += speed;
score = Math.floor(dist/10);
document.getElementById('score').innerText = score + "m";

// Gestione Buffer Input
if(jumpInput) jumpBuffer = BUFFER_MAX;
if(jumpBuffer > 0) jumpBuffer--;
if(minJumpFrames > 0) minJumpFrames--;

// --- FISICA INTELLIGENTE ---
// Applica gravità pesante SOLO SE:
// 1. Stiamo salendo (vy < 0)
// 2. Il giocatore NON tiene premuto
// 3. Il "tempo minimo di salto" è scaduto (questo risolve il salto basso)
let currentGrav = GRAVITY_NORMAL;
if (player.vy < 0 && !jumpInput && minJumpFrames === 0) {
currentGrav = GRAVITY_HEAVY;
}

player.vy += currentGrav;
player.y += player.vy;

// Rotazione
if(!player.grounded) player.rot += 0.18;
else {
const snap = Math.round(player.rot / (Math.PI/2)) * (Math.PI/2);
player.rot += (snap - player.rot) * 0.3;
}

let onGround = false;

platforms.forEach(p => {
p.x -= speed;
// Collisione AABB
if(player.x < p.x + p.w && player.x + player.w > p.x &&
player.y < p.y + p.h && player.y + player.h > p.y) {

// Atterraggio permissivo
if(player.vy >= 0 && (player.y + player.h - player.vy) <= p.y + 25) {
player.y = p.y - player.h;
player.vy = 0;
onGround = true;
} else {
gameOver();
}
}
});

if(onGround) {
player.grounded = true;
coyoteTimer = COYOTE_MAX;
minJumpFrames = 0;

// Auto-Jump (Bunny Hop)
if(jumpBuffer > 0 || jumpInput) {
doJump(JUMP_FORCE);
jumpBuffer = 0;
onGround = false;
}
} else {
player.grounded = false;
if(coyoteTimer > 0) coyoteTimer--;
}

if(player.y > H + 100) gameOver();

// Salto Coyote (Salto in ritardo nel vuoto)
if(jumpBuffer > 0 && coyoteTimer > 0 && !onGround) {
doJump(JUMP_FORCE);
}

spikes.forEach(s => {
s.x -= speed;
if(player.x+6 < s.x+s.w-6 && player.x+player.w-6 > s.x+6 &&
player.y+6 < s.y+s.h-6 && player.y+player.h-6 > s.y+6) gameOver();
});

pads.forEach(p => {
p.x -= speed;
if(checkColl(player, p) && player.vy >= 0) {
doJump(PAD_FORCE);
player.rot = 0;
spawnParticles(player.x+player.w/2, player.y+player.h, C_PAD);
}
});

// --- LOGICA ORBE FIXATA ---
player.activeOrb = null;
orbs.forEach(o => {
o.x -= speed;
// Hitbox aumentata (raggio + 50px) per prendere l'orba più facilmente
const distOrb = Math.hypot((player.x+player.w/2)-(o.x+o.r), (player.y+player.h/2)-(o.y+o.r));

if(distOrb < o.r + 50 && !o.used) player.activeOrb = o;

// FIX: Ora si attiva se tieni premuto (jumpInput) OPPURE se hai cliccato da poco (jumpBuffer)
if(player.activeOrb === o && !o.used) {
if(jumpBuffer > 0 || jumpInput) {
doJump(ORB_FORCE);
o.used = true;
spawnParticles(o.x+o.r, o.y+o.r, C_ORB);
player.rot = 0;
jumpBuffer = 0;
}
}
});

generateLevel();
cleanup();
updateParticles();
}

// Funzione Salto Centralizzata
function doJump(force) {
player.vy = force;
player.grounded = false;
coyoteTimer = 0;
// Garantisce almeno 8 frame di salita leggera anche se molli il tasto
minJumpFrames = 8;
if(!player.activeOrb) spawnParticles(player.x+player.w/2, player.y+player.h, '#fff');
}

function checkColl(a, b) { return a.x < b.x+b.w && a.x+a.w > b.x && a.y < b.y+b.h && a.y+a.h > b.y; }

// --- GENERATORE LIVELLI ---
function generateLevel() {
const last = platforms[platforms.length-1];
if(last.x + last.w < W + 300) {
let gap = 90 + Math.random() * 120;
let deltaY = (Math.random() * 180) - 90;
let type = 'normal';

let newY = last.y - deltaY;
if(newY < 180) newY = 180 + Math.random() * 60;
if(newY > H - 100) newY = H - 100 - Math.random() * 60;
newY = Math.round(newY/20)*20;

const isGoingUp = newY < last.y - 30;
const isBigGap = gap > 150;

if (isGoingUp || isBigGap) {
if(Math.random() < 0.6) type = 'orb';
else if (Math.random() < 0.5) { type = 'pad'; gap = Math.min(gap, 130); }
} else {
const rnd = Math.random();
if(rnd < 0.08) type = 'orb';
else if(rnd < 0.15) type = 'pad';
else type = 'normal';
}

const newX = last.x + last.w + gap;
let baseW = Math.max(120, 450 - (dist * 0.03) - (Math.random()*60));
let newW = (type === 'pad') ? Math.max(160, baseW) : baseW;
platforms.push({x:newX, y:newY, w:newW, h:400});

if(type === 'orb') {
const midX = last.x + last.w + gap/2;
const peakY = Math.min(last.y, newY) - 70;
orbs.push({x:midX-10, y:peakY, r:15, used:false});
}
else if(type === 'pad') {
pads.push({x:newX + 30, y:newY-10, w:40, h:10});
}
else if(type === 'normal' && newW > 200) {
if(Math.random() < 0.5) {
const sX = newX + 120 + Math.random()*(newW-180);
spikes.push({x:sX, y:newY-30, w:30, h:30});
}
}
}
}

function cleanup() {
platforms = platforms.filter(p => p.x+p.w > -100);
spikes = spikes.filter(s => s.x+s.w > -100);
pads = pads.filter(p => p.x+p.w > -100);
orbs = orbs.filter(o => o.x+o.r*2 > -100);
}

function draw() {
ctx.clearRect(0,0,W,H);
platforms.forEach(p => {
ctx.fillStyle = C_PLAT; ctx.fillRect(p.x, p.y, p.w, p.h);
ctx.fillStyle = '#86efac'; ctx.fillRect(p.x, p.y, p.w, 6);
ctx.fillStyle = 'rgba(0,0,0,0.15)';
ctx.fillRect(p.x+15, p.y+20, 8, p.h-20); ctx.fillRect(p.x+p.w-23, p.y+20, 8, p.h-20);
});
ctx.fillStyle = C_PAD; ctx.shadowBlur = 15; ctx.shadowColor = C_PAD;
pads.forEach(p => ctx.fillRect(p.x, p.y, p.w, p.h)); ctx.shadowBlur = 0;
ctx.fillStyle = C_SPIKE;
spikes.forEach(s => {
ctx.beginPath(); ctx.moveTo(s.x, s.y+s.h); ctx.lineTo(s.x+s.w/2, s.y); ctx.lineTo(s.x+s.w, s.y+s.h); ctx.fill();
});
orbs.forEach(o => {
if(o.used) return;
ctx.fillStyle = C_ORB; ctx.shadowBlur = 15; ctx.shadowColor = C_ORB;
ctx.beginPath(); ctx.arc(o.x+o.r, o.y+o.r, o.r, 0, Math.PI*2); ctx.fill(); ctx.shadowBlur = 0;
if(player.activeOrb === o) {
ctx.strokeStyle = '#fff'; ctx.lineWidth = 3;
ctx.beginPath(); ctx.arc(o.x+o.r, o.y+o.r, o.r+6, 0, Math.PI*2); ctx.stroke();
}
});
ctx.save(); ctx.translate(player.x+player.w/2, player.y+player.h/2); ctx.rotate(player.rot);
ctx.fillStyle = C_PLAYER; ctx.shadowBlur = 20; ctx.shadowColor = C_PLAYER;
ctx.fillRect(-player.w/2, -player.h/2, player.w, player.h);
ctx.fillStyle = '#fff'; ctx.shadowBlur = 0; ctx.fillRect(6, -10, 8, 8); ctx.restore();
drawParticles();
}

function drawStatic() {
ctx.clearRect(0,0,W,H);
ctx.fillStyle = '#333'; ctx.fillRect(0, H-GROUND_H, W, GROUND_H);
ctx.fillStyle = C_PLAYER; ctx.fillRect(50, H-GROUND_H-30, 30, 30);
}

function spawnParticles(x, y, c) {
for(let i=0; i<8; i++) particles.push({x, y, vx:(Math.random()-0.5)*12, vy:(Math.random()-0.5)*12, life:1.0, c});
}
function updateParticles() {
for(let i=particles.length-1; i>=0; i--) {
let p = particles[i]; p.x += p.vx; p.y += p.vy; p.life -= 0.05;
if(p.life <= 0) particles.splice(i,1);
}
}
function drawParticles() {
particles.forEach(p => { ctx.globalAlpha = p.life; ctx.fillStyle = p.c; ctx.fillRect(p.x, p.y, 4, 4); }); ctx.globalAlpha = 1;
}

const startJ = (e) => {
if(e.type === 'touchstart' || e.code === 'Space' || e.code === 'ArrowUp') if(e.cancelable && e.target === canvas) e.preventDefault();
if(!active) startGame();
jumpInput = true;
};
const stopJ = () => jumpInput = false;

window.addEventListener('keydown', e => { if(e.code==='Space'||e.code==='ArrowUp') startJ(e); });
window.addEventListener('keyup', stopJ);
canvas.addEventListener('touchstart', startJ, {passive:false});
canvas.addEventListener('touchend', stopJ);
canvas.addEventListener('mousedown', startJ);
canvas.addEventListener('mouseup', stopJ);

function gameOver() {
active = false; jumpInput = false;
cancelAnimationFrame(animId);
spawnParticles(player.x, player.y, C_PLAYER);
draw();
document.getElementById('final-score-text').innerText = "Distanza: " + score + "m";
document.getElementById('modal').style.display = 'flex';
document.getElementById('start-btn').style.display = 'block';
document.getElementById('start-btn').innerText = "RIPROVA";
if(score > highScore) { highScore = score; document.getElementById('high-score-val').innerText = highScore + "m"; }
}
function resetGame() { startGame(); }
</script>
</body>
</html>
2026-01-23 07:21:16jumpsmediumA volte quando salti per prendere i pallini gialli, anche se poche volte non li prende
2026-01-23 07:13:42jumpshighalcuni salti sono impossibili bastarda troia lurida nfame
2026-01-23 07:08:47jumpsmediumAlcuni salti sono impossibili: ce ne sono alcuni o troppo grandi o troppo vicini per essere saltati
2026-01-22 07:46:47ponglowsesso simulator
2026-01-22 07:22:18io-amo-campo-minatomediumil bordo sinistro della modalita "hard" mostra numeri che indicano un certo numero di bombe nelle 8 caselle circostanti ma una volta scoperte ce ne sono di meno.
2026-01-22 07:10:12jumpsmediumbello
2026-01-21 07:51:19jumpsmediumBello
2026-01-17 22:07:56Casadiolowfesto
2026-01-17 21:52:47io-amo-campo-minatolowtest 2 voglio vedere nel admin il nome
2026-01-17 21:43:57otherlowcazzofesto