Page 1 sur 1

Comment savoir si une grille est pleine

Publié : jeu. 17/août/2017 10:10
par Micoute
Bonjour à tous

Pour mes petits enfants qui rentrent au C.P cette année, j'ai fait ce logiciel pour leur apprendre à calculer mentalement, le programme est fonctionnel, mais je souhaiterais que le bouton valider ne s'affiche que si la grille est pleine.

Si vous pouvez m'aider, ce que je ne doute pas, je ne vous en remercierai jamais assez.

Code : Tout sélectionner

;Carré magique

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration
  #Str_HG
  #Str_HM
  #Str_HD
  #Str_GM
  #Str_MM
  #Str_DM
  #Str_GB
  #Str_MB
  #Str_DB
  #Txt_L1
  #Txt_L2
  #Txt_L3
  #Txt_C1
  #Txt_C2
  #Txt_C3
  #Btn_Parametres
  #Str_Parametres
  #Btn_Ok
  #Btn_Valider
  #Txt_Avertissement
EndEnumeration

Enumeration
  #Police
  #Police2
  #police3
EndEnumeration  

Global Evenement, NombreMagique

LoadFont(#Police, "Microsoft Sans Serif", 120, #PB_Font_Bold)
LoadFont(#Police2, "Microsoft Sans Serif", 20, #PB_Font_Bold)
LoadFont(#Police3, "Microsoft Sans Serif", 10, #PB_Font_Bold)

Procedure Afficher()
  SetGadgetText(#Txt_L1, Str(Val(GetGadgetText(#Str_HG)) + Val(GetGadgetText(#Str_HM)) + Val(GetGadgetText(#Str_HD))))
  SetGadgetText(#Txt_L2, Str(Val(GetGadgetText(#Str_GM)) + Val(GetGadgetText(#Str_MM)) + Val(GetGadgetText(#Str_DM))))
  SetGadgetText(#Txt_L3, Str(Val(GetGadgetText(#Str_GB)) + Val(GetGadgetText(#Str_MB)) + Val(GetGadgetText(#Str_DB))))
  
  SetGadgetText(#Txt_C1, Str(Val(GetGadgetText(#Str_HG)) + Val(GetGadgetText(#Str_GM)) + Val(GetGadgetText(#Str_GB))))
  SetGadgetText(#Txt_C2, Str(Val(GetGadgetText(#Str_HM)) + Val(GetGadgetText(#Str_MM)) + Val(GetGadgetText(#Str_MB))))
  SetGadgetText(#Txt_C3, Str(Val(GetGadgetText(#Str_HD)) + Val(GetGadgetText(#Str_DM)) + Val(GetGadgetText(#Str_DB))))
EndProcedure  

Procedure EntrerNombreMagique()
  For i = #Str_HG To #Str_DB
    SetGadgetText(i, "")
  Next i
  
  SetActiveGadget(#Str_Parametres)
  NombreMagique = Val(GetGadgetText(#Str_Parametres))
EndProcedure

Procedure InitCarre()  
  If NombreMagique    
    SetGadgetText(#Txt_Avertissement, "Le nombre magique est " + NombreMagique)
    Protected NHM = Random(NombreMagique/3,1)
    Protected NMG = Random(NombreMagique/3,1)
    Protected NGB = Random(NombreMagique/3,1)
    Protected NDB = Random(NombreMagique/3,1)
    
    If NMG + NGB < NombreMagique/2
      NMG = Int(Random(NombreMagique/2,NombreMagique/2))
    EndIf  
    
    SetGadgetText(#Str_HM, Str(NHM))
    SetGadgetText(#Str_GM, Str(NMG))
    SetGadgetText(#Str_GB, Str(NGB))
    SetGadgetText(#Str_DB, Str(NDB))
    
  Else
    SetGadgetText(#Txt_Avertissement, "Veuillez choisir un nombre magique, (minimum 3)")
    HideGadget(#Str_Parametres, 0)
    HideGadget(#Btn_Ok, 0)
    EntrerNombreMagique()
  EndIf
EndProcedure

Procedure Init_Questionnaire()
  If OpenWindow(#Fenetre_principale, 379, 5, 815, 775, "Carre magique", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    
    SetGadgetFont(#PB_Default, FontID(#Police))
    
    StringGadget(#Str_HG, 145, 130, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_HM, 330, 130, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_HD, 515, 130, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_GM, 145, 315, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_MM, 330, 315, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_DM, 515, 315, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_GB, 145, 500, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_MB, 330, 500, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_DB, 515, 500, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    TextGadget(#Txt_L1, 70, 205, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_L2, 70, 400, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_L3, 70, 585, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_C1, 220, 70, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_C2, 400, 70, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_C3, 575, 70, 60, 60, "", #PB_Text_Center)
    ButtonGadget(#Btn_Parametres, 155, 10, 175, 35, "Paramètres")
    StringGadget(#Str_Parametres, 335, 10, 95, 35, "", #PB_String_Numeric|#ES_CENTER)
    ButtonGadget(#Btn_Ok, 435, 10, 35, 35, "Ok")
    ButtonGadget(#Btn_Valider, 480, 10, 175, 35, "Valider")
    
    TextGadget(#Txt_Avertissement, 0, 710, 815, 30, "", #PB_Text_Center|#SS_CENTERIMAGE)
    
    HideGadget(#Str_Parametres, 1)
    HideGadget(#Btn_Ok, 1)
    
    ;Polices
    SetGadgetFont(#Btn_Parametres, FontID(#Police2))
    SetGadgetFont(#Btn_Valider, FontID(#Police2))
    SetGadgetFont(#Btn_Ok, FontID(#police3))
    SetGadgetFont(#Str_Parametres, FontID(#police2))
    SetGadgetFont(#Txt_Avertissement, FontID(#Police2))
    
    For i = #Txt_L1 To #Txt_C3
      SetGadgetFont(i, FontID(#Police2))
    Next i
    
    ;Couleurs
    SetWindowColor(#Fenetre_principale, $109217)    
    
    SetGadgetColor(#Txt_Avertissement, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
    SetGadgetColor(#Txt_Avertissement, #PB_Gadget_FrontColor, $84EFEB)
    
    For i = #Txt_L1 To #Txt_C3
      SetGadgetColor(i, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
      SetGadgetColor(i, #PB_Gadget_FrontColor, $84EFEB)
    Next i
    
    For i = #Str_HG To #Str_DB
      SetGadgetColor(i, #PB_Gadget_BackColor, $84EFEB)
    Next i
    
    InitCarre()
    
  EndIf
EndProcedure

Init_Questionnaire()

;- Boucle
Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      
    Case #PB_Event_Gadget
      Select EventGadget()          
        Case #Btn_Parametres
          HideGadget(#Str_Parametres, 0)
          HideGadget(#Btn_Ok, 0)
        Case #Str_Parametres
        Case #Btn_Ok
          NombreMagique = Val(GetGadgetText(#Str_Parametres))
          If NombreMagique
            SetGadgetText(#Txt_Avertissement, "")
            InitCarre()
          EndIf 
          HideGadget(#Str_Parametres, 1)
          HideGadget(#Btn_Ok, 1)
        Case #Btn_Valider
          Afficher()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver

Re: Comment savoir si une grille est pleine

Publié : jeu. 17/août/2017 10:35
par Marc56
Hello Micoute,

Je n'ai pas regardé tout le code, mais une solution peut-être de faire un DisableGadget(#Btn_Valider, 1) ou HideGadget(#Btn_Valider, 1) au début.
Ensuite tu créé une procédure qui à chaque saisie, vérifie avec GetGadetText que les 9 cases contiennent du texte.
Si oui, alors tu réactives ou affiches le bouton valider

:wink:

Re: Comment savoir si une grille est pleine

Publié : jeu. 17/août/2017 11:13
par Micoute
Grand merci Marc56, c'était une bonne idée, fort simple à réaliser.