//const cardWrapper = document.getElementById(« card-wrapper »);
const selectedCards = document.getElementById(« selected-cards »);
const gameTitle = document.getElementById(« game-title »);
const notice = document.getElementById(« notice »);
let cards = cardWrapper.getElementsByClassName(« card »);
let cardsFaceUp = cardWrapper.getElementsByClassName(« card-front »);
// Instance de Game active
let currentGame = {};
let currentEtape = 0;
// Instances de Card active
let objArcanes = {};
// ???
let card = « »;
class Card {
constructor(name, number, description, meanings) {
this.name = name;
this.number = number;
this.description = description;
this.meanings = {
upright: meanings[0],
reversed: meanings[1]
};
this.image = « »;
this.correspondance = « »; // ex: Le Magicien = 1 & Roue de la fortune 10 = 1(10=1+0=1) & Le soleil 19 = 1 (19 = (1 + 9) = 10 = (1 + 0) = 1)
this.association = « »; //
this.isFaceUp = false;
this.isUpRight = true;
this.cssClass = « card card-back »;
this.cssId = « card » + number;
}
/* // Getter : binds an object property to a function that will be called when that property is looked up.
get named() {
//Utilisation: instance.named
return this.name;
}
Setter : binds an object property to a function to be called when there is an attempt to set that property.
set visible(visible) { //Utilisation: instance.visible = true
this.isVisible = visible;
}*/
// Method
returnTheCard() {
if (this.isFaceUp === true) {
//On retourne la carte
this.isFaceUp = false;
console.log(« on cache » + this.name);
this.cssClass = « card card-back »;
let nodea = document.getElementById(`${this.cssId}`);
//nodea.outerHTML = ``;
nodea.innerHTML = « »;
nodea.classList.remove(« card-front »);
nodea.classList.add(« card-back »);
} else {
//on montre la carte
this.isFaceUp = true;
console.log(« on montre » + this.name);
this.cssClass = « card card-front »;
let nodea = document.getElementById(`${this.cssId}`);
//nodea.outerHTML = `
${this.name}
`;
nodea.innerHTML = `
${this.name}
`;
nodea.classList.remove(« card-back »);
nodea.classList.add(« card-front »);
}
}
addCardToWrapper(isFaceUp) {
let node = document.createElement(« li »);
cardWrapper.appendChild(node);
//Si les cartes doivent etre affiché
if (isFaceUp) {
this.isFaceUp = true;
this.cssClass = « card »;
node.outerHTML = `
${this.name}
`;
} else {
this.isFaceUp = false;
this.cssClass = « card card-back »;
node.outerHTML = ``;
}
card = document.getElementById(this.cssId);
card.addEventListener(
« click »,
(event) => {
// START Event action once Time !!
console.log(`carte choisie ${this.name}`);
// On ajoute l’ID à la liste des cartes selected
currentGame.selectedCards.push(this.cssId);
//On retourne la carte
this.returnTheCard();
// On previent le gestionnaire d’evenement de Game que la carte est ajouter
// checkChoice();
currentGame.eventManager();
},
{ once: true }
);
}
}
class Game {
constructor(name, desc, nbrToChoose) {
this.name = name; // Nom de partie
this.desc = « »; // Description
this.date = « »; // Date du lancement de la partie
this.currentEtape = 0;
this.etapes = nbrToChoose; // nbr to choose
this.shuffle = []; // Liste des cartes apres mélange.
this.objShuffle = {}; // Liste des objets Card (d’apres la liste shuffle)
this.selectedCards = []; // Liste des cartes selectionnées.
this.notice = []; // messages guide des étapes.
// Ajouter la possibilité d’avoir des cartes à l’envers
}
startGame() {
// ### Reinitialisation du plateau de jeu
// Retirer les cartes du plateau de jeu -> wrapper
cardWrapper.innerHTML = « »;
// Retirer les cartes choisis -> selectedCards Wrapper
selectedCards.innerHTML = « »;
// Retirer le message en cours
notice.innerHTML = « »;
gameTitle.innerHTML = this.name;
///////////////////
//this.selectedCards = []; // choix
//this.shuffle = {}; //tirage
let nDate = new Date(); // recuperer la date
this.date = nDate.toTimeString(); // ajout de la date à la partie
// ### On mélange les cartes -> shuffle[i]
for (let i = 0; this.shuffle.length < 22; ) {
let num = Math.floor(Math.random() * 22); // random de 0 et 21
if (!this.shuffle.includes(num)) {
this.shuffle.push(num);
i++;
console.log(this.shuffle);
} else {
i--;
}
}
// On creer les instances de Card et on les ajoute à objShuffle[]
for (let i = 0; i < this.shuffle.length; i++) {
let n = this.shuffle[i];
this.objShuffle[i] = new Card(arcanes[n][0], i, arcanes[n][1], [
arcanes[n][2],
arcanes[n][3]
]);
// On ajoute la carte au Wrapper
this.objShuffle[i].addCardToWrapper(); // (1) pour retourner les cartes
}
// afficher notice
//
}
noticeManager() {}
eventManager() { // => Etape Manager
console.log(« check Choice ! Etape » + this.currentEtape );
if (this.selectedCards.length == this.etapes[this.currentEtape]) {
console.log(« check Choice OK! ->c’est bon passe a la suite »);
this.removeCardsToWrapper();
this.selectedCards = [];
this.currentEtape ++;
if (this.etapes[this.currentEtape]>0){
notice.innerHTML = « Vous devez choisir » + this.etapes[this.currentEtape] + » cartes »;
}else {
notice.innerHTML = « Vous avez fini on passe a la suite ma gueule »;
}
} else {
notice.innerHTML = « Vous devez choisir » +(this.etapes[this.currentEtape] – this.selectedCards.length) + » cartes »;
console.log(« ETAPE STILL NOT COMPLETED! »);
}
}
removeCardsToWrapper() {
// retirer les cartes selectionné du wrapper et les mettres dans
console.log(« Il y a » + cardsFaceUp.length + » cartes à déplacer »);
for (const i = 0; i < cardsFaceUp.length; ) {
//On retire la carte du wrapper
let oldChild = cardWrapper.removeChild(cardsFaceUp[i]); //
//et on la place dans le deuxieme wrapper
selectedCards.appendChild(oldChild);
}
}
ctrlAnimations() {
// ICI on controle les animations mystqiues
}
exportGame() {
// Sauvegarder les infos de la partie
}
}
const arcanes = [
// [number] name, description, upright meaning, reversed meaning]
[
"Le fou / Le mat",
"description absente",
"Nouveau départ Insouciance »,
« Etre mal preparé Agir comme un gamin »
],
[
« Le magicien / Le bateleur »,
« description absente »,
« Talent Compétence Confiance en soi »,
« Faire fausse route Procrastiner »
],
[
« La grande prêtresse / La papesse »,
« description absente »,
« Intuition Spiritualité Monde intérieur »,
« Dissimulation Mauvaise interpretation »
],
[« L’impératrice », « description absente », « », « »],
[« L’empereur », « description absente », « », « »],
[« Le hiérophante / Le pape », « description absente », « », « »],
[« Les Amoureux / L’amoureux », « description absente », « », « »],
[« Le chariot », « description absente », « », « »],
[« La force », « description absente », « », « »],
[« L’ermite », « description absente », « », « »],
[« La roue de la fortune », « description absente », « », « »],
[« La justice », « description absente », « », « »],
[« Le pendu », « description absente », « », « »],
[« La mort / L’arcane sans nom », « description absente », « », « »],
[« La tempérance », « description absente », « », « »],
[« Le diable », « description absente », « », « »],
[« La tour / La maison de dieu », « description absente », « », « »],
[« L’étoile », « description absente », « », « »],
[« La lune », « description absente »],
[« Le soleil », « description absente », « », « »],
[« Le jugement », « description absente », « », « »],
[« Le monde », « description absente », « », » « ]
];
const numerologie = {
1: « Potentiel, Commencement, Etincelle, Inspiration »,
2: « Union, Relation, Dualité, Dilemme, Partenariat, Interaction, Adaptation »,
3: « Créativité, Mouvement, Croissance, Planification, Fécondité, Célébration »
};
/* Creation d’une instance de Card
let arcan1 = new Card(arcanes[0][0],0,arcanes[0][1],([arcanes[0][2],arcanes[0][3]]));
*/
//Tirage Auto
function newTirageAuto() {
// On reinitialise la liste des anciennes cartes tirées
objArcanes = {};
tirage = {
date: « aujourdhui »,
ordre: []
};
// On vide le wrapper
cardWrapper.innerHTML = « »;
//On selectionne 3 cartes
for (let i = 0; tirage.ordre.length < 3; ) {
//random x3
let num = Math.floor(Math.random() * 22); // random de 0 et 21
if (!tirage.ordre.includes(num)) {
tirage.ordre.push(num);
i++;
} else {
i--;
}
}
for (let cn = 0; cn < tirage.ordre.length; cn++) {
let i = tirage.ordre[cn];
objArcanes[i] = new Card(arcanes[i][0], i, arcanes[i][1], [
arcanes[i][2],
arcanes[i][3]
]);
objArcanes[i].addCardToWrapper(1);
}
}
//Afficher toutes les cartes
function allCard() {
//On reinitialise les cartes
objArcanes = {};
// On vide le wrapper
cardWrapper.innerHTML = "";
// creer les instances de chaques carte et les ajouter au wrapper (DOM)
for (let i = 0; i < arcanes.length; i++) {
objArcanes[i] = new Card(arcanes[i][0], i, arcanes[i][1], [
arcanes[i][2],
arcanes[i][3]
]);
objArcanes[i].addCardToWrapper(true); //true = cartes visibles
}
}
function newTirage() {
// --- Réinitialisation des variables
// Retirer les cartes du plateau de jeu -> wrapper
cardWrapper.innerHTML = « »;
// Retirer les cartes choisis -> selectedCards Wrapper
selectedCards.innerHTML = « »;
// Supprimer les anciens choix
choix = [];
// Supprimer la liste de carte mélanger
tirage = {};
// — Définition des variables du tirage
// Stocker l’ordre des cartes melangées + date du mélange
let date = new Date(); // date
tirage = {
date: date.toTimeString(), // ajout de la date
ordre: []
};
// Definir le nombre de carte à tirer
nbrToChoose = 5;
// On mélange les cartes -> tirage.ordre[i]
for (let i = 0; tirage.ordre.length < 22; ) {
let num = Math.floor(Math.random() * 22); // random de 0 et 21
if (!tirage.ordre.includes(num)) {
tirage.ordre.push(num);
i++;
} else {
i--;
}
}
// On ajoute les cartes mélangées au Wrapper -> objArcanes[i]
for (let cn = 0; cn < tirage.ordre.length; cn++) {
let i = tirage.ordre[cn];
objArcanes[i] = new Card(arcanes[i][0], i, arcanes[i][1], [
arcanes[i][2],
arcanes[i][3]
]);
}
//
}
function createGame() {
currentGame = new Game("Tirage Du Diable", "Une partie endiablée", [5, 2,4]);
currentGame.startGame();
}