Code : Tout sélectionner
;Trouve le bon drapeau europeen
XIncludeFile "MesGadgets.pb"
UseModule MesGadgets
Global.iGadget *BonneReponse, *MauvaiseReponse1, *MauvaiseReponse2, *MauvaiseReponse3, *MauvaiseReponse4, *MauvaiseReponse5
Enumeration Fenetres
#Fenetre_Question
#Fenetre_Resultat
EndEnumeration
Enumeration Police
#Police
#Police2
EndEnumeration
Enumeration Gadgets
#Bonne_Reponse
#Mauvaise_Reponse_1
#Mauvaise_Reponse_2
#Mauvaise_Reponse_3
#Mauvaise_Reponse_4
#Mauvaise_Reponse_5
#tReponse
#Image_Drapeau
#Image_Ciel
#Image
EndEnumeration
#NbPays = 27
#Nb_Questions = 28
;{ Déclarations diverses
Structure sQuestion
Question.i ;La Question
Reponse.i[6] ;six réponses possibles, la bonne et cinq mauvaises
ReponseUtilisateur.i ;Réponse donnée par l'utilisateur
EndStructure
Structure sEtat
Drapeau.s
Pays.s
EndStructure
Global Dim Etat.sEtat(#NbPays)
Global NewList Message$(), NewList QCM.sQuestion(), NewList DejaPosee()
Global Dim DejaJoue.s(#NbPays)
Global x, BonneReponse, MauvaiseReponse1, MauvaiseReponse2, MauvaiseReponse3, MauvaiseReponse4, MauvaiseReponse5, LargFen, HautFen, LargBout, HautBout
Global Points, grepondu$, Compteur, rep1$
Global Texte$, Resultat, Sortir, X1, X2, X3, X4, X5, X6, Index, Note
Global Evenement, Y1, Y2, Y3, Y4, Y5, Y6
Global Hasard, Ciel.s = "Ciel.png"
Global Police = LoadFont(#Police, "Verdana", 11, #PB_Font_Bold)
Global Police2= LoadFont(#Police2, "Arial" , 35, #PB_Font_Bold)
UsePNGImageDecoder()
Procedure Lire_les_donnees()
Etat(0)\Drapeau = "Allemagne.png"
Etat(0)\Pays = "Allemagne"
Etat(1)\Drapeau = "Autriche.png"
Etat(1)\Pays = "Autriche"
Etat(2)\Drapeau = "Belgique.png"
Etat(2)\Pays = "Belgique"
Etat(3)\Drapeau = "Bulgarie.png"
Etat(3)\Pays = "Bulgarie"
Etat(4)\Drapeau = "Chypre.png"
Etat(4)\Pays = "Chypre"
Etat(5)\Drapeau = "Croatie.png"
Etat(5)\Pays = "Croatie"
Etat(6)\Drapeau = "Danemark.png"
Etat(6)\Pays = "Danemark"
Etat(7)\Drapeau = "Espagne.png"
Etat(7)\Pays ="Espagne"
Etat(8)\Drapeau = "Estonie.png"
Etat(8)\Pays = "Estonie"
Etat(9)\Drapeau = "Finlande.png"
Etat(9)\Pays = "Finlande"
Etat(10)\Drapeau = "France.png"
Etat(10)\Pays = "France"
Etat(11)\Drapeau = "Grece.png"
Etat(11)\Pays = "Grèce"
Etat(12)\Drapeau = "Hongrie.png"
Etat(12)\Pays = "Hongrie"
Etat(13)\Drapeau = "Irlande.png"
Etat(13)\Pays = "Irlande"
Etat(14)\Drapeau = "Italie.png"
Etat(14)\Pays + "Italie"
Etat(15)\Drapeau = "Lettonie.png"
Etat(15)\Pays = "Lettonie"
Etat(16)\Drapeau = "Lituanie.png"
Etat(16)\Pays = "Lituanie"
Etat(17)\Drapeau = "Luxembourg.png"
Etat(17)\Pays = "Luxembourg"
Etat(18)\Drapeau = "Malte.png"
Etat(18)\Pays = "Malte"
Etat(19)\Drapeau = "Pays_Bas.png"
Etat(19)\Pays = "Pays-bas"
Etat(20)\Drapeau = "Pologne.png"
Etat(20)\Pays = "Pologne"
Etat(21)\Drapeau = "Portugal.png"
Etat(21)\Pays = "Portugal"
Etat(22)\Drapeau = "Roumanie.png"
Etat(22)\Pays = "Roumanie"
Etat(23)\Drapeau = "Royaume_Uni.png"
Etat(23)\Pays = "Royaume uni"
Etat(24)\Drapeau = "Slovaquie.png"
Etat(24)\Pays = "Slovaquie"
Etat(25)\Drapeau = "Slovenie.png"
Etat(25)\Pays = "Slovènie"
Etat(26)\Drapeau = "Suede.png"
Etat(26)\Pays = "Suède"
Etat(27)\Drapeau = "Tchequie.png"
Etat(27)\Pays = "Tchéquie"
EndProcedure
Procedure Aide()
#fenetre_Aide = 0
#Bouton_Aide_Ok = 1
AddElement(Message$()) : Message$() = "Voici le principe:"
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "Tu as une série de " + #Nb_Questions + " questions pour "+ Str(#NbPays + 1) +" pays de l'union."
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "On te propose 6 réponses possibles, pour trouver celle"
AddElement(Message$()) : Message$() = "qui correspond au drapeau proposé, tu dois donc "
AddElement(Message$()) : Message$() = "cliquer sur le bon bouton pour donner la bonne réponse"
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "On ne peut pas faire plus simple"
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "Il n'y a pas de chronomètre, alors prend ton temps"
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "Je te souhaite un bon divertissement"
OpenWindow(#fenetre_Aide, 0, 0, 530, 400, "Aide", #PB_Window_SystemMenu | #PB_Window_TitleBar |
#PB_Window_ScreenCentered)
FirstElement(Message$())
For Index = 0 To ListSize(Message$())-1
TextGadget(100 + index, 0, 10 + Index * 24, 520, 24,Message$(), #PB_Text_Center)
SetGadgetFont(100+Index, FontID(#Police))
NextElement(Message$())
Next
ButtonGadget(#Bouton_Aide_Ok, 245, 350, 70, 30, "Ok")
SetGadgetFont(#Bouton_Aide_Ok, FontID(#Police))
SetActiveGadget(#Bouton_Aide_Ok)
;- Boucle d'évenements Aide
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Bouton_Aide_Ok
CloseWindow(#fenetre_Aide)
Sortir = 1
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #fenetre_Aide
CloseWindow(#fenetre_Aide)
Sortir = 1
Break
EndSelect
EndSelect
Until Sortir = 1
EndProcedure
Procedure Bonne_reponse()
MessageRequester("Cool", "Trop bien !", #MB_OK)
EndProcedure
Procedure Mauvaise_reponse()
MessageRequester("Désolé", "la réponse, c'était " + Etat(QCM()\Reponse[0])\Pays+
#LF$+"Retiens-le pour la pochaine fois !", #MB_OK)
EndProcedure
Procedure.s Notation()
Protected Texte.s
Points * 20/#Nb_Questions
Select Points
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 bien"
Case 16 To 18
Texte = " très bien"
Case 19 To 20
Texte = " excellent"
EndSelect
;Mon MessageRequester
OpenWindow(#Fenetre_Resultat, 0, 0, 300, 120, "Bilan",
#PB_Window3D_Borderless | #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
TextGadget(#tReponse, 10,10, 280, 280, "Ta note est de " + Str(Points) + "/" + "20" +
#LF$ + #LF$ + "Résultat : " + Texte, #PB_Text_Center)
SetGadgetFont(#tReponse, FontID(#Police2))
Repeat
Until WaitWindowEvent()= #PB_Event_CloseWindow
EndProcedure
Procedure placerBoutons()
Protected Hasard
Hasard = Random(5,0)
Select Hasard
Case 0
X1 = 10 : X2 = (LargFen-LargBout)/2 : X3 = LargFen-LargBout-10 : X4 = 10 : X5 = (LargFen-LargBout)/2 : X6 = LargFen-LargBout-10
Y1 = HautFen-(HautBout*2) - 20 : Y2 = HautFen-(HautBout*2) - 20 : Y3 = HautFen-(HautBout*2) - 20 : Y4 = HautFen-HautBout-10
Y5 = HautFen-HautBout-10 : Y6 = HautFen-HautBout-10
Case 1
X1 = (LargFen-LargBout)/2 : X2 = LargFen-LargBout-10 : X3 = 10 : X4 = (LargFen-LargBout)/2 : X5 = LargFen-LargBout-10 : X6 = 10
Y1 = HautFen-(HautBout*2) - 20 : Y2 = HautFen-(HautBout*2) - 20 : Y3 = HautFen-(HautBout*2) - 20 : Y4 = HautFen-HautBout-10
Y5 = HautFen-HautBout-10 : Y6 = HautFen-HautBout-10
Case 2
X1 = LargFen-LargBout-10 : X2 = (LargFen-LargBout)/2 : X3 = 10 : X4 = LargFen-LargBout-10 : X5 = (LargFen-LargBout)/2 : X6 = 10
Y1 = HautFen-(HautBout*2) - 20 : Y2 = HautFen-(HautBout*2) - 20 : Y3 = HautFen-(HautBout*2) - 20 : Y4 = HautFen-HautBout-10
Y5 = HautFen-HautBout-10 : Y6 = HautFen-HautBout-10
Case 3
X1 = 10 : X2 = (LargFen-LargBout)/2 : X3 = LargFen-LargBout-10 : X4 = 10 : X5 = (LargFen-LargBout)/2 : X6 = LargFen-LargBout-10
Y1 = HautFen-HautBout-10 : Y2 = HautFen-HautBout-10 : Y3 = HautFen-HautBout-10 : Y4 = HautFen-(HautBout*2) - 20
Y5 = HautFen-(HautBout*2) - 20 : Y6 = HautFen-(HautBout*2) - 20
Case 4
X1 = (LargFen-LargBout)/2 : X2 = LargFen-LargBout-10 : X3 = 10 : X4 = (LargFen-LargBout)/2 : X5 = LargFen-LargBout-10 : X6 = 10
Y1 = HautFen-HautBout-10 : Y2 = HautFen-HautBout-10 : Y3 = HautFen-HautBout-10 : Y4 = HautFen-(HautBout*2) - 20
Y5 = HautFen-(HautBout*2) - 20 : Y6 = HautFen-(HautBout*2) - 20
Case 5
X1 = LargFen-LargBout-10 : X2 = (LargFen-LargBout)/2 : X3 = 10 : X4 = LargFen-LargBout-10 : X5 = (LargFen-LargBout)/2 : X6 = 10
Y1 = HautFen-HautBout-10 : Y2 = HautFen-HautBout-10 : Y3 = HautFen-HautBout-10 : Y4 = HautFen-(HautBout*2) - 20
Y5 = HautFen-(HautBout*2) - 20 : Y6 = HautFen-(HautBout*2) - 20
EndSelect
EndProcedure
Procedure Questionnaire()
If OpenWindow(#Fenetre_Question, 0, 0, 0, 0, "Drapeaux européens", #PB_Window_SystemMenu|#PB_Window_Maximize)
SetWindowColor(#Fenetre_Question, $F6A6DB)
LargFen = WindowWidth(#Fenetre_Question): LargBout = (LargFen - 40) / 3: HautBout = 50: HautFen = WindowHeight(0)
LoadImage(#Image_Ciel, Ciel)
ResizeImage(#Image_Ciel, LargFen, HautFen - (HautBout * 2))
LoadImage(#Image_Drapeau, Etat(QCM()\Reponse[0])\Drapeau)
ResizeImage(#Image_Drapeau, 500, 300)
ImageGadget(#Image_Drapeau, (LargFen / 2)-250, 30, 500, 300, ImageID(#Image_Drapeau))
ImageGadget(#Image_Ciel, 0, 0, LargFen, HautFen, ImageID(#Image_Ciel))
placerBoutons()
*BonneReponse = GadgetCouleurBouton(#Bonne_Reponse, X1, Y1, LargBout, HautBout, Etat(QCM()\Reponse[0])\Pays)
*MauvaiseReponse1 = GadgetCouleurBouton(#Mauvaise_Reponse_1, X2, Y2, LargBout, HautBout, Etat(QCM()\Reponse[1])\Pays)
*MauvaiseReponse2 = GadgetCouleurBouton(#Mauvaise_Reponse_2, X3, Y3, LargBout, HautBout, Etat(QCM()\Reponse[2])\Pays)
*MauvaiseReponse3 = GadgetCouleurBouton(#Mauvaise_Reponse_3, X1, Y4, LargBout, HautBout, Etat(QCM()\Reponse[3])\Pays)
*MauvaiseReponse4 = GadgetCouleurBouton(#Mauvaise_Reponse_4, X2, Y5, LargBout, HautBout, Etat(QCM()\Reponse[4])\Pays)
*MauvaiseReponse5 = GadgetCouleurBouton(#Mauvaise_Reponse_5, X3, Y6, LargBout, HautBout, Etat(QCM()\Reponse[5])\Pays)
;Définir les couleurs
*BonneReponse\SetGadgetColor(#PB_Gadget_BackColor, $40FF40)
*MauvaiseReponse1\SetGadgetColor(#PB_Gadget_BackColor, $40FF40)
*MauvaiseReponse2\SetGadgetColor(#PB_Gadget_BackColor, $40FF40)
*MauvaiseReponse3\SetGadgetColor(#PB_Gadget_BackColor, $40FF40)
*MauvaiseReponse4\SetGadgetColor(#PB_Gadget_BackColor, $40FF40)
*MauvaiseReponse5\SetGadgetColor(#PB_Gadget_BackColor, $40FF40)
;Définir les polices
*BonneReponse\SetGadgetFont(FontID(#Police2))
*MauvaiseReponse1\SetGadgetFont(FontID(#Police2))
*MauvaiseReponse2\SetGadgetFont(FontID(#Police2))
*MauvaiseReponse3\SetGadgetFont(FontID(#Police2))
*MauvaiseReponse4\SetGadgetFont(FontID(#Police2))
*MauvaiseReponse5\SetGadgetFont(FontID(#Police2))
Repeat
grepondu$ = ""
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Bonne_Reponse
Select EventType()
Case #PB_EventType_LeftClick
grepondu$="bien"
QCM()\ReponseUtilisateur = QCM()\Reponse[0]
AddElement(DejaPosee())
DejaPosee()=QCM()\Question
EndSelect
Case #Mauvaise_Reponse_1
If EventType() = #PB_EventType_LeftClick
grepondu$ = "mal"
QCM()\ReponseUtilisateur = QCM()\Reponse[1]
EndIf
Case #Mauvaise_Reponse_2
If EventType() = #PB_EventType_LeftClick
grepondu$ = "mal"
QCM()\ReponseUtilisateur = QCM()\Reponse[2]
EndIf
Case #Mauvaise_Reponse_3
If EventType() = #PB_EventType_LeftClick
grepondu$ = "mal"
QCM()\ReponseUtilisateur = QCM()\Reponse[3]
EndIf
Case #Mauvaise_Reponse_4
If EventType() = #PB_EventType_LeftClick
grepondu$ = "mal"
QCM()\ReponseUtilisateur = QCM()\Reponse[4]
EndIf
Case #Mauvaise_Reponse_5
If EventType() = #PB_EventType_LeftClick
grepondu$ = "mal"
QCM()\ReponseUtilisateur = QCM()\Reponse[5]
EndIf
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_Question
CloseWindow(#Fenetre_Question)
End
EndSelect
EndSelect
Until grepondu$="bien" Or grepondu$ = "mal"
If grepondu$ = "bien"
rep1$=*BonneReponse\GetGadgetText()
If rep1$ = Etat(QCM()\Reponse[0])\Pays
Bonne_reponse()
Points+(10/7)
EndIf
EndIf
If grepondu$ = "mal"
Mauvaise_reponse()
EndIf
If Points=0
MessageRequester("Pfff...", "Essaie de faire mieux." + #LF$ +
"Ce n'est quand même pas si dur.", #MB_ICONQUESTION)
Else
If Points < 2
Texte$ = Str(Points)+" bonne réponse"
Else
Texte$ = Str(Points)+" bonnes réponses"
EndIf
EndIf
EndIf
EndProcedure
Procedure Dispatcher_les_reponses()
QCM()\Reponse[0] = Random(#NbPays,0)
QCM()\Reponse[1] = Random(#NbPays,0)
QCM()\Reponse[2] = Random(#NbPays,0)
QCM()\Reponse[3] = Random(#NbPays,0)
QCM()\Reponse[4] = Random(#NbPays,0)
QCM()\Reponse[5] = Random(#NbPays,0)
If QCM()\Reponse[1] = QCM()\Reponse[0]
QCM()\Reponse[1] = Random(#NbPays,0)
EndIf
If QCM()\Reponse[2] = QCM()\Reponse[0] Or
QCM()\Reponse[2] = QCM()\Reponse[1]
QCM()\Reponse[2] = Random(#NbPays,0)
EndIf
If QCM()\Reponse[3] = QCM()\Reponse[0] Or
QCM()\Reponse[3] = QCM()\Reponse[1] Or
QCM()\Reponse[3] = QCM()\Reponse[2]
QCM()\Reponse[3] = Random(#NbPays,0)
EndIf
If QCM()\Reponse[4] = QCM()\Reponse[0] Or
QCM()\Reponse[4] = QCM()\Reponse[1] Or
QCM()\Reponse[4] = QCM()\Reponse[2] Or
QCM()\Reponse[4] = QCM()\Reponse[3]
QCM()\Reponse[4] = Random(#NbPays,0)
EndIf
If QCM()\Reponse[5] = QCM()\Reponse[0] Or
QCM()\Reponse[5] = QCM()\Reponse[1] Or
QCM()\Reponse[5] = QCM()\Reponse[2] Or
QCM()\Reponse[5] = QCM()\Reponse[3] Or
QCM()\Reponse[5] = QCM()\Reponse[4]
QCM()\Reponse[5] = Random(#NbPays,0)
EndIf
If DejaJoue(QCM()\Reponse[0]) = "1"
Dispatcher_les_reponses()
EndIf
QCM()\Question = QCM()\Reponse[0]
BonneReponse = QCM()\Reponse[0]
MauvaiseReponse1 = QCM()\Reponse[1]
MauvaiseReponse2 = QCM()\Reponse[2]
MauvaiseReponse3 = QCM()\Reponse[3]
MauvaiseReponse4 = QCM()\Reponse[4]
MauvaiseReponse5 = QCM()\Reponse[5]
ForEach DejaPosee()
If DejaPosee()= QCM()\Question
Dispatcher_les_reponses()
EndIf
Next
EndProcedure
;Début du programme
Select MessageRequester("Question", "Veux-tu tester tes capacités dans ce Questionnaire ?",
#PB_MessageRequester_YesNo)
Case #IDYES
Resultat = MessageRequester("","Désires-tu le mode d'emploi ?", #MB_YESNO)
If Resultat = #PB_MessageRequester_Yes
Aide()
EndIf
Lire_les_donnees()
;-debut du Questionnaire
For Compteur = 1 To #Nb_Questions
AddElement(QCM())
Dispatcher_les_reponses()
DejaJoue(QCM()\Question) = "1"
Questionnaire()
Next
Notation()
Case #IDNO
MessageRequester("A bientôt","Reviens quand même tester tes compétences plus tard!")
End
EndSelect
Repeat
Evenement = WaitWindowEvent ()
Until Evenement = #PB_Event_CloseWindow ; si on appuie sur la croix, on ferme le programme et on libère toutes les ressources
End