Merge pull request 'front : utiliser l'api dans le pendu' (#21) from front-penduapi into front

Reviewed-on: #21
pull/23/head
Gwenael PLANCHON 1 year ago
commit f8e5d1f094

@ -1 +1,3 @@
export const NOM_APP="ScienceQuest" export const NOM_APP="ScienceQuest"
export const REST_API="https://sae-java.alix-jdlm.fr/api/v1"

@ -1,5 +1,6 @@
<script> <script>
import PenduDessin from './PenduDessin.vue' import PenduDessin from './PenduDessin.vue'
import { REST_API } from "../../../assets/const";
export default{ export default{
data() { data() {
@ -11,64 +12,92 @@ export default{
premierePartie: true, //ne pas afficher "Perdu" pour ceux qui viennent de rejoindre premierePartie: true, //ne pas afficher "Perdu" pour ceux qui viennent de rejoindre
lettresDejaDevine: "", lettresDejaDevine: "",
//local uniquement, le client ne saura pas le mot //a recuperer a partir de l'api (prendre nom et prenom d'un scientifique nous meme)
debug_motADeviner: "einstein", motADeviner: "einstein",
debug_nbLettresADeviner: 8, description: "", //s'affiche en dessous du resultat a la fin
debug_lettresDejaDevine: "", //tout en minuscule api_pagesMaximum: 0, //impossible de connaitre le nombre de page a l'avance
//bloquer l'input si l'utilisateur met une lettre deja devinée
regexExceptions: [ //caracteres qu'on ne fera pas deviner au joueur
/\W/, //caracteres blanc
/[^a-z]/, //non alphabetique minuscule
],
lettresANePasFaireDevinerAuJoueur:"", //meme utilité que lettresDejaDevine mais n'est pas visible au joueur
}; };
}, },
methods: { methods: {
creerPartie: function () { creerPartie: function () {
this.debug_creerPartie();
this.premierePartie = false;
this.partieTerminee = false;
//l'api (PATCH demarrerPartie) retournera le nombre de lettres a deviner ainsi que le nombre de vies
this.nbLettresADeviner = this.debug_nbLettresADeviner; //TODO utiliser l'api
this.viesRestantes = 10; // TODO utiliser l'api
this.progression = "_".repeat(this.nbLettresADeviner);
this.lettresDejaDevine = ""; this.lettresDejaDevine = "";
//appeler l'API
fetch(`${REST_API}/scientifiques?page=`+this.intAleatoire(this.api_pagesMaximum)).then(response=>{
response.json().then(json=>{
//prendre le scientifique de la requete
const arrayScientifique=json._embedded
const scientifiqueADeviner=arrayScientifique[this.intAleatoire(arrayScientifique.length)]
//prendre le mot a deviner a partir du nom du scientifique
this.motADeviner = scientifiqueADeviner.nom.toLowerCase() + " " + scientifiqueADeviner.prenom.toLowerCase()
this.nbLettresADeviner = this.motADeviner.length
this.description = scientifiqueADeviner.descriptif
this.viesRestantes = 10; // TODO utiliser l'api
//verifier que le mot a deviner ne contient pas des lettres exemptées
this.lettresDejaDevine = "";
this.lettresANePasFaireDevinerAuJoueur="";
this.motADeviner.split("").forEach(lettre=>
this.regexExceptions.forEach(regex=>regex.test(lettre) ? this.lettresANePasFaireDevinerAuJoueur+=lettre /* faire jouer la lettre a la place de l'utilisateur */ : null)
)
//rafraichir la progression pour enlever les lettres a ne pas faire deviner
this.progression = this.afficherProgression()
//demarrer le jeu
this.afficherLeJeu()
})
})
},
afficherLeJeu(){
this.partieTerminee = false;
this.premierePartie = false;
}, },
deviner: function (event) { deviner: function (event) {
//TODO revoir ce truc
//prendre la lettre depuis l'event //prendre la lettre depuis l'event
const lettreDevinee = event.data.toLowerCase(); const lettreDevinee = event.data.toLowerCase();
//vider l'input //vider l'input
event.target.value = ""; event.target.value = "";
//envoyer lettreDevinee a l'api //ajouter la lettre dans la liste des lettres devinées
if (!this.lettresDejaDevine.includes(lettreDevinee)) {
this.lettresDejaDevine += lettreDevinee;
}
//comparer la progression
const oldprogression = this.progression; const oldprogression = this.progression;
this.progression = this.debug_letreDevinee(lettreDevinee); this.progression = this.afficherProgression();
// /!\ code temporaire, local uniquement : TODO remplacer avec l'api
if (oldprogression == this.progression) { if (oldprogression == this.progression) {
//si la lettre est incorrecte //si on n'a pas progressé = lettre incorrecte
this.viesRestantes--; //l'api devrait aussi retourner le nombre de vies restantes this.viesRestantes--; //l'api devrait aussi retourner le nombre de vies restantes
if(this.viesRestantes<0){ if(this.viesRestantes<0){
this.partieTerminee = true this.partieTerminee = true
this.progression = this.debug_letreDevinee(lettreDevinee); this.progression = this.afficherProgression();
} }
} } else if (!this.progression.includes("_")) {
//fin code temporaire //plus de lettres a deviner
this.partieTerminee = true;
if (!this.progression.includes("_")) {
//plus de lettres a deviner
this.partieTerminee = true;
}
//ajouter la lettre dans la liste des lettres devinées
if (!this.lettresDejaDevine.includes(lettreDevinee)) {
this.lettresDejaDevine += lettreDevinee;
} }
}, },
debug_letreDevinee: function (lettre) { afficherProgression: function () {
if (this.viesRestantes < 0) { if (this.viesRestantes < 0) {
return this.debug_motADeviner; //plus de vies = fin de la partie, l'api retourne le mot qu'on devait trouver return this.motADeviner; //plus de vies = fin de la partie, on retourne le mot qu'on devait trouver
} }
let progression = ""; let progression = "";
this.debug_lettresDejaDevine += lettre; const lettresAAfficher=this.lettresDejaDevine + this.lettresANePasFaireDevinerAuJoueur;
this.debug_motADeviner.split("").forEach(w => this.debug_lettresDejaDevine.includes(w) ? progression += w : progression += "_"); this.motADeviner.split("").forEach(w =>lettresAAfficher.includes(w) ? progression += w : progression += "_");
return progression; return progression;
}, },
debug_creerPartie: function () { intAleatoire: function(nbPages){
this.debug_lettresDejaDevine = ""; return Math.floor(Math.random() * nbPages)
} }
}, },
components: { PenduDessin } components: { PenduDessin }
@ -91,6 +120,7 @@ export default{
<p>Le mot était : </p> <p>Le mot était : </p>
<!-- l'api devrait retourner le mot entier quand la vie est a 0 --> <!-- l'api devrait retourner le mot entier quand la vie est a 0 -->
<h2 style="font-family: monospace">{{ progression }}</h2> <h2 style="font-family: monospace">{{ progression }}</h2>
<p>{{ description }}</p>
</div> </div>
<button class="btn btn-primary" v-on:click="creerPartie">Créer une partie</button> <button class="btn btn-primary" v-on:click="creerPartie">Créer une partie</button>
</div> </div>

Loading…
Cancel
Save