If DEBUG Then
texte_message = "BOUTON nom:" + bouton_nom + " légende:" + bouton_légende
TextWindow.WriteLine(texte_message)
EndIf
If bouton_légende = "RECADRAGE" Then
'redimensionnement du cadre
GraphicsWindow.ShowMessage("nouvelle partie","CADRE")
Shapes.Remove(pointeur)
nouveau_cadre()
Goto clic_bouton_fin
EndIf
If bouton_légende = "AIDE ?" Then
'affichage d'un guide
GraphicsWindow.ShowMessage("cliquez sur une case et déplacez avec les boutons","AIDE")
Goto clic_bouton_fin
EndIf
If bouton_légende = "MELANGE !" Then
'mélanges de toute les cases
GraphicsWindow.ShowMessage("Avez-vous retenu les couleurs du départ ?","MELANGE")
mélange_case()
Goto clic_bouton_fin
EndIf
If bouton_légende = "RESULTAT ..." Then
'controles des couleurs finales
vérification_couleurs()
Goto clic_bouton_fin
EndIf
If mou_case = "?" Then
GraphicsWindow.ShowMessage("case non sélectionnée","CASE")
Goto clic_bouton_fin
EndIf
If bouton_légende = "H" Then
mou_case = "HAUT"
test_déplacement()
Goto clic_bouton_fin
EndIf
If bouton_légende = "G" Then
mou_case = "GAUCHE"
test_déplacement()
Goto clic_bouton_fin
Endif
If bouton_légende = "D" Then
mou_case = "DROITE"
test_déplacement()
Goto clic_bouton_fin
Endif
If bouton_légende = "B" Then
mou_case = "BAS"
test_déplacement()
Goto clic_bouton_fin
EndIf
Sub clic_souris
'gestion des clics sur SOURIS en fonction des coordonnées
If DEBUG Then
TextWindow.WriteLine("sub=clic_souris")
EndIf
x_souris=GraphicsWindow.MouseX
y_souris=GraphicsWindow.MouseY
If DEBUG Then
texte_message = "SOURIS position X:" + x_souris + " Y:" + y_souris
TextWindow.WriteLine(texte_message)
EndIf
If (x_souris > 100 And x_souris < 400) Then
If (y_souris > 100 And y_souris < 400) Then
test_case()
Goto clic_souris_fin
EndIf
EndIf
GraphicsWindow.ShowMessage("cliquez dans une case ou un bouton","colonne")
clic_souris_fin:
GraphicsWindow.Show()
EndSub
'-------------------------------------------------- sous programmes ------------------------
Sub initialise_debug
'création de la fenêtre de débugage
If DEBUG Then
TextWindow.WriteLine("sub=initialize_debug")
EndIf
TextWindow.Title = "Mode execution DEBUG début à " + Clock.Time
TextWindow.Top=100
TextWindow.Left=1000
EndSub
Sub initialise_graphique
'création de la fenêtre graphique
If DEBUG Then
TextWindow.WriteLine("sub=initialize_graphique")
EndIf
GraphicsWindow.Title = "CASE couleurs - déplacements par permutation (Cjm)"
GraphicsWindow.BackgroundColor = "Blue"
GraphicsWindow.Width = 500
GraphicsWindow.Height = 500
GraphicsWindow.Left=200
GraphicsWindow.Top=200
'nom de l'auteur
GraphicsWindow.BrushColor = "White"
GraphicsWindow.DrawText(350, 70, "COURCOL Jean-Michel")
'photo identité
If (INTERNET_photos) Then
choix_personne()
image_chemin = personne_photo
Else
image_chemin = "C:\Users\jmc\Mes applications SMALL BASIC\images small basic\DASSAULT - rafale.jpg"
EndIf
Sub choix_personne
'choix aléatoire de la personne présente sur mon CLOUD
If DEBUG Then
TextWindow.WriteLine("sub=choix_personne")
EndIf
personne_numéro = Math.GetRandomNumber(5)
If personne_numéro = 1 Then
personne_prénom = "jean-michel"
personne_photo = "https://api.mescontenus.orange.fr/gate/dungeonwire.php?wirecode=waCuTtHkhxNWUq77IgaWGqAfWdPvawpGvcVewt7wGvVrH"
Goto choix_personne_fin
EndIf
If personne_numéro = 2 Then
personne_prénom = "pascal"
personne_photo = "https://api.mescontenus.orange.fr/gate/dungeonwire.php?wirecode=E5nVVp8yw3ClqetFYwKskyHQutMlIwNodfonP3GEbX0le"
Goto choix_personne_fin
EndIf
If personne_numéro = 3 Then
personne_prénom = "nathalie"
personne_photo = "https://api.mescontenus.orange.fr/gate/dungeonwire.php?wirecode=2nkCJjQqiMQaYe4YHEwtg68huTJxEOOdw9k3Vo9L9Egpw"
Goto choix_personne_fin
EndIf
If personne_numéro = 4 Then
personne_prénom = "corentin"
personne_photo = "https://api.mescontenus.orange.fr/gate/dungeonwire.php?wirecode=uYWyGp9ySsZe9ulnMzAatazPJLRCkY0FTVQActnr6cyiP"
Goto choix_personne_fin
EndIf
If personne_numéro = 5 Then
personne_prénom = "camille"
personne_photo = "https://api.mescontenus.orange.fr/gate/dungeonwire.php?wirecode=OEoYk9OlIibtvLq6krneN8ez7n26oEeNOkjihAfeEq7EP"
Goto choix_personne_fin
EndIf
choix_personne_fin:
If DEBUG Then
texte_message = "prénom personne :" + personne_prénom + " numéro :" + personne_numéro
TextWindow.WriteLine(texte_message)
EndIf
EndSub
Sub jeu_options
'DEUX possibilités de pré-remplissage des couleurs 1=aléatoire 2=gamme/nuance
If DEBUG Then
TextWindow.WriteLine("sub=jeu_options")
EndIf
If DEBUG Then
option_couleur = 2
Else
option_couleur = Math.GetRandomNumber(2)
Endif
EndSub
Sub couleurs_base
'remplissage d'un tableau de base de couleur selon gammes (7) et nuances (6)
If DEBUG Then
TextWindow.WriteLine("sub=couleurs_base")
EndIf
'selon les couleurs de bases
base_choix()
EndSub
Sub base_choix
'choix des bases de couleurs par gammes (colonnes) et nuances (lignes)
If DEBUG Then
TextWindow.WriteLine("sub=base_choix")
EndIf
'les rouges
Sub nouveau_cadre
'mise en place cadre
If DEBUG Then
TextWindow.WriteLine("sub=nouveau_cadre")
EndIf
'définition de la zone (cadre) des cases
définir_cadre()
'chargement des couleurs du départ et actuelle
couleurs_départ()
'mise en place des cases dans le cadre avec leurs couleurs respectives
charge_cadre()
'mise en place des boutons disponible
définir_boutons()
'définition du pointeur cible de case
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "White"
pointeur = Shapes.AddEllipse(lar_rectangle,hau_rectangle)
Shapes.Move(pointeur,0,0)
'initialisation des paramètres de contrôle du jeu
jeu_paramètres()
EndSub
Sub définir_cadre
'définition des dimensions du cadre (centré dans la fenêtre graphique) et nombre de colonnes et de lignes
If DEBUG Then
TextWindow.WriteLine("sub=définir_cadre")
EndIf
cadre_largeur = 300
cadre_hauteur = 300
'nombre de colonnes (2 à 7) et de lignes (2 à 6) aléatoires
If DEBUG Then
maxi_colonnes = math.GetRandomNumber(2)
Else
maxi_colonnes = math.GetRandomNumber(6)
Endif
maxi_colonnes = maxi_colonnes + 1
If DEBUG Then
maxi_lignes = math.GetRandomNumber(2)
Else
maxi_lignes = math.GetRandomNumber(5)
EndIf
maxi_lignes = maxi_lignes + 1
If DEBUG Then
texte_message = "maximum de colonnes =" + maxi_colonnes + " et deligne:" + maxi_lignes
TextWindow.WriteLine(texte_message)
EndIf
'largeur des cases en fonction du nombre de colonnes
lar_rectangle= cadre_largeur / maxi_colonnes
'hauteur des case en fonction du nombre de lignes
hau_rectangle= cadre_hauteur / maxi_lignes
EndSub
Sub couleurs_départ
'détermination du choix des couleurs du tableaux du départ et donc actuelle
If DEBUG Then
TextWindow.WriteLine("sub=couleurs_départ")
EndIf
For ligne = 1 to maxi_lignes
For colonne = 1 to maxi_colonnes
If option_couleur = 1 Then
'couleurs aléatoire (doubles possibles)
case_colonne = Math.GetRandomNumber(7)
case_ligne = Math.GetRandomNumber(6)
couleur_départ[ligne][colonne] = base[case_ligne][case_colonne]
Else
'selon les couleurs de bases
couleur_départ[ligne][colonne] = base[ligne][colonne]
EndIf
couleur_actuelle[ligne][colonne] = couleur_départ[ligne][colonne]
EndFor
EndFor
EndSub
Sub charge_cadre
'mise en place des cases selon couleurs et nombre de colonnes et ligne
If DEBUG Then
TextWindow.WriteLine("sub=charge_cadre")
EndIf
For ligne = 1 to maxi_lignes
For colonne = 1 to maxi_colonnes
Shapes.Move(case[ligne][colonne],x_rectangle,y_rectangle)
If DEBUG Then
texte_message = "couleur actuelle=" + couleur_actuelle[ligne][colonne] + " ligne:" + ligne + " colonne:" + colonne
TextWindow.WriteLine(texte_message)
Endif
EndFor
EndFor
EndSub
Sub définir_boutons
'mise en place des boutons dans la fenêtre graphique
If DEBUG Then
TextWindow.WriteLine("sub=définir_boutons")
EndIf
'les boutons de déplacements
bouton_largeur = 50
bouton_hauteur = 50
GraphicsWindow.BrushColor = "Red"
Sub jeu_paramètres
'initialisation des paramètres de départ du jeu
If DEBUG Then
TextWindow.WriteLine("sub=jeu_paramètres")
EndIf
mou_case="?"
case_colonne=0
case_ligne=0
'point de départ du pointeur
Shapes.Animate(pointeur,0,0,1000)
EndSub
Sub test_case
'calcul de la colonne en fonction de la largeur de case
If DEBUG Then
TextWindow.WriteLine("sub=test_case")
EndIf
indice_colonne= (x_souris - 100) / lar_rectangle
case_colonne = 1 + Math.Floor(indice_colonne)
'calcul de la ligne en fonction de la hauteur de case
indice_ligne = (y_souris - 100) / hau_rectangle
case_ligne= 1 + Math.Floor(indice_ligne)
If DEBUG Then
texte_message = "CASE - colonne:" + case_colonne + " ligne:" + case_ligne
TextWindow.WriteLine(texte_message)
EndIf
'repérage de la case sélectionnée
repère_case()
mou_case = "NOUVELLE"
EndSub
Sub repère_case
'positionnement du pointeur sur la case sélectionnée
If DEBUG Then
TextWindow.WriteLine("sub=repère_case")
EndIf
x_rectangle = 100 + (lar_rectangle * (case_colonne - 1))
y_rectangle = 100 + (hau_rectangle * (case_ligne - 1))
Sub test_déplacement
'détermination du nouvel emplacement de la case sélectionnée
If DEBUG Then
TextWindow.WriteLine("sub=test_déplacement")
EndIf
nouvelle_ligne = case_ligne
nouvelle_colonne = case_colonne
If mou_case = "HAUT" Then
If case_ligne = 1 Then
GraphicsWindow.ShowMessage("déplacement impossible sur première ligne","HAUT")
Else
nouvelle_ligne = nouvelle_ligne - 1
nombre_déplacements = nombre_déplacements + 1
EndIf
Goto déplacement_case
EndIf
If mou_case = "BAS" Then
If case_ligne = maxi_lignes Then
GraphicsWindow.ShowMessage("déplacement impossible sur dernière ligne","BAS")
Else
nouvelle_ligne = nouvelle_ligne + 1
nombre_déplacements = nombre_déplacements + 1
EndIf
Goto déplacement_case
EndIf
If mou_case = "GAUCHE" Then
If case_colonne = 1 Then
GraphicsWindow.ShowMessage("déplacement impossible sur première colonne","GAUCHE")
Else
nouvelle_colonne = nouvelle_colonne - 1
nombre_déplacements = nombre_déplacements + 1
EndIf
Goto déplacement_case
EndIf
If mou_case = "DROITE" Then
If case_colonne = maxi_colonnes Then
GraphicsWindow.ShowMessage("déplacement impossible sur dernière colonne","DROITE")
Else
nouvelle_colonne = nouvelle_colonne + 1
nombre_déplacements = nombre_déplacements + 1
EndIf
Goto déplacement_case
EndIf
If DEBUG Then
texte_message = "DEPLACEMENT vers colonne:" + nouvelle_colonne + " ligne:" + nouvelle_ligne
TextWindow.WriteLine(texte_message)
EndIf
'permutation de la case sélectionnée (pointeur) selon le mouvement (direction)
permute_case()
'la nouvelle position devient case cible
case_ligne = nouvelle_ligne
case_colonne = nouvelle_colonne
'repérage de la case déplacée
repère_case()
test_déplacement_fin:
EndSub
Sub mélange_case
'mélange des cases
If DEBUG Then
TextWindow.WriteLine("sub=mélange_case")
EndIf
For ligne = 1 to maxi_lignes
For colonne = 1 to maxi_colonnes
'choix aléatoire d'une autre case
'jou le son de CLOCHE du départ
Sound.PlayBellRing()
If DEBUG Then
texte_message = "TOP départ à :" + Clock.Time + " soit " + départ_secondes
texte_message = texte_message + " secondes"
TextWindow.WriteLine(texte_message)
EndIf
EndSub
Sub permute_case
'permutation des éléments d'une case (tableau, couleur, emplacement)
If DEBUG Then
TextWindow.WriteLine("sub=permute_case")
EndIf
' permutation des cases dans fenetres
x_rectangle = 100 + (lar_rectangle * (nouvelle_colonne - 1))
y_rectangle = 100 + (hau_rectangle * (nouvelle_ligne - 1))
Shapes.Move(case[case_ligne][case_colonne],x_rectangle,y_rectangle)
Sub vérification_couleurs
'controle couleur des cases
If DEBUG Then
TextWindow.WriteLine("sub=vérification_couleurs")
EndIf
case_bonne = 0
case_erreur = 0
For case_ligne = 1 to maxi_lignes
For case_colonne = 1 to maxi_colonnes
'couleur de la case (actuelle) identique à celle de départ
If couleur_actuelle[case_ligne][case_colonne] = couleur_départ[case_ligne][case_colonne] Then
case_bonne = case_bonne + 1
Else
If DEBUG Then
texte_message = "CASE erreur colonne:" + case_colonne + " ligne:" + case_ligne
TextWindow.Write(texte_message)
texte_message = " COULEUR départ:" + couleur_départ[ligne][colonne] + " actuelle:" + couleur_actuelle[ligne][colonne]
TextWindow.WriteLine(texte_message)
EndIf
case_erreur = case_erreur + 1
EndIf
EndFor
EndFor
'fin du CHRONO (secondes) pour afficage du résultat
résultat_secondes = Clock.Second + (Clock.Minute * 60) + (Clock.Hour * 3600)
If DEBUG Then
texte_message = "TOP résultat à :" + Clock.Time + " soit " + résultat_secondes
texte_message = texte_message + " secondes"
TextWindow.WriteLine(texte_message)
EndIf
'calcul du temps de jeu
durée_secondes = résultat_secondes - départ_secondes
durée_heures = Math.Floor(durée_secondes / 3600)
reste_secondes = durée_secondes - (3600 * durée_heures)
durée_minutes = Math.Floor(reste_secondes / 60)
reste_secondes = reste_secondes - (60 * durée_minutes)
'jou le CARILLON pour résultat
Sound.PlayChime()
If case_erreur = 0 Then
texte_message = "BRAVO vous avez bien placé(es) " + case_bonne + " case(s) en " + nombre_déplacements + " déplacement(s)"
Else
texte_message ="PAS TERMINE - vous avez " + case_bonne + " case(s) bien placée(s) et " + case_erreur + " case(s) mal placée(s)"
EndIf