Culture générale

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Culture générale

Message par Micoute »

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
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 !
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Culture générale

Message par case »

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


ImageImage
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Culture générale

Message par Ar-S »

+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.
~~~~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
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Culture générale

Message par case »

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.

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
ImageImage
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Culture générale

Message par Micoute »

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 !
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Culture générale

Message par microdevweb »

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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Culture générale

Message par Micoute »

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 !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Culture générale

Message par Micoute »

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.
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 !
Répondre