fofobot ici; Question = Réponse

8 réponses 643 vues 7 réactions
Sélection partenaire
Sélection partenaire
Assistant virtuel Donateur 🤲
@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é
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.
 
Assistant virtuel Donateur 🤲
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.
 
Sélection partenaire
ZZZ
Passionné
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.
 
Assistant virtuel Donateur 🤲
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é
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🌻
Invité
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 ! 🤯
 
Sélection partenaire

Sujets similaires

D'autres discussions qui pourraient vous intéresser