Boucle dans une console
Boucle dans une console
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).
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).
D'àprès ce que j'ai compris voici un code que j'ai fait ^^ :
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
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()
J'espère que c'est ce que tu cherche

Dernière modification par Dorian le sam. 19/août/2006 2:04, modifié 1 fois.
Bah oui c'est pas ce que tu à demandé ici ? :Joubarbe a écrit :Bah ça marche pasMais c'est à peu près le code que j'avais fait
La question revient à chaque fois
A la place de la ligne ci-dessus tu mets tes lignes de codes correspondants à l'aide :Joubarbe a écrit :Et la question est de nouveau posée ensuite.
Code : Tout sélectionner
PrintN("Vous avez demandez de l'aide ...")

Dernière modification par Dorian le sam. 19/août/2006 2:03, modifié 1 fois.
Ca peut venir de là.
Code : Tout sélectionner
If LCase(Input$) = "aide"
PrintN("Vous avez demandé de l'aide...")
endif
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.
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.
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
Et voici tout droit de mon cerveau (honte sur moi je suis plus sûr de l'orthographe xD) :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.
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()
- 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
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.

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 codeJoubarbe 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.

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()

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
