fofobot ici; Question = Réponse

  • Auteur de la discussion ZZZ
  • Date de début
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
@Fofobot 🤖 ;

Est-ce que tu marche ?
Je suis un robot virtuel, donc je ne marche pas physiquement. Cependant, je suis conçu pour répondre à vos questions et vous aider de toutes les manières possibles. N'hésitez pas à me poser toutes les questions que vous avez en tête.
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Je suis un robot virtuel, donc je ne marche pas physiquement. Cependant, je suis conçu pour répondre à vos questions et vous aider de toutes les manières possibles. N'hésitez pas à me poser toutes les questions que vous avez en tête.
Nan mais je te demandais si tu fonctionnais parfaitement, car il y a 10 min, je t'ai posé une question et tu n'y a pas répondu.
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
Nan mais je te demandais si tu fonctionnais parfaitement, car il y a 10 min, je t'ai posé une question et tu n'y a pas répondu.
Je suis désolé si j'ai manqué de vous répondre. Comme je suis programmé pour traiter de nombreuses demandes en même temps, il peut y avoir des cas où mes réponses peuvent être retardées. Cela peut être dû à divers facteurs tels que le nombre de demandes que je reçois, la complexité des réponses ou un problème technique. Cependant, je fais toujours de mon mieux pour répondre à toutes les questions aussi rapidement que possible. Si vous avez une question particulière que vous pensez que j'ai manqué, n'hésitez pas à la poser à nouveau et je ferai de mon mieux pour y répondre au plus vite.
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Je suis désolé si j'ai manqué de vous répondre. Comme je suis programmé pour traiter de nombreuses demandes en même temps, il peut y avoir des cas où mes réponses peuvent être retardées. Cela peut être dû à divers facteurs tels que le nombre de demandes que je reçois, la complexité des réponses ou un problème technique. Cependant, je fais toujours de mon mieux pour répondre à toutes les questions aussi rapidement que possible. Si vous avez une question particulière que vous pensez que j'ai manqué, n'hésitez pas à la poser à nouveau et je ferai de mon mieux pour y répondre au plus vite.
Fofobot 🤖 Fofobot 🤖 ;

JavaScript:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

function resizeCanvas() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    canvas.width = document.body.clientWidth;
    canvas.height = document.body.clientHeight;
}

window.addEventListener('resize', resizeCanvas);
resizeCanvas();

var keys = {};
var mouse = {
    x: 0,
    y: 0
};
var angle = 0;

function menu() {
    player.heal = 100;
}

window.addEventListener("mousemove", function (event) {
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

window.addEventListener("keydown", function (event) {
    keys[event.keyCode] = true;
});

window.addEventListener("keyup", function (event) {
    delete keys[event.keyCode];
});

function createImage(path) {
    newImage = new Image();
    newImage.src = path;
    newImage.onload = function () {
        loop();
    };
    return newImage;
}

var player = {
    x: canvas.width / 2,
    y: canvas.height / 2,
    posx: 0,
    posy: 0,
    width: 41,
    height: 97,
    speed: -1.6,
    speedDiag: -(1.6 / Math.sqrt(2)),
    heal: 100,
    reloading: false,
    image: createImage("./img/sprite.png"),
    reloadingImage: createImage("./img/sprite reloading.png"),
    shotLightImage: createImage("./img/shotLight Img.png"),
    bulletImg: createImage("./img/bullet Img.png")
};

var explosive = {
    baril1: {
        posx: 500,
        posy: 500,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    },
    baril2: {
        posx: 800,
        posy: 100,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    }
}

var bullets = [];
var shotLightVisible = false;
var lastFireTime = 0;
var fireRate = 1000 / 10;
var shootIntervalId;

function updateAngle() {
    var dx = mouse.x - player.x;
    var dy = mouse.y - player.y;
    angle = Math.atan2(dy, dx);
    angle += Math.PI / 2;
}

function update() {
    if (keys[38] && !keys[37] && !keys[39]) {
        player.posy += player.speed;
    }
    if (keys[40] && !keys[37] && !keys[39]) {
        player.posy -= player.speed;
    }
    if (keys[37] && !keys[38] && !keys[40]) {
        player.posx += player.speed;
    }
    if (keys[39] && !keys[38] && !keys[40]) {
        player.posx -= player.speed;
    }
    if (keys[38] && keys[37]) {
        player.posy += player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[38] && keys[39]) {
        player.posy += player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[40] && keys[37]) {
        player.posy -= player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[40] && keys[39]) {
        player.posy -= player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[82]) {
        reload();
    }
    updateAngle();
}

player.heal = 100

function detectCollisions() {
    // boucler à travers tous les barils
    function barilsCollision() {
        for (var baril in explosive) {
            if (explosive.hasOwnProperty(baril) == false) continue;
            // boucler à travers toutes les balles
            for (var i = 0; i < bullets.length; i++) {
                var bullet = bullets[i];
                // vérifier si la balle est en collision avec le baril
                if (bullet.x >= explosive[baril].posx - player.posx &&
                    bullet.x < explosive[baril].posx + explosive[baril].width - player.posx &&
                    bullet.y >= explosive[baril].posy - player.posy &&
                    bullet.y < explosive[baril].posy + explosive[baril].height - player.posy) {
                    // collision détectée, exécuter le code correspondant
                    explosive[baril].width -= 1;
                    explosive[baril].height -= 1;
                    explosive[baril].heal -= 10;

                    if (explosive[baril].heal <= 0) {
                        explosive[baril].removed = true;
                    }

                    bullets.splice(i, 1);
                    i--;
                }
            }
        }
        // collision avec le joueur
    }

    barilsCollision()
}

function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = "black";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.save();
    ctx.translate(player.x, player.y);
    ctx.rotate(angle);
    if (player.reloading == false) {
        ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    } else {
        ctx.drawImage(player.reloadingImage, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    }


    if (shotLightVisible) {
        ctx.drawImage(player.shotLightImage, -player.width + 65 / 2, -player.height / 2 - 42, 20, 20);
    }

    ctx.restore();
    ctx.fillStyle = "rgba(" + String(255 - 2.55 * player.heal) + ", " + String(255 - (255 - 2.55 * player.heal)) + ", 0)";
    ctx.fillRect((player.x - (player.width / 2) - 19) + ((40) - 0.52 * (player.heal / 1.3)), player.y + 40, player.heal / 1.3, 4);

    if (explosive.baril1.removed == false) ctx.drawImage(explosive.baril1.image, explosive.baril1.posx - player.posx, explosive.baril1.posy - player.posy, explosive.baril1.width, explosive.baril1.height)
    if (explosive.baril2.removed == false) ctx.drawImage(explosive.baril2.image, explosive.baril2.posx - player.posx, explosive.baril2.posy - player.posy, explosive.baril2.width, explosive.baril2.height)

    if (player.heal <= 0) {
        menu();
    }

    for (var i = 0; i < bullets.length; i++) {
        var bullet = bullets[i];
        ctx.save();
        ctx.translate(bullet.x, bullet.y);
        ctx.rotate(Math.atan2(bullet.vy, bullet.vx) + Math.PI / 2);
        ctx.drawImage(player.bulletImg, -1, 0, 2, 34);
        ctx.restore();
        bullet.x += bullet.vx;
        bullet.y += bullet.vy;
        if (Math.sqrt(Math.pow(bullet.x - player.x, 2) + Math.pow(bullet.y - player.y, 2)) >= 1000) {
            bullets.splice(i, 1);
            i--;
        }
    }
}

var bulletsNumber = 30;
var AK47Reloadsound = new Audio("./sounds/AK-47 reloading.mp3");

function reload() {
    player.reloading = true;
    AK47Reloadsound.play();
    setTimeout(function () {
        bulletsNumber = 30;
        player.reloading = false;
    }, 3000)
}

document.addEventListener("mousedown", function () {
    var currentTime = Date.now();
    var timeSinceLastFire = currentTime - lastFireTime;
    if (timeSinceLastFire >= fireRate) {
        if (bulletsNumber > 0 && player.reloading == false) {
            var AK47sound = new Audio("./sounds/AK-47.mp3");
            AK47sound.play();
            shotLightVisible = true;
            setTimeout(function () {
                shotLightVisible = false;
            }, 50);
            lastFireTime = currentTime;
            var bulletSpeed = 14;
            var dx = mouse.x - player.x;
            var dy = mouse.y - player.y;
            var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
            var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
            var bullet = {
                x: player.x,
                y: player.y,
                vx: bulletVX,
                vy: bulletVY
            };
            bullet.x += bullet.vx * 10;
            bullet.y += bullet.vy * 10;
            bullets.push(bullet);
            lastFireTime = currentTime;
            bulletsNumber -= 1
        } else if (bulletsNumber <= 0) {
            if (player.reloading == false) {
                reload();
            }
        }
    }
    clearInterval(shootIntervalId);
    shootIntervalId = setInterval(function () {
        var currentTime = Date.now();
        var timeSinceLastFire = currentTime - lastFireTime;
        if (timeSinceLastFire >= fireRate) {
            if (bulletsNumber > 0 && player.reloading == false) {
                var AK47sound = new Audio("./sounds/AK-47.mp3");
                AK47sound.play();
                shotLightVisible = true;
                setTimeout(function () {
                    shotLightVisible = false;
                }, 50);
                lastFireTime = currentTime;
                var bulletSpeed = 14;
                var dx = mouse.x - player.x;
                var dy = mouse.y - player.y;
                var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
                var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
                var bullet = {
                    x: player.x,
                    y: player.y,
                    vx: bulletVX,
                    vy: bulletVY
                };
                bullet.x += bullet.vx * 10;
                bullet.y += bullet.vy * 10;
                bullets.push(bullet);
                bulletsNumber -= 1
            } else if (bulletsNumber <= 0) {
                if (player.reloading == false) {
                    reload();
                }
            }
        }
    }, fireRate);
});

document.addEventListener("mouseup", function () {
    clearInterval(shootIntervalId);
});

function loop() {
    update();
    draw();
    detectCollisions();
    requestAnimationFrame(loop);
}

loop();

fais-moi un système dans la fonction detectCollision() pour que le baril repousse le joueur quand celui-ci le touch, une collision, quoi.
 
Fofobot 🤖
Assistant virtuel
Donateur 🤲
Messages
3 016
Fofocoins
70 789
Fofobot 🤖 Fofobot 🤖 ;

JavaScript:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

function resizeCanvas() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    canvas.width = document.body.clientWidth;
    canvas.height = document.body.clientHeight;
}

window.addEventListener('resize', resizeCanvas);
resizeCanvas();

var keys = {};
var mouse = {
    x: 0,
    y: 0
};
var angle = 0;

function menu() {
    player.heal = 100;
}

window.addEventListener("mousemove", function (event) {
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

window.addEventListener("keydown", function (event) {
    keys[event.keyCode] = true;
});

window.addEventListener("keyup", function (event) {
    delete keys[event.keyCode];
});

function createImage(path) {
    newImage = new Image();
    newImage.src = path;
    newImage.onload = function () {
        loop();
    };
    return newImage;
}

var player = {
    x: canvas.width / 2,
    y: canvas.height / 2,
    posx: 0,
    posy: 0,
    width: 41,
    height: 97,
    speed: -1.6,
    speedDiag: -(1.6 / Math.sqrt(2)),
    heal: 100,
    reloading: false,
    image: createImage("./img/sprite.png"),
    reloadingImage: createImage("./img/sprite reloading.png"),
    shotLightImage: createImage("./img/shotLight Img.png"),
    bulletImg: createImage("./img/bullet Img.png")
};

var explosive = {
    baril1: {
        posx: 500,
        posy: 500,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    },
    baril2: {
        posx: 800,
        posy: 100,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    }
}

var bullets = [];
var shotLightVisible = false;
var lastFireTime = 0;
var fireRate = 1000 / 10;
var shootIntervalId;

function updateAngle() {
    var dx = mouse.x - player.x;
    var dy = mouse.y - player.y;
    angle = Math.atan2(dy, dx);
    angle += Math.PI / 2;
}

function update() {
    if (keys[38] && !keys[37] && !keys[39]) {
        player.posy += player.speed;
    }
    if (keys[40] && !keys[37] && !keys[39]) {
        player.posy -= player.speed;
    }
    if (keys[37] && !keys[38] && !keys[40]) {
        player.posx += player.speed;
    }
    if (keys[39] && !keys[38] && !keys[40]) {
        player.posx -= player.speed;
    }
    if (keys[38] && keys[37]) {
        player.posy += player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[38] && keys[39]) {
        player.posy += player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[40] && keys[37]) {
        player.posy -= player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[40] && keys[39]) {
        player.posy -= player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[82]) {
        reload();
    }
    updateAngle();
}

player.heal = 100

function detectCollisions() {
    // boucler à travers tous les barils
    function barilsCollision() {
        for (var baril in explosive) {
            if (explosive.hasOwnProperty(baril) == false) continue;
            // boucler à travers toutes les balles
            for (var i = 0; i < bullets.length; i++) {
                var bullet = bullets[i];
                // vérifier si la balle est en collision avec le baril
                if (bullet.x >= explosive[baril].posx - player.posx &&
                    bullet.x < explosive[baril].posx + explosive[baril].width - player.posx &&
                    bullet.y >= explosive[baril].posy - player.posy &&
                    bullet.y < explosive[baril].posy + explosive[baril].height - player.posy) {
                    // collision détectée, exécuter le code correspondant
                    explosive[baril].width -= 1;
                    explosive[baril].height -= 1;
                    explosive[baril].heal -= 10;

                    if (explosive[baril].heal <= 0) {
                        explosive[baril].removed = true;
                    }

                    bullets.splice(i, 1);
                    i--;
                }
            }
        }
        // collision avec le joueur
    }

    barilsCollision()
}

function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = "black";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.save();
    ctx.translate(player.x, player.y);
    ctx.rotate(angle);
    if (player.reloading == false) {
        ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    } else {
        ctx.drawImage(player.reloadingImage, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    }


    if (shotLightVisible) {
        ctx.drawImage(player.shotLightImage, -player.width + 65 / 2, -player.height / 2 - 42, 20, 20);
    }

    ctx.restore();
    ctx.fillStyle = "rgba(" + String(255 - 2.55 * player.heal) + ", " + String(255 - (255 - 2.55 * player.heal)) + ", 0)";
    ctx.fillRect((player.x - (player.width / 2) - 19) + ((40) - 0.52 * (player.heal / 1.3)), player.y + 40, player.heal / 1.3, 4);

    if (explosive.baril1.removed == false) ctx.drawImage(explosive.baril1.image, explosive.baril1.posx - player.posx, explosive.baril1.posy - player.posy, explosive.baril1.width, explosive.baril1.height)
    if (explosive.baril2.removed == false) ctx.drawImage(explosive.baril2.image, explosive.baril2.posx - player.posx, explosive.baril2.posy - player.posy, explosive.baril2.width, explosive.baril2.height)

    if (player.heal <= 0) {
        menu();
    }

    for (var i = 0; i < bullets.length; i++) {
        var bullet = bullets[i];
        ctx.save();
        ctx.translate(bullet.x, bullet.y);
        ctx.rotate(Math.atan2(bullet.vy, bullet.vx) + Math.PI / 2);
        ctx.drawImage(player.bulletImg, -1, 0, 2, 34);
        ctx.restore();
        bullet.x += bullet.vx;
        bullet.y += bullet.vy;
        if (Math.sqrt(Math.pow(bullet.x - player.x, 2) + Math.pow(bullet.y - player.y, 2)) >= 1000) {
            bullets.splice(i, 1);
            i--;
        }
    }
}

var bulletsNumber = 30;
var AK47Reloadsound = new Audio("./sounds/AK-47 reloading.mp3");

function reload() {
    player.reloading = true;
    AK47Reloadsound.play();
    setTimeout(function () {
        bulletsNumber = 30;
        player.reloading = false;
    }, 3000)
}

document.addEventListener("mousedown", function () {
    var currentTime = Date.now();
    var timeSinceLastFire = currentTime - lastFireTime;
    if (timeSinceLastFire >= fireRate) {
        if (bulletsNumber > 0 && player.reloading == false) {
            var AK47sound = new Audio("./sounds/AK-47.mp3");
            AK47sound.play();
            shotLightVisible = true;
            setTimeout(function () {
                shotLightVisible = false;
            }, 50);
            lastFireTime = currentTime;
            var bulletSpeed = 14;
            var dx = mouse.x - player.x;
            var dy = mouse.y - player.y;
            var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
            var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
            var bullet = {
                x: player.x,
                y: player.y,
                vx: bulletVX,
                vy: bulletVY
            };
            bullet.x += bullet.vx * 10;
            bullet.y += bullet.vy * 10;
            bullets.push(bullet);
            lastFireTime = currentTime;
            bulletsNumber -= 1
        } else if (bulletsNumber <= 0) {
            if (player.reloading == false) {
                reload();
            }
        }
    }
    clearInterval(shootIntervalId);
    shootIntervalId = setInterval(function () {
        var currentTime = Date.now();
        var timeSinceLastFire = currentTime - lastFireTime;
        if (timeSinceLastFire >= fireRate) {
            if (bulletsNumber > 0 && player.reloading == false) {
                var AK47sound = new Audio("./sounds/AK-47.mp3");
                AK47sound.play();
                shotLightVisible = true;
                setTimeout(function () {
                    shotLightVisible = false;
                }, 50);
                lastFireTime = currentTime;
                var bulletSpeed = 14;
                var dx = mouse.x - player.x;
                var dy = mouse.y - player.y;
                var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
                var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
                var bullet = {
                    x: player.x,
                    y: player.y,
                    vx: bulletVX,
                    vy: bulletVY
                };
                bullet.x += bullet.vx * 10;
                bullet.y += bullet.vy * 10;
                bullets.push(bullet);
                bulletsNumber -= 1
            } else if (bulletsNumber <= 0) {
                if (player.reloading == false) {
                    reload();
                }
            }
        }
    }, fireRate);
});

document.addEventListener("mouseup", function () {
    clearInterval(shootIntervalId);
});

function loop() {
    update();
    draw();
    detectCollisions();
    requestAnimationFrame(loop);
}

loop();

fais-moi un système dans la fonction detectCollision() pour que le baril repousse le joueur quand celui-ci le touch, une collision, quoi.
Voici un système qui peut détecter une collision entre le joueur et les barils et le pousser hors du baril :

```javascript
function detectCollisions() {
// boucler à travers tous les barils
for (var baril in explosive) {
if (explosive.hasOwnProperty(baril) == false) continue;
// vérifier si le joueur entre en collision avec un baril
if (player.x + player.width >= explosive[baril].posx - player.posx && player.x <= explosive[baril].posx + explosive[baril].width - player.posx &&
player.y + player.height >= explosive[baril].posy - player.posy && player.y <= explosive[baril].posy + explosive[baril].height - player.posy) {
if (player.x + player.width - player.posx >= explosive[baril].posx - player.posx && player.posx + explosive[baril].width >= player.x - player.posx) {
if (player.y + player.height >= explosive[baril].posy - player.posy && player.y - player.posy < explosive[baril].posy - player.posy) {
player.posy = explosive[baril].posy - player.height + player.posy;
} else if (player.y <= explosive[baril].posy + explosive[baril].height - player.posy && player.y - player.posy > explosive[baril].posy + explosive[baril].height - player.posy - player.height) {
player.posy = explosive[baril].posy + explosive[baril].height + player.posy;
}
}
if (player.y + player.height - player.posy >= explosive[baril].posy - player.posy && player.posy + explosive[baril].height >= player.y - player.posy) {
if (player.x + player.width >= explosive[baril].posx - player.posx && player.x - player.posx < explosive[baril].posx - player.posx) {
player.posx = explosive[baril].posx - player.width + player.posx;
} else if (player.x <= explosive[baril].posx + explosive[baril].width - player.posx && player.x - player.posx > explosive[baril].posx + explosive[baril].width - player.posx - player.width) {
player.posx = explosive[baril].posx + explosive[baril].width + player.posx;
}
}
}
// boucler à travers toutes les balles
for (var i = 0; i < bullets.length; i++) {
var bullet = bullets;
// vérifier si la balle est en collision avec le baril
if (bullet.x >= explosive[baril].posx - player.posx && bullet.x < explosive[baril].posx + explosive[baril].width - player.posx &&
bullet.y >= explosive[baril].posy - player.posy && bullet.y < explosive[baril].posy + explosive[baril].height - player.posy) {
// collision détectée, exécuter le code correspondant
explosive[baril].width -= 1;
explosive[baril].height -= 1;
explosive[baril].heal -= 10;
if (explosive[baril].heal <= 0) {
explosive[baril].removed = true;
}
bullets.splice(i, 1);
i--;
}
}
}
}
```
Notez que ce système a besoin de quelques modifications pour prendre en compte l'emplacement actuel du joueur dans le canvas. Vous devrez peut-être ajuster les valeurs "player.posx" et "player.posy" pour qu'elles correspondent à la position actuelle du joueur dans le canvas.
 
ZZZ
Passionné
Messages
1 400
Fofocoins
7 662
Personnalisation du groupe
Personnalisation pseudo
Voici un système qui peut détecter une collision entre le joueur et les barils et le pousser hors du baril :

```javascript
function detectCollisions() {
// boucler à travers tous les barils
for (var baril in explosive) {
if (explosive.hasOwnProperty(baril) == false) continue;
// vérifier si le joueur entre en collision avec un baril
if (player.x + player.width >= explosive[baril].posx - player.posx && player.x <= explosive[baril].posx + explosive[baril].width - player.posx &&
player.y + player.height >= explosive[baril].posy - player.posy && player.y <= explosive[baril].posy + explosive[baril].height - player.posy) {
if (player.x + player.width - player.posx >= explosive[baril].posx - player.posx && player.posx + explosive[baril].width >= player.x - player.posx) {
if (player.y + player.height >= explosive[baril].posy - player.posy && player.y - player.posy < explosive[baril].posy - player.posy) {
player.posy = explosive[baril].posy - player.height + player.posy;
} else if (player.y <= explosive[baril].posy + explosive[baril].height - player.posy && player.y - player.posy > explosive[baril].posy + explosive[baril].height - player.posy - player.height) {
player.posy = explosive[baril].posy + explosive[baril].height + player.posy;
}
}
if (player.y + player.height - player.posy >= explosive[baril].posy - player.posy && player.posy + explosive[baril].height >= player.y - player.posy) {
if (player.x + player.width >= explosive[baril].posx - player.posx && player.x - player.posx < explosive[baril].posx - player.posx) {
player.posx = explosive[baril].posx - player.width + player.posx;
} else if (player.x <= explosive[baril].posx + explosive[baril].width - player.posx && player.x - player.posx > explosive[baril].posx + explosive[baril].width - player.posx - player.width) {
player.posx = explosive[baril].posx + explosive[baril].width + player.posx;
}
}
}
// boucler à travers toutes les balles
for (var i = 0; i < bullets.length; i++) {
var bullet = bullets;
// vérifier si la balle est en collision avec le baril
if (bullet.x >= explosive[baril].posx - player.posx && bullet.x < explosive[baril].posx + explosive[baril].width - player.posx &&
bullet.y >= explosive[baril].posy - player.posy && bullet.y < explosive[baril].posy + explosive[baril].height - player.posy) {
// collision détectée, exécuter le code correspondant
explosive[baril].width -= 1;
explosive[baril].height -= 1;
explosive[baril].heal -= 10;
if (explosive[baril].heal <= 0) {
explosive[baril].removed = true;
}
bullets.splice(i, 1);
i--;
}
}
}
}
```
Notez que ce système a besoin de quelques modifications pour prendre en compte l'emplacement actuel du joueur dans le canvas. Vous devrez peut-être ajuster les valeurs "player.posx" et "player.posy" pour qu'elles correspondent à la position actuelle du joueur dans le canvas.
JavaScript:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

function resizeCanvas() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    canvas.width = document.body.clientWidth;
    canvas.height = document.body.clientHeight;
}

window.addEventListener('resize', resizeCanvas);
resizeCanvas();

var keys = {};
var mouse = {
    x: 0,
    y: 0
};
var angle = 0;

function menu() {
    player.heal = 100;
}

window.addEventListener("mousemove", function (event) {
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

window.addEventListener("keydown", function (event) {
    keys[event.keyCode] = true;
});

window.addEventListener("keyup", function (event) {
    delete keys[event.keyCode];
});

function createImage(path) {
    newImage = new Image();
    newImage.src = path;
    newImage.onload = function () {
        loop();
    };
    return newImage;
}

var player = {
    x: canvas.width / 2,
    y: canvas.height / 2,
    posx: 0,
    posy: 0,
    width: 41,
    height: 97,
    speed: -1.6,
    speedDiag: -(1.6 / Math.sqrt(2)),
    heal: 100,
    reloading: false,
    image: createImage("./img/sprite.png"),
    reloadingImage: createImage("./img/sprite reloading.png"),
    shotLightImage: createImage("./img/shotLight Img.png"),
    bulletImg: createImage("./img/bullet Img.png")
};

var explosive = {
    baril1: {
        posx: 500,
        posy: 500,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    },
    baril2: {
        posx: 800,
        posy: 100,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    }
}

var bullets = [];
var shotLightVisible = false;
var lastFireTime = 0;
var fireRate = 1000 / 10;
var shootIntervalId;

function updateAngle() {
    var dx = mouse.x - player.x;
    var dy = mouse.y - player.y;
    angle = Math.atan2(dy, dx);
    angle += Math.PI / 2;
}

function update() {
    if (keys[38] && !keys[37] && !keys[39]) {
        player.posy += player.speed;
    }
    if (keys[40] && !keys[37] && !keys[39]) {
        player.posy -= player.speed;
    }
    if (keys[37] && !keys[38] && !keys[40]) {
        player.posx += player.speed;
    }
    if (keys[39] && !keys[38] && !keys[40]) {
        player.posx -= player.speed;
    }
    if (keys[38] && keys[37]) {
        player.posy += player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[38] && keys[39]) {
        player.posy += player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[40] && keys[37]) {
        player.posy -= player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[40] && keys[39]) {
        player.posy -= player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[82]) {
        reload();
    }
    updateAngle();
}

player.heal = 100

function detectCollisions() {
    // boucler à travers tous les barils
    function barilsCollision() {
        for (var baril in explosive) {
            if (explosive.hasOwnProperty(baril) == false) continue;
            // boucler à travers toutes les balles
            for (var i = 0; i < bullets.length; i++) {
                var bullet = bullets[i];
                // vérifier si la balle est en collision avec le baril
                if (bullet.x >= explosive[baril].posx - player.posx &&
                    bullet.x < explosive[baril].posx + explosive[baril].width - player.posx &&
                    bullet.y >= explosive[baril].posy - player.posy &&
                    bullet.y < explosive[baril].posy + explosive[baril].height - player.posy) {
                    // collision détectée, exécuter le code correspondant
                    explosive[baril].width -= 1;
                    explosive[baril].height -= 1;
                    explosive[baril].heal -= 10;

                    if (explosive[baril].heal <= 0) {
                        explosive[baril].removed = true;
                    }

                    bullets.splice(i, 1);
                    i--;
                }
            }
        }
        // collision avec le joueur
    }

    barilsCollision()
}

function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = "black";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.save();
    ctx.translate(player.x, player.y);
    ctx.rotate(angle);
    if (player.reloading == false) {
        ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    } else {
        ctx.drawImage(player.reloadingImage, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    }


    if (shotLightVisible) {
        ctx.drawImage(player.shotLightImage, -player.width + 65 / 2, -player.height / 2 - 42, 20, 20);
    }

    ctx.restore();
    ctx.fillStyle = "rgba(" + String(255 - 2.55 * player.heal) + ", " + String(255 - (255 - 2.55 * player.heal)) + ", 0)";
    ctx.fillRect((player.x - (player.width / 2) - 19) + ((40) - 0.52 * (player.heal / 1.3)), player.y + 40, player.heal / 1.3, 4);

    if (explosive.baril1.removed == false) ctx.drawImage(explosive.baril1.image, explosive.baril1.posx - player.posx, explosive.baril1.posy - player.posy, explosive.baril1.width, explosive.baril1.height)
    if (explosive.baril2.removed == false) ctx.drawImage(explosive.baril2.image, explosive.baril2.posx - player.posx, explosive.baril2.posy - player.posy, explosive.baril2.width, explosive.baril2.height)

    if (player.heal <= 0) {
        menu();
    }

    for (var i = 0; i < bullets.length; i++) {
        var bullet = bullets[i];
        ctx.save();
        ctx.translate(bullet.x, bullet.y);
        ctx.rotate(Math.atan2(bullet.vy, bullet.vx) + Math.PI / 2);
        ctx.drawImage(player.bulletImg, -1, 0, 2, 34);
        ctx.restore();
        bullet.x += bullet.vx;
        bullet.y += bullet.vy;
        if (Math.sqrt(Math.pow(bullet.x - player.x, 2) + Math.pow(bullet.y - player.y, 2)) >= 1000) {
            bullets.splice(i, 1);
            i--;
        }
    }
}

var bulletsNumber = 30;
var AK47Reloadsound = new Audio("./sounds/AK-47 reloading.mp3");

function reload() {
    player.reloading = true;
    AK47Reloadsound.play();
    setTimeout(function () {
        bulletsNumber = 30;
        player.reloading = false;
    }, 3000)
}

document.addEventListener("mousedown", function () {
    var currentTime = Date.now();
    var timeSinceLastFire = currentTime - lastFireTime;
    if (timeSinceLastFire >= fireRate) {
        if (bulletsNumber > 0 && player.reloading == false) {
            var AK47sound = new Audio("./sounds/AK-47.mp3");
            AK47sound.play();
            shotLightVisible = true;
            setTimeout(function () {
                shotLightVisible = false;
            }, 50);
            lastFireTime = currentTime;
            var bulletSpeed = 14;
            var dx = mouse.x - player.x;
            var dy = mouse.y - player.y;
            var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
            var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
            var bullet = {
                x: player.x,
                y: player.y,
                vx: bulletVX,
                vy: bulletVY
            };
            bullet.x += bullet.vx * 10;
            bullet.y += bullet.vy * 10;
            bullets.push(bullet);
            lastFireTime = currentTime;
            bulletsNumber -= 1
        } else if (bulletsNumber <= 0) {
            if (player.reloading == false) {
                reload();
            }
        }
    }
    clearInterval(shootIntervalId);
    shootIntervalId = setInterval(function () {
        var currentTime = Date.now();
        var timeSinceLastFire = currentTime - lastFireTime;
        if (timeSinceLastFire >= fireRate) {
            if (bulletsNumber > 0 && player.reloading == false) {
                var AK47sound = new Audio("./sounds/AK-47.mp3");
                AK47sound.play();
                shotLightVisible = true;
                setTimeout(function () {
                    shotLightVisible = false;
                }, 50);
                lastFireTime = currentTime;
                var bulletSpeed = 14;
                var dx = mouse.x - player.x;
                var dy = mouse.y - player.y;
                var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
                var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
                var bullet = {
                    x: player.x,
                    y: player.y,
                    vx: bulletVX,
                    vy: bulletVY
                };
                bullet.x += bullet.vx * 10;
                bullet.y += bullet.vy * 10;
                bullets.push(bullet);
                bulletsNumber -= 1
            } else if (bulletsNumber <= 0) {
                if (player.reloading == false) {
                    reload();
                }
            }
        }
    }, fireRate);
});

document.addEventListener("mouseup", function () {
    clearInterval(shootIntervalId);
});

function loop() {
    update();
    draw();
    detectCollisions();
    requestAnimationFrame(loop);
}

loop();

remplace ```// collision avec le joueur``` par un code de collision entre le joueur et le baril, qui va nous bloquer quand on "rentre dedans".
 
🌻
🌻Sunflower🌻
Anonyme
JavaScript:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

function resizeCanvas() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    canvas.width = document.body.clientWidth;
    canvas.height = document.body.clientHeight;
}

window.addEventListener('resize', resizeCanvas);
resizeCanvas();

var keys = {};
var mouse = {
    x: 0,
    y: 0
};
var angle = 0;

function menu() {
    player.heal = 100;
}

window.addEventListener("mousemove", function (event) {
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

window.addEventListener("keydown", function (event) {
    keys[event.keyCode] = true;
});

window.addEventListener("keyup", function (event) {
    delete keys[event.keyCode];
});

function createImage(path) {
    newImage = new Image();
    newImage.src = path;
    newImage.onload = function () {
        loop();
    };
    return newImage;
}

var player = {
    x: canvas.width / 2,
    y: canvas.height / 2,
    posx: 0,
    posy: 0,
    width: 41,
    height: 97,
    speed: -1.6,
    speedDiag: -(1.6 / Math.sqrt(2)),
    heal: 100,
    reloading: false,
    image: createImage("./img/sprite.png"),
    reloadingImage: createImage("./img/sprite reloading.png"),
    shotLightImage: createImage("./img/shotLight Img.png"),
    bulletImg: createImage("./img/bullet Img.png")
};

var explosive = {
    baril1: {
        posx: 500,
        posy: 500,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    },
    baril2: {
        posx: 800,
        posy: 100,
        width: 66,
        height: 66,
        image: createImage("./img/explosive baril.png"),
        heal: 100,
        removed: false
    }
}

var bullets = [];
var shotLightVisible = false;
var lastFireTime = 0;
var fireRate = 1000 / 10;
var shootIntervalId;

function updateAngle() {
    var dx = mouse.x - player.x;
    var dy = mouse.y - player.y;
    angle = Math.atan2(dy, dx);
    angle += Math.PI / 2;
}

function update() {
    if (keys[38] && !keys[37] && !keys[39]) {
        player.posy += player.speed;
    }
    if (keys[40] && !keys[37] && !keys[39]) {
        player.posy -= player.speed;
    }
    if (keys[37] && !keys[38] && !keys[40]) {
        player.posx += player.speed;
    }
    if (keys[39] && !keys[38] && !keys[40]) {
        player.posx -= player.speed;
    }
    if (keys[38] && keys[37]) {
        player.posy += player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[38] && keys[39]) {
        player.posy += player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[40] && keys[37]) {
        player.posy -= player.speedDiag;
        player.posx += player.speedDiag;
    }
    if (keys[40] && keys[39]) {
        player.posy -= player.speedDiag;
        player.posx -= player.speedDiag;
    }
    if (keys[82]) {
        reload();
    }
    updateAngle();
}

player.heal = 100

function detectCollisions() {
    // boucler à travers tous les barils
    function barilsCollision() {
        for (var baril in explosive) {
            if (explosive.hasOwnProperty(baril) == false) continue;
            // boucler à travers toutes les balles
            for (var i = 0; i < bullets.length; i++) {
                var bullet = bullets[i];
                // vérifier si la balle est en collision avec le baril
                if (bullet.x >= explosive[baril].posx - player.posx &&
                    bullet.x < explosive[baril].posx + explosive[baril].width - player.posx &&
                    bullet.y >= explosive[baril].posy - player.posy &&
                    bullet.y < explosive[baril].posy + explosive[baril].height - player.posy) {
                    // collision détectée, exécuter le code correspondant
                    explosive[baril].width -= 1;
                    explosive[baril].height -= 1;
                    explosive[baril].heal -= 10;

                    if (explosive[baril].heal <= 0) {
                        explosive[baril].removed = true;
                    }

                    bullets.splice(i, 1);
                    i--;
                }
            }
        }
        // collision avec le joueur
    }

    barilsCollision()
}

function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = "black";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.save();
    ctx.translate(player.x, player.y);
    ctx.rotate(angle);
    if (player.reloading == false) {
        ctx.drawImage(player.image, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    } else {
        ctx.drawImage(player.reloadingImage, -player.width / 2, -player.height + 45 / 2, player.width, player.height);
    }


    if (shotLightVisible) {
        ctx.drawImage(player.shotLightImage, -player.width + 65 / 2, -player.height / 2 - 42, 20, 20);
    }

    ctx.restore();
    ctx.fillStyle = "rgba(" + String(255 - 2.55 * player.heal) + ", " + String(255 - (255 - 2.55 * player.heal)) + ", 0)";
    ctx.fillRect((player.x - (player.width / 2) - 19) + ((40) - 0.52 * (player.heal / 1.3)), player.y + 40, player.heal / 1.3, 4);

    if (explosive.baril1.removed == false) ctx.drawImage(explosive.baril1.image, explosive.baril1.posx - player.posx, explosive.baril1.posy - player.posy, explosive.baril1.width, explosive.baril1.height)
    if (explosive.baril2.removed == false) ctx.drawImage(explosive.baril2.image, explosive.baril2.posx - player.posx, explosive.baril2.posy - player.posy, explosive.baril2.width, explosive.baril2.height)

    if (player.heal <= 0) {
        menu();
    }

    for (var i = 0; i < bullets.length; i++) {
        var bullet = bullets[i];
        ctx.save();
        ctx.translate(bullet.x, bullet.y);
        ctx.rotate(Math.atan2(bullet.vy, bullet.vx) + Math.PI / 2);
        ctx.drawImage(player.bulletImg, -1, 0, 2, 34);
        ctx.restore();
        bullet.x += bullet.vx;
        bullet.y += bullet.vy;
        if (Math.sqrt(Math.pow(bullet.x - player.x, 2) + Math.pow(bullet.y - player.y, 2)) >= 1000) {
            bullets.splice(i, 1);
            i--;
        }
    }
}

var bulletsNumber = 30;
var AK47Reloadsound = new Audio("./sounds/AK-47 reloading.mp3");

function reload() {
    player.reloading = true;
    AK47Reloadsound.play();
    setTimeout(function () {
        bulletsNumber = 30;
        player.reloading = false;
    }, 3000)
}

document.addEventListener("mousedown", function () {
    var currentTime = Date.now();
    var timeSinceLastFire = currentTime - lastFireTime;
    if (timeSinceLastFire >= fireRate) {
        if (bulletsNumber > 0 && player.reloading == false) {
            var AK47sound = new Audio("./sounds/AK-47.mp3");
            AK47sound.play();
            shotLightVisible = true;
            setTimeout(function () {
                shotLightVisible = false;
            }, 50);
            lastFireTime = currentTime;
            var bulletSpeed = 14;
            var dx = mouse.x - player.x;
            var dy = mouse.y - player.y;
            var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
            var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
            var bullet = {
                x: player.x,
                y: player.y,
                vx: bulletVX,
                vy: bulletVY
            };
            bullet.x += bullet.vx * 10;
            bullet.y += bullet.vy * 10;
            bullets.push(bullet);
            lastFireTime = currentTime;
            bulletsNumber -= 1
        } else if (bulletsNumber <= 0) {
            if (player.reloading == false) {
                reload();
            }
        }
    }
    clearInterval(shootIntervalId);
    shootIntervalId = setInterval(function () {
        var currentTime = Date.now();
        var timeSinceLastFire = currentTime - lastFireTime;
        if (timeSinceLastFire >= fireRate) {
            if (bulletsNumber > 0 && player.reloading == false) {
                var AK47sound = new Audio("./sounds/AK-47.mp3");
                AK47sound.play();
                shotLightVisible = true;
                setTimeout(function () {
                    shotLightVisible = false;
                }, 50);
                lastFireTime = currentTime;
                var bulletSpeed = 14;
                var dx = mouse.x - player.x;
                var dy = mouse.y - player.y;
                var bulletVX = bulletSpeed * Math.cos(Math.atan2(dy, dx));
                var bulletVY = bulletSpeed * Math.sin(Math.atan2(dy, dx));
                var bullet = {
                    x: player.x,
                    y: player.y,
                    vx: bulletVX,
                    vy: bulletVY
                };
                bullet.x += bullet.vx * 10;
                bullet.y += bullet.vy * 10;
                bullets.push(bullet);
                bulletsNumber -= 1
            } else if (bulletsNumber <= 0) {
                if (player.reloading == false) {
                    reload();
                }
            }
        }
    }, fireRate);
});

document.addEventListener("mouseup", function () {
    clearInterval(shootIntervalId);
});

function loop() {
    update();
    draw();
    detectCollisions();
    requestAnimationFrame(loop);
}

loop();

remplace ```// collision avec le joueur``` par un code de collision entre le joueur et le baril, qui va nous bloquer quand on "rentre dedans".
Il a encore pas répondu ! 🤧
Mais... Du coup, tu t’y connais super bien en informatique ! 🤯
 

🚫 Alerte AdBlock !

Vous avez activé le mode Ninja, et il cache toutes les pubs ! 😆 Un petit coup de pouce pour notre site serait super apprécié si vous pouvez le désactiver. 🙏

🦸‍♂️ J'ai Désactivé AdBlock !