Jeu du Pendu, aide pour nombre de caractère


#1

Bonjour à tous,

J’aimerai créer un mini jeu du Pendu, et pour cela j’ai besoin de votre aide.

J’ai trouvé la solution pour avoir une liste de mots dans un fichier json et ensuite, au lancement de ma scène, j’ai un mot au hasard de cette liste qui s’affiche.

Seulement, ce que j’aimerai, c’est qu’à la place du mot, juste des “tirets” (underscore) s’affiche, mais en ayant pris en compte le nombre de caractère du mot sorti aléatoirement. Exemple, si le mot est SAPIN, ça affichera “_ _ _ _ _”.

J’ai mis en place sur ma scène toutes les lettres de l’alphabet indépendantes, et ce qu’il faudrait, c’est que quand on clique sur l’une des lettres, et qu’elle est dans le mot sorti au hasard, elle s’affiche à la bonne place à la place d’un “_”. Et si elle n’y est pas, à ce moment là je changerai l’animation de la potence pour chaque erreur.

J’espère avoir été assez clair dans ma demande, si l’un de vous peut m’aider, ça serait super ! Merci d’avance !


#2

Bonjour,

Je veux bien t’aider mais il faudrait avant toute chose que :

  • tu mettes les événements que tu as déjà créés
  • tu indiques ton niveau, notamment celui que tu as de GDevelop
  • que tu regardes aussi les instructions qui opèrent sur les variables “chaines de caractères”

(notamment les fonctions qui :

  1. détermine la longueur d’une chaine (len() je crois)
  2. examine le caractère présent à la position i d’une chaine de caractères )

#3

Bonjour, merci pour ton retour.

Voici où j’en suis actuellement :

  • Première scène, je choisi un thème.
  • Thème choisi, on arrive sur la page du jeu, où un mot a été sélectionné aléatoirement dans une liste json (une liste pour chaque thème, avec pour le moment 20 mots dans chaque liste).
  • J’ai réussi à obtenir le nombre de caractère de ce mot, et je l’affiche pour le moment sur l’écran.
  • J’essaie de réutiliser ce nombre pour pouvoir créer des “underscore”, je n’en créer qu’un seul pour le moment.
  • J’ai ajouté 26 “sprites” textes, pour les 26 lettres de l’alphabet afin qu’on puisse cliquer indépendamment sur chacune d’elles.
  • J’ai toutes les animations pour la potence, et je pense pouvoir les lier avec la variable “erreur”.

Ce que j’aimerai pouvoir faire :slight_smile:

  • Cacher le mot choisi pour que le joueur ne le voit pas.
  • Afficher autant de “underscore” qu’il y aura de caractère dans ce mot.
  • Que le joueur puisse cliquer sur les lettres affichées en haut de l’écran pour essayer de trouver le mot.
  • Si une lettre est bonne, elle s’affichera à sa place (en remplaçant le “underscore”).
  • Si c’est faux, alors une erreur et je change l’animation de la “potence”.

Exemple :

Si le mot choisi est SAPIN, alors le jeu affichera " _ _ _ _ _ ".
Si le joueur clique sur A, alors le jeu affichera " _ A _ _ _ "
Si le joueur clique sur B, alors le jeu affichera " _ A _ _ _ " + 1 erreur et l’animation de la potence changera.

Voici actuellement mes évènements, ainsi que ma scène :


Quant à mon niveau sur Gdevelop, et bien je dirais débutant, mais je regarde beaucoup de tuto, je fais des “mini-jeux” différents afin de comprendre un peu toutes les mécaniques et possibilités du logiciel. Il est fort probable que si tu me donne des explications, je sois amené à te faire “répéter” ou te demander une approche différente si je ne comprends pas ^^

Merci à toi pour ton aide.


#4

Tu sembles déjà connaitre StrLength(), donc quel est le problème, précisément ?
Tu utilises StrLength pour connaitre le nombre de lettres, puis tu fais un cycle (repeat) de création de tirets pour chaque lettre, en assignant à chaque tiret une variable contenant la lettre réponse, et ensuite pour chaque tiret (for each), tu vérifies si la lettre cliquée correspond.


#5

Merci Gruk pour ta réponse.

Le problème est que je ne comprends pas comment travailler avec le résultat de StrLength().

Je vais regarder ce que tu me dis, mais j’ai du mal à saisir comment c’est possible de créer un “tiret” lié à une lettre du mot généré, car moi même je ne suis pas sensé le connaitre. Comment faire pour demander au logiciel de comparer les lettres du mot avec les lettres qui pourraient être choisies par le joueur ?
Et, comment assigner une variable à chaque tiret contenant la réponse si je ne connais pas le mot ?

Mes questions peuvent paraitre bête, mais comme je l’ai dit, je suis vraiment débutant. Et je pioche des exemples un peu partout pour les refaire de mon côté. Peut-être que ce n’est pas la bonne méthode pour apprendre, mais je n’ai pas trouvé mieux :confused:


#6

Il faut que tu fasses une boucle qui se répète autant de fois que le mot contient de lettres (StrLength).
Et dans cette boucle, à chaque fois, tu crées un tiret et tu lui assignes sa bonne réponse (la lettre) en variable.
Pour ça, il te faudra utiliser d’autres outils de manipulation de texte, afin de récupérer chaque lettre une par une, selon sa position dans le mot, avec StrAt() ou SubStr(). http://wiki.compilgames.net/doku.php/gdevelop5/all-features/expressions-reference#text_manipulation

Ensuite, quand le joueur clique sur une lettre, tu fais une boucle qui se répète autant de fois qu’il y a de tirets dans la scène (Count(Tiret)), et dans cette boucle, à chaque fois, tu compares la lettre cliquée et la lettre conservée dans la variable de chaque tiret.

Tu n’as pas besoin de connaitre le mot que doit traiter le programme, car quand tu écris ta logique, tu utilises des variables (dont la valeur va varier en fonction des mots).

J’espère que c’est un peu plus clair.


#7

Merci Gruk, c’est un peu plus clair en effet. Je n’ai encore jamais utilisé de “boucles” et de “repeat” jusqu’à maintenant, donc je vais chercher des tutos pour voir comment s’en servir correctement.

Je reviendrai ici si vraiment je suis bloqué.


#9

Bonjour, je reviens vers vous pour avoir votre aide.

Grâce à Entropy sur le Discord de Gdevelop, j’ai pu créer le nombre de underscore en fonction du nombre de lettre du mot tiré au hasard.

Mais mon souci maintenant, c’est que je ne parviens pas à choisir une lettre (disponible en objet sur l’écran, voir le screen plus haut) et la comparer au mot.

En fait, j’aimerai que, en cliquant sur une lettre, soit elle existe dans le mot et à ce moment là elle s’affiche à sa place, soit elle n’existe pas et du coup je change l’animation du pendu.

Exemple, si le mot tiré au hasard est SAPIN, alors j’aurai à l’écran : " _ _ _ _ _ "

Si le joueur clique sur A, alors ça affiche : " _ A _ _ _ "
Si le joueur clique sur B, alors ça affiche : " _ A _ _ _ " et on change l’animation.
Si le joueur clique sur N, alors ça affiche : " _ A _ _ N "
Etc.

Auriez-vous une idée de comment faire s’il vous plait ?


#10

Je t’ai donné mon idée dans mon précédent message, mais il y a sans doute d’autres moyens.


#11

Oui Gruk, je n’ai pas oublié ta réponse, mais je t’avoue que je ne comprends pas comment traiter avec StrAt ou SubStr, et affecter ça à une variable.

Est-ce qu’il n’existerait pas un exemple dans Gdevelop ?


#12


d’abord, tu mets le texte (string), et ensuite la position de la lettre (number).

Ici par exemple, je récupère la lettre dont la position est stockée dans la variable, je l’affiche dans l’objet texte, et j’augmente la variable de 1 pour afficher la suivante.


#13

Alors, si j’ai bien compris, sur mon screen qui suis, j’utilise StrAt pour trouver la lettre à la position X où je défini la variable “lettre”, et ensuite, je modifie un texte avec cette variable “lettre” pour vérifier si ça fonctionne. Mais ça ne fonctionne pas. Mon texte se transforme en 0.

Et de plus, j’ai un message d’erreur quand j’utilise StrAt, voici les screen :

Je suis sur que je rate une étape, et j’ai du mal à comprendre l’utilisation de StrAt et comment stocker une lettre dans une variable (enfin, j’imagine que A sera = à 0, B = 1… Z = 25), mais comment dire à la variable que telle lettre = tel chiffre.


#14

S’il te dit que l’expression StrAt n’existe pas, c’est qu’il y a un problème. :wink:
Tu utilises une action de variable de nombre pour une expression de ** variable de texte**.
Il va te falloir faire très attention à ça.
Texte en jaune : nombres. Texte en vert : texte.

Donc, tu attribues à chaque tiret un chiffre croissant… donc ton premier tiret aura le chiffre 0. Tu utilises ce 0 pour récupérer la première lettre de SAPIN, S est en position 0, et tu stockes S dans une variable de ton tiret. Et tu fais pareil pour tous tes tirets.
Ensuite, quand le joueur appuie sur une lettre, tu compares la lettre tapée à la lettre de chaque tiret, et tu agis en conséquence.


#15

:sweat_smile: Okay, l’erreur de débutant. Merci pour ton aide.

J’ai eu l’aide de Entropy, encore une fois, sur Discord, et j’arrive à comprendre un peu le principe :slight_smile:

Il faut que je peaufine tout ça et je vous ferai passer le lien :smiley:

Encore merci à toi !