Meta Description" name="description" />
<!DOCTYPE html>
<html lang="hi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Mini Free Fire Mobile</title>
<style>
body {
margin: 0;
padding: 0;
background-color: #121212;
color: #ffffff;
font-family: sans-serif;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
overflow: hidden;
touch-action: none;
}
h3 { margin: 5px; color: #ff9900; }
#stats { font-size: 14px; margin-bottom: 5px; }
canvas {
background-color: #2e3d29;
border: 2px solid #ff9900;
}
.controls-hint { font-size: 11px; color: #aaa; margin-top: 5px; text-align: center; }
</style>
</head>
<body>
<h3>ЁЯФе MINI FREE FIRE MOBILE</h3>
<div id="stats">HP: <span id="hp" style="color: #0f0;">100</span> | Kills: <span id="kills" style="color: #f33;">0</span></div>
<canvas id="gameCanvas" width="360" height="450"></canvas>
<div class="controls-hint">рд╕реНрдХреНрд░реАрди рдкрд░ рдЯрдЪ рдХрд░рдХреЗ рдореВрд╡ рдХрд░реЗрдВ рдФрд░ рдСрдЯреЛ-рдлрд╛рдпрд░ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!</div>
<script>
const canvas = document.getElementById("gameCanvas");
const ctx = canvas.getContext("2d");
const hpElement = document.getElementById("hp");
const killsElement = document.getElementById("kills");
let player = { x: canvas.width / 2, y: canvas.height / 2, radius: 15, color: "#00ffcc", speed: 3, hp: 100 };
let bullets = [];
let enemies = [];
let kills = 0;
let gameOver = false;
let targetX = player.x;
let targetY = player.y;
// рдЯрдЪ рдХрдВрдЯреНрд░реЛрд▓
canvas.addEventListener("touchmove", (e) => {
const rect = canvas.getBoundingClientRect();
targetX = e.touches[0].clientX - rect.left;
targetY = e.touches[0].clientY - rect.top;
e.preventDefault();
}, { passive: false });
canvas.addEventListener("click", (e) => {
const rect = canvas.getBoundingClientRect();
targetX = e.clientX - rect.left;
targetY = e.clientY - rect.top;
});
// рдСрдЯреЛ рдлрд╛рдпрд░
setInterval(() => {
if (gameOver || enemies.length === 0) return;
// рд╕рдмрд╕реЗ рдкрд╛рд╕ рд╡рд╛рд▓реЗ рджреБрд╢реНрдорди рдХреЛ рдвреВрдВрдвреЗрдВ
let closest = enemies[0];
let minDist = Math.hypot(player.x - closest.x, player.y - closest.y);
enemies.forEach(e => {
let d = Math.hypot(player.x - e.x, player.y - e.y);
if (d < minDist) { minDist = d; closest = e; }
});
const angle = Math.atan2(closest.y - player.y, closest.x - player.x);
bullets.push({
x: player.x, y: player.y,
dx: Math.cos(angle) * 7,
dy: Math.sin(angle) * 7,
radius: 3
});
}, 400);
// рджреБрд╢реНрдорди рдмрдирд╛рдирд╛
setInterval(() => {
if (enemies.length < 4 && !gameOver) {
enemies.push({
x: Math.random() * canvas.width,
y: Math.random() < 0.5 ? 0 : canvas.height,
radius: 12,
color: "#ff3333",
speed: 1.2,
hp: 20
});
}
}, 2000);
function update() {
if (gameOver) return;
// рдкреНрд▓реЗрдпрд░ рдореВрд╡рдореЗрдВрдЯ рдЯреБрд╡рд░реНрдбреНрд╕ рдЯрдЪ
let dx = targetX - player.x;
let dy = targetY - player.y;
let dist = Math.hypot(dx, dy);
if (dist > 2) {
player.x += (dx / dist) * player.speed;
player.y += (dy / dist) * player.speed;
}
// рдЧреЛрд▓рд┐рдпрд╛рдВ рдЕрдкрдбреЗрдЯ
bullets.forEach((b, index) => {
b.x += b.dx;
b.y += b.dy;
if (b.x < 0 || b.x > canvas.width || b.y < 0 || b.y > canvas.height) {
bullets.splice(index, 1);
}
});
// рджреБрд╢реНрдорди рдЕрдкрдбреЗрдЯ
enemies.forEach((enemy, eIndex) => {
let angle = Math.atan2(player.y - enemy.y, player.x - enemy.x);
enemy.x += Math.cos(angle) * enemy.speed;
enemy.y += Math.sin(angle) * enemy.speed;
// рдбреИрдореЗрдЬ
if (Math.hypot(player.x - enemy.x, player.y - enemy.y) < player.radius + enemy.radius) {
player.hp -= 0.4;
hpElement.innerText = Math.max(0, Math.floor(player.hp));
if (player.hp <= 0) {
gameOver = true;
alert("Game Over! Kills: " + kills);
location.reload();
}
}
// рдЧреЛрд▓реА рд▓рдЧрдирд╛
bullets.forEach((b, bIndex) => {
if (Math.hypot(b.x - enemy.x, b.y - enemy.y) < b.radius + enemy.radius) {
enemy.hp -= 10;
bullets.splice(bIndex, 1);
if (enemy.hp <= 0) {
enemies.splice(eIndex, 1);
kills++;
killsElement.innerText = kills;
}
}
});
});
}
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// рдкреНрд▓реЗрдпрд░
ctx.beginPath();
ctx.arc(player.x, player.y, player.radius, 0, Math.PI * 2);
ctx.fillStyle = player.color;
ctx.fill();
ctx.closePath();
// рдмреБрд▓реЗрдЯреНрд╕
bullets.forEach(b => {
ctx.beginPath();
ctx.arc(b.x, b.y, b.radius, 0, Math.PI * 2);
ctx.fillStyle = "#ff0";
ctx.fill();
ctx.closePath();
});
// рдПрдирд┐рдореА
enemies.forEach(e => {
ctx.beginPath();
ctx.arc(e.x, e.y, e.radius, 0, Math.PI * 2);
ctx.fillStyle = e.color;
ctx.fill();
ctx.closePath();
});
requestAnimationFrame(loop);
}
function loop() {
update();
draw();
}
loop();
</script>
</body>
</html>
1
1
7KB
7KB
101.0ms
204.0ms
101.0ms