Culture générale
Culture générale
Bonjour à tous,
J'ai créé un logiciel de culture générale et je souhaite qu'à chaque question une liste chaînée "Question_deja_posee()" s'incrémente sauf si la question a déjà était posée, je fais, défais, refais, mais toujours sans bons résultats, car mon filtre n'est pas assez efficace.
Je viens une fois de plus solliciter votre aide bienveillante et je vous en remercie par avance, j'ai joins dans l'archive tous les fichiers nécessaires à son exécution.
http://dl.free.fr/pA51jLAk2
J'ai créé un logiciel de culture générale et je souhaite qu'à chaque question une liste chaînée "Question_deja_posee()" s'incrémente sauf si la question a déjà était posée, je fais, défais, refais, mais toujours sans bons résultats, car mon filtre n'est pas assez efficace.
Je viens une fois de plus solliciter votre aide bienveillante et je vous en remercie par avance, j'ai joins dans l'archive tous les fichiers nécessaires à son exécution.
http://dl.free.fr/pA51jLAk2
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Culture générale
Salut micoute pourquoi ne fais tu pas une copie de ta liste chainée au début du jeu puis a chaque question posée tu supprime l’élément de la question une fois la réponse donnée
Code : Tout sélectionner
NewList mesquestions.s() ; crée la liste de questions
NewList copiequestions.s() ; crée la liste de questions
For a=1 To 20 : AddElement(mesquestions()):mesquestions()="question "+Str(a):Next
Repeat
Debug "nouvelle partie je copie la liste"
CopyList(mesquestions(),copiequestions())
Repeat
Delay(1000)
Debug Str(ListSize(mesquestions()))+" questions restantes"
SelectElement(mesquestions(),Random(ListSize(mesquestions())-1)) ;choisis une question au hazard
Debug mesquestions() ;affiche la question
; on assume que la reponse a ete donnée
DeleteElement(mesquestions(),1)
Until ListSize(mesquestions())=0
Debug "fin de la partie je Restore la liste"
CopyList(copiequestions(),mesquestions())
ForEver
Re: Culture générale
+1
Tu peux aussi (La même réponse qu'à chaque fois..)
Dans ta structure Element, ajoute Dejaposee.b
Ainsi si Dejaposee =0 la question n'a pas été posée et si = 1 la question a été posée... Ainsi tu seras sûr d'éviter les répétitions.
Tu peux aussi (La même réponse qu'à chaque fois..)
Dans ta structure Element, ajoute Dejaposee.b
Ainsi si Dejaposee =0 la question n'a pas été posée et si = 1 la question a été posée... Ainsi tu seras sûr d'éviter les répétitions.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Culture générale
j'ai teste ton logiciel et il ne gère pas les réponses pour le moment mais si tu implémente les réponses
tu pourra éventuellement ne supprimer une question que si la réponse est juste pour pouvoir la reposer plus tard si la réponse est fausse.
tu pourra éventuellement ne supprimer une question que si la réponse est juste pour pouvoir la reposer plus tard si la réponse est fausse.
Code : Tout sélectionner
Structure question
question.s
choix.s
reponse.i
EndStructure
NewList mesquestions.question() ; crée la liste de questions
NewList copiequestions.question() ; crée la copie de la liste de questions
oq.s ; stoque la question posée precedement
; questiuons----------------------
For a=1 To 10
AddElement(mesquestions())
mesquestions()\question="question "+Str(a)
choixpossible=Random(5,3)
For ch=1 To choixpossible
If ch<>1
mesquestions()\choix + "|"
EndIf
mesquestions()\choix + "["+Str(ch)+"] reponse "+Str(ch)
Next
mesquestions()\reponse=Random(choixpossible,1)
Next
; fin de la creation des questions random
Repeat
Debug "nouvelle partie je copie la liste"
CopyList(mesquestions(),copiequestions()) ; sauvegarde la liste complete de questioins
Repeat
lst=ListSize(mesquestions()) ; nombre de questions restantes
Repeat ; on cherche une question differente de la precedente
SelectElement(mesquestions(),Random(lst-1)) ; choisis une question au hazard
Until mesquestions()\question<>oq Or lst=1 ; on repete tant que la question n'est pas differente de celle posée juste avant ou si il n'en reste qu'une azu cas ou on se plante toujours sur la derniere ^^
;
oq=mesquestions()\question ; met la question choisie dans la variable de comparaison
;
Debug mesquestions()\question ;affiche la question
;
choixmax=CountString(mesquestions()\choix,"|")+1
For choix=1 To choixmax ; affiche les choix
Debug StringField(mesquestions()\choix,choix,"|") ; de reponses
Next ; possibles
;
rep=Random(choixmax,1) ; reponse aleatoire
Debug "ma réponse ("+Str(choixmax)+") :"+Str(rep) ; affiche la reponse
;
If rep=mesquestions()\reponse ; reponse juste
Debug "bonne reponse"
DeleteElement(mesquestions(),1) ; efface la question car deja posée
Debug "il reste "+Str(ListSize(mesquestions()))+" questions"
Else ; reponse fausse
Debug "mauvaise réponse la bonne réponse etait "+Str(mesquestions()\reponse)
Debug "il reste "+Str(ListSize(mesquestions()))+" questions"
EndIf
Delay(2000) ; on attent qu'on pouiise voir le resultat^^
Until ListSize(mesquestions())=0 ; si il n'y a plus de question on sort du jeu
Debug "fin de la partie je Restore la liste"
CopyList(copiequestions(),mesquestions()) ; on recopie la sauvegarde des questions dans la liste de question
ForEver ;on recommence une partie
Re: Culture générale
Merci beaucoup pour vos aides qui m'ont beaucoup apporté, mais ce n'est pas encore résolu, je crois qu'il faut que je change la conduite de mon programme.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Culture générale
Bonjour Micoute,
Moi personnellement pour ce type de projet tout en ayant jeté un œil sur ton code, je ne travaillerais pas avec des listes mais avec une base de données sqlite.
Il devient alors d'une grande facilité de gérer tous les filtres que tu désire et cela avec beaucoup plus de souplesse que l'utilisation de listes,map ou array.
Au passage tu peux même créer un base de donnée en mémoire, mais je ne pense pas que cela soit utile dans ce cas précis.
Moi personnellement pour ce type de projet tout en ayant jeté un œil sur ton code, je ne travaillerais pas avec des listes mais avec une base de données sqlite.
Il devient alors d'une grande facilité de gérer tous les filtres que tu désire et cela avec beaucoup plus de souplesse que l'utilisation de listes,map ou array.
Au passage tu peux même créer un base de donnée en mémoire, mais je ne pense pas que cela soit utile dans ce cas précis.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Culture générale
Merci, je vais changer de stratégie, j'envisage déjà quelques solutions.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Culture générale
Finalement j'ai trouvé une solution avec RandomizeList(), ce qui me permet d'incrémenter une variable qui "Choisi" l'élément de la liste correspondant sans risque de redondance, et qui fait un semblant de questions aléatoires.
Merci à tout le monde.
Merci à tout le monde.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !