diff --git a/Site/Css/died.css b/Site/Css/died.css new file mode 100644 index 0000000..593eb47 --- /dev/null +++ b/Site/Css/died.css @@ -0,0 +1,52 @@ +.died { + + height: 100vh; + width: 100vw; + background-color: black; + color: white; + z-index: 2000; + position: absolute; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 20px; + visibility: hidden; + opacity: 0; + transition: 2s; + text-align: center; + +} + +.died.active { + + visibility: visible; + opacity: 1; + +} + +.diedTxt { + + font-size: 3.5em; + +} + +.diedTopaze { + + display: flex; + align-items: center; + gap: 30px; + +} + +.diedTopazeTxt { + + font-size: 2em; + +} + +.died.active .btn { + + cursor: pointer; + +} \ No newline at end of file diff --git a/Site/Css/topaze.css b/Site/Css/topaze.css index 35f16b0..998a7f1 100644 --- a/Site/Css/topaze.css +++ b/Site/Css/topaze.css @@ -26,7 +26,7 @@ .imgElement { - width: 45px; + width: auto; height: 45px; } diff --git a/Site/ImageSite/heart.png b/Site/ImageSite/heart.png new file mode 100644 index 0000000..102830e Binary files /dev/null and b/Site/ImageSite/heart.png differ diff --git a/Site/ImageSite/potionHeart.png b/Site/ImageSite/potionHeart.png new file mode 100644 index 0000000..1608b3e Binary files /dev/null and b/Site/ImageSite/potionHeart.png differ diff --git a/Site/ImageSite/potionSpeed.png b/Site/ImageSite/potionSpeed.png new file mode 100644 index 0000000..4f9295d Binary files /dev/null and b/Site/ImageSite/potionSpeed.png differ diff --git a/Site/Js/JsGame/Speed.js b/Site/Js/JsGame/Speed.js new file mode 100644 index 0000000..2f6b3f6 --- /dev/null +++ b/Site/Js/JsGame/Speed.js @@ -0,0 +1,13 @@ +const nbPotionSpeed = document.querySelector(".nbPotionSpeed"); + +let playerSpeed = 2; + +let PotionSpeed = 0; + +function potionSpeedChange(PotionSpeedLess) { + PotionSpeed += PotionSpeedLess; + + if(PotionSpeed <= 0) { + PotionSpeed = 0; + } +} \ No newline at end of file diff --git a/Site/Js/JsGame/carte.js b/Site/Js/JsGame/carte.js new file mode 100644 index 0000000..8a83da9 --- /dev/null +++ b/Site/Js/JsGame/carte.js @@ -0,0 +1,8 @@ +const carte = document.querySelector(".carte"); + +const carteAmarantis = ` +
+

Amarantis

+ Village +
+`; \ No newline at end of file diff --git a/Site/Js/JsGame/dialogue.js b/Site/Js/JsGame/dialogue.js index dd19cb3..1686ba8 100644 --- a/Site/Js/JsGame/dialogue.js +++ b/Site/Js/JsGame/dialogue.js @@ -2,14 +2,6 @@ const dialogue = document.querySelector(".dialogue"); const text = document.querySelector(".text"); const username = document.querySelector(".name"); -const nbTopaze = document.querySelector(".nbTopaze"); - -const carte = document.querySelector(".carte"); - -let topaze = 0; - -let playerSpeed = 2 - let vagabondDialogueNb = 0; let vagabondDialogue = 0; @@ -25,6 +17,9 @@ let dogDialogue = 0; let voyageurDialogueNb = 0; let voyageurDialogue = 0; +let georasDialogueNb = 0; +let georasDialogue = 0; + let timeoutVillager; let currentSegment = 0; @@ -84,14 +79,14 @@ function keydialogue(villager) { // Vagabond 1 dialogue - dialogueFunction("Le vagabond", "Hé, vous là-bas. Vous vous êtes réveillé, approchez un peu plus, laisse-moi regarder dans tes yeux. Ah, je le savais. Tu es différent, n'est-ce pas ? Un fragment de quelque chose de bien plus grand, peut-être. Je ne suis pas ici pour te vendre des potions ou te raconter des histoires. Non, je suis ici pour te révéler la vérité, aussi sombre soit-elle. Les étoiles murmurent des secrets oubliés, des promesses brisées et des destins entrelacés. Et vous, mon ami, vous êtes au centre de tout cela. Les chemins que vous empruntez ne sont pas tracés dans le sable, mais dans le tissu même de la réalité. Chaque pas que vous faites résonne à travers les éthers de l'existence. Écoute-moi bien, car je ne répéterai pas ces mots. Ton destin est une énigme, une étoile filante dans la nuit, et vous seul détenez la clé de sa signification mais je ne peux pas vous en parler plus... Alors, allez-y. Explorez. Découvrez les mystères qui vous attendent, et peut-être, juste peut-être, trouverez-vous la vérité que vous cherchez..."); - + dialogueFunction("Le vagabond", "Hé, vous là-bas. Vous vous êtes réveillé, approchez un peu plus. Tu ne sais pas ce qu'il s'est passé... Tu ne connais pas la vérité... je ne peux pas trop en dire... trouverez-vous par vous-même la vérité que vous cherchez... maintenant je dois partir."); + if(vagabondDialogue === 0) { setTimeout(function() { vagabond.sprite.position.y -= 100; vagabond.sprite.position.x -= 1550; vagabondDialogueNb = 1; - }, 60000); + }, 20000); } vagabondDialogue = 1; @@ -114,6 +109,11 @@ function keydialogue(villager) { if(vagabondDialogue !== 0) { + + + + // Quete principale + // Chef if (villager === chef) { @@ -121,10 +121,10 @@ function keydialogue(villager) { // Chef 1 dialogue - dialogueFunction("Chef d'Amarantis", "Bienvenue à Amarantis, c'est moi qui dirige ce petit village. Comme vous le savez peut-être, le vagabond vous a trouvé évanoui et vous a ramené à l'Hôpital du Village. Vous êtes resté endormi pendant plusieurs mois. Ces temps-ci, il se passe des choses bizarres. Une menace vous en veut. Excusez-moi, je ne vous ai pas demandé votre nom et d'où vous venez? ...Je vois, vous ne vous en souvenez de rien. Pour visiter le village je vais vous donner une carte du village, vous pourrez aller à la rencontre des autres villageois, ils sont très sympas. Allez voir la bibliothèque, le magasin, etc... et les villageois, pour en savoir plus sur ce village. Nous avons notre propre monnaie le topaze vous pouvez vous en procurez en rendand des service au gens par exemple. Je vais vous en donnez 10. Il y a le voyageur Hesther qui vous attend avec impatience je crois qu'il a quleque chose à vous demandé, mais une dernière information n'allez surtout pas à la forêt, c'est dangereux d'aller là-bas. Il y a quelque temps, un villageois y est allé et n'est jamais revenu..."); + dialogueFunction("Chef d'Amarantis", "Bienvenue à Amarantis, c'est moi qui dirige ce petit village. Comme vous le savez peut-être, le vagabond vous a trouvé évanoui et vous a ramené à l'Hôpital du Village. ...Quoi??? Il vous a parlé à l'hôpital et a disparu, je pense que vous avez rêvé. Vous êtes resté endormi pendant plusieurs mois. Ces temps-ci, il se passe des choses bizarres. Une menace vous en veut. Excusez-moi, je ne vous ai pas demandé votre nom et d'où vous venez? ...Je vois, vous ne vous en souvenez de rien. Pour visiter le village, je vais vous donner une carte du village, vous pourrez aller à la rencontre des autres villageois, ils sont très sympas. Allez voir la bibliothèque, le magasin, etc... et les villageois, pour en savoir plus sur ce village. Nous avons notre propre monnaie, le topaze. Vous pouvez vous en procurer en rendant des services aux gens, par exemple. Je vais vous en donner 10. Il y a le voyageur Hesther qui vous attend avec impatience, je crois qu'il a quelque chose à vous demander, mais une dernière information : n'allez surtout pas à la forêt, c'est dangereux d'y aller. Il y a quelque temps, un villageois y est allé et n'est jamais revenu..."); if(chefDialogue === 0) { - topaze += 10; + topazeChange(10); } chefDialogue = 1; @@ -135,10 +135,20 @@ function keydialogue(villager) { // Chef 2 dialogue - dialogueFunction("Chef d'Amarantis", "b"); + dialogueFunction("Chef d'Amarantis", "Bonjour, Vous avez parlé avec le voyageur Hesther ...Vous allez l'aidé a finir son périple. Vous n'avez pas encore repris tout votre energie, allez d'abbord jusqu'a la maison de Georas Il est très sympa il vous expliqueras comment sont les montagnes il aimes bien faire des prommenades et quand vous reviendrez j'estimerais que vous êtes assé en forme pour partir avec le voyageur."); chefDialogue = 2; + } else + + if(chefDialogueNb === 2) { + + // Chef 3 dialogue + + dialogueFunction("Chef d'Amarantis", "Vous êtes allez voir Georus ...Il vous a donné une potion de rapidité. Je pense que vous êtes près pour allé finir le périple avec le voyageur et sa vous permetteras peut-être de vous rémorer des souvenirs."); + + chefDialogue = 3; + } } else @@ -148,12 +158,14 @@ function keydialogue(villager) { // Voyageur if (villager === voyageur) { + if(chefDialogue !== 0) { + if(voyageurDialogueNb === 0) { // Voyageur 1 dialogue - dialogueFunction("Voyageur", "Salut! enfin je peut te tutoyé? ...Okay alors on se tutoie Je m'appelle Hesther. Je suis un voyageur et un avantururié, je viens d'un autre village très au sud. Je suis en train de faire un long périple j'ai commencé par le Sud-Ouest et je prend une petite pause ici à Amarantis et je doit finir au nord-Ouest mais je voulais vous parler car pour finir mon voyage je doit passer par la forêt mais tout le monde m'a dit que c'était très dangereux et les habitant on tous peur depuis qu'un villageois n y est jammais revenu. Mais toi je ressens en toi que tu as du courrage voudrais tu bien m'acompagner pour finir mon périple ...Super je te rècompenserais à la fin de mon voyage Je vais commencé par monter sur la montagne pour voir la vue et voir la forêt de haut. Juste le chef du village veut que tu repose encore un peu on montera bientôt la montagne. Quand tu seras en forme vas parler au chef d'Amarantis."); + dialogueFunction("Voyageur", "Salut ! Enfin je peux te tutoyer ? ...D'accord, alors on se tutoie. Je m'appelle Hesther. Je suis un voyageur et un aventurier, je viens d'un autre village très au sud. Je suis en train de faire un long périple, j'ai commencé par le Sud-Ouest et je prends une petite pause ici à Amarantis. Je dois finir au nord-Ouest mais je voulais te parler car pour finir mon voyage je dois passer par la forêt. Mais tout le monde m'a dit que c'était très dangereux et les habitants ont tous peur depuis qu'un villageois n'y est jamais revenu. Mais toi, je sens en toi que tu as du courage. Voudrais-tu bien m'accompagner pour finir mon périple ? ...Super, je te récompenserai à la fin de mon voyage. Je vais commencer par monter sur la montagne pour voir la vue et voir la forêt de haut. Juste je dois attendre que le chef du village accepte que tu parte avec moi, on commencera en montant la montagne au nord-est. Vas parler au chef d'Amarantis pour savoir si il est daccord qu tu parte avec moi."); if(voyageurDialogue === 0) { chefDialogueNb = 1; @@ -161,6 +173,7 @@ function keydialogue(villager) { voyageurDialogue = 1; } + } else { dialogueFunction("Maitre du jeu", "Veuillez d'abord parler au Chef d'Amarantis."); } @@ -169,6 +182,36 @@ function keydialogue(villager) { + // Georoas + + if (villager === georas) { + + if(chefDialogue > 1) { + + if(georasDialogueNb === 0) { + + // Georas 1 dialogue + + dialogueFunction("Georas", "Bonjour, je m'appelle Georas. Je suis un ami du chef d'Amarantis. Je fais beaucoup de promenade ...Tu veux gravire la montagne. C'est assé long mais C'est pas compliqué. je vais t'offrir une potion qui permet de courir plus vite, tellement vite que tu es invulnérable au dégat. C'est une potion verte et elle dure que 10 secondes, utilise la que quand vous en avez vraiment besoin. Allez de nouveau voir le chef du village."); + + if(georasDialogue === 0) { + potionSpeedChange(1); + chefDialogueNb = 2; + } + + georasDialogue = 1; + } + + } else { + dialogueFunction("Maitre du jeu", "Veuillez d'abord parler avec le deuxième dialogue du Chef."); + } + } else + + + + + // Quete secondaire + // Ragnerus if (villager === ragnerus) { @@ -186,10 +229,10 @@ function keydialogue(villager) { // Ragnerus 2 dialogue - dialogueFunction("Ragnerus", "Merci d'avoir retrouvé mon chien. J'avais si peur pour lui. Pour te remercier je te donne 3 topazes."); + dialogueFunction("Ragnerus", "Merci d'avoir retrouvé mon chien. J'avais si peur pour lui. Il vous a griffé, je vais mieux l'éduquer. Pour te remercier de l'avoir ramené je te donne 3 topazes."); if(ragnerusDialogue === 1) { - topaze += 3; + topazeChange(3) } ragnerusDialogue = 2; @@ -203,7 +246,9 @@ function keydialogue(villager) { // Chien if (villager === dog) { + if(ragnerusDialogue !== 0) { + if(dogDialogueNb === 0) { // Chien 1 dialogue @@ -211,6 +256,7 @@ function keydialogue(villager) { dialogueFunction("Chien de Ragnerus", "Woaf Woaf Woaf."); if(dogDialogue === 0) { + heartChange(-1); setTimeout(function() { dog.sprite.position.y -= -970; dog.sprite.position.x -= -230; @@ -220,7 +266,8 @@ function keydialogue(villager) { dogDialogue = 1; - } + } + } else { dialogueFunction("Maitre du jeu", "Veuillez d'abord parler a Ragnerus."); } diff --git a/Site/Js/JsGame/heart.js b/Site/Js/JsGame/heart.js new file mode 100644 index 0000000..4cb0632 --- /dev/null +++ b/Site/Js/JsGame/heart.js @@ -0,0 +1,54 @@ +const nbHeart = document.querySelector(".nbHeart"); + +const nbPotionHeart = document.querySelector(".nbPotionHeart"); + +const died = document.querySelector(".died"); +const diedTopaze = document.querySelector(".diedTopaze"); +const diedTopazeTxt = document.querySelector(".diedTopazeTxt"); +const reprendreDied = document.querySelector(".reprendreDied"); + +let heartMax = 3; + +let heart = heartMax; + +function heartChange(heartLess) { + if(playerSpeed === 3) { + if(heartLess > 0) { + heartLess = 0 + } + } else { + heart += heartLess; + } + + if(heart > heartMax) { + heart = heartMax; + } + + if(heart <= 0) { + heart = 0; + } +} + +let PotionHeart = 0; + +function potionHeartChange(PotionHeartLess) { + PotionHeart += PotionHeartLess; + + if(PotionHeart <= 0) { + PotionHeart = 0; + } +} + +let diedReprendre = false; + +reprendreDied.onclick = function() {; + died.classList.remove("active"); + body.style.cursor = "none"; + menuKeys = false; + + if(!diedReprendre) { + heartChange(heartMax); + topazeChange(-2); + diedReprendre = true; + } +}; \ No newline at end of file diff --git a/Site/Js/JsGame/play.js b/Site/Js/JsGame/play.js index e6ec26d..67ccb15 100644 --- a/Site/Js/JsGame/play.js +++ b/Site/Js/JsGame/play.js @@ -1,4 +1,10 @@ const keys = { + f: { + pressed: false + }, + r: { + pressed: false + }, e: { pressed: false }, @@ -23,10 +29,12 @@ let base = "home"; function animate() { window.requestAnimationFrame(animate); + nbHeart.textContent = heart; + nbPotionHeart.textContent = PotionHeart; + nbPotionSpeed.textContent = PotionSpeed; nbTopaze.textContent = topaze; - + if(menuKeys) { - dialogue.classList.remove("active"); carte.classList.remove("active"); carteKeys = false; @@ -38,10 +46,33 @@ function animate() { let moving = true; + if(heart <= 0) { + diedReprendre = false; + + if (musique) { + remplacerMusique(musiqueDied); + } + + if(topaze == 1) { + diedTopazeTxt.textContent = "-1 Topaze"; + diedTopaze.style.display = "flex"; + } else + if(topaze == 0) { + diedTopaze.style.display = "none"; + } else { + diedTopazeTxt.textContent = "-2 Topazes"; + diedTopaze.style.display = "flex"; + } + died.classList.add("active"); + body.style.cursor = "auto"; + menuKeys = true; + + } else + if(base === "map") { if (musique) { - remplacerMusique(musiqueMap ,soundDialogue); + remplacerMusique(musiqueMap); } c.clearRect(0, 0, canvas.width, canvas.height); @@ -67,10 +98,12 @@ function animate() { if(!menuKeys && !carteKeys) { if (keys.w.pressed && lastKey === "w") { - PlayerSpeed = 10 + player.moving = true; player.image = player.sprites.up; + // Collision + for (let i = 0; i < mapOfCollisions.length; i++) { const boundary = mapOfCollisions[i]; if( @@ -88,6 +121,8 @@ function animate() { } } + // Villager + villagersMap.forEach(villager => { if ( rectangularCollision({ @@ -106,6 +141,8 @@ function animate() { } }); + // Home + for (let i = 0; i < frontOfHomes.length; i++) { const frontOfHome = frontOfHomes[i]; if( @@ -117,7 +154,7 @@ function animate() { }} }) ){ - base = "home" + base = "home"; movable.forEach((movable) => { movable.position.y += 30; }) @@ -137,38 +174,33 @@ function animate() { player.moving = true; player.image = player.sprites.down; - for (let i = 0; i < mapOfCollisions.length; i++) { - const boundary = mapOfCollisions[i]; - if( - rectangularCollision({ - rectangle1: player, - rectangle2: {...boundary, position: { - x: boundary.position.x, - y: boundary.position.y - 2 - }} - }) - ){ - moving = false; - player.moving = false; - break; - } - } + // Collision villagersMap.forEach(villager => { - if ( - rectangularCollision({ - rectangle1: player, - rectangle2: {...villager.sprite, position: { - x: villager.sprite.position.x, - y: villager.sprite.position.y - 2 - }} - }) - ) { - - moving = false; - player.moving = false; + for (let i = 0; i < mapOfCollisions.length; i++) { + const boundary = mapOfCollisions[i]; + if( + rectangularCollision({ + rectangle1: player, + rectangle2: {...boundary, position: { + x: boundary.position.x, + y: boundary.position.y - 2 + }} + }) || + rectangularCollision({ + rectangle1: player, + rectangle2: {...villager.sprite, position: { + x: villager.sprite.position.x, + y: villager.sprite.position.y - 2 + }} + }) + ){ + moving = false; + player.moving = false; + break; + } } - }); + }) if(moving) { movable.forEach((movable) => { @@ -182,38 +214,33 @@ function animate() { player.moving = true; player.image = player.sprites.left; - for (let i = 0; i < mapOfCollisions.length; i++) { - const boundary = mapOfCollisions[i]; - if( - rectangularCollision({ - rectangle1: player, - rectangle2: {...boundary, position: { - x: boundary.position.x + 2, - y: boundary.position.y - }} - }) - ){ - moving = false; - player.moving = false; - break; - } - } + //Collision villagersMap.forEach(villager => { - if ( - rectangularCollision({ - rectangle1: player, - rectangle2: {...villager.sprite, position: { - x: villager.sprite.position.x + 2, - y: villager.sprite.position.y - }} - }) - ) { - - moving = false; - player.moving = false; + for (let i = 0; i < mapOfCollisions.length; i++) { + const boundary = mapOfCollisions[i]; + if( + rectangularCollision({ + rectangle1: player, + rectangle2: {...boundary, position: { + x: boundary.position.x + 2, + y: boundary.position.y + }} + }) || + rectangularCollision({ + rectangle1: player, + rectangle2: {...villager.sprite, position: { + x: villager.sprite.position.x + 2, + y: villager.sprite.position.y + }} + }) + ){ + moving = false; + player.moving = false; + break; + } } - }); + }) if(moving) { movable.forEach((movable) => { @@ -227,38 +254,33 @@ function animate() { player.moving = true; player.image = player.sprites.right; - for (let i = 0; i < mapOfCollisions.length; i++) { - const boundary = mapOfCollisions[i]; - if( - rectangularCollision({ - rectangle1: player, - rectangle2: {...boundary, position: { - x: boundary.position.x - 2, - y: boundary.position.y - }} - }) - ){ - moving = false; - player.moving = false; - break; - } - } + // Collision villagersMap.forEach(villager => { - if ( - rectangularCollision({ - rectangle1: player, - rectangle2: {...villager.sprite, position: { - x: villager.sprite.position.x - 2, - y: villager.sprite.position.y - }} - }) - ) { - - moving = false; - player.moving = false; + for (let i = 0; i < mapOfCollisions.length; i++) { + const boundary = mapOfCollisions[i]; + if( + rectangularCollision({ + rectangle1: player, + rectangle2: {...boundary, position: { + x: boundary.position.x - 2, + y: boundary.position.y + }} + }) || + rectangularCollision({ + rectangle1: player, + rectangle2: {...villager.sprite, position: { + x: villager.sprite.position.x - 2, + y: villager.sprite.position.y + }} + }) + ){ + moving = false; + player.moving = false; + break; + } } - }); + }) if(moving) { movable.forEach((movable) => { @@ -267,11 +289,12 @@ function animate() { } } } - } - else if(base === "home") { + } else + + if(base === "home") { if (musique) { - remplacerMusique(musiqueHome, soundDialogue); + remplacerMusique(musiqueHome); } c.clearRect(0, 0, canvas.width, canvas.height); @@ -300,6 +323,9 @@ function animate() { player.moving = true; player.image = player.sprites.up; + + // Collision + for (let i = 0; i < homeOfCollisions.length; i++) { const boundary = homeOfCollisions[i]; if( @@ -317,6 +343,8 @@ function animate() { } } + // Villager + villagersHome.forEach(villager => { if ( rectangularCollision({ @@ -342,24 +370,39 @@ function animate() { } } else if (keys.s.pressed && lastKey === "s") { + player.moving = true; player.image = player.sprites.down; - for (let i = 0; i < homeOfCollisions.length; i++) { - const boundary = homeOfCollisions[i]; - if( - rectangularCollision({ - rectangle1: player, - rectangle2: {...boundary, position: { - x: boundary.position.x, - y: boundary.position.y - 2 - }} - }) - ){ - moving = false; - player.moving = false; - break; + + // Collision + + villagersHome.forEach(villager => { + for (let i = 0; i < homeOfCollisions.length; i++) { + const boundary = homeOfCollisions[i]; + if( + rectangularCollision({ + rectangle1: player, + rectangle2: {...boundary, position: { + x: boundary.position.x, + y: boundary.position.y - 2 + }} + }) || + rectangularCollision({ + rectangle1: player, + rectangle2: {...villager.sprite, position: { + x: villager.sprite.position.x, + y: villager.sprite.position.y - 2 + }} + }) + ){ + moving = false; + player.moving = false; + break; + } } - } + }) + + // Home for (let i = 0; i < frontOfHomes.length; i++) { const frontOfHome = frontOfHomes[i]; @@ -380,106 +423,85 @@ function animate() { } } - villagersHome.forEach(villager => { - if ( - rectangularCollision({ - rectangle1: player, - rectangle2: {...villager.sprite, position: { - x: villager.sprite.position.x, - y: villager.sprite.position.y - 2 - }} - }) - ) { - - moving = false; - player.moving = false; - } - }); - if(moving) { movable.forEach((movable) => { movable.position.y -= playerSpeed; }) } - } - else if (keys.a.pressed && lastKey === "a") { + } else + + if (keys.a.pressed && lastKey === "a") { + player.moving = true; player.image = player.sprites.left; - for (let i = 0; i < homeOfCollisions.length; i++) { - const boundary = homeOfCollisions[i]; - if( - rectangularCollision({ - rectangle1: player, - rectangle2: {...boundary, position: { - x: boundary.position.x + 2, - y: boundary.position.y - }} - }) - ){ - moving = false; - player.moving = false; - break; - } - } + + // Collision villagersHome.forEach(villager => { - if ( - rectangularCollision({ - rectangle1: player, - rectangle2: {...villager.sprite, position: { - x: villager.sprite.position.x + 2, - y: villager.sprite.position.y - }} - }) - ) { - - moving = false; - player.moving = false; + for (let i = 0; i < homeOfCollisions.length; i++) { + const boundary = homeOfCollisions[i]; + if( + rectangularCollision({ + rectangle1: player, + rectangle2: {...boundary, position: { + x: boundary.position.x + 2, + y: boundary.position.y + }} + }) || + rectangularCollision({ + rectangle1: player, + rectangle2: {...villager.sprite, position: { + x: villager.sprite.position.x + 2, + y: villager.sprite.position.y + }} + }) + ){ + moving = false; + player.moving = false; + break; + } } - }); + }) if(moving) { movable.forEach((movable) => { movable.position.x += playerSpeed; }) } - } - else if (keys.d.pressed && lastKey === "d") { + } else + + if (keys.d.pressed && lastKey === "d") { + player.moving = true; player.image = player.sprites.right; - for (let i = 0; i < homeOfCollisions.length; i++) { - const boundary = homeOfCollisions[i]; - if( - rectangularCollision({ - rectangle1: player, - rectangle2: {...boundary, position: { - x: boundary.position.x - 2, - y: boundary.position.y - }} - }) - ){ - moving = false; - player.moving = false; - break; - } - } + // Collision villagersHome.forEach(villager => { - if ( - rectangularCollision({ - rectangle1: player, - rectangle2: {...villager.sprite, position: { - x: villager.sprite.position.x - 2, - y: villager.sprite.position.y - }} - }) - ) { - - moving = false; - player.moving = false; + for (let i = 0; i < homeOfCollisions.length; i++) { + const boundary = homeOfCollisions[i]; + if( + rectangularCollision({ + rectangle1: player, + rectangle2: {...boundary, position: { + x: boundary.position.x - 2, + y: boundary.position.y + }} + }) || + rectangularCollision({ + rectangle1: player, + rectangle2: {...villager.sprite, position: { + x: villager.sprite.position.x - 2, + y: villager.sprite.position.y + }} + }) + ){ + moving = false; + player.moving = false; + break; + } } - }); + }) if(moving) { movable.forEach((movable) => { @@ -496,14 +518,42 @@ let lastKey = ""; window.addEventListener("keydown", function(e) { switch (e.key) { + case "f": + keys.f.pressed = true; + lastKey = "f"; + + if(!menuKeys){ + if(PotionSpeed > 0 && playerSpeed === 2) { + playerSpeed = 3; + setTimeout(function() { + playerSpeed = 2; + }, 10000); + potionSpeedChange(-1); + } + } + + break; + case "r": + keys.r.pressed = true; + lastKey = "r"; + + if(!menuKeys){ + if(PotionHeart > 0 && heart < heartMax) { + heartChange(heartMax); + potionHeartChange(-1); + } + } + + break; case "e": keys.e.pressed = true; lastKey = "e"; if(!menuKeys){ - if (chefDialogue !== 0 && lastKey === "e") { + if (chefDialogue !== 0) { carte.classList.toggle("active"); carteKeys = carte.classList.contains('active'); + carte.innerHTML = carteAmarantis; } } @@ -529,6 +579,12 @@ window.addEventListener("keydown", function(e) { window.addEventListener("keyup", function(e) { switch (e.key) { + case "f": + keys.f.pressed = false; + break; + case "r": + keys.r.pressed = false; + break; case "e": keys.e.pressed = false; break; @@ -553,8 +609,11 @@ window.addEventListener("blur", function() { keys.s.pressed = false; keys.d.pressed = false; lastKey = ""; + }); window.addEventListener("focus", function() { lastKey = ""; + + }); \ No newline at end of file diff --git a/Site/Js/JsGame/sprite.js b/Site/Js/JsGame/sprite.js index 53f3ee9..1ea6ea2 100644 --- a/Site/Js/JsGame/sprite.js +++ b/Site/Js/JsGame/sprite.js @@ -29,6 +29,9 @@ dogImage.src = './Site/ImageGame/dog.png'; const voyageurImage = new Image(); voyageurImage.src = './Site/ImageGame/voyageur.png'; +const georasImage = new Image(); +georasImage.src = './Site/ImageGame/voyageur.png'; + // Map image const mapBackground = new Image(); @@ -61,6 +64,8 @@ const player = new Sprite({ down: player1, left: player4, right: player3, + negHeart: player1, + posHeart: player2 } }) @@ -92,6 +97,19 @@ const chef = { }), }; +const georas = { + sprite: new Sprite({ + position: { + x: canvas.width / 2 - 250, + y: canvas.height / 2 + 950 + }, + frames: { + max: 4 + }, + image: georasImage + }), +}; + @@ -125,8 +143,8 @@ const dog = { const voyageur = { sprite: new Sprite({ position: { - x: canvas.width / 2 + 160, - y: canvas.height / 2 + 140 + x: canvas.width / 2 - 200, + y: canvas.height / 2 + 750 }, frames: { max: 4 @@ -215,7 +233,7 @@ const villager1 = { };*/ const villagersMap = [ragnerus, dog, voyageur]; -const villagersHome = [vagabond , chef]; +const villagersHome = [vagabond , chef, georas]; const villagers = [...villagersMap, ...villagersHome]; diff --git a/Site/Js/JsGame/topaze.js b/Site/Js/JsGame/topaze.js new file mode 100644 index 0000000..1651d94 --- /dev/null +++ b/Site/Js/JsGame/topaze.js @@ -0,0 +1,11 @@ +const nbTopaze = document.querySelector(".nbTopaze"); + +let topaze = 0; + +function topazeChange(topazeLess) { + topaze += topazeLess; + + if(topaze <= 0) { + topaze = 0; + } +} \ No newline at end of file diff --git a/Site/Js/JsMusic/music.js b/Site/Js/JsMusic/music.js index 8261486..4b237e6 100644 --- a/Site/Js/JsMusic/music.js +++ b/Site/Js/JsMusic/music.js @@ -1,16 +1,19 @@ let musiqueHome = new Audio('./Site/Music/home.mp3'); let musiqueMap = new Audio('./Site/Music/map.mp3'); +let musiqueDied = new Audio('./Site/Music/died.mp3'); let soundDialogue = new Audio('./Site/Music/soundDialogue.mp3'); let musiques = { musiqueHome, musiqueMap, - soundDialogue + soundDialogue, + musiqueDied, }; let adventureMusiques = { musiqueHome, musiqueMap, + musiqueDied }; function setMusicLoop(music) { @@ -28,14 +31,16 @@ for (let key in musiques) { musiqueHome.volume = 0.08; musiqueMap.volume = 0.08; +musiqueDied.volume = 0.08; soundDialogue.volume = 0.8; -function remplacerMusique(musiqueChoice1, musiqueChoice2) { - for (let key in musiques) { - if (musiques.hasOwnProperty(key)) { - if (musiques[key] !== musiqueChoice1 && musiques[key] !== musiqueChoice2) { - musiques[key].pause(); +function remplacerMusique(musiqueChoice1) { + for (let key in adventureMusiques) { + if (adventureMusiques.hasOwnProperty(key)) { + if (adventureMusiques[key] !== musiqueChoice1) { + adventureMusiques[key].pause(); + adventureMusiques[key].currentTime = 0; musiqueChoice1.play(); } } diff --git a/Site/Js/JsSite/menu.js b/Site/Js/JsSite/menu.js index 6fa3b0e..e5ad0bc 100644 --- a/Site/Js/JsSite/menu.js +++ b/Site/Js/JsSite/menu.js @@ -12,6 +12,7 @@ const reprendre = document.querySelector(".reprendre"); const inputSizes = document.querySelectorAll(".inputSize"); const musiqueBtn = document.querySelector(".musique"); const ecran = document.querySelector(".ecran"); +const recommencer = document.querySelectorAll(".recommencer"); let menuKeys = false; @@ -60,14 +61,6 @@ inputSizes.forEach((input, index) => { }); }); -function music(event) { - musique = true; - document.removeEventListener('keydown', music); - document.removeEventListener('click', music); -} - -document.addEventListener('keydown', music); - function limitNumberLength(inputSizes, maxLength) { if (inputSizes.value.length > maxLength) { inputSizes.value = input.value.slice(0, maxLength); @@ -76,6 +69,14 @@ function limitNumberLength(inputSizes, maxLength) { let musique = false; +function music(event) { + musique = true; + document.removeEventListener('keydown', music); + document.removeEventListener('click', music); +} + +document.addEventListener('keydown', music); + musiqueBtn.onclick = function() { if (!musique) { musiqueBtn.textContent = "Musique activée"; @@ -134,6 +135,12 @@ function exitFullscreen() { } } +recommencer.forEach((recommencerBtn) => { + recommencerBtn.onclick = function() { + location.reload(); + } +}) + window.addEventListener('DOMContentLoaded', function() { const storedWidth = localStorage.getItem("canvasWidth"); const storedHeight = localStorage.getItem("canvasHeight"); diff --git a/Site/Music/died.mp3 b/Site/Music/died.mp3 new file mode 100644 index 0000000..5e7cc22 Binary files /dev/null and b/Site/Music/died.mp3 differ diff --git a/Site/Music/home.mp3 b/Site/Music/home.mp3 index e1fe2fa..d969088 100644 Binary files a/Site/Music/home.mp3 and b/Site/Music/home.mp3 differ diff --git a/Site/Music/map.mp3 b/Site/Music/map.mp3 index 12c53be..d4e123a 100644 Binary files a/Site/Music/map.mp3 and b/Site/Music/map.mp3 differ diff --git a/index.html b/index.html index 094bf0e..8d22d24 100644 --- a/index.html +++ b/index.html @@ -10,6 +10,7 @@ + @@ -21,7 +22,11 @@ + + + + @@ -39,6 +44,7 @@
Musique activé
Plein écran désactivé
+
Recommencez

q = ouvrir le menu

e = ouvrir les cartes

@@ -49,12 +55,7 @@
-
-
-

Amarantis

- Village -
-
+

@@ -63,9 +64,33 @@
- Topaze + Heart +

+
+
+ Topaze

+
+ PotionHeart +

+
+
+ PotionSpeed +

+
+
+ +
+

Vous êtes mort.

+ +
+

-2 topazes

+ Topaze +
+ +
Reprendre
+
Recommencez