version mardi spoir
This commit is contained in:
@@ -4,61 +4,73 @@ liste_carte_defaut:
|
|||||||
- numero: 1
|
- numero: 1
|
||||||
image: static/css/img/cartes/X_j.webp
|
image: static/css/img/cartes/X_j.webp
|
||||||
contenu: X
|
contenu: X
|
||||||
|
lettre: X
|
||||||
couleur: violet
|
couleur: violet
|
||||||
donné: non
|
donné: oui
|
||||||
- numero: 2
|
- numero: 2
|
||||||
image: static/css/img/cartes/E_b.webp
|
image: static/css/img/cartes/E_b.webp
|
||||||
contenu: E
|
contenu: E
|
||||||
|
lettre: E
|
||||||
couleur: bleu
|
couleur: bleu
|
||||||
donné: non
|
donné: non
|
||||||
- numero: 3
|
- numero: 3
|
||||||
image: static/css/img/cartes/R_b.webp
|
image: static/css/img/cartes/R_b.webp
|
||||||
contenu: R
|
contenu: R
|
||||||
|
lettre: R
|
||||||
couleur: bleu
|
couleur: bleu
|
||||||
donné: non
|
donné: non
|
||||||
- numero: 4
|
- numero: 4
|
||||||
image: static/css/img/cartes/P_j.webp
|
image: static/css/img/cartes/P_j.webp
|
||||||
contenu: P
|
contenu: P
|
||||||
|
lettre: P
|
||||||
couleur: violet
|
couleur: violet
|
||||||
donné: non
|
donné: oui
|
||||||
- numero: 5
|
- numero: 5
|
||||||
image: static/css/img/cartes/T_b.webp
|
image: static/css/img/cartes/T_b.webp
|
||||||
contenu: T
|
contenu: T
|
||||||
|
lettre: T
|
||||||
couleur: bleu
|
couleur: bleu
|
||||||
donné: non
|
donné: non
|
||||||
- numero: 6
|
- numero: 6
|
||||||
image: static/css/img/cartes/E_j.webp
|
image: static/css/img/cartes/E_j.webp
|
||||||
contenu: E
|
contenu: E
|
||||||
|
lettre: E
|
||||||
couleur: violet
|
couleur: violet
|
||||||
donné: non
|
donné: oui
|
||||||
liste_carte_échangé:
|
liste_carte_échangé:
|
||||||
- numero: 7
|
- numero: 7
|
||||||
image: static/css/img/cartes/R_b.webp
|
image: static/css/img/cartes/R_b.webp
|
||||||
contenu: R
|
contenu: R
|
||||||
|
lettre: R
|
||||||
couleur: bleu
|
couleur: bleu
|
||||||
recupéré: non
|
recupéré: oui
|
||||||
- numero: 8
|
- numero: 8
|
||||||
image: static/css/img/cartes/L_j.webp
|
image: static/css/img/cartes/L_j.webp
|
||||||
contenu: L
|
contenu: L
|
||||||
|
lettre: L
|
||||||
couleur: violet
|
couleur: violet
|
||||||
recupéré: non
|
recupéré: non
|
||||||
- numero: 9
|
- numero: 9
|
||||||
image: static/css/img/cartes/I_j.webp
|
image: static/css/img/cartes/I_j.webp
|
||||||
contenu: I
|
contenu: I
|
||||||
|
lettre: I
|
||||||
couleur: violet
|
couleur: violet
|
||||||
recupéré: non
|
recupéré: non
|
||||||
- numero: 10
|
- numero: 10
|
||||||
image: static/css/img/cartes/U_b.webp
|
image: static/css/img/cartes/U_b.webp
|
||||||
contenu: U
|
contenu: U
|
||||||
|
lettre: U
|
||||||
couleur: bleu
|
couleur: bleu
|
||||||
recupéré: non
|
recupéré: oui
|
||||||
- numero: 11
|
- numero: 11
|
||||||
image: static/css/img/cartes/S_j.webp
|
image: static/css/img/cartes/S_j.webp
|
||||||
contenu: S
|
contenu: S
|
||||||
|
lettre: S
|
||||||
couleur: violet
|
couleur: violet
|
||||||
recupéré: non
|
recupéré: non
|
||||||
- numero: 12
|
- numero: 12
|
||||||
image: static/css/img/cartes/O_b.webp
|
image: static/css/img/cartes/O_b.webp
|
||||||
contenu: O
|
contenu: O
|
||||||
|
lettre: O
|
||||||
couleur: bleu
|
couleur: bleu
|
||||||
recupéré: non
|
recupéré: oui
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
<!-- Emplacements alignés en bas -->
|
<!-- Emplacements alignés en bas -->
|
||||||
<div id="emplacements"></div>
|
<div id="emplacements"></div>
|
||||||
|
|
||||||
|
<div id="mot-forme" class="mot-forme"></div>
|
||||||
|
|
||||||
<!-- Script pour charger et gérer les cartes -->
|
<!-- Script pour charger et gérer les cartes -->
|
||||||
<script src="static/js/script_final2_b.js"></script>
|
<script src="static/js/script_final2_b.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -78,4 +78,20 @@ html, body {
|
|||||||
transform: scale(1); /* Taille normale */
|
transform: scale(1); /* Taille normale */
|
||||||
opacity: 1; /* Visible */
|
opacity: 1; /* Visible */
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#mot-forme {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000; /* Noir */
|
||||||
|
text-align: center;
|
||||||
|
background-color: rgba(255, 255, 255, 0.5); /* Blanc semi-transparent */
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px; /* Coins arrondis */
|
||||||
|
position: absolute; /* Position absolue */
|
||||||
|
top: 10px; /* Distance depuis le haut de la zone */
|
||||||
|
left: 10%; /* Centrer horizontalement */
|
||||||
|
transform: translateX(-50%); /* Centrer réellement en prenant en compte la largeur */
|
||||||
|
z-index: 10; /* S'assurer que l'élément est par-dessus les autres */
|
||||||
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* Optionnel : ajout d'une ombre */
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ async function analyserModifications() {
|
|||||||
if (Array.isArray(data.liste_carte_defaut)) {
|
if (Array.isArray(data.liste_carte_defaut)) {
|
||||||
data.liste_carte_defaut.forEach((carte) => {
|
data.liste_carte_defaut.forEach((carte) => {
|
||||||
if (carte.donné === "non" && !document.querySelector(`[data-numero="${carte.numero}"]`)) {
|
if (carte.donné === "non" && !document.querySelector(`[data-numero="${carte.numero}"]`)) {
|
||||||
creerCarte(document.getElementById('zone_cartes'), carte.image, carte.numero);
|
creerCarte(document.getElementById('zone_cartes'), carte.image, carte.numero, carte.lettre);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ async function analyserModifications() {
|
|||||||
if (Array.isArray(data.liste_carte_échangé)) {
|
if (Array.isArray(data.liste_carte_échangé)) {
|
||||||
data.liste_carte_échangé.forEach((carte) => {
|
data.liste_carte_échangé.forEach((carte) => {
|
||||||
if (carte.recupéré === "oui" && !document.querySelector(`[data-numero="${carte.numero}"]`)) {
|
if (carte.recupéré === "oui" && !document.querySelector(`[data-numero="${carte.numero}"]`)) {
|
||||||
creerCarte(document.getElementById('zone_cartes'), carte.image, carte.numero);
|
creerCarte(document.getElementById('zone_cartes'), carte.image, carte.numero, carte.lettre);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -63,7 +63,7 @@ async function chargerCartes() {
|
|||||||
if (Array.isArray(data.liste_carte_defaut)) {
|
if (Array.isArray(data.liste_carte_defaut)) {
|
||||||
data.liste_carte_defaut.forEach((carte) => {
|
data.liste_carte_defaut.forEach((carte) => {
|
||||||
if (carte.donné === "non") {
|
if (carte.donné === "non") {
|
||||||
creerCarte(zoneCartes, carte.image, carte.numero);
|
creerCarte(zoneCartes, carte.image, carte.numero, carte.lettre);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ async function chargerCartes() {
|
|||||||
if (Array.isArray(data.liste_carte_échangé)) {
|
if (Array.isArray(data.liste_carte_échangé)) {
|
||||||
data.liste_carte_échangé.forEach((carte) => {
|
data.liste_carte_échangé.forEach((carte) => {
|
||||||
if (carte.recupéré === "oui") {
|
if (carte.recupéré === "oui") {
|
||||||
creerCarte(zoneCartes, carte.image, carte.numero);
|
creerCarte(zoneCartes, carte.image, carte.numero, carte.lettre);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ async function chargerCartes() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fonction pour créer une carte
|
// Fonction pour créer une carte
|
||||||
function creerCarte(zone, image, numero) {
|
function creerCarte(zone, image, numero, lettre) {
|
||||||
const carte = document.createElement('div');
|
const carte = document.createElement('div');
|
||||||
carte.className = 'carte';
|
carte.className = 'carte';
|
||||||
carte.style.backgroundImage = `url(${image})`;
|
carte.style.backgroundImage = `url(${image})`;
|
||||||
@@ -99,6 +99,11 @@ function creerCarte(zone, image, numero) {
|
|||||||
} else {
|
} else {
|
||||||
console.error("Le numéro de la carte est undefined.");
|
console.error("Le numéro de la carte est undefined.");
|
||||||
}
|
}
|
||||||
|
if (lettre !== undefined) {
|
||||||
|
carte.dataset.lettre = lettre; // Ajoute l'attribut data-lettre
|
||||||
|
} else {
|
||||||
|
console.error("La lettre de la carte est undefined.");
|
||||||
|
}
|
||||||
|
|
||||||
positionAleatoire(zone, carte); // Positionner aléatoirement dans la partie haute
|
positionAleatoire(zone, carte); // Positionner aléatoirement dans la partie haute
|
||||||
rendreDeplacable(carte); // Rendre la carte déplaçable
|
rendreDeplacable(carte); // Rendre la carte déplaçable
|
||||||
@@ -136,7 +141,7 @@ function rendreDeplacable(carte) {
|
|||||||
let hasMoved = false; // Indique si la carte a été déplacée
|
let hasMoved = false; // Indique si la carte a été déplacée
|
||||||
|
|
||||||
carte.addEventListener('pointerdown', (e) => {
|
carte.addEventListener('pointerdown', (e) => {
|
||||||
console.log("Pointer down : Début du déplacement.");
|
// console.log("Pointer down : Début du déplacement.");
|
||||||
offsetX = e.clientX - carte.getBoundingClientRect().left;
|
offsetX = e.clientX - carte.getBoundingClientRect().left;
|
||||||
offsetY = e.clientY - carte.getBoundingClientRect().top;
|
offsetY = e.clientY - carte.getBoundingClientRect().top;
|
||||||
|
|
||||||
@@ -144,7 +149,7 @@ function rendreDeplacable(carte) {
|
|||||||
|
|
||||||
// Ajout de la classe pour zoom in
|
// Ajout de la classe pour zoom in
|
||||||
carte.classList.add('zoom-in');
|
carte.classList.add('zoom-in');
|
||||||
console.log("Classe zoom-in ajoutée.");
|
// console.log("Classe zoom-in ajoutée.");
|
||||||
|
|
||||||
const pointerMove = (e) => {
|
const pointerMove = (e) => {
|
||||||
carte.style.left = `${e.clientX - offsetX}px`;
|
carte.style.left = `${e.clientX - offsetX}px`;
|
||||||
@@ -155,16 +160,16 @@ function rendreDeplacable(carte) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const pointerUp = () => {
|
const pointerUp = () => {
|
||||||
console.log("Pointer up : Fin du déplacement.");
|
// console.log("Pointer up : Fin du déplacement.");
|
||||||
carte.style.cursor = 'grab';
|
carte.style.cursor = 'grab';
|
||||||
// Retirer la classe pour zoom in
|
// Retirer la classe pour zoom in
|
||||||
carte.classList.remove('zoom-in');
|
carte.classList.remove('zoom-in');
|
||||||
console.log("Classe zoom-in retirée.");
|
// console.log("Classe zoom-in retirée.");
|
||||||
|
|
||||||
if (carte.dataset.aimantee === "true") {
|
if (carte.dataset.aimantee === "true") {
|
||||||
console.log("Carte reste aimantée");
|
// console.log("Carte reste aimantée");
|
||||||
} else {
|
} else {
|
||||||
console.log("Carte n'est plus aimantée");
|
// console.log("Carte n'est plus aimantée");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vérifier si la carte est dans la zone blanche
|
// Vérifier si la carte est dans la zone blanche
|
||||||
@@ -233,15 +238,20 @@ async function supprimerCarte(carte) {
|
|||||||
// Supprimer la carte du DOM
|
// Supprimer la carte du DOM
|
||||||
carte.remove();
|
carte.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Vérifier si une carte est au-dessus d'un rond
|
// Vérifier si une carte est au-dessus d'un rond
|
||||||
|
let lettresPlacees = Array(6).fill(null); // Tableau pour stocker les lettres placées
|
||||||
|
|
||||||
function verifierAimantation(carte) {
|
function verifierAimantation(carte) {
|
||||||
const emplacements = document.querySelectorAll('.emplacement');
|
const emplacements = document.querySelectorAll('.emplacement');
|
||||||
const aimantationDistance = 50; // Augmenter la distance pour plus de tolérance
|
const aimantationDistance = 50; // Augmenter la distance pour plus de tolérance
|
||||||
let aimantationEffectuee = false; // Initialisation de la variable
|
let aimantationEffectuee = false; // Initialisation de la variable
|
||||||
|
|
||||||
emplacements.forEach((rond) => {
|
// Si la carte est verrouillée, ignorer les nouvelles vérifications
|
||||||
|
if (carte.dataset.verrouAimantation === "true") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
emplacements.forEach((rond, index) => {
|
||||||
const rondRect = rond.getBoundingClientRect();
|
const rondRect = rond.getBoundingClientRect();
|
||||||
const carteRect = carte.getBoundingClientRect();
|
const carteRect = carte.getBoundingClientRect();
|
||||||
|
|
||||||
@@ -255,16 +265,72 @@ function verifierAimantation(carte) {
|
|||||||
const distanceX = Math.abs(carteCenterX - rondCenterX);
|
const distanceX = Math.abs(carteCenterX - rondCenterX);
|
||||||
const distanceY = Math.abs(carteCenterY - rondCenterY);
|
const distanceY = Math.abs(carteCenterY - rondCenterY);
|
||||||
|
|
||||||
if (distanceX <= aimantationDistance && distanceY <= aimantationDistance) {
|
if (
|
||||||
aimanterCarte(carte, rond);
|
distanceX <= aimantationDistance &&
|
||||||
|
distanceY <= aimantationDistance &&
|
||||||
|
!rond.dataset.lettre // Vérifie que l'emplacement n'est pas déjà occupé
|
||||||
|
) {
|
||||||
|
aimanterCarte(carte, rond,index);
|
||||||
carte.dataset.aimantee = "true"; // Marque la carte comme aimantée
|
carte.dataset.aimantee = "true"; // Marque la carte comme aimantée
|
||||||
|
rond.dataset.lettre = index; // Associe la lettre de la carte à l'emplacement
|
||||||
|
|
||||||
|
console.log(`Lettre ${carte.dataset.lettre} assignée à l'emplacement ${index}`);
|
||||||
aimantationEffectuee = true;
|
aimantationEffectuee = true;
|
||||||
carte.classList.remove('zoom-in'); // Désactive le zoom après aimantation
|
carte.classList.remove('zoom-in'); // Désactive le zoom après aimantation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (!aimantationEffectuee) {
|
if (!aimantationEffectuee) {
|
||||||
carte.dataset.aimantee = "false"; // La carte n'est plus aimantée
|
// Si la carte n'est plus aimantée, retirer la lettre uniquement si elle est actuellement associée à ce rond
|
||||||
|
emplacements.forEach((rond, index) => {
|
||||||
|
if (
|
||||||
|
rond.dataset.lettre === carte.dataset.lettre &&
|
||||||
|
carte.dataset.aimantee === "true" &&
|
||||||
|
rond.dataset.index == index // Vérifie que l'index correspond
|
||||||
|
) {
|
||||||
|
delete rond.dataset.lettre; // Supprime la lettre du rond
|
||||||
|
delete rond.dataset.index; // Supprime l'index associé
|
||||||
|
console.log(`Lettre ${carte.dataset.lettre} retirée de l'emplacement ${index}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
carte.dataset.aimantee = "false"; // Marquer la carte comme non aimantée
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Vérifier le mot après chaque changement
|
||||||
|
verifierMotCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérifie si le mot caché est formé
|
||||||
|
function verifierMotCache() {
|
||||||
|
const emplacements = document.querySelectorAll('.emplacement');
|
||||||
|
const motAttendu = "ROUTER"; // Mot à découvrir
|
||||||
|
let motForme = "";
|
||||||
|
|
||||||
|
emplacements.forEach((rond,index) => {
|
||||||
|
motForme += rond.dataset.lettre || "_"; // Ajouter la lettre ou "_" si l'emplacement est vide
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`Mot formé : ${motForme}`);
|
||||||
|
const zoneMotForme = document.getElementById('mot-forme');
|
||||||
|
if (zoneMotForme) {
|
||||||
|
zoneMotForme.textContent = `Mot formé : ${motForme}`;
|
||||||
|
}
|
||||||
|
if (motForme === motAttendu) {
|
||||||
|
console.log("Bravo ! Vous avez trouvé le mot caché !");
|
||||||
|
const zoneMotForme = document.getElementById('mot-forme');
|
||||||
|
if (zoneMotForme) {
|
||||||
|
zoneMotForme.textContent = '${motForme}';
|
||||||
|
} else if (zoneMotForme) {
|
||||||
|
zoneMotForme.style.color = "#333"; // Réinitialiser la couleur si le mot n'est pas trouvé
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Faire glisser et pivoter une carte relâchée en dehors des zones d'aimantation
|
// Faire glisser et pivoter une carte relâchée en dehors des zones d'aimantation
|
||||||
function lancerCarte(carte) {
|
function lancerCarte(carte) {
|
||||||
@@ -328,7 +394,10 @@ function ajusterRotation(carte) {
|
|||||||
}, 50);
|
}, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
function aimanterCarte(carte, rond) {
|
|
||||||
|
// Tableau global pour stocker les lettres associées à chaque rond
|
||||||
|
const rondLettres = Array(6).fill(null); // Initialise un tableau de 6 éléments avec `null`
|
||||||
|
function aimanterCarte(carte, rond, index) {
|
||||||
const rondRect = rond.getBoundingClientRect();
|
const rondRect = rond.getBoundingClientRect();
|
||||||
const zoneRect = document.getElementById('zone_cartes').getBoundingClientRect();
|
const zoneRect = document.getElementById('zone_cartes').getBoundingClientRect();
|
||||||
|
|
||||||
@@ -341,6 +410,16 @@ function aimanterCarte(carte, rond) {
|
|||||||
|
|
||||||
// Ajouter une classe pour indiquer l'aimantation (optionnel)
|
// Ajouter une classe pour indiquer l'aimantation (optionnel)
|
||||||
carte.classList.add('aimantee');
|
carte.classList.add('aimantee');
|
||||||
|
|
||||||
|
// Ajouter l'index au dataset
|
||||||
|
rond.dataset.index = index;
|
||||||
|
console.log(`Carte assignée à l'emplacement ${index}`);
|
||||||
|
|
||||||
|
// Log pour vérifier l'association
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// Charger les cartes au démarrage
|
// Charger les cartes au démarrage
|
||||||
document.addEventListener('DOMContentLoaded', chargerCartes);
|
document.addEventListener('DOMContentLoaded', chargerCartes);
|
||||||
|
|||||||
Reference in New Issue
Block a user