Page 1 sur 1
Boucle dans une console
Publié : jeu. 17/août/2006 13:22
par Joubarbe
Bonjour.
Bloqué par le Input() qui met en pause le programme, je ne parviens pas à faire un simple programme qui pose 2 questions mais que dans les deux réponses données, un test continue soit fait pour détecter la présence de mots clés. Exemple : si je tape "aide" en réponse à l'une des questions, un message s'affiche montrant l'aide... Et la question est de nouveau posée ensuite.
Uhuh, ça paraît con, ça doit encore être une erreur idiote car j'arrive à faire ce que je veux en fenêtré ou en full screen mais le code étant trop long, je préfère la console (je ne veux faire QUE du textuel).
Publié : jeu. 17/août/2006 15:17
par Dorian
D'àprès ce que j'ai compris voici un code que j'ai fait ^^ :
Code : Tout sélectionner
OpenConsole()
Repeat
; Ré-affiche la question si la réponse est mauvaise
PrintN("Quel est langage ce langage ? (reponse : PureBasic)")
Input$ = Input()
If Input$ = "Aide"
PrintN("Vous avez demandez de l'aide ...")
EndIf
Until Input$ = "PureBasic" Or Input$ = "Exit" ; Le exit pour quitter au cas ou
If Input$ = "PureBasic"
PrintN("Bravo vous avez trouvez la bonne reponse")
EndIf
Print("Appuyez sur 'Entree' pour quitter")
Input()
Il ne pose qu'une question mais tu peux faire la même chose pour les autres questions (avant la ligne 'Print("Appuyez sur 'Entree' pour quitter")')
J'espère que c'est ce que tu cherche

Publié : jeu. 17/août/2006 18:04
par Joubarbe
Bah ça marche pas

Mais c'est à peu près le code que j'avais fait
La question revient à chaque fois
Publié : jeu. 17/août/2006 18:09
par Dorian
Joubarbe a écrit :Bah ça marche pas

Mais c'est à peu près le code que j'avais fait
La question revient à chaque fois
Bah oui c'est pas ce que tu à demandé ici ? :
Joubarbe a écrit :Et la question est de nouveau posée ensuite.
A la place de la ligne ci-dessus tu mets tes lignes de codes correspondants à l'aide :
Si c'est pas sa bah j'ai pas compris alors

Publié : ven. 18/août/2006 12:51
par Joubarbe
Oui, pardon je me suis mal exprimé. La question revient toujours MAIS le mot "aide" n'est pas pris en compte.
Publié : ven. 18/août/2006 13:19
par Cls
Ca peut venir de là.
Code : Tout sélectionner
If LCase(Input$) = "aide"
PrintN("Vous avez demandé de l'aide...")
endif
Publié : ven. 18/août/2006 14:11
par Joubarbe
En effet, ça venait de la casse...
Par contre, mon programme ayant pour but un nombre conséquent de questions, n'existerait-il pas un moyen de faire une vérification globale de tout un tas de commande pouvant être executée à tout moment (aide, statistiques, ..) au lieu de faire cette vérification à chaque question. Au pire, je fais une procédure que j'intègre à chaque question mais s'il existe une autre solution, je suis preneur. Merci.
Publié : ven. 18/août/2006 15:54
par Flype
si çà peut t'aider...
Code : Tout sélectionner
Procedure Test(saisie.s)
Select LCase(saisie)
Case "aide", "help", "list"
;...
Case "fin", "exit", "end", "quit"
;...
EndSelect
EndProcedure
Publié : sam. 19/août/2006 2:38
par Dorian
Joubarbe a écrit :En effet, ça venait de la casse...
Par contre, mon programme ayant pour but un nombre conséquent de questions, n'existerait-il pas un moyen de faire une vérification globale de tout un tas de commande pouvant être executée à tout moment (aide, statistiques, ..) au lieu de faire cette vérification à chaque question. Au pire, je fais une procédure que j'intègre à chaque question mais s'il existe une autre solution, je suis preneur. Merci.
Et voici tout droit de mon cerveau (honte sur moi je suis plus sûr de l'orthographe xD) :
Code : Tout sélectionner
OpenConsole()
Aide.l
BonneReponse.l
Structure qr
Question.s
Reponse.s
EndStructure
;Créer une liste vide pour toute les questions
NewList Liste.qr()
;Ajoute un élément (question et réponse)
AddElement(Liste())
;Défini cet élément
Liste()\Question = "Quel est langage ce langage ? (reponse : PureBasic)"
Liste()\Reponse = "purebasic"
;Ajoute un autre élément
AddElement(Liste())
;Défini cet autre élément
Liste()\Question = "Es-ce que je vais m'en sortir pour le SOC ? (reponse : peut-etre) lol"
Liste()\Reponse = "peut-etre"
;Faut répéter l'opération à chaque question
ForEach Liste()
Repeat
; Ré-affiche la question si la réponse est mauvaise
PrintN(Liste()\Question)
Input.s = Input()
If LCase(Input) = "aide"
PrintN("Vous avez demandez de l'aide ...")
PrintN("") ;Saute une ligne
Aide = Aide + 1
EndIf
Until LCase(Input) <> "aide"
If LCase(Input) = Liste()\Reponse
BonneReponse = BonneReponse + 1
PrintN("Bravo vous avez trouvez la bonne reponse")
Else
PrintN("Perdu")
EndIf
PrintN("") ;Saute une ligne
Next
PrintN("Score :")
PrintN("Aide(s) utilisee(s) :" + Str(Aide))
PrintN("Bonne(s) reponse(s) :" + Str(BonneReponse))
PrintN("")
Print("Appuyez sur 'Entree' pour quitter")
Input()
Bon c'est plus complexe car ya une structure et une liste mais c'est plus simple :
- Une liste qui contient les questions et les réponses
- Une seul boucle pour gérer toutes les questions
- Même si la liste se retrouve dans le désordre, les questions sont toujours avec leurs réponses (pas de mélange possible)
- Gestion simple du score
Bon j'arrête de 'vendre' mon code

.
Je pense qu'il répond plus à tes attentes, si tu a des questions, n'ésite pas
Publié : dim. 20/août/2006 12:23
par Joubarbe
Merci Dorian
J'en profite pour poser une autre question. Dans ce type de programme, quelle est la meilleure solution pour effectuer une sauvegarde. Exemple : j'atteins la question 21, je souhaite quitter le programme et lorsque je le démarrerai à nouveau, celui-ci me renverra à la question 21. Sauvegarde effectuée lorsque je tape "exit" par exemple.
Publié : jeu. 24/août/2006 0:08
par Dorian
Joubarbe a écrit :Merci Dorian
J'en profite pour poser une autre question. Dans ce type de programme, quelle est la meilleure solution pour effectuer une sauvegarde. Exemple : j'atteins la question 21, je souhaite quitter le programme et lorsque je le démarrerai à nouveau, celui-ci me renverra à la question 21. Sauvegarde effectuée lorsque je tape "exit" par exemple.
Bon arpès la panne du forum je peux enfin exposer mon code

:
Code : Tout sélectionner
;Ces variables sont accessibles à partir de la totalité du programme
Global Aide.l, BonneReponse.l, Position.l
;Chemin du fichier de sauvergarde (tu peux mettre n'importe quel nom de fichier)
Global Chemin.s = "Save.MyApp"
Procedure Charger()
;Ouvre le fichier s'il est existant ou le créé s'il n'éxiste pas
OpenFile(0, Chemin)
Aide = ReadLong(0) ;Lit le nombre d'aide utilisé
BonneReponse = ReadLong(0) ;Idem pour les bonnes réponses
Position = ReadLong(0) ;Idem pour la position (question où l'utilisateur s'est arrêté)
CloseFile(0)
EndProcedure
Procedure Sauver()
;Créer le fichier de sauvegarde ou écrase celui éxistant
CreateFile(0, Chemin)
;Sauve les données dans le même ordre que l'ouverture
WriteLong(0, Aide)
WriteLong(0, BonneReponse)
WriteLong(0, Position)
CloseFile(0)
EndProcedure
Structure qr
Question.s
Reponse.s
EndStructure
OpenConsole()
Charger()
;Créer une liste vide pour toute les questions
NewList Liste.qr()
;Ajoute un élément (question et réponse)
AddElement(Liste())
;Défini cet élément
Liste()\Question = "Quel est langage ce langage ? (reponse : PureBasic)"
Liste()\Reponse = "purebasic"
;Ajoute un autre élément
AddElement(Liste())
;Défini cet autre élément
Liste()\Question = "Es-ce que je vais m'en sortir pour le SOC ? (reponse : peut-etre) lol"
Liste()\Reponse = "peut-etre"
;Faut répéter l'opération à chaque question
;La même boucle que le ForEach sauf que l'on peut partir de la position sauvée
;et savoir lorsque le joueur quitte la position actuelle
For a.l = Position To a = CountList(Liste()) - 1
SelectElement(Liste(), a)
Repeat
; Ré-affiche la question si la réponse est mauvaise
PrintN(Liste()\Question)
Input.s = Input()
If LCase(Input) = "aide"
PrintN("Vous avez demandez de l'aide ...")
PrintN("") ;Saute une ligne
Aide = Aide + 1
EndIf
Until LCase(Input) <> "aide"
If LCase(Input) = Liste()\Reponse
BonneReponse = BonneReponse + 1
PrintN("Bravo vous avez trouvez la bonne reponse")
ElseIf LCase(Input) = "exit"
Position = a
Sauver()
PrintN("Au revoir")
Print("Appuyez sur 'Entree' pour quitter")
Input()
End
Else
PrintN("Perdu")
EndIf
PrintN("") ;Saute une ligne
Next a
PrintN("Score :")
PrintN("Aide(s) utilisee(s) :" + Str(Aide))
PrintN("Bonne(s) reponse(s) :" + Str(BonneReponse))
PrintN("")
Print("Appuyez sur 'Entree' pour quitter")
Input()
Voilà j'espère qu'il te convient et que tu ne le trouve pas trop je sais pas quoi

.
Sinon sur le même système de fichier, tu pourrais charger tes questions et réponses (voir même des aides personnalisées) à partir d'un fichier. Comme sa si tu veux faire un autre questionnaire, pas besoin de modifier tout ton code mais juste un fichier texte
