Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DES CHIFFRES (PAS DES LETTRES)


Information sur la source

Catégorie :Jeux Source .NET ( DotNet ) Classé sous : index, tag, arbre, chiffre Niveau : Débutant Date de création : 16/01/2007 Vu : 8 155

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Ce logiciel recherche la solution exacte (sinon la plus proche) donnant le résultat désiré en fonction des nombres choisis. Les 6 nombres et le résultat sont choisis dans le respect de la règle du jeu.

Le logiciel explore sytématiquement tous les calculs corrects en n'éliminant que les différences nulles, les multiplications par 1 et les divisions non entières. Il affiche successivement tout calcul "meilleur" que le précédent et ne s'arrête que si le compte est bon ou que si l'arbre des tous les calculs correct est complètement exploré.

La vitesse des calculs occulte complètement les affichages intermédiaires et l'oeil ne retient que le dernier calcul !

Cliquez sur le nombre choisi pour l'éliminer. Le résultat peut être donné ou tiré au hasard.
 

Source

  • Public Class Chiffre1
  • '------------------------------------------------
  • Public Retour$ ' "à la ligne" pour écrire un "text" sur plusieurs lignes
  • Public HVtab& ' constante de taille graphique Horizontale ou Verticale (clin d'oeil à l'Apple II)
  • Const LargeurTrait = 3
  • Const SuperTaille = 43
  • Const GrandeTaille = 24
  • Const PetiteTaille = 16
  • '------------------------------------------------
  • ' les chiffres à choisir
  • Public ValeurChoix%(13)
  • Public NombreChoix%(13)
  • Public ButtonChoix(13) As Button
  • Public LabelTraitChoix As Label
  • '------------------------------------------------
  • ' les 6 chiffres choisis
  • Public LabelExplique As Label
  • Public ButtonDonnees(5) As Button
  • Public LabelTraitDonnees As Label
  • '------------------------------------------------
  • ' Le nombre à trouver
  • Public LabelNombre As Label
  • Public TextNombre As TextBox
  • Public SiNoTexte As Boolean
  • Public LabelTraitNombre As Label
  • Public ButtonHasard As Button
  • Public ButtonRien As Button
  • Public LabelSoluce As Label
  • Public ButtonSoluce As Button
  • Public LabelTraitSoluce As Label
  • Public But% ' à trouver ou à approcher
  • '------------------------------------------------
  • ' les données + les résultats des calculs
  • Public Signe$(3) ' de l'opération"
  • Public Chiffre0&(5) ' profondeur du calcul : 0 = données
  • Public Chiffre1&(4)
  • Public Chiffre2&(3)
  • Public Chiffre3&(2)
  • Public Chiffre4&(1)
  • Public Operation%(4) ' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "
  • '------------------------------------------------
  • Public LabelReponse As Label
  • Public LabelTraitReponse As Label
  • '------------------------------------------------
  • Public KelChoix% ' le rang du chiffre choisi
  • Public NombreDonnees% ' déjà choisie
  • Public SiOperationCorrecte(4) As Boolean
  • Public RangOperation%(4)
  • Public RangOperande%(3)
  • Public RangOperateur%(3) ' Operande Operation Operateur = Resultat
  • ' au niveau 4 Operande(4) = 0 et Operateur(4) = 1
  • Public MonResultat&(4)
  • Public Approximation& ' la meilleure solution en cours
  • '------------------------------------------------
  • Public CouleurFond As Color
  • Public CouleurButtonClair As Color
  • Public CouleurButtonFonce As Color
  • '--------------------------------------------------------------------------------------
  • Private Sub Chiffre1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • Dim Rang%, HVChoix&, Ecart&, VDonnees&, HNombre&, VNombre&
  • Const Releve = 5
  • '-------------------
  • Retour = Chr(13)
  • SiNoTexte = True
  • Randomize()
  • '-------------------
  • Signe(0) = "+"
  • Signe(1) = "´"
  • Signe(2) = "-"
  • Signe(3) = "¸"
  • '-------------------
  • CouleurFond = Color.FromArgb(255, 235, 240, 220)
  • CouleurButtonClair = Color.FromArgb(255, 255, 240)
  • CouleurButtonFonce = Color.FromArgb(235, 235, 210)
  • '-------------------
  • Me.Font = New Font("Times New Roman", PetiteTaille, FontStyle.Regular)
  • HVtab = Me.Font.Height
  • Me.BackColor = CouleurFond
  • '-------------------
  • ' Chiffres proposés + leur nombre maximum autorisé
  • For Rang = 0 To 9
  • ValeurChoix(Rang) = Rang + 1
  • NombreChoix(Rang) = 2
  • Next Rang
  • ValeurChoix(10) = 25
  • NombreChoix(10) = 1
  • ValeurChoix(11) = 50
  • NombreChoix(11) = 1
  • ValeurChoix(12) = 75
  • NombreChoix(12) = 1
  • ValeurChoix(13) = 100
  • NombreChoix(13) = 1
  • '-------------------
  • ' choix des chiffres autorisés
  • HVChoix = HVtab * 0.7
  • Ecart = HVtab * 0.2
  • For Rang = 0 To 13
  • ButtonChoix(Rang) = New Button
  • Me.Controls.Add(ButtonChoix(Rang))
  • ButtonChoix(Rang).BackColor = CouleurButtonClair
  • ButtonChoix(Rang).Text = Chaine(ValeurChoix(Rang))
  • ButtonChoix(Rang).Font = New Font("Symbol", GrandeTaille, FontStyle.Bold)
  • ButtonChoix(Rang).Height = HVtab * 2
  • ButtonChoix(Rang).Tag = ValeurChoix(Rang)
  • AddHandler ButtonChoix(Rang).Click, AddressOf ButtonChoix_Click
  • Select Case Rang
  • Case 0 To 8
  • ButtonChoix(Rang).Width = HVtab * 2
  • Case 9 To 12
  • ButtonChoix(Rang).Width = HVtab * 2.5
  • Case Else
  • ButtonChoix(Rang).Width = HVtab * 3.1
  • End Select
  • If Rang = 0 Then
  • ButtonChoix(Rang).Location = New Point(HVChoix, HVChoix)
  • Else
  • ButtonChoix(Rang).Location = New Point(ButtonChoix(Rang - 1).Location.X + _
  • ButtonChoix(Rang - 1).Width + Ecart, _
  • HVChoix)
  • End If
  • ButtonChoix(Rang).TextAlign = ContentAlignment.MiddleCenter
  • Next Rang
  • '-------------------
  • ' on encadre le tout
  • LabelTraitChoix = New Label
  • Me.Controls.Add(LabelTraitChoix)
  • LabelTraitChoix.Location = New Point(ButtonChoix(0).Location.X - Ecart, _
  • ButtonChoix(0).Location.Y - Ecart)
  • LabelTraitChoix.Width = ButtonChoix(13).Location.X + _
  • ButtonChoix(0).Width + Ecart * 4
  • LabelTraitChoix.Height = ButtonChoix(0).Height + Ecart * 2
  • LabelTraitChoix.BorderStyle = BorderStyle.Fixed3D
  • LabelTraitChoix.BackColor = CouleurFond
  • '-------------------
  • ' les 6 chiffres données
  • NombreDonnees = 0
  • VDonnees = LabelTraitChoix.Location.Y + LabelTraitChoix.Height + HVChoix + Ecart
  • LabelExplique = New Label
  • Me.Controls.Add(LabelExplique)
  • LabelExplique.Text = "0 nombre"
  • LabelExplique.Location = New Point(HVChoix, VDonnees)
  • LabelExplique.Width = HVtab * 4.5
  • LabelExplique.Height = HVtab
  • LabelExplique.BorderStyle = BorderStyle.None
  • LabelExplique.TextAlign = ContentAlignment.MiddleCenter
  • LabelExplique.BackColor = CouleurFond
  • For Rang = 0 To 5
  • ButtonDonnees(Rang) = New Button
  • Me.Controls.Add(ButtonDonnees(Rang))
  • ButtonDonnees(Rang).Text = ""
  • ButtonDonnees(Rang).Font = ButtonChoix(Rang).Font
  • ButtonDonnees(Rang).Height = ButtonChoix(0).Height
  • ButtonDonnees(Rang).Width = HVtab * 3.5
  • ButtonDonnees(Rang).Location = New Point(HVChoix + Ecart * 2, LabelExplique.Location.Y + _
  • LabelExplique.Height + Ecart + _
  • (ButtonDonnees(0).Height + Ecart) * Rang)
  • ButtonDonnees(Rang).TextAlign = ContentAlignment.MiddleCenter
  • ButtonDonnees(Rang).Enabled = False
  • ButtonDonnees(Rang).Tag = Rang
  • ButtonDonnees(Rang).BackColor = CouleurButtonFonce
  • AddHandler ButtonDonnees(Rang).Click, AddressOf ButtonDonnees_Click
  • Next Rang
  • LabelTraitDonnees = New Label
  • Me.Controls.Add(LabelTraitDonnees)
  • LabelTraitDonnees.Location = New Point(LabelTraitChoix.Location.X, _
  • LabelTraitChoix.Location.Y + _
  • LabelTraitChoix.Height + HVChoix)
  • LabelTraitDonnees.Width = ButtonDonnees(5).Width + Ecart * 6.1
  • LabelTraitDonnees.Height = ButtonDonnees(5).Location.Y + ButtonDonnees(5).Height - _
  • LabelTraitDonnees.Location.Y + Ecart
  • LabelTraitDonnees.BorderStyle = BorderStyle.Fixed3D
  • LabelTraitDonnees.BackColor = CouleurFond
  • '-------------------
  • VNombre = VDonnees
  • HNombre = LabelTraitDonnees.Location.X + LabelTraitDonnees.Width + HVChoix + Ecart
  • LabelNombre = New Label
  • Me.Controls.Add(LabelNombre)
  • LabelNombre.Text = "Le nombre" + Retour + "cherché :"
  • LabelNombre.Font = New Font("Times New Roman", PetiteTaille, FontStyle.Bold)
  • LabelNombre.Height = HVtab * 2
  • LabelNombre.Width = HVtab * 5
  • LabelNombre.Location = New Point(HNombre, VNombre)
  • LabelNombre.TextAlign = ContentAlignment.TopCenter
  • LabelNombre.BorderStyle = BorderStyle.None
  • LabelNombre.BackColor = CouleurFond
  • TextNombre = New TextBox
  • Me.Controls.Add(TextNombre)
  • TextNombre.Text = ""
  • TextNombre.Font = New Font("Times New Roman", GrandeTaille, FontStyle.Bold)
  • TextNombre.Height = HVtab * 2
  • TextNombre.Width = HVtab * 3
  • TextNombre.Location = New Point(HNombre + HVtab, _
  • ButtonDonnees(1).Location.Y - Ecart * Releve)
  • TextNombre.TextAlign = HorizontalAlignment.Center
  • TextNombre.BorderStyle = BorderStyle.Fixed3D
  • AddHandler TextNombre.TextChanged, AddressOf TextNombre_TextChanged
  • ButtonHasard = New Button
  • Me.Controls.Add(ButtonHasard)
  • ButtonHasard.Text = "Hasard"
  • ButtonHasard.Width = HVtab * 3.9
  • ButtonHasard.Height = HVtab * 1.7
  • AddHandler ButtonHasard.Click, AddressOf ButtonHasard_Click
  • ButtonHasard.BackColor = CouleurButtonClair
  • ButtonHasard.Location = New Point(HNombre + HVtab * 0.5, _
  • ButtonDonnees(2).Location.Y - Ecart * Releve)
  • ButtonRien = New Button
  • Me.Controls.Add(ButtonRien)
  • ButtonRien.Enabled = False
  • ButtonRien.Text = "Annuler"
  • ButtonRien.Width = ButtonHasard.Width
  • ButtonRien.Height = ButtonHasard.Height
  • ButtonRien.BackColor = CouleurButtonFonce
  • AddHandler ButtonRien.Click, AddressOf ButtonRien_Click
  • ButtonRien.Location = New Point(ButtonHasard.Location.X, _
  • ButtonDonnees(3).Location.Y - Ecart * Releve)
  • LabelSoluce = New Label
  • Me.Controls.Add(LabelSoluce)
  • LabelSoluce.Location = New Point(HNombre, ButtonDonnees(4).Location.Y - HVtab * 0.2)
  • LabelSoluce.Width = LabelNombre.Width
  • LabelSoluce.Height = HVtab * 2
  • LabelSoluce.BorderStyle = BorderStyle.None
  • LabelSoluce.Text = "Lancer" + Retour + "le calcul"
  • LabelSoluce.Font = LabelNombre.Font
  • LabelSoluce.TextAlign = ContentAlignment.TopCenter
  • LabelSoluce.BackColor = CouleurFond
  • ButtonSoluce = New Button
  • Me.Controls.Add(ButtonSoluce)
  • ButtonSoluce.Text = "Solution"
  • ButtonSoluce.Width = ButtonHasard.Width
  • ButtonSoluce.Height = ButtonHasard.Height
  • ButtonSoluce.BackColor = CouleurButtonFonce
  • AddHandler ButtonSoluce.Click, AddressOf ButtonSoluce_Click
  • ButtonSoluce.Enabled = False
  • ButtonSoluce.Location = New Point(ButtonRien.Location.X, LabelSoluce.Location.Y + LabelSoluce.Height + HVtab * 0.5)
  • LabelTraitNombre = New Label
  • Me.Controls.Add(LabelTraitNombre)
  • LabelTraitNombre.Location = New Point(HNombre - Ecart * 2.5, LabelTraitDonnees.Location.Y)
  • LabelTraitNombre.Width = HVtab * 6
  • LabelTraitNombre.Height = ButtonRien.Height + ButtonRien.Location.Y + Ecart * 2.5 - _
  • VNombre
  • LabelTraitNombre.BorderStyle = BorderStyle.Fixed3D
  • LabelTraitNombre.BackColor = CouleurFond
  • LabelTraitSoluce = New Label
  • Me.Controls.Add(LabelTraitSoluce)
  • LabelTraitSoluce.Location = New Point(LabelTraitNombre.Location.X, _
  • LabelTraitNombre.Location.Y + _
  • LabelTraitNombre.Height + HVtab - Ecart * 2)
  • LabelTraitSoluce.Width = LabelTraitNombre.Width
  • LabelTraitSoluce.Height = ButtonSoluce.Height + ButtonSoluce.Location.Y - _
  • LabelTraitSoluce.Location.Y + Ecart * 2
  • LabelTraitSoluce.BorderStyle = BorderStyle.Fixed3D
  • LabelTraitSoluce.BackColor = CouleurFond
  • '-------------------
  • LabelReponse = New Label
  • Me.Controls.Add(LabelReponse)
  • LabelTraitReponse = New Label
  • Me.Controls.Add(LabelTraitReponse)
  • LabelTraitReponse.Location = New Point(LabelTraitNombre.Location.X + _
  • LabelTraitNombre.Width + Ecart * 2, _
  • LabelTraitNombre.Location.Y)
  • LabelTraitReponse.Width = LabelTraitChoix.Location.X + LabelTraitChoix.Width - _
  • LabelTraitReponse.Location.X
  • LabelTraitReponse.Height = LabelTraitDonnees.Location.Y + LabelTraitDonnees.Height - _
  • LabelTraitReponse.Location.Y
  • LabelTraitReponse.BorderStyle = BorderStyle.Fixed3D
  • LabelTraitReponse.BackColor = CouleurFond
  • LabelReponse.Location = New Point(LabelTraitReponse.Location.X + HVtab * 0.5, _
  • LabelTraitReponse.Location.Y + HVtab * 0.2)
  • LabelReponse.Width = LabelTraitReponse.Width - HVtab
  • LabelReponse.Height = LabelTraitReponse.Height - HVtab * 0.7
  • LabelReponse.BorderStyle = BorderStyle.None
  • LabelReponse.Text = ""
  • LabelReponse.Font = New Font("Symbol", SuperTaille, FontStyle.Bold)
  • LabelReponse.BackColor = CouleurFond
  • '-------------------
  • Me.Height = LabelTraitDonnees.Location.Y + LabelTraitDonnees.Height + HVChoix + Ecart * 6
  • Me.Location = New Point(HVtab, HVtab)
  • Me.Width = LabelTraitChoix.Location.X + LabelTraitChoix.Width + HVChoix + Ecart
  • Me.Text = " Des chiffres par Jacques BOURDEAU :"
  • '-------------------
  • SiNoTexte = False
  • End Sub
  • '--------------------------------------------------------------------------------------
  • Function Chaine$(ByVal Nombre&)
  • Return Trim(Str(Nombre))
  • End Function
  • '--------------------------------------------------------------------------------------
  • Private Sub ButtonDonnees_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)
  • ButtonDonnees(Sender.Tag).Text = ""
  • ButtonDonnees(Sender.Tag).Enabled = False
  • ButtonDonnees(Sender.Tag).BackColor = CouleurButtonFonce
  • NombreDonnees = NombreDonnees - 1
  • Call VerifieMaximum()
  • End Sub
  • '--------------------------------------------------------------------------------------
  • Private Sub ButtonChoix_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)
  • Dim Rang%
  • If NombreDonnees > 5 Then
  • Exit Sub
  • End If
  • KelChoix = Sender.tag
  • Rang = 0
  • While Len(ButtonDonnees(Rang).Text.Trim) > 0
  • Rang = Rang + 1
  • End While
  • ButtonDonnees(Rang).Text = Chaine(KelChoix)
  • ButtonDonnees(Rang).Enabled = True
  • ButtonDonnees(Rang).BackColor = CouleurButtonClair
  • NombreDonnees = NombreDonnees + 1
  • Call VerifieMaximum()
  • ButtonSoluce.Enabled = (NombreDonnees = 6) And (Val(TextNombre.Text) > 100)
  • If ButtonSoluce.Enabled Then
  • ButtonSoluce.BackColor = CouleurButtonClair
  • Else
  • ButtonSoluce.BackColor = CouleurButtonFonce
  • End If
  • End Sub
  • '--------------------------------------------------------------------------------------
  • Private Sub TextNombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
  • Dim Texte$, NewTexte$, Lettre$
  • If SiNoTexte Then Exit Sub
  • SiNoTexte = True
  • Texte = TextNombre.Text
  • If Len(Texte) > 3 Then
  • Texte = Texte.Substring(0, 3)
  • End If
  • NewTexte = ""
  • While (Len(Texte) > 0)
  • Lettre = Texte.Chars(0)
  • If (Lettre >= "0") And (Lettre <= "9") Then
  • NewTexte = NewTexte + Lettre
  • End If
  • Texte = Texte.Substring(1)
  • End While
  • TextNombre.Text = NewTexte
  • ButtonSoluce.Enabled = (Val(NewTexte) > 100) And (NombreDonnees = 6)
  • If ButtonSoluce.Enabled Then
  • ButtonSoluce.BackColor = CouleurButtonClair
  • Else
  • ButtonSoluce.BackColor = CouleurButtonFonce
  • End If
  • ButtonRien.Enabled = Len(NewTexte) > 0
  • If ButtonRien.Enabled Then
  • ButtonRien.BackColor = CouleurButtonClair
  • Else
  • ButtonRien.BackColor = CouleurButtonFonce
  • End If
  • TextNombre.SelectionStart = Len(TextNombre.Text)
  • SiNoTexte = False
  • End Sub
  • '--------------------------------------------------------------------------------------
  • 'vérifie si le nombre maximum de chiffres est atteint
  • Sub VerifieMaximum()
  • Dim Rang%, Place%, NombreChiffre%(13)
  • For Rang = 0 To 13
  • NombreChiffre(Rang) = 0
  • Next Rang
  • For Place = 0 To 5
  • If Len(ButtonDonnees(Place).Text) > 0 Then
  • Rang = RangNombre(Val(ButtonDonnees(Place).Text))
  • NombreChiffre(Rang) = NombreChiffre(Rang) + 1
  • End If
  • Next Place
  • If NombreDonnees < 6 Then
  • ButtonSoluce.Enabled = False
  • For Rang = 0 To 13
  • ButtonChoix(Rang).Enabled = (NombreChiffre(Rang) < NombreChoix(Rang))
  • Next Rang
  • Else
  • For Rang = 0 To 13
  • ButtonChoix(Rang).Enabled = False
  • Next Rang
  • End If
  • For Rang = 0 To 13
  • If ButtonChoix(Rang).Enabled Then
  • ButtonChoix(Rang).BackColor = CouleurButtonClair
  • Else
  • ButtonChoix(Rang).BackColor = CouleurButtonFonce
  • End If
  • Next Rang
  • Select Case NombreDonnees
  • Case 0
  • LabelExplique.Text = "0 nombre"
  • Case 1
  • LabelExplique.Text = "1 nombre"
  • Case Else
  • LabelExplique.Text = Chaine(NombreDonnees) + " nombres"
  • End Select
  • End Sub
  • '--------------------------------------------------------------------------------------
  • Public Function RangNombre%(ByVal KelChiffre%)
  • Dim Reponse%, Rang%
  • Reponse = -1
  • For Rang = 0 To 13
  • If ValeurChoix(Rang) = KelChiffre Then
  • Reponse = Rang
  • End If
  • Next Rang
  • Return Reponse
  • End Function
  • '--------------------------------------------------------------------------------------
  • Private Sub ButtonRien_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  • TextNombre.Text = ""
  • ButtonRien.Enabled = False
  • ButtonRien.BackColor = CouleurButtonFonce
  • ButtonSoluce.Enabled = False
  • ButtonSoluce.BackColor = CouleurButtonFonce
  • End Sub
  • '--------------------------------------------------------------------------------------
  • Private Sub ButtonHasard_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  • Dim Koi%
  • Koi = 0
  • Randomize()
  • While (Koi < 101) Or (Koi > 999)
  • Koi = CInt(1000 * Rnd())
  • End While
  • SiNoTexte = True
  • TextNombre.Text = Chaine(Koi)
  • ButtonRien.Enabled = True
  • ButtonRien.BackColor = CouleurButtonClair
  • ButtonSoluce.Enabled = (NombreDonnees = 6)
  • If ButtonSoluce.Enabled Then
  • ButtonSoluce.BackColor = CouleurButtonClair
  • Else
  • ButtonSoluce.BackColor = CouleurButtonFonce
  • End If
  • SiNoTexte = False
  • End Sub
  • '--------------------------------------------------------------------------------------
  • Private Sub ButtonSoluce_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  • Dim Rang%, Place%, Relais%, Envoi%
  • Dim EncoreTri As Boolean
  • Dim EncoreCherche(5) As Boolean
  • 'Public Operation%(5) ' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "
  • 'Public Resultat%(5) ' de l'opération
  • 'Public RangOperation%(5)
  • 'Public RangOperande%(5)
  • 'Public RangOperateur%(5) ' Operande Operation Operateur = Resultat
  • 'prépare la saisie des données
  • For Rang = 0 To 5
  • Chiffre0(Rang) = 0
  • Next Rang
  • 'saisie + tri des données
  • For Rang = 0 To 5
  • Chiffre0(Rang) = Val(ButtonDonnees(Rang).Text)
  • If Rang > 0 Then
  • Place = Rang
  • EncoreTri = (Chiffre0(Place - 1) < Chiffre0(Place))
  • While EncoreTri
  • Relais = Chiffre0(Place - 1)
  • Chiffre0(Place - 1) = Chiffre0(Place)
  • Chiffre0(Place) = Relais
  • If Place > 0 Then
  • Place = Place - 1
  • If Place > 0 Then
  • EncoreTri = (Chiffre0(Place - 1) < Chiffre0(Place))
  • Else
  • EncoreTri = False
  • End If
  • Else
  • EncoreTri = False
  • End If
  • End While
  • End If
  • Next
  • But = Val(TextNombre.Text)
  • EncoreCherche(0) = True
  • RangOperation(0) = 0
  • RangOperande(0) = 0
  • RangOperateur(0) = 1
  • Approximation = 0
  • While EncoreCherche(0)
  • MonResultat(0) = Resultat(0)
  • If SiOperationCorrecte(0) Then
  • If Math.Abs(MonResultat(0) - But) < Math.Abs(Approximation - But) Then
  • Approximation = MonResultat(0)
  • Call MontrerSoluce(0)
  • End If
  • If Approximation = But Then
  • EncoreCherche(0) = False
  • Else ' passant au niveau suivant
  • 'passons au niveau 1
  • EncoreCherche(1) = True
  • RangOperation(1) = 0
  • RangOperande(1) = 0
  • RangOperateur(1) = 1
  • 'préparer le niveau suivant
  • Envoi = 1
  • Chiffre1(0) = MonResultat(0)
  • For Rang = 0 To 5
  • If (Rang <> RangOperateur(0)) And (Rang <> RangOperande(0)) Then
  • Chiffre1(Envoi) = Chiffre0(Rang)
  • Place = Envoi
  • EncoreTri = (Chiffre1(Place - 1) < Chiffre1(Place))
  • While EncoreTri
  • Relais = Chiffre1(Place - 1)
  • Chiffre1(Place - 1) = Chiffre1(Place)
  • Chiffre1(Place) = Relais
  • If Place > 0 Then
  • Place = Place - 1
  • If Place > 0 Then
  • EncoreTri = (Chiffre1(Place - 1) < Chiffre1(Place))
  • Else
  • EncoreTri = False
  • End If
  • Else
  • EncoreTri = False
  • End If
  • End While
  • Envoi = Envoi + 1
  • End If
  • Next
  • While EncoreCherche(1)
  • MonResultat(1) = Resultat(1)
  • If SiOperationCorrecte(1) Then
  • If Math.Abs(MonResultat(1) - But) < Math.Abs(Approximation - But) Then
  • Approximation = MonResultat(1)
  • Call MontrerSoluce(1)
  • End If
  • If Approximation = But Then
  • EncoreCherche(1) = False
  • Else ' passant au niveau suivant
  • 'passons au niveau 2
  • EncoreCherche(2) = True
  • RangOperation(2) = 0
  • RangOperande(2) = 0
  • RangOperateur(2) = 1
  • 'préparer le niveau suivant
  • Envoi = 1 ' on ajoute les nombres restants après le résultat
  • Chiffre2(0) = MonResultat(1)
  • For Rang = 0 To 4
  • If (Rang <> RangOperateur(1)) And (Rang <> RangOperande(1)) Then
  • Chiffre2(Envoi) = Chiffre1(Rang)
  • Place = Envoi
  • EncoreTri = (Chiffre2(Place - 1) < Chiffre2(Place))
  • While EncoreTri
  • Relais = Chiffre2(Place - 1)
  • Chiffre2(Place - 1) = Chiffre2(Place)
  • Chiffre2(Place) = Relais
  • If Place > 0 Then
  • Place = Place - 1
  • If Place > 0 Then
  • EncoreTri = (Chiffre2(Place - 1) < Chiffre2(Place))
  • Else
  • EncoreTri = False
  • End If
  • Else
  • EncoreTri = False
  • End If
  • End While
  • Envoi = Envoi + 1
  • End If
  • Next
  • While EncoreCherche(2)
  • MonResultat(2) = Resultat(2)
  • If SiOperationCorrecte(2) Then
  • If Math.Abs(MonResultat(2) - But) < Math.Abs(Approximation - But) Then
  • Approximation = MonResultat(2)
  • Call MontrerSoluce(2)
  • End If
  • If Approximation = But Then
  • EncoreCherche(2) = False
  • Else ' passant au niveau suivant
  • 'passons au niveau 3
  • EncoreCherche(3) = True
  • RangOperation(3) = 0
  • RangOperande(3) = 0
  • RangOperateur(3) = 1
  • 'préparer le niveau suivant
  • Envoi = 1 ' on ajoute les nombres restants après le résultat
  • Chiffre3(0) = MonResultat(2)
  • For Rang = 0 To 3
  • If (Rang <> RangOperateur(2)) And (Rang <> RangOperande(2)) Then
  • Chiffre3(Envoi) = Chiffre2(Rang)
  • Place = Envoi
  • EncoreTri = (Chiffre3(Place - 1) < Chiffre3(Place))
  • While EncoreTri
  • Relais = Chiffre3(Place - 1)
  • Chiffre3(Place - 1) = Chiffre3(Place)
  • Chiffre3(Place) = Relais
  • If Place > 0 Then
  • Place = Place - 1
  • If Place > 0 Then
  • EncoreTri = (Chiffre3(Place - 1) < Chiffre3(Place))
  • Else
  • EncoreTri = False
  • End If
  • Else
  • EncoreTri = False
  • End If
  • End While
  • Envoi = Envoi + 1
  • End If
  • Next
  • While EncoreCherche(3)
  • MonResultat(3) = Resultat(3)
  • If SiOperationCorrecte(3) Then
  • If Math.Abs(MonResultat(3) - But) < Math.Abs(Approximation - But) Then
  • Approximation = MonResultat(3)
  • Call MontrerSoluce(3)
  • End If
  • If Approximation = But Then
  • EncoreCherche(3) = False
  • Else ' passant au niveau suivant
  • EncoreCherche(4) = True
  • RangOperation(4) = 0
  • 'préparer le niveau suivant
  • Chiffre4(0) = MonResultat(3)
  • For Rang = 0 To 2
  • If (Rang <> RangOperateur(3)) And (Rang <> RangOperande(3)) Then
  • Chiffre4(1) = Chiffre3(Rang)
  • End If
  • Next
  • If Chiffre4(1) > Chiffre4(0) Then
  • Relais = Chiffre4(1)
  • Chiffre4(1) = Chiffre4(0)
  • Chiffre4(0) = Relais
  • End If
  • While EncoreCherche(4)
  • MonResultat(4) = Resultat(4)
  • If SiOperationCorrecte(4) Then
  • If Math.Abs(MonResultat(4) - But) < Math.Abs(Approximation - But) Then
  • Approximation = MonResultat(4)
  • Call MontrerSoluce(4)
  • End If
  • If Approximation = But Then
  • EncoreCherche(4) = False
  • End If
  • End If
  • If RangOperation(4) < 3 Then
  • RangOperation(4) = RangOperation(4) + 1
  • Else
  • EncoreCherche(4) = False
  • End If
  • End While
  • End If
  • End If
  • If RangOperation(3) < 3 Then
  • RangOperation(3) = RangOperation(3) + 1
  • ElseIf RangOperateur(3) < 2 Then
  • RangOperation(3) = 0
  • RangOperateur(3) = RangOperateur(3) + 1
  • Else
  • If RangOperande(3) < 1 Then
  • RangOperande(3) = RangOperande(3) + 1
  • RangOperateur(3) = RangOperande(3) + 1
  • Else
  • EncoreCherche(3) = False
  • End If
  • End If
  • End While
  • End If
  • End If
  • If RangOperation(2) < 3 Then
  • RangOperation(2) = RangOperation(2) + 1
  • ElseIf RangOperateur(2) < 3 Then
  • RangOperation(2) = 0
  • RangOperateur(2) = RangOperateur(2) + 1
  • Else
  • If RangOperande(2) < 2 Then
  • RangOperande(2) = RangOperande(2) + 1
  • RangOperateur(2) = RangOperande(2) + 1
  • Else
  • EncoreCherche(2) = False
  • End If
  • End If
  • End While
  • End If
  • End If
  • If RangOperation(1) < 3 Then
  • RangOperation(1) = RangOperation(1) + 1
  • ElseIf RangOperateur(1) < 4 Then
  • RangOperation(1) = 0
  • RangOperateur(1) = RangOperateur(1) + 1
  • Else
  • If RangOperande(1) < 3 Then
  • RangOperande(1) = RangOperande(1) + 1
  • RangOperateur(1) = RangOperande(1) + 1
  • Else
  • EncoreCherche(1) = False
  • End If
  • End If
  • End While
  • End If
  • End If
  • If RangOperation(0) < 3 Then
  • RangOperation(0) = RangOperation(0) + 1
  • ElseIf RangOperateur(0) < 5 Then
  • RangOperation(0) = 0
  • RangOperateur(0) = RangOperateur(0) + 1
  • Else
  • If RangOperande(0) < 4 Then
  • RangOperande(0) = RangOperande(0) + 1
  • RangOperateur(0) = RangOperande(0) + 1
  • Else
  • EncoreCherche(0) = False
  • End If
  • End If
  • End While
  • End Sub
  • '--------------------------------------------------------------------------------------
  • Function Resultat&(ByVal KelNiveau%)
  • Dim KelResultat&
  • ' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "
  • Select Case KelNiveau
  • Case 0
  • Select Case RangOperation(0)
  • Case 0
  • SiOperationCorrecte(0) = True
  • KelResultat = Chiffre0(RangOperande(0)) + Chiffre0(RangOperateur(0))
  • Case 1
  • SiOperationCorrecte(0) = (Chiffre0(RangOperateur(0)) > 1)
  • KelResultat = Chiffre0(RangOperande(0)) * Chiffre0(RangOperateur(0))
  • Case 2
  • SiOperationCorrecte(0) = (Chiffre0(RangOperande(0)) > Chiffre0(RangOperateur(0)))
  • KelResultat = Chiffre0(RangOperande(0)) - Chiffre0(RangOperateur(0))
  • Case Else
  • SiOperationCorrecte(0) = ((Chiffre0(RangOperande(0)) Mod _
  • Chiffre0(RangOperateur(0))) = 0)
  • If Chiffre0(RangOperateur(0)) < 2 Then SiOperationCorrecte(0) = False
  • KelResultat = Chiffre0(RangOperande(0)) \ Chiffre0(RangOperateur(0))
  • End Select
  • Case 1
  • Select Case RangOperation(1)
  • Case 0
  • SiOperationCorrecte(1) = True
  • KelResultat = Chiffre1(RangOperande(1)) + Chiffre1(RangOperateur(1))
  • Case 1
  • SiOperationCorrecte(1) = (Chiffre1(RangOperateur(1)) > 1)
  • KelResultat = Chiffre1(RangOperande(1)) * Chiffre1(RangOperateur(1))
  • Case 2
  • SiOperationCorrecte(1) = (Chiffre1(RangOperande(1)) > Chiffre1(RangOperateur(1)))
  • KelResultat = Chiffre1(RangOperande(1)) - Chiffre1(RangOperateur(1))
  • Case Else
  • SiOperationCorrecte(1) = ((Chiffre1(RangOperande(1)) Mod _
  • Chiffre1(RangOperateur(1))) = 0)
  • If Chiffre1(RangOperateur(1)) < 2 Then SiOperationCorrecte(1) = False
  • KelResultat = Chiffre1(RangOperande(1)) \ Chiffre1(RangOperateur(1))
  • End Select
  • Case 2
  • Select Case RangOperation(2)
  • Case 0
  • SiOperationCorrecte(2) = True
  • KelResultat = Chiffre2(RangOperande(2)) + Chiffre2(RangOperateur(2))
  • Case 1
  • SiOperationCorrecte(2) = (Chiffre2(RangOperateur(2)) > 1)
  • KelResultat = Chiffre2(RangOperande(2)) * Chiffre2(RangOperateur(2))
  • Case 2
  • SiOperationCorrecte(2) = (Chiffre2(RangOperande(2)) > Chiffre2(RangOperateur(2)))
  • KelResultat = Chiffre2(RangOperande(2)) - Chiffre2(RangOperateur(2))
  • Case Else
  • SiOperationCorrecte(2) = ((Chiffre2(RangOperande(2)) Mod _
  • Chiffre2(RangOperateur(2))) = 0)
  • If Chiffre2(RangOperateur(2)) < 2 Then SiOperationCorrecte(2) = False
  • KelResultat = Chiffre2(RangOperande(2)) \ Chiffre2(RangOperateur(2))
  • End Select
  • Case 3
  • Select Case RangOperation(3)
  • Case 0
  • SiOperationCorrecte(3) = True
  • KelResultat = Chiffre3(RangOperande(3)) + Chiffre3(RangOperateur(3))
  • Case 1
  • SiOperationCorrecte(3) = (Chiffre3(RangOperateur(3)) > 1)
  • KelResultat = Chiffre3(RangOperande(3)) * Chiffre3(RangOperateur(3))
  • Case 2
  • SiOperationCorrecte(3) = (Chiffre3(RangOperande(3)) > Chiffre3(RangOperateur(3)))
  • KelResultat = Chiffre3(RangOperande(3)) - Chiffre3(RangOperateur(3))
  • Case Else
  • SiOperationCorrecte(3) = ((Chiffre3(RangOperande(3)) Mod _
  • Chiffre3(RangOperateur(3))) = 0)
  • If Chiffre3(RangOperateur(3)) < 2 Then SiOperationCorrecte(3) = False
  • KelResultat = Chiffre3(RangOperande(3)) \ Chiffre3(RangOperateur(3))
  • End Select
  • Case 4
  • Select Case RangOperation(4)
  • Case 0
  • SiOperationCorrecte(4) = True
  • KelResultat = Chiffre4(0) + Chiffre4(1)
  • Case 1
  • SiOperationCorrecte(4) = (Chiffre4(1) > 1)
  • KelResultat = Chiffre4(0) * Chiffre4(1)
  • Case 2
  • SiOperationCorrecte(4) = (Chiffre4(0) > Chiffre4(1))
  • KelResultat = Chiffre4(0) - Chiffre4(1)
  • Case Else
  • SiOperationCorrecte(4) = ((Chiffre4(0) Mod Chiffre4(1)) = 0)
  • If Chiffre4(1) < 2 Then SiOperationCorrecte(4) = False
  • KelResultat = Chiffre4(0) \ Chiffre4(1)
  • End Select
  • End Select
  • If KelResultat = 0 Then SiOperationCorrecte(KelNiveau) = False
  • Return KelResultat
  • End Function
  • '--------------------------------------------------------------------------------------
  • Sub MontrerSoluce(ByVal KelNiveau%)
  • LabelReponse.Text = ""
  • LabelReponse.Text = LabelReponse.Text + _
  • Chaine(Chiffre0(RangOperande(0))) + " " + _
  • Signe(RangOperation(0)) + " " + _
  • Chaine(Chiffre0(RangOperateur(0))) + " = " + _
  • Chaine(MonResultat(0))
  • If KelNiveau > 0 Then
  • LabelReponse.Text = LabelReponse.Text + Retour + _
  • Chaine(Chiffre1(RangOperande(1))) + " " + _
  • Signe(RangOperation(1)) + " " + _
  • Chaine(Chiffre1(RangOperateur(1))) + " = " + _
  • Chaine(MonResultat(1))
  • End If
  • If KelNiveau > 1 Then
  • LabelReponse.Text = LabelReponse.Text + Retour + _
  • Chaine(Chiffre2(RangOperande(2))) + " " + _
  • Signe(RangOperation(2)) + " " + _
  • Chaine(Chiffre2(RangOperateur(2))) + " = " + _
  • Chaine(MonResultat(2))
  • End If
  • If KelNiveau > 2 Then
  • LabelReponse.Text = LabelReponse.Text + Retour + _
  • Chaine(Chiffre3(RangOperande(3))) + " " + _
  • Signe(RangOperation(3)) + " " + _
  • Chaine(Chiffre3(RangOperateur(3))) + " = " + _
  • Chaine(MonResultat(3))
  • End If
  • If KelNiveau > 3 Then
  • LabelReponse.Text = LabelReponse.Text + Retour + _
  • Chaine(Chiffre4(0)) + " " + _
  • Signe(RangOperation(4)) + " " + _
  • Chaine(Chiffre4(1)) + " = " + _
  • Chaine(MonResultat(4))
  • End If
  • End Sub
  • '--------------------------------------------------------------------------------------
  • End Class
  • '--------------------------------------------------------------------------------------
Public Class Chiffre1

  '------------------------------------------------

  Public Retour$ ' "à la ligne" pour écrire un "text" sur plusieurs lignes

  Public HVtab& ' constante de taille graphique Horizontale ou Verticale (clin d'oeil à l'Apple II) 
  Const LargeurTrait = 3
  Const SuperTaille = 43
  Const GrandeTaille = 24
  Const PetiteTaille = 16

  '------------------------------------------------
  ' les chiffres à choisir
  Public ValeurChoix%(13)
  Public NombreChoix%(13)
  Public ButtonChoix(13) As Button
  Public LabelTraitChoix As Label

  '------------------------------------------------
  ' les 6 chiffres choisis
  Public LabelExplique As Label
  Public ButtonDonnees(5) As Button
  Public LabelTraitDonnees As Label

  '------------------------------------------------
  ' Le nombre à trouver

  Public LabelNombre As Label
  Public TextNombre As TextBox
  Public SiNoTexte As Boolean
  Public LabelTraitNombre As Label
  Public ButtonHasard As Button
  Public ButtonRien As Button
  Public LabelSoluce As Label
  Public ButtonSoluce As Button
  Public LabelTraitSoluce As Label
  Public But% ' à trouver ou à approcher

  '------------------------------------------------
  ' les données + les résultats des calculs

  Public Signe$(3) ' de l'opération"
  Public Chiffre0&(5) ' profondeur du calcul : 0 = données
  Public Chiffre1&(4)
  Public Chiffre2&(3)
  Public Chiffre3&(2)
  Public Chiffre4&(1)

  Public Operation%(4) ' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "

  '------------------------------------------------

  Public LabelReponse As Label
  Public LabelTraitReponse As Label

  '------------------------------------------------

  Public KelChoix% ' le rang du chiffre choisi
  Public NombreDonnees% ' déjà choisie

  Public SiOperationCorrecte(4) As Boolean
  Public RangOperation%(4)
  Public RangOperande%(3)
  Public RangOperateur%(3) ' Operande Operation Operateur = Resultat
  ' au niveau 4 Operande(4) = 0 et Operateur(4) = 1
  Public MonResultat&(4)
  Public Approximation& ' la meilleure solution en cours

  '------------------------------------------------

  Public CouleurFond As Color
  Public CouleurButtonClair As Color
  Public CouleurButtonFonce As Color

  '--------------------------------------------------------------------------------------
  Private Sub Chiffre1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim Rang%, HVChoix&, Ecart&, VDonnees&, HNombre&, VNombre&
    Const Releve = 5

    '-------------------

    Retour = Chr(13)
    SiNoTexte = True
    Randomize()

    '-------------------
    Signe(0) = "+"
    Signe(1) = "´"
    Signe(2) = "-"
    Signe(3) = "¸"

    '-------------------

    CouleurFond = Color.FromArgb(255, 235, 240, 220)
    CouleurButtonClair = Color.FromArgb(255, 255, 240)
    CouleurButtonFonce = Color.FromArgb(235, 235, 210)

    '-------------------
    Me.Font = New Font("Times New Roman", PetiteTaille, FontStyle.Regular)
    HVtab = Me.Font.Height
    Me.BackColor = CouleurFond
    '-------------------
    ' Chiffres proposés + leur nombre maximum autorisé

    For Rang = 0 To 9
      ValeurChoix(Rang) = Rang + 1
      NombreChoix(Rang) = 2
    Next Rang

    ValeurChoix(10) = 25
    NombreChoix(10) = 1

    ValeurChoix(11) = 50
    NombreChoix(11) = 1

    ValeurChoix(12) = 75
    NombreChoix(12) = 1

    ValeurChoix(13) = 100
    NombreChoix(13) = 1

    '-------------------
    ' choix des chiffres autorisés

    HVChoix = HVtab * 0.7
    Ecart = HVtab * 0.2

    For Rang = 0 To 13
      ButtonChoix(Rang) = New Button
      Me.Controls.Add(ButtonChoix(Rang))
      ButtonChoix(Rang).BackColor = CouleurButtonClair
      ButtonChoix(Rang).Text = Chaine(ValeurChoix(Rang))
      ButtonChoix(Rang).Font = New Font("Symbol", GrandeTaille, FontStyle.Bold)
      ButtonChoix(Rang).Height = HVtab * 2
      ButtonChoix(Rang).Tag = ValeurChoix(Rang)
      AddHandler ButtonChoix(Rang).Click, AddressOf ButtonChoix_Click
      Select Case Rang
        Case 0 To 8
          ButtonChoix(Rang).Width = HVtab * 2
        Case 9 To 12
          ButtonChoix(Rang).Width = HVtab * 2.5
        Case Else
          ButtonChoix(Rang).Width = HVtab * 3.1
      End Select
      If Rang = 0 Then
        ButtonChoix(Rang).Location = New Point(HVChoix, HVChoix)
      Else
        ButtonChoix(Rang).Location = New Point(ButtonChoix(Rang - 1).Location.X + _
                                               ButtonChoix(Rang - 1).Width + Ecart, _
                                               HVChoix)
      End If

      ButtonChoix(Rang).TextAlign = ContentAlignment.MiddleCenter
    Next Rang

    '-------------------
    ' on encadre le tout

    LabelTraitChoix = New Label
    Me.Controls.Add(LabelTraitChoix)

    LabelTraitChoix.Location = New Point(ButtonChoix(0).Location.X - Ecart, _
                                         ButtonChoix(0).Location.Y - Ecart)
    LabelTraitChoix.Width = ButtonChoix(13).Location.X + _
                            ButtonChoix(0).Width + Ecart * 4
    LabelTraitChoix.Height = ButtonChoix(0).Height + Ecart * 2
    LabelTraitChoix.BorderStyle = BorderStyle.Fixed3D
    LabelTraitChoix.BackColor = CouleurFond

    '-------------------
    ' les 6 chiffres données

    NombreDonnees = 0
    VDonnees = LabelTraitChoix.Location.Y + LabelTraitChoix.Height + HVChoix + Ecart

    LabelExplique = New Label
    Me.Controls.Add(LabelExplique)
    LabelExplique.Text = "0 nombre"
    LabelExplique.Location = New Point(HVChoix, VDonnees)
    LabelExplique.Width = HVtab * 4.5
    LabelExplique.Height = HVtab
    LabelExplique.BorderStyle = BorderStyle.None
    LabelExplique.TextAlign = ContentAlignment.MiddleCenter
    LabelExplique.BackColor = CouleurFond

    For Rang = 0 To 5
      ButtonDonnees(Rang) = New Button
      Me.Controls.Add(ButtonDonnees(Rang))
      ButtonDonnees(Rang).Text = ""
      ButtonDonnees(Rang).Font = ButtonChoix(Rang).Font
      ButtonDonnees(Rang).Height = ButtonChoix(0).Height
      ButtonDonnees(Rang).Width = HVtab * 3.5
      ButtonDonnees(Rang).Location = New Point(HVChoix + Ecart * 2, LabelExplique.Location.Y + _
                                              LabelExplique.Height + Ecart + _
                                              (ButtonDonnees(0).Height + Ecart) * Rang)
      ButtonDonnees(Rang).TextAlign = ContentAlignment.MiddleCenter
      ButtonDonnees(Rang).Enabled = False
      ButtonDonnees(Rang).Tag = Rang
      ButtonDonnees(Rang).BackColor = CouleurButtonFonce
      AddHandler ButtonDonnees(Rang).Click, AddressOf ButtonDonnees_Click

    Next Rang

    LabelTraitDonnees = New Label
    Me.Controls.Add(LabelTraitDonnees)
    LabelTraitDonnees.Location = New Point(LabelTraitChoix.Location.X, _
                                           LabelTraitChoix.Location.Y + _
                                           LabelTraitChoix.Height + HVChoix)
    LabelTraitDonnees.Width = ButtonDonnees(5).Width + Ecart * 6.1
    LabelTraitDonnees.Height = ButtonDonnees(5).Location.Y + ButtonDonnees(5).Height - _
                               LabelTraitDonnees.Location.Y + Ecart
    LabelTraitDonnees.BorderStyle = BorderStyle.Fixed3D
    LabelTraitDonnees.BackColor = CouleurFond

    '-------------------

    VNombre = VDonnees
    HNombre = LabelTraitDonnees.Location.X + LabelTraitDonnees.Width + HVChoix + Ecart

    LabelNombre = New Label
    Me.Controls.Add(LabelNombre)
    LabelNombre.Text = "Le nombre" + Retour + "cherché :"
    LabelNombre.Font = New Font("Times New Roman", PetiteTaille, FontStyle.Bold)
    LabelNombre.Height = HVtab * 2
    LabelNombre.Width = HVtab * 5
    LabelNombre.Location = New Point(HNombre, VNombre)
    LabelNombre.TextAlign = ContentAlignment.TopCenter
    LabelNombre.BorderStyle = BorderStyle.None
    LabelNombre.BackColor = CouleurFond

    TextNombre = New TextBox
    Me.Controls.Add(TextNombre)
    TextNombre.Text = ""
    TextNombre.Font = New Font("Times New Roman", GrandeTaille, FontStyle.Bold)
    TextNombre.Height = HVtab * 2
    TextNombre.Width = HVtab * 3
    TextNombre.Location = New Point(HNombre + HVtab, _
                              ButtonDonnees(1).Location.Y - Ecart * Releve)
    TextNombre.TextAlign = HorizontalAlignment.Center
    TextNombre.BorderStyle = BorderStyle.Fixed3D
    AddHandler TextNombre.TextChanged, AddressOf TextNombre_TextChanged

    ButtonHasard = New Button
    Me.Controls.Add(ButtonHasard)
    ButtonHasard.Text = "Hasard"
    ButtonHasard.Width = HVtab * 3.9
    ButtonHasard.Height = HVtab * 1.7
    AddHandler ButtonHasard.Click, AddressOf ButtonHasard_Click
    ButtonHasard.BackColor = CouleurButtonClair
    ButtonHasard.Location = New Point(HNombre + HVtab * 0.5, _
                                      ButtonDonnees(2).Location.Y - Ecart * Releve)
    ButtonRien = New Button
    Me.Controls.Add(ButtonRien)
    ButtonRien.Enabled = False
    ButtonRien.Text = "Annuler"
    ButtonRien.Width = ButtonHasard.Width
    ButtonRien.Height = ButtonHasard.Height
    ButtonRien.BackColor = CouleurButtonFonce
    AddHandler ButtonRien.Click, AddressOf ButtonRien_Click
    ButtonRien.Location = New Point(ButtonHasard.Location.X, _
                                    ButtonDonnees(3).Location.Y - Ecart * Releve)

    LabelSoluce = New Label
    Me.Controls.Add(LabelSoluce)
    LabelSoluce.Location = New Point(HNombre, ButtonDonnees(4).Location.Y - HVtab * 0.2)
    LabelSoluce.Width = LabelNombre.Width
    LabelSoluce.Height = HVtab * 2
    LabelSoluce.BorderStyle = BorderStyle.None
    LabelSoluce.Text = "Lancer" + Retour + "le calcul"
    LabelSoluce.Font = LabelNombre.Font
    LabelSoluce.TextAlign = ContentAlignment.TopCenter
    LabelSoluce.BackColor = CouleurFond

    ButtonSoluce = New Button
    Me.Controls.Add(ButtonSoluce)
    ButtonSoluce.Text = "Solution"
    ButtonSoluce.Width = ButtonHasard.Width
    ButtonSoluce.Height = ButtonHasard.Height
    ButtonSoluce.BackColor = CouleurButtonFonce
    AddHandler ButtonSoluce.Click, AddressOf ButtonSoluce_Click
    ButtonSoluce.Enabled = False
    ButtonSoluce.Location = New Point(ButtonRien.Location.X, LabelSoluce.Location.Y + LabelSoluce.Height + HVtab * 0.5)

    LabelTraitNombre = New Label
    Me.Controls.Add(LabelTraitNombre)
    LabelTraitNombre.Location = New Point(HNombre - Ecart * 2.5, LabelTraitDonnees.Location.Y)
    LabelTraitNombre.Width = HVtab * 6
    LabelTraitNombre.Height = ButtonRien.Height + ButtonRien.Location.Y + Ecart * 2.5 - _
                              VNombre
    LabelTraitNombre.BorderStyle = BorderStyle.Fixed3D
    LabelTraitNombre.BackColor = CouleurFond

    LabelTraitSoluce = New Label
    Me.Controls.Add(LabelTraitSoluce)
    LabelTraitSoluce.Location = New Point(LabelTraitNombre.Location.X, _
                                          LabelTraitNombre.Location.Y + _
                                          LabelTraitNombre.Height + HVtab - Ecart * 2)
    LabelTraitSoluce.Width = LabelTraitNombre.Width
    LabelTraitSoluce.Height = ButtonSoluce.Height + ButtonSoluce.Location.Y - _
                              LabelTraitSoluce.Location.Y + Ecart * 2
    LabelTraitSoluce.BorderStyle = BorderStyle.Fixed3D
    LabelTraitSoluce.BackColor = CouleurFond

    '-------------------

    LabelReponse = New Label
    Me.Controls.Add(LabelReponse)

    LabelTraitReponse = New Label
    Me.Controls.Add(LabelTraitReponse)
    LabelTraitReponse.Location = New Point(LabelTraitNombre.Location.X + _
                                           LabelTraitNombre.Width + Ecart * 2, _
                                           LabelTraitNombre.Location.Y)
    LabelTraitReponse.Width = LabelTraitChoix.Location.X + LabelTraitChoix.Width - _
                              LabelTraitReponse.Location.X
    LabelTraitReponse.Height = LabelTraitDonnees.Location.Y + LabelTraitDonnees.Height - _
                               LabelTraitReponse.Location.Y
    LabelTraitReponse.BorderStyle = BorderStyle.Fixed3D
    LabelTraitReponse.BackColor = CouleurFond

    LabelReponse.Location = New Point(LabelTraitReponse.Location.X + HVtab * 0.5, _
                                      LabelTraitReponse.Location.Y + HVtab * 0.2)
    LabelReponse.Width = LabelTraitReponse.Width - HVtab
    LabelReponse.Height = LabelTraitReponse.Height - HVtab * 0.7
    LabelReponse.BorderStyle = BorderStyle.None
    LabelReponse.Text = ""
    LabelReponse.Font = New Font("Symbol", SuperTaille, FontStyle.Bold)
    LabelReponse.BackColor = CouleurFond

    '-------------------

    Me.Height = LabelTraitDonnees.Location.Y + LabelTraitDonnees.Height + HVChoix + Ecart * 6
    Me.Location = New Point(HVtab, HVtab)
    Me.Width = LabelTraitChoix.Location.X + LabelTraitChoix.Width + HVChoix + Ecart
    Me.Text = "  Des  chiffres  par  Jacques  BOURDEAU  :"

    '-------------------

    SiNoTexte = False



  End Sub
  '--------------------------------------------------------------------------------------
  Function Chaine$(ByVal Nombre&)

    Return Trim(Str(Nombre))

  End Function
  '--------------------------------------------------------------------------------------
  Private Sub ButtonDonnees_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)

    ButtonDonnees(Sender.Tag).Text = ""
    ButtonDonnees(Sender.Tag).Enabled = False
    ButtonDonnees(Sender.Tag).BackColor = CouleurButtonFonce
    NombreDonnees = NombreDonnees - 1
    Call VerifieMaximum()

  End Sub
  '--------------------------------------------------------------------------------------
  Private Sub ButtonChoix_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)

    Dim Rang%

    If NombreDonnees > 5 Then
      Exit Sub
    End If

    KelChoix = Sender.tag

    Rang = 0
    While Len(ButtonDonnees(Rang).Text.Trim) > 0
      Rang = Rang + 1
    End While

    ButtonDonnees(Rang).Text = Chaine(KelChoix)
    ButtonDonnees(Rang).Enabled = True
    ButtonDonnees(Rang).BackColor = CouleurButtonClair
    NombreDonnees = NombreDonnees + 1

    Call VerifieMaximum()

    ButtonSoluce.Enabled = (NombreDonnees = 6) And (Val(TextNombre.Text) > 100)
    If ButtonSoluce.Enabled Then
      ButtonSoluce.BackColor = CouleurButtonClair
    Else
      ButtonSoluce.BackColor = CouleurButtonFonce
    End If

  End Sub
  '--------------------------------------------------------------------------------------
  Private Sub TextNombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

    Dim Texte$, NewTexte$, Lettre$

    If SiNoTexte Then Exit Sub

    SiNoTexte = True
    Texte = TextNombre.Text
    If Len(Texte) > 3 Then
      Texte = Texte.Substring(0, 3)
    End If

    NewTexte = ""
    While (Len(Texte) > 0)
      Lettre = Texte.Chars(0)
      If (Lettre >= "0") And (Lettre <= "9") Then
        NewTexte = NewTexte + Lettre
      End If
      Texte = Texte.Substring(1)
    End While
    TextNombre.Text = NewTexte

    ButtonSoluce.Enabled = (Val(NewTexte) > 100) And (NombreDonnees = 6)
    If ButtonSoluce.Enabled Then
      ButtonSoluce.BackColor = CouleurButtonClair
    Else
      ButtonSoluce.BackColor = CouleurButtonFonce
    End If

    ButtonRien.Enabled = Len(NewTexte) > 0
    If ButtonRien.Enabled Then
      ButtonRien.BackColor = CouleurButtonClair
    Else
      ButtonRien.BackColor = CouleurButtonFonce
    End If

    TextNombre.SelectionStart = Len(TextNombre.Text)

    SiNoTexte = False

  End Sub
  '--------------------------------------------------------------------------------------
  'vérifie si le nombre maximum de chiffres est atteint
  Sub VerifieMaximum()

    Dim Rang%, Place%, NombreChiffre%(13)

    For Rang = 0 To 13
      NombreChiffre(Rang) = 0
    Next Rang

    For Place = 0 To 5
      If Len(ButtonDonnees(Place).Text) > 0 Then
        Rang = RangNombre(Val(ButtonDonnees(Place).Text))
        NombreChiffre(Rang) = NombreChiffre(Rang) + 1
      End If
    Next Place

    If NombreDonnees < 6 Then
      ButtonSoluce.Enabled = False
      For Rang = 0 To 13
        ButtonChoix(Rang).Enabled = (NombreChiffre(Rang) < NombreChoix(Rang))
      Next Rang
    Else
      For Rang = 0 To 13
        ButtonChoix(Rang).Enabled = False
      Next Rang
    End If
    For Rang = 0 To 13

      If ButtonChoix(Rang).Enabled Then
        ButtonChoix(Rang).BackColor = CouleurButtonClair
      Else
        ButtonChoix(Rang).BackColor = CouleurButtonFonce
      End If
    Next Rang




    Select Case NombreDonnees
      Case 0
        LabelExplique.Text = "0 nombre"
      Case 1
        LabelExplique.Text = "1 nombre"
      Case Else
        LabelExplique.Text = Chaine(NombreDonnees) + " nombres"
    End Select

  End Sub
  '--------------------------------------------------------------------------------------
  Public Function RangNombre%(ByVal KelChiffre%)

    Dim Reponse%, Rang%

    Reponse = -1
    For Rang = 0 To 13
      If ValeurChoix(Rang) = KelChiffre Then
        Reponse = Rang
      End If
    Next Rang

    Return Reponse

  End Function
  '--------------------------------------------------------------------------------------
  Private Sub ButtonRien_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

    TextNombre.Text = ""
    ButtonRien.Enabled = False
    ButtonRien.BackColor = CouleurButtonFonce
    ButtonSoluce.Enabled = False
    ButtonSoluce.BackColor = CouleurButtonFonce

  End Sub
  '--------------------------------------------------------------------------------------
  Private Sub ButtonHasard_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

    Dim Koi%

    Koi = 0
    Randomize()

    While (Koi < 101) Or (Koi > 999)
      Koi = CInt(1000 * Rnd())
    End While

    SiNoTexte = True

    TextNombre.Text = Chaine(Koi)
    ButtonRien.Enabled = True
    ButtonRien.BackColor = CouleurButtonClair
    ButtonSoluce.Enabled = (NombreDonnees = 6)
    If ButtonSoluce.Enabled Then
      ButtonSoluce.BackColor = CouleurButtonClair
    Else
      ButtonSoluce.BackColor = CouleurButtonFonce
    End If
    SiNoTexte = False

  End Sub
  '--------------------------------------------------------------------------------------
  Private Sub ButtonSoluce_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

    Dim Rang%, Place%, Relais%, Envoi%
    Dim EncoreTri As Boolean
    Dim EncoreCherche(5) As Boolean

    'Public Operation%(5) ' " 0 = + " ; " 1 = x " ; " 2 = - " ; " 3 = / "
    'Public Resultat%(5) ' de l'opération
    'Public RangOperation%(5)
    'Public RangOperande%(5)
    'Public RangOperateur%(5) ' Operande Operation