Idée de programme d'éducation : les capitales de l'union

Programmation d'applications complexes
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Idée de programme d'éducation : les capitales de l'union

Message par Micoute »

Bonjour à tous,

étant à cours d'idée, j'ai fabriqué pour mes petits-enfants, ce logiciel histoire de réviser les capitales des pays de l'union européenne.

Je le poste au cas où certains seraient intéressés par l'idée, parce qu'on peut l'appliquer à n'importe quoi

Code : Tout sélectionner

;Capitales des pays de l'Union Européenne
Define.s Capitale, Pays 

Enumeration
 #Fenetre_principale
 #Question
 #tIndication
 #Reponse
 #Bouton_Ok
 #Barre_Etat
 #Police
EndEnumeration

#Total = 26
#Nb_Questions = 20

Declare.s RepeterCar(Quantite.i,Caractere.s)
Declare Bonne_reponse()
Declare Mauvaise_reponse()
Declare.s Notation()
Declare Questionnaire()
Declare Tirer_au_sort()

Global Dim indice.s(#Total,1)
Global NewList Question_Deja_Posee()
Global x, Bonne_Reponse, Compteur, Niveau

Global Police = LoadFont(#Police, "Arial"  ,  12, #PB_Font_Bold)

Restore Donnees
For index = 0 To 26
 
 Read.s Pays
 Read.s Capitale
 Capitale  = UCase(Capitale)
 Pays    = UCase(Pays)
 indice(index, 0) = Pays
 indice(index, 1) = Capitale
 
 ;Debug RSet(Str(index + 1),2,"0") + " " + indice(index, 0)+" "+indice(index, 1)
Next index

Procedure Questionnaire()
 OpenWindow(#Fenetre_principale, 30,30, 550, 190, "Question n°"+Str(Compteur), 
            #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget )
 StickyWindow(#Fenetre_principale, 1)
 SetWindowColor(#Fenetre_principale,$D6D7FF)
 Texte$ = "Quelle est la capitale de"
 Select Left(indice(Bonne_Reponse, 0), 1) 
   Case "A", "E", "I", "O", "U", "Y"
     Texte$ + " l'"
   Default
     Texte$ + " la "
 EndSelect
 If LCase(indice(Bonne_Reponse, 0)) = "pays-bas"
   Texte$ = "Quelle est la capitale des "
 ElseIf LCase(indice(Bonne_Reponse, 0)) = "danemark" Or 
        LCase(indice(Bonne_Reponse, 0)) = "portugal" Or 
        LCase(indice(Bonne_Reponse, 0)) = "royaume-uni" Or 
        LCase(indice(Bonne_Reponse, 0)) = "luxembourg" 
   Texte$ = "Quelle est la capitale du "
 ElseIf LCase(indice(Bonne_Reponse, 0)) = "malte" Or
        LCase(indice(Bonne_Reponse, 0)) = "chypre"
   Texte$ = "Quelle est la capitale de "   
 EndIf
 Texte$ + indice(Bonne_Reponse, 0)
 TextGadget(#Question, 10, 10, 540, 24, Texte$, #PB_Text_Center)
 TextGadget(#tIndication, 10, 35, 540, 24, Left(indice(Bonne_Reponse, 1),1)+
                                           RepeterCar(Len(indice(Bonne_Reponse,1))-2,"-")+
                                           LCase(Right(indice(Bonne_Reponse, 1),1)),#PB_Text_Center)
 StringGadget(#Reponse, 175, 60, 200, 24,"")
 ButtonGadget(#Bouton_Ok, 240, 110, 70, 30, "Valider")
 
 If CreateStatusBar(#Barre_Etat, WindowID(#Fenetre_principale))
  AddStatusBarField(370)
  StatusBarText(#Barre_Etat,0, "Note: "+Str(Niveau)+"/20")
 EndIf 
 
 SetGadgetColor(#Question, #PB_Gadget_BackColor, $D6D7FF)
 SetGadgetFont(#Question, FontID(#Police))
 SetGadgetFont(#Reponse, FontID(#Police))
 SetGadgetFont(#tIndication, FontID(#Police))
 SetGadgetColor(#tIndication, #PB_Gadget_BackColor, $D6D7FF)
 SetGadgetFont(#Bouton_Ok, FontID(#Police))
 
 SetActiveGadget(#Reponse)
 Repeat
  Select WaitWindowEvent()
   Case #PB_Event_Gadget
    Select EventGadget()
     Case #Bouton_Ok
      grepondu$="oui"
    EndSelect 
   Case #PB_Event_CloseWindow
    Select EventWindow()
     Case #Fenetre_principale
      CloseWindow(#Fenetre_principale)
      End
    EndSelect
  EndSelect
 Until grepondu$="oui"
 
 rep1$=GetGadgetText(#Reponse) 
 
 If UCase(rep1$)=UCase(indice(Bonne_Reponse, 1))
  AddElement(Question_Deja_Posee())
  Question_Deja_Posee()= Bonne_Reponse
  Niveau+1
 Else  
  Mauvaise_reponse()
 EndIf
 
 If Niveau=0
  ;MessageRequester("Pfff...", "Essaie de faire mieux." + #LF$ + "Ce n'est quand même pas si dur.", #MB_ICONQUESTION)
 Else
  If Niveau < 2
   Texte$ = Str(Niveau)+" bonne réponse"
  Else
   Texte$ = Str(Niveau)+" bonnes réponses"
  EndIf
  ;MessageRequester("Score","Tu as " + Texte$ + " sur "+Str(#Nb_Questions))
 EndIf 
EndProcedure

Procedure Tirer_au_sort()  
 Bonne_Reponse = Random(#Total)
  
 ForEach Question_Deja_Posee()
  If Question_Deja_Posee() = Bonne_Reponse
   Tirer_au_sort()
  EndIf
 Next 
EndProcedure

Procedure Bonne_reponse()
 MessageRequester("Cool", "Trop fort !", #MB_OK)
EndProcedure

Procedure Mauvaise_reponse()
 MessageRequester("Désolé", "la réponse, c'était "+indice(Bonne_Reponse, 1)+
                            #LF$+
                            "Retiens-le pour la pochaine fois !", #MB_OK)
EndProcedure

Procedure.s Notation()
 Protected Texte.s
 Select niveau
  Case 0
   Texte = "Tu n'as répondu à aucune question"
  Case 1 To 3
   Texte = " nul"
  Case 4 To 8
   Texte = " médiocre"
  Case 9 To 12
   Texte = " moyen"
  Case 13 To 15
   Texte = " assez bon"
  Case 16 To 18
   Texte = " très bon"
  Case 19 To 20
   Texte = " excellent"
 EndSelect
 MessageRequester("Bilan", "Ta note est de "+Str(niveau)+"/20"+#LF$+#LF$+ "Résulat : "+Texte)
EndProcedure

Procedure.s RepeterCar(Quantite.i,Caractere.s)
 ProcedureReturn ReplaceString(Space(Quantite), " ", Caractere)
EndProcedure

Select MessageRequester("Question", "Veux-tu tester tes capacités dans ce questionnaire ?", #PB_MessageRequester_YesNo)
 Case #IDYES
  ;-debut du Questionnaire
  For Compteur = 1 To #Nb_Questions
   Tirer_au_sort()   
   Questionnaire()
  Next 
  Notation()
 Case #IDNO
  MessageRequester("A bientôt","Reviens quand même tester tes compétences plus tard!")
  End
EndSelect

DataSection
  Donnees:
  Data.s "Pays-Bas","Amsterdam"
  Data.s "Grece", "Athenes"
  Data.s "Allemagne", "Berlin"
  Data.s "Slovaquie", "Bratislava"
  Data.s "Belgique", "Bruxelles"
  Data.s "Roumanie", "Bucarest"
  Data.s "Hongrie", "Budapest"
  Data.s "Danemark", "Copenhague"
  Data.s "Irlande", "Dublin"
  Data.s "Finlande", "Helsinki"
  Data.s "Malte", "La Valette"
  Data.s "Portugal", "Lisbonne"
  Data.s "Slovénie", "Ljubljana"
  Data.s "Royaume-Uni", "Londres"
  Data.s "Luxembourg", "Luxembourg"
  Data.s "Espagne", "Madrid"
  Data.s "Chypre", "Nicosie"
  Data.s "France", "Paris"
  Data.s "République Thèque", "Prague"
  Data.s "Lettonie", "Riga"
  Data.s "Italie", "Rome"
  Data.s "Bulgarie", "Sofia"
  Data.s "Suède", "Stockholm"
  Data.s "Estonie", "Talinn"
  Data.s "Pologne", "Varsovie"
  Data.s "Autriche", "Vienne"
  Data.s "Lituanie", "Vilnius"
EndDataSection  
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !