Shai-la Ouvrière en Chef de la Grande Tasse Bleue
Nombre de messages : 6018
Age : 46
Localisation : Montpellier
Date d'inscription : 17/04/2006
| Sujet: Pendu Mar 30 Avr 2013 - 21:22 | |
| Bonjour bonjour j'aurais un petit challenge à vous proposer ! Qui serait capable de pondre un petit module de jeu de Pendu? J'ai tenté mais à part faire une liste de mots découpés un par un, lettre par lettre, ce qui va être hyper fastidieux... je vois pas comment Merci d'avance pour vos suggestions ! |
|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Pendu Mer 1 Mai 2013 - 9:53 | |
| Aucun besoin de découper les mots "un par un" ou "lettre par lettre". Tout d'abord rappelle-toi qu'on a une belle base de données avec LibreMotus, on peut donc la réutiliser sans soucis. Enfin, pour scruter les lettres du mot et les afficher au fur et à mesure, il y a tout un tas de fonctions sur les chaînes de caractères qui te seront d'une grande aide (en attendant la sortie de mon module pour utiliser les expressions régulières sous AGS, info exclusive et tellement attendue !). Pour t'avancer un peu, je te propose le code suivant (non testé et qui ne fait pas tout, mais l'idée est là) : - Code:
-
// AFFICHAGE représentera les tirets et les lettres trouvées String MotATrouver, Affichage;
// La fonction pour initialiser un nouveau mot function NouveauMot(String mot) { // Si le mot est vide, on arrête là if (String.IsNullOrEmpty(mot)) return; // Si le mot contient un '_', on arrête là if (mot.IndexOf("_") > -1) return; // MOT est le nouveau mot à trouver MotATrouver = mot; // On va mettre des tirets séparés par un espace // pour chaque lettre de AFFICHAGE Affichage = ""; int i = 0; while (i < mot.Length) { Affichage = Affichage.AppendChar(mot.Chars[i]); Affichage = Affichage.AppendChar(' '); i++; } // On a ajouté un espace de trop à la fin : on tronque Affichage = Affichage.Truncate(Affichage.Length-1); /* Ici d'autres commandes éventuelles (comme la gestion des GUI par exemple) */ }
// Cette fonction est à appeler à chaque tentative // avec le texte entré par l'utilisateur (une lettre ou un mot entier) bool Tentative(String texte) { // Si on passe du texte vide, on arrête là if (String.IsNullOrEmpty(texte)) return false; // Si la longueur vaut 1, on a affaire à une simple lettre if (texte.Length == 1) { // Si la lettre ne se trouve pas dans le mot, FALSE if (MotATrouver.IndexOf(texte) == -1) return false; // Sinon, on va afficher toutes les lettres correspondantes int n = 0; while (n < MotATrouver.Length) { // Si la n-ième lettre de MotATrouver correspond, on l'affiche if (MotATrouver.Chars[n] == texte.Chars[0]) Affichage = Affichage.ReplaceCharAt(n*2, texte.Chars[0]); n++; } // L'utilisateur a trouvé une lettre : TRUE return true; } // Sinon, si + d'une lettre, on a un mot else { // Si ça ne correspond pas, faux if (texte != MotATrouver) return false; // Sinon, on affiche chaque lettre int n = 0; while (n < MotATrouver.Length) { Affichage = Affichage.ReplaceCharAt(n*2, MotATrouver.Chars[n]); n++; } // Et on retourne TRUE return true; } } Maintenant, il ne te reste plus qu'à gérer le nombre de tentatives, l'affichage du pendu, etc. Tu pourras par exemple utiliser Tentative dans un onActivate concernant une zone de saisie nommée txtPendu : - Code:
-
// Si l'utilisateur n'a pas trouvé if (!Tentative(txtPendu.Text)) { /* - On affiche un trait en plus au pendu - On incrémente une variable correspondant au nombre de tentatives - Si le nombre de tentatives est épuisé, GAME OVER (on peut éventuellement relancer un nouveau mot avec NouveauMot) */ } // S'il a trouvé else { // On affiche la progression dans une zone de texte nommée lblPendu par exemple lblPendu.Text = Affichage; // S'il ne reste aucun tirets, l'utilisateur a gagné if (Affichage.IndexOf("_") == -1) /* VICTOIRE ! */ } Bien sûr tout ça reste à tester et implémenter, mais je pense qu'on est sur la bonne voie _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
Shai-la Ouvrière en Chef de la Grande Tasse Bleue
Nombre de messages : 6018
Age : 46
Localisation : Montpellier
Date d'inscription : 17/04/2006
| Sujet: Re: Pendu Mer 1 Mai 2013 - 16:41 | |
| Merci beaucoup, je vais tester ça |
|
Shai-la Ouvrière en Chef de la Grande Tasse Bleue
Nombre de messages : 6018
Age : 46
Localisation : Montpellier
Date d'inscription : 17/04/2006
| Sujet: Re: Pendu Mer 1 Mai 2013 - 17:35 | |
| C'est trop complexe pour moi |
|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Pendu Mer 1 Mai 2013 - 18:49 | |
| Tu peux toujours poser des questions sur les étapes qui te bloquent le plus ! J'avoue ne pas avoir testé le code donc il peut fort bien présenter de sérieux problèmes, mea culpa. Mais du reste, si la partie avec les fonctions est bonne, l'implémentation ne devrait pas poser trop de soucis.
Je regarde ça plus tard sous AGS et je te fournis quelque chose de plus propre. _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
Shai-la Ouvrière en Chef de la Grande Tasse Bleue
Nombre de messages : 6018
Age : 46
Localisation : Montpellier
Date d'inscription : 17/04/2006
| Sujet: Re: Pendu Mer 1 Mai 2013 - 21:05 | |
| Non mais je me suis débrouillée finalement merci |
|