Jeu de petits chevaux

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Jeu de petits chevaux

Message par Micoute »

Bonsoir à tous, j'aimerais faire un jeu de petits chevaux pour mes petits enfants qui reproduirait ce dessin, mais avec des sprites.

Je pense que je vais avoir besoin d'une structure ou/et d'un tableau donnant les positions des cases à jouer, mais je ne sais pas comment démarrer, je vais bien sûr chercher, mais j'aimerais bien qu'on éclaire ma lanterne.

Je vous en remercie tous par anticipation.

Code : Tout sélectionner

Enumeration Fenetre
  #Fenetre
EndEnumeration

Enumeration Gadgets
  #Canvas
EndEnumeration  

InitSprite() :InitKeyboard() : InitMovie() : InitMouse() : InitSound() : UseJPEGImageDecoder()

Procedure Ouvrir_Fenetre_principale()
  OpenWindow(#Fenetre, 0, 0, 1100, 950, "Petits chevaux", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  CanvasGadget(#Canvas, 0, 0, 1100, 950, #PB_Canvas_Border)
  
  
  ;dessin du plateau de jeu
  
  If StartDrawing(CanvasOutput(#Canvas))
    Ecart = 80
    Rayon = 30
    ;ligne 1
    Couleur = 0
    Circle(70, 70, Rayon, Couleur)
    Circle(70+Ecart, 70, Rayon, Couleur)    
    Couleur = $FFFF
    Circle(70, 70, Rayon - 4, Couleur)
    Circle(70+Ecart, 70, Rayon - 4, Couleur)
    couleur = 0
    Circle(70 + (Ecart * 5), 70, Rayon, couleur)
    Circle(70 + (Ecart * 6), 70, Rayon, couleur)
    Circle(70 + (Ecart * 7), 70, Rayon, couleur)
    
    Circle(70 + (Ecart * 11), 70, Rayon, Couleur)
    Circle(70 + (Ecart * 12), 70, Rayon, Couleur)
    Couleur = $FF00
    Circle(70 + (Ecart * 11), 70, Rayon - 4, Couleur)
    Circle(70 + (Ecart * 12), 70, Rayon - 4, Couleur)
    ;ligne 2
    Couleur = 0
    Circle(70, 70 + Ecart, Rayon, Couleur)
    Circle(70 + Ecart,70 + Ecart, Rayon, Couleur)
    Couleur = $FFFF
    Circle(70, 70 + Ecart, Rayon - 4, Couleur)
    Circle(70 + Ecart,70 + Ecart, Rayon - 4, Couleur)
    Couleur = 0
    Circle(70 + (Ecart * 5), 70 + Ecart, Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + Ecart, Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + Ecart, Rayon, Couleur)
    
    Couleur = 0
    Circle(70 + (Ecart * 11), 70 + Ecart, Rayon, Couleur)
    Circle(70 + (Ecart * 12), 70 + Ecart, Rayon, Couleur)
    Couleur = $FF00
    Circle(70 + (Ecart * 11), 70 + Ecart, Rayon - 4, Couleur)
    Circle(70 + (Ecart * 12), 70 + Ecart, Rayon - 4, Couleur)
    ;ligne 3
    Couleur = 0
    Circle(70 + (Ecart * 5), 70 + (Ecart * 2), Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 2), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 2), Rayon, Couleur)
    ;ligne 4
    Circle(70 + (Ecart * 5), 70 + (Ecart * 3), Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 3), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 3), Rayon, Couleur)
    ;ligne 5
    Circle(70, 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 2), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 3), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 4), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 5), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 4), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 8), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 9), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 10), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 11), 70 + (Ecart * 4), Rayon, Couleur)
    Circle(70 + (Ecart * 12), 70 + (Ecart * 4), Rayon, Couleur)
    ;ligne 6
    Circle(70, 70 + (Ecart * 5), Rayon, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 2), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 3), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 4), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 5), 70 + (Ecart * 5), Rayon - 10, Couleur)
    ;Circle(70 + (Ecart * 6), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 8), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 9), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 10), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 11), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 12), 70 + (Ecart * 5), Rayon, Couleur)
    ;ligne 7
    Circle(70, 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 2), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 3), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 4), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 5), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 6), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 8), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 9), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 10), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 11), 70 + (Ecart * 6), Rayon, Couleur)
    Circle(70 + (Ecart * 12), 70 + (Ecart * 6), Rayon, Couleur)
    ;ligne 8
    Circle(70 + (Ecart * 5), 70 + (Ecart * 7), Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 7), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 7), Rayon, Couleur)
    ;ligne 9
    Circle(70 + (Ecart * 5), 70 + (Ecart * 8), Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 8), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 8), Rayon, Couleur)
    ;ligne 10
    Couleur = 0
    Circle(70, 70 + (Ecart * 9), Rayon, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 9), Rayon, Couleur)
    Couleur = $FF0000
    Circle(70, 70 + (Ecart * 9), Rayon - 4, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 9), Rayon - 4, Couleur)
    Couleur = 0
    Circle(70 + (Ecart * 5), 70 + (Ecart * 9), Rayon, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 9), Rayon - 10, Couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 9), Rayon, Couleur)
    Couleur = 0
    Circle(70 + (Ecart * 11), 70 + (Ecart * 9), Rayon, Couleur)
    Circle(70 + (Ecart * 12), 70 + (Ecart * 9), Rayon, Couleur)
    Couleur = $FF
    Circle(70 + (Ecart * 11), 70 + (Ecart * 9), Rayon - 4, Couleur)
    Circle(70 + (Ecart * 12), 70 + (Ecart * 9), Rayon - 4, Couleur)
    ;ligne 11
    Couleur = 0
    Circle(70, 70 + (Ecart * 10), Rayon, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 10), Rayon, Couleur)
    Couleur = $FF0000
    Circle(70, 70 + (Ecart * 10), Rayon - 4, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 10), Rayon - 4, Couleur)
    couleur = 0
    Circle(70 + (Ecart * 5), 70 + (Ecart * 10), Rayon, couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 10), Rayon, couleur)
    Circle(70 + (Ecart * 7), 70 + (Ecart * 10), Rayon, couleur)
    Couleur = 0
    Circle(70 + (Ecart * 11), 70 + (Ecart * 10), Rayon, Couleur)
    Circle(70 + (Ecart * 12), 70 + (Ecart * 10), Rayon, Couleur)
    Couleur = $FF
    Circle(70 + (Ecart * 11), 70 + (Ecart * 10), Rayon - 4, Couleur)
    Circle(70 + (Ecart * 12), 70 + (Ecart * 10), Rayon - 4, Couleur)
    
    Couleur = $FF00
    Circle(70 + (Ecart * 6), 70 + Ecart, Rayon - 14, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 2), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 3), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 6), 70 + (Ecart * 4), Rayon - 14, Couleur)
    
    ;ligne horizontale
    Couleur = $FFFF
    ;Circle(70, 70 + (Ecart * 5), Rayon, Couleur)
    Circle(70 + Ecart, 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 2), 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 3), 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 4), 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 5), 70 + (Ecart * 5), Rayon - 14, Couleur)
    ;Circle(70 + (Ecart * 6), 70 + (Ecart * 5), Rayon - 10, Couleur)
    Couleur = $FF
    Circle(70 + (Ecart * 7), 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 8), 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 9), 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 10), 70 + (Ecart * 5), Rayon - 14, Couleur)
    Circle(70 + (Ecart * 11), 70 + (Ecart * 5), Rayon - 14, Couleur)
    ;Circle(70 + (Ecart * 12), 70 + (Ecart * 5), Rayon, Couleur)
    Couleur = $FF0000
    ;ligne 7
    Circle(70 + (Ecart * 6), 70 + (Ecart * 6), Rayon - 14, Couleur)
    ;ligne 8
    Circle(70 + (Ecart * 6), 70 + (Ecart * 7), Rayon - 14, Couleur)
    ;ligne 9
    Circle(70 + (Ecart * 6), 70 + (Ecart * 8), Rayon - 14, Couleur)
    ;ligne 10
    Circle(70 + (Ecart * 6), 70 + (Ecart * 9), Rayon - 14, Couleur)
    
    StopDrawing()
    
  EndIf
  
EndProcedure


Ouvrir_Fenetre_principale()


;Boucle événementielle
Repeat
  Event = WindowEvent()
  
  Select Event
    Case #PB_Event_Gadget
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
  
  
  Delay(1)
Until Event = #PB_Event_CloseWindow
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 !
Mesa
Messages : 1092
Inscription : mer. 14/sept./2011 16:59

Re: Jeu de petits chevaux

Message par Mesa »

On dirait que ton code mélange sprite et canvas. Même si c'est tout à fait envisageable, je n'en vois pas l’utilité et en plus ça risque de compliquer la programmation. Il faudrait choisir l'un ou 'autre, sachant que le canvasgadget me semble approprié pour un jeu de petit chevaux.

Coder un jeu, même simple, est toujours une entreprise assez longue.
Dans un premier temps, il faut transformer les règles du jeu http://www.regles-de-jeux.com/regle-petits-chevaux/ en organigramme pour avoir à l'esprit toutes les étapes du jeu.
Exemple d'organigramme pour ceux qui en ont jamais vu :
Image
Image
Image

Une fois que tout est "clair", on peut coder.

Bon courage. :D

M.
logis27
Messages : 34
Inscription : lun. 17/mars/2014 8:00

Re: Jeu de petits chevaux

Message par logis27 »

Il y a quelque chose qui ne va pas: chaque écurie doit avoir le même nombre de cases.
Ici les horizontales ont 5 cases et les verticales 4.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Jeu de petits chevaux

Message par Ar-S »

Salut Micoute,
Je t'encourage aussi à passer par le Canvas car tu n'as pas à redessiner de nombreuses images. A chaque évènement de joueur tu redessines ton plateau, tes pions et tes scores. Ce sera plus simple qu'un openscreen coté event.
Au cas ou tu veuilles faire du plein ecran, penses à modifier les dimensions de tes images au prorata des dimensions ecran. Au cas ou tu fasses une fenêtre taille fixe pas de soucis.
Perso j'ai eu ça à gérer pour le black jack que je suis en train de faire. Si ça peu t'aider voiloà comment j'ai procédé


- Chargement des sprites (ça marche aussi pour les images)
- Recupération de la résolution ecran max désirée (pour moi 1920x1080)
- Stockage de la Largeur / hauteur et Position X et Y de chacun dans un tableau structuré
- Calcule du coefficient pour les resolution plus faible (1920 / 1080 => 1600 / 900 donne 1920/1600 = 1.2)
- stockage de tous les éléments redimensionnés dans le tableau structuré précédent (taille X, Y, L, H, divisé par 1.2 par le coef)
Je peux ainsi affiché proprement tous les éléments selon les dimensions.

Je te conseils de te faire des macros pour ce genre de plan.
Pour stocker la hauteur et largeur dans ton tableau par exemple :

Code : Tout sélectionner

Structure SP
L.i
H.i
EndStructure

Dim SP.SP(4) ; tes 4 pions + la table de jeu

Macro StockTabSize(Tableau,Numero,Sprite)
  Tableau(Numero)\H = SpriteHeight(Sprite)
  Tableau(Numero)\L = SpriteWidth(Sprite)
EndMacro

LoadSprite(#Pion1,#PB_Sprite_AlphaBlending)

StockTabSize(SP,0,#Pion1)

; etc... 
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Jeu de petits chevaux

Message par Micoute »

Bonjours à tous et merci de tout cœur pour vos réponses très constructives.

Je vais opter pour le canvas, car plus facile à gérer.

Apparemment le 1920x1080 est très courant, car mes 2 écrans sont de cette taille. Merci Ar-s pour le calcul tout prêt, mais je n'en n'aurai pas besoin, car vais faire un écran carré.
Mais c'est toujours bon de la garder de côté, au cas ou.

@logis27 merci, heureusement que tu m'ouvre les yeux, car je n'avais pas vu, ça m'aurais compliqué mes calculs.

@Mesa merci pour l'idée de l'organigramme, c'est toujours mieux que le plan dans la tête, car quelque temps, il risque d'avoir été remplacé par autre chose, je ne suis qu'un simple mortel !
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 !
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Jeu de petits chevaux

Message par Ar-S »

Micoute a écrit : Apparemment le 1920x1080 est très courant, car mes 2 écrans sont de cette taille. Merci Ar-s pour le calcul tout prêt, mais je n'en n'aurai pas besoin, car vais faire un écran carré.
Tu veux dire que tu ne vas pas nous en faire profiter !? :mrgreen:
Si ton carré > 900 par exemple, je ne pourrai pas le voir sur mon ordi portable. Faut pas négliger la taille des ecrans.
Au pire si tes petits loulous copient ton jeu et que papa maman on un pc avec une resolution plus petite tu vas te faire gronder ;)
Anticiper ce genre de calcule t'évitera de perdre de nombreuses heures à revenir sur ton code.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
logis27
Messages : 34
Inscription : lun. 17/mars/2014 8:00

Re: Jeu de petits chevaux

Message par logis27 »

+1
La résolution des écrans est en effet à ne pas négliger.
Personnellement je fais comme ça:

Code : Tout sélectionner

ExamineDesktops()
Largeur=DesktopWidth(0)	;Mesure de la largeur réelle de l'écran
If Largeur>1152		        ;1152=Largeur de l'image originale si elle est plus grande que la résolution de l'écran
	Largeur=1152		
EndIf
Ecr=Largeur/1152                 ;Rapport largeur réelle / originale pour mise à l'échelle
Hauteur=848*Ecr			 ;848=hauteur de l'image originale
La variable "ecr" doit être déclarée comme ça:

Code : Tout sélectionner

Global Ecr.f
c'est à dire en flottant
ensuite on charge l'image:

Code : Tout sélectionner

;Charge une image en mémoire
LoadImage(0,Repertoire$+"Element.png")		
;Redimensionne l'image
ResizeImage(0,Largeur,Hauteur)
;Ouvre une fenêtre de Largeur et de Hauteur spécifiées
OpenWindow(0,0,0,Largeur,Hauteur,#Titre$,#PB_Window_ScreenCentered)	
OpenWindowedScreen(WindowID(0),0,0,Largeur,Hauteur,0,0,0,#PB_Screen_NoSynchronization)		
Font=LoadFont(#PB_Any,"Times new roman",8*Ecr,#PB_Font_Bold)
ensuite dans l'affichage je procède comme ça:

Code : Tout sélectionner

	For i=0 To 2
		If ZBouton(i)=0
			ClipSprite(#Sp_Bouton,(i*80)*Ecr,0,70*Ecr,80*Ecr)
		Else
			ClipSprite(#Sp_Bouton,(i*80)*Ecr,80*Ecr,70*Ecr,80*Ecr)
		EndIf
		DisplayTransparentSprite(#Sp_Bouton,XBouton(i)*Ecr,YBouton(i)*Ecr,255)
	Next i
Regarde ce jeu mis en ligne ce jour:
http://www.purebasic.fr/french/viewtopi ... =2&t=15159
Bon moi je préfère utiliser des planches de sprites, mais ça marche aussi avec les canvas et tout ce qui doit être affichés graphiquement sur un écran du résolution plus petite que l'image originale.
On écrit son programme sans s'occuper des résolutions différente en ajoutant juste "dimension * Ecr" dans mon exemple.
Ce qui est important est de garder le rapport entre largeur et hauteur sinon l'image sera déformée.
A+
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Jeu de petits chevaux

Message par Micoute »

Ar-S a écrit :Tu veux dire que tu ne vas pas nous en faire profiter !? :mrgreen:
Si j'espère bien que oui, mais déjà je vais le mettre au point sur mon écran principal en 1920 x 1080, ensuite je l'essaierai sur mon portable 1366 x 768 et je mettrai des valeur relatives, mais je n'en suis pas encore là, car je n'en suis qu'à la mise en page.

Dans mon tableau CasesExt qui sont les cases extérieures, il y a 3 dimensions la première c'est l'écurie, la deuxième c'est l'identifiant de la case, la troisième c'est la coordonnée X, Y et la couleur de la case.

Si encore on pouvait écrire : Vert_0 = Circle(CasesExt(0, 0, 0), CasesExt(0, 0, 1), Rayon, CasesExt(0, 0, 2)) ;vert 0
ça me simplifierait la tâche.

La méthode de logis27 est très tentante et je le remercie auusi pour ça.
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 !
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Jeu de petits chevaux

Message par Frenchy Pilou »

Pour les pseudo-codes, organigrammes... :D

http://larp.marcolavoie.ca/fr/
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Jeu de petits chevaux

Message par Ar-S »

Si encore on pouvait écrire : Vert_0 = Circle(CasesExt(0, 0, 0), CasesExt(0, 0, 1), Rayon, CasesExt(0, 0, 2)) ;vert 0
Traduit ton truc en PB comme c'est sensé apparaître, on pourra sans doute faire une macro ressemblante.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Jeu de petits chevaux

Message par Micoute »

Merci Ar-s, ça fonctionne toujours mieux avec un cerveau de jeune !
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 !
Mesa
Messages : 1092
Inscription : mer. 14/sept./2011 16:59

Re: Jeu de petits chevaux

Message par Mesa »

Qui veut finir ?

Code : Tout sélectionner

;http://www.regles-de-jeux.com/regle-petits-chevaux/
;Jeu Petits chevax


;- Initialisation des constantes et variables

Global NombreDeJoueurs$ ; De 2 à 4
Global NombreDeJoueurs  ; De 2 à 4
Global NombreDeChevaux = 2
Global EcranLargeur
Global EcranHauteur

Global Dim CasesRondes(4,14) ; de 0 à 13
Global Dim CasesNum(4,7)     ; de 1 à 6 plus 0 inutilisée

Global BoutonJeu
Global StringGNombreDeJoueur
Global BoutonEcurieVerte
Global BoutonEcurieBleue
Global BoutonEcurieRouge
Global BoutonEcurieOrange
Global BoutonLancerDe
Global AfficheDE


;- Déterminer les dimensions de l'écran, ça peut toujours servir
If ExamineDesktops() <> 0 
  EcranLargeur=DesktopWidth(0)
  EcranHauteur=DesktopHeight(0)
  ;   Debug EcranLargeur
  ;   Debug EcranHauteur
Else 
  MessageRequester("Information", "Désolé, problème d'affichage !")
  End
EndIf

;- Puis demander le nombre de joueurs  
Procedure.s DemanderNombreDeJoueurs() 
  Protected tmp$
  While tmp$ <"2" Or tmp$ >"4"
    tmp$ = InputRequester("Nombre de Joueurs", "Nombre de Joueurs ? (De 2 à 4)","")
  Wend
  ProcedureReturn tmp$
EndProcedure
;   NombreDeJoueurs$=DemanderNombreDeJoueurs()
;   NombreDeJoueurs=Val(NombreDeJoueurs$)
NombreDeJoueurs=4

;- Dessiner le plateau de jeu = Ouvrir une fenêtre
; 4 écuries: Vert, Bleu, Orange, Rouge = 4 CanvasGadgets
; 14 cases rondes par écuries = 4x14 = 56 CanvasGadgets
; 6 cases carrés numérotées de 1 à 6 par écuries = 4*6 = 24 CanvasGadgets
; 1 case au centre, le Finish = 1 CanvasGadgets
; 2 Chevaux par écurie = 2*4 = 8 CanvasGadgets
Procedure DessinerPlateauDeJeu()
  ; Attention le plateau est un carré
  LargeurSup=200
  OpenWindow(0, 0, 0, EcranHauteur+LargeurSup, EcranHauteur, "A FINIR Pure Petits Chevaux", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
  ; Fenêtre avec un fond de couleur blanc
  SetWindowColor(0, RGB(255, 255, 255)) 
  ; Je décide des proportions des écuries, cases rondes, etc...
  TailleEcurie.f=EcranHauteur/3
  Marge.f = 5;(TailleEcurie-12*RayonCaseRonde)/5
  RayonCaseRonde.f=(TailleEcurie-5*Marge)/12;TailleEcurie/12 ;1/5
  LargeurCaseNumerote.f=2*TailleEcurie/6    ;2/5
  HauteurCaseNumerote.f=TailleEcurie/6      ;=diametre CaseRonde
  
  
  Vert=RGB(0, 128, 0)
  Bleu=RGB(0,0,255)
  Orange=RGB(255, 165, 0)
  Rouge=RGB(255,0,0)
  
  ; Dessin Ecuries
  EcurieVerte=CanvasGadget(#PB_Any,0,0,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieVerte))
  Box(0, 0, TailleEcurie,TailleEcurie, Vert)
  StopDrawing()
  EcurieBleue=CanvasGadget(#PB_Any,EcranHauteur-TailleEcurie,0,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieBleue))
  Box(0, 0, TailleEcurie,TailleEcurie, Bleu)
  StopDrawing()      
  EcurieOrange=CanvasGadget(#PB_Any,0,EcranHauteur-TailleEcurie,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieOrange))
  Box(0, 0, TailleEcurie,TailleEcurie, Orange)
  StopDrawing()
  EcurieRouge=CanvasGadget(#PB_Any,EcranHauteur-TailleEcurie,EcranHauteur-TailleEcurie,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieRouge))
  Box(0, 0, TailleEcurie,TailleEcurie, Rouge)
  StopDrawing()
  
  ;Case rondes
  ;    Dim CasesRondes(4,14)
  x.f=0
  y.f=TailleEcurie+Marge+RayonCaseRonde
  For i=0 To 6   
    CasesRondes(0,i)=CanvasGadget(#PB_Any,x,y,2*RayonCaseRonde,2*RayonCaseRonde)
    x=x+Marge+2*RayonCaseRonde
    StartDrawing(CanvasOutput(CasesRondes(0,i)))
    Circle(RayonCaseRonde, RayonCaseRonde, RayonCaseRonde, Vert)
    StopDrawing()
  Next i
  
  x=x-Marge-2*RayonCaseRonde
  y=y-Marge-2*RayonCaseRonde
  
  For i=7 To 12   
    CasesRondes(0,i)=CanvasGadget(#PB_Any,x,y-RayonCaseRonde,2*RayonCaseRonde,2*RayonCaseRonde)
    y=y-Marge-2*RayonCaseRonde
    StartDrawing(CanvasOutput(CasesRondes(0,i)))
    Circle(RayonCaseRonde, RayonCaseRonde, RayonCaseRonde, Vert)
    StopDrawing()
  Next i
  
  StartDrawing(CanvasOutput(CasesRondes(0,0)))
  w=TextWidth("D")
  h=TextHeight("D")
  DrawRotatedText(RayonCaseRonde-w/2, RayonCaseRonde-h/2, "D", 0)
  StopDrawing()
  
  y=TailleEcurie+TailleEcurie/2
  CasesRondes(0,14)=CanvasGadget(#PB_Any,0,y,2*RayonCaseRonde,2*RayonCaseRonde)
  StartDrawing(CanvasOutput(CasesRondes(0,14)))
  Circle(RayonCaseRonde, RayonCaseRonde, RayonCaseRonde, Vert)
  StopDrawing()
  
  ;Cases numérotées
  x=Marge+2*RayonCaseRonde
  y=y-RayonCaseRonde
  For i=1 To 6
    CasesNum(0,i)=CanvasGadget(#PB_Any,x,y,2*RayonCaseRonde,4*RayonCaseRonde)
    StartDrawing(CanvasOutput(CasesNum(0,i))) 
    Box(0,0,2*RayonCaseRonde,4*RayonCaseRonde, vert)
    DrawRotatedText(RayonCaseRonde-w/2, 2*RayonCaseRonde-h/2, Str(i), 0)
    StopDrawing()
    x=x+marge+2*RayonCaseRonde
  Next i
  
  ;TODO Finir le plateau
  ;TODO Dessiner Chevaux
  
  BoutonJeu=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,0,100,30,"JOUER")
  TextGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,40,100,40,"Nombre de joueurs (2 à 6)")
  StringGNombreDeJoueur=StringGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,90,100,30,"2")
  BoutonEcurieVerte=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,200,100,30,"VERT",#PB_Button_Toggle)
  BoutonEcurieBleue=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,240,100,30,"BLEU",#PB_Button_Toggle)
  BoutonEcurieRouge=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,280,100,30,"ROUGE",#PB_Button_Toggle)
  BoutonEcurieOrange=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,320,100,30,"ORANGE",#PB_Button_Toggle)
  SetGadgetState(BoutonEcurieVerte, 1)
  BoutonLancerDe=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-20,400,60,60,"Dé")
  AfficheDE=CanvasGadget(#PB_Any,EcranHauteur+LargeurSup/2-20,480,60,60)
  
  ;TODO Finir
  
  
  
  
EndProcedure

DessinerPlateauDeJeu()
;TODO Finir règle du jeu : Faire un 6 pour commencer, etc.

Repeat
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case BoutonLancerDe 
          go=ElapsedMilliseconds()
          Repeat
            DE=Random(6,1)
            StartDrawing(CanvasOutput(AfficheDE))
            Box(0,0,60,60,RGB(255,255,0))
            DrawText(30, 20, Str(DE),RGB(255,0,0),RGB(255,255,0))
            StopDrawing()
            Delay(100)
          Until ElapsedMilliseconds() - go >2000
          
      EndSelect
      
  EndSelect
Until Event = #PB_Event_CloseWindow
M.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Jeu de petits chevaux

Message par Micoute »

Bonjour Mesa, merci pour ce partage, la présentation est différente de la mienne, mais certaines variables peuvent m'être utiles pour avancer un peu plus loin.

Voici où j'en suis pour l'instant :

Code : Tout sélectionner

;http://www.regles-de-jeux.com/regle-petits-chevaux/
;Jeu Petits chevax


;- Initialisation des constantes et variables

Global NombreDeJoueurs$ ; De 2 à 4
Global NombreDeJoueurs  ; De 2 à 4
Global NombreDeChevaux = 2
Global EcranLargeur
Global EcranHauteur

Global Dim CasesRondes(4,14) ; de 0 à 13
Global Dim CasesNum(4,7)     ; de 1 à 6 plus 0 inutilisée

Global BoutonJeu
Global StringGNombreDeJoueur
Global BoutonEcurieVerte
Global BoutonEcurieBleue
Global BoutonEcurieRouge
Global BoutonEcurieOrange
Global BoutonLancerDe
Global AfficheDE


;- Déterminer les dimensions de l'écran, ça peut toujours servir
If ExamineDesktops() <> 0 
  EcranLargeur=DesktopWidth(0)
  EcranHauteur=DesktopHeight(0)
  ;   Debug EcranLargeur
  ;   Debug EcranHauteur
Else 
  MessageRequester("Information", "Désolé, problème d'affichage !")
  End
EndIf

;- Puis demander le nombre de joueurs  
Procedure.s DemanderNombreDeJoueurs() 
  Protected tmp$
  While tmp$ <"2" Or tmp$ >"4"
    tmp$ = InputRequester("Nombre de Joueurs", "Nombre de Joueurs ? (De 2 à 4)","")
  Wend
  ProcedureReturn tmp$
EndProcedure
;   NombreDeJoueurs$=DemanderNombreDeJoueurs()
;   NombreDeJoueurs=Val(NombreDeJoueurs$)
NombreDeJoueurs=4

;- Dessiner le plateau de jeu = Ouvrir une fenêtre
; 4 écuries: Vert, Bleu, Orange, Rouge = 4 CanvasGadgets
; 14 cases rondes par écuries = 4x14 = 56 CanvasGadgets
; 6 cases carrés numérotées de 1 à 6 par écuries = 4*6 = 24 CanvasGadgets
; 1 case au centre, le Finish = 1 CanvasGadgets
; 2 Chevaux par écurie = 2*4 = 8 CanvasGadgets
Procedure DessinerPlateauDeJeu()
  ; Attention le plateau est un carré
  LargeurSup=200
  OpenWindow(0, 0, 0, EcranHauteur+LargeurSup, EcranHauteur, "A FINIR Pure Petits Chevaux", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
  ; Fenêtre avec un fond de couleur blanc
  SetWindowColor(0, RGB(255, 255, 255)) 
  ; Je décide des proportions des écuries, cases rondes, etc...
  TailleEcurie.f=EcranHauteur/3
  Marge.f = 5;(TailleEcurie-12*RayonCaseRonde)/5
  RayonCaseRonde.f=(TailleEcurie-5*Marge)/12;TailleEcurie/12 ;1/5
  LargeurCaseNumerote.f=2*TailleEcurie/6    ;2/5
  HauteurCaseNumerote.f=TailleEcurie/6      ;=diametre CaseRonde
  
  
  Vert=RGB(0, 128, 0)
  Bleu=RGB(0,0,255)
  Orange=RGB(255, 165, 0)
  Rouge=RGB(255,0,0)
  
  ; Dessin Ecuries
  EcurieVerte=CanvasGadget(#PB_Any,0,0,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieVerte))
  Box(0, 0, TailleEcurie,TailleEcurie, Vert)
  StopDrawing()
  EcurieBleue=CanvasGadget(#PB_Any,EcranHauteur-TailleEcurie,0,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieBleue))
  Box(0, 0, TailleEcurie,TailleEcurie, Bleu)
  StopDrawing()      
  EcurieOrange=CanvasGadget(#PB_Any,0,EcranHauteur-TailleEcurie,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieOrange))
  Box(0, 0, TailleEcurie,TailleEcurie, Orange)
  StopDrawing()
  EcurieRouge=CanvasGadget(#PB_Any,EcranHauteur-TailleEcurie,EcranHauteur-TailleEcurie,TailleEcurie,TailleEcurie)
  StartDrawing(CanvasOutput(EcurieRouge))
  Box(0, 0, TailleEcurie,TailleEcurie, Rouge)
  StopDrawing()
  
  ;Case rondes
  ;    Dim CasesRondes(4,14)
  x.f=0
  y.f=TailleEcurie+Marge+RayonCaseRonde
  For i=0 To 6   
    CasesRondes(0,i)=CanvasGadget(#PB_Any,x,y,2*RayonCaseRonde,2*RayonCaseRonde)
    x=x+Marge+2*RayonCaseRonde
    StartDrawing(CanvasOutput(CasesRondes(0,i)))
    Circle(RayonCaseRonde, RayonCaseRonde, RayonCaseRonde, Vert)
    StopDrawing()
  Next i
  
  x=x-Marge-2*RayonCaseRonde
  y=y-Marge-2*RayonCaseRonde
  
  For i=7 To 12   
    CasesRondes(0,i)=CanvasGadget(#PB_Any,x,y-RayonCaseRonde,2*RayonCaseRonde,2*RayonCaseRonde)
    y=y-Marge-2*RayonCaseRonde
    StartDrawing(CanvasOutput(CasesRondes(0,i)))
    Circle(RayonCaseRonde, RayonCaseRonde, RayonCaseRonde, Vert)
    StopDrawing()
  Next i
  
  StartDrawing(CanvasOutput(CasesRondes(0,0)))
  w=TextWidth("D")
  h=TextHeight("D")
  DrawRotatedText(RayonCaseRonde-w/2, RayonCaseRonde-h/2, "D", 0)
  StopDrawing()
  
  y=TailleEcurie+TailleEcurie/2
  CasesRondes(0,14)=CanvasGadget(#PB_Any,0,y,2*RayonCaseRonde,2*RayonCaseRonde)
  StartDrawing(CanvasOutput(CasesRondes(0,14)))
  Circle(RayonCaseRonde, RayonCaseRonde, RayonCaseRonde, Vert)
  StopDrawing()
  
  ;Cases numérotées
  x=Marge+2*RayonCaseRonde
  y=y-RayonCaseRonde
  For i=1 To 6
    CasesNum(0,i)=CanvasGadget(#PB_Any,x,y,2*RayonCaseRonde,4*RayonCaseRonde)
    StartDrawing(CanvasOutput(CasesNum(0,i))) 
    Box(0,0,2*RayonCaseRonde,4*RayonCaseRonde, vert)
    DrawRotatedText(RayonCaseRonde-w/2, 2*RayonCaseRonde-h/2, Str(i), 0)
    StopDrawing()
    x=x+marge+2*RayonCaseRonde
  Next i
  
  ;TODO Finir le plateau
  ;TODO Dessiner Chevaux
  
  BoutonJeu=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,0,100,30,"JOUER")
  TextGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,40,100,40,"Nombre de joueurs (2 à 6)")
  StringGNombreDeJoueur=StringGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,90,100,30,"2")
  BoutonEcurieVerte=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,200,100,30,"VERT",#PB_Button_Toggle)
  BoutonEcurieBleue=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,240,100,30,"BLEU",#PB_Button_Toggle)
  BoutonEcurieRouge=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,280,100,30,"ROUGE",#PB_Button_Toggle)
  BoutonEcurieOrange=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-40,320,100,30,"ORANGE",#PB_Button_Toggle)
  SetGadgetState(BoutonEcurieVerte, 1)
  BoutonLancerDe=ButtonGadget(#PB_Any,EcranHauteur+LargeurSup/2-20,400,60,60,"Dé")
  AfficheDE=CanvasGadget(#PB_Any,EcranHauteur+LargeurSup/2-20,480,60,60)
  
  ;TODO Finir
  
  
  
  
EndProcedure

DessinerPlateauDeJeu()
;TODO Finir règle du jeu : Faire un 6 pour commencer, etc.

Repeat
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case BoutonLancerDe 
          go=ElapsedMilliseconds()
          Repeat
            DE=Random(6,1)
            StartDrawing(CanvasOutput(AfficheDE))
            Box(0,0,60,60,RGB(255,255,0))
            DrawText(30, 20, Str(DE),RGB(255,0,0),RGB(255,255,0))
            StopDrawing()
            Delay(100)
          Until ElapsedMilliseconds() - go >2000
          
      EndSelect
      
  EndSelect
Until Event = #PB_Event_CloseWindow
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 !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Jeu de petits chevaux

Message par Micoute »

Bonjour à tous, je vous présente à nouveau mon jeu de petit chevaux qui est maintenant fonctionnel, mais qui ne gère pas encore plusieurs chevaux sur le plateau, ni si le joueur à fait un 6, sauf au départ du jeu !

Code : Tout sélectionner

;*************************
;* Jeu de petits chevaux *
;*                       *
;* par Micoute © 05/2015 *
;*************************

;**************************************************************************************************************************
;*                                                    Règle des Petits Chevaux                                            *
;*                                                                                                                        *
;* Chaque joueur  place ses 2 chevaux dans les écuries. Ils lancent  le dé chacun son tour et doivent faire 6 pour pouvoir*
;* sortir un cheval et le  placer sur la Case départ de sa couleur.  Si lors de la partie vous effectuez des 6,  cela vous*
;* permet de rejouer immédiatement et d’avancer d'autant de cases que de points marqués par le dé.                        *
;*                                                                                                                        *
;*   Attention !  Une  Case  ne  peut  être  occupée  que  par  un seul cheval. Celui qui arrive sur une Case occupée doit*
;* reculer  d’autant de  points en trop.  Si un cheval arrive juste sur une Case occupée,  il renvoie le cheval de l’autre*
;* joueur à l’écurie et prend sa place. Celui qui retourne à l’écurie doit alors tout recommencer avec un 6 de départ.    *
;*                                                                                                                        *
;*   Comment gagner une partie de petits chevaux :                                                                        *
;*                                                                                                                        *
;* Pour  gagner une  partie de  petits chevaux,  il faut que le joueur soit le premier à faire le tour complet du jeu avec*
;* tous  ses chevaux  et arrive  à remonter chaque cases numérotées de 1 à 6 avec le nombre juste pour chacun des 2. Enfin*
;* pour terminer, il devra faire de nouveau un 6 pour atteindre la Case centrale du jeu.                                  *
;*                                                                                                                        *
;* Quand le premier cheval d'une écurie est arrivé sur la case centrale, on peut faire sortir le cheval 2 de la même façon*
;*                                                                                                                        *
;*                                       Le dé est de la même couleur que l'écurie en cours                               *
;**************************************************************************************************************************


Structure SP
  L.i
  H.i
EndStructure

Enumeration Fenetres
  #Fenetre
EndEnumeration

Enumeration Sprites
  #Pion1
  #Pion2
  #Pion3
  #Pion4
  #Pion5
  #Sp_De
EndEnumeration

Enumeration Polices
  #Police
EndEnumeration  

If InitMouse()=0 Or InitKeyboard()=0 Or InitSprite()=0 Or InitSound()=0
  MessageRequester ("Erreur", "Ouverture Direct X impossible !", 0)
  End
EndIf

UseJPEGImageDecoder()
UsePNGImageDecoder()

LoadFont(#Police, "Arial", 36, #PB_Font_Bold)
Police = FontID(#Police)
ExamineDesktops()
Largeur=DesktopWidth(0)
;1920=largeur d'écran de base pour le développement
Global Coeff.f=Largeur/1920
;1.777777777777778 est le rapport standard HD
Hauteur=Largeur/(1920/1080)

Global Dim SP.SP(4), Dim EcuVerte(1,1), Dim EcuRouge(1,1), Dim EcuBleue(1,1), Dim EcuJaune(1,1) ;les pions + la table
Global Dim CasesRondes(4, 12, 1)                                                                ; de 0 à 10
Global Dim CasesNum(4, 5, 1)
Global Dim Pos(48,1)
Global NbreJoueurs$ ; De 2 à 4
Global NbreJoueurs  ; De 2 à 4
Global NbreChevaux = 2
Global V1Parti, V2Parti, R1Parti, R2Parti, B1Parti, B2Parti, J1Parti, J2Parti
Global CmptV1, CmptV2, CmptR1, CmptR2, CmptB1, CmptB2, CmptJ1, CmptJ2
Global EtatV,EtatR,EtatB,EtatJ
Global AncPos, PosAct, Diff
Global BtnJeu
Global StrNbreJoueur
Global BtnEcurieVerte
Global BtnEcurieBleue
Global BtnEcurieRouge
Global BtnEcurieJaune
Global BtnLancerDe
Global AfficheDE ; de 1 à 5 plus 0 inutilisée
Global LargeurEcran = 1000*Coeff, HauteurEcran = 1000*Coeff
Global  De, Rayon.f = 25*Coeff, X, Y, I,CoulFnd = $696900, Couleur, CoulGrille = $FFFFFF, Vert = $FF00, Rouge = $FF, Bleu = $FF0000, Jaune = $FFFF

Declare ObtenirEtatBoutonBascule(IdGadget)

Macro StockerTailleTableau(Tableau,Numero,Sprite)
  SP(Numero)\H = SpriteHeight(Sprite)
  SP(Numero)\L = SpriteWidth(Sprite)
EndMacro

Procedure InitialiserPositions()
  Protected j = 0
  Restore CasesRondesVertes
  For i = 1 To 12:Read.i X:Read.i Y:CasesRondes(0, i,0) = X*Coeff:CasesRondes(0, i,1) = Y*Coeff:Pos(i+j, 0) = X+35*Coeff:Pos(i+j, 1) = Y+35*Coeff:Next i
  j + i - 1
  Restore CasesRondesRouges
  For i = 1 To 12:Read.i X:Read.i Y:CasesRondes(1 ,i, 0) = X*Coeff:CasesRondes(1, i, 1) = Y*Coeff:Pos(i+j, 0) = X+35*Coeff:Pos(i+j, 1) = Y+35*Coeff:Next i
  j + i - 1
  Restore CasesRondesBleues
  For i = 1 To 12:Read.i X:Read.i Y:CasesRondes(2, i, 0) = X*Coeff:CasesRondes(2, i, 1) = Y*Coeff:Pos(i+j, 0) = X+35*Coeff:Pos(i+j, 1) = Y+35*Coeff:Next i
  j + i - 1
  Restore CasesRondesJaunes
  For i = 1 To 12:Read.i X:Read.i Y:CasesRondes(3, i, 0) = X*Coeff:CasesRondes(3, i, 1) = Y*Coeff:Pos(i+j, 0) = X+35*Coeff:Pos(i+j, 1) = Y+35*Coeff:Next i
  Restore Casecentrale
  Read.i X
  Read.i Y
  CasesNum(0, 0, 0) = X*Coeff:CasesNum(0, 0, 1) = Y*Coeff
  CasesNum(1, 0, 0) = X*Coeff:CasesNum(1, 0, 1) = Y*Coeff
  CasesNum(2, 0, 0) = X*Coeff:CasesNum(2, 0, 1) = Y*Coeff
  CasesNum(3, 0, 0) = X*Coeff:CasesNum(3, 0, 1) = Y*Coeff  
  Restore CasesNumVertes
  For i = 1 To 5:Read.i X:Read.i Y:CasesNum(0, i, 0) = X*Coeff:CasesNum(0, i, 1) = Y*Coeff:Next i
  Restore CasesNumRouges
  For i = 1 To 5:Read.i X:Read.i Y:CasesNum(1, i, 0) = X*Coeff:CasesNum(1, i, 1) = Y*Coeff:Next i
  Restore CasesNumBleues
  For i = 1 To 5:Read.i X:Read.i Y:CasesNum(2, i, 0) = X*Coeff:CasesNum(2, i, 1) = Y*Coeff:Next i
  Restore CasesNumJaunes
  For i = 1 To 5:Read.i X:Read.i Y:CasesNum(3, i, 0) = X*Coeff:CasesNum(3, i, 1) = Y*Coeff:Next i  
  
  EcuVerte(0,0)=805*Coeff:EcuVerte(0,1)= 35*Coeff:EcuVerte(1,0)=875*Coeff:EcuVerte(1,1)= 35*Coeff
  EcuRouge(0,0)=805*Coeff:EcuRouge(0,1)=875*Coeff:EcuRouge(1,0)=875*Coeff:EcuRouge(1,1)=875*Coeff
  EcuBleue(0,0)= 35*Coeff:EcuBleue(0,1)=875*Coeff:EcuBleue(1,0)=105*Coeff:EcuBleue(1,1)=875*Coeff
  EcuJaune(0,0)= 35*Coeff:EcuJaune(0,1)= 35*Coeff:EcuJaune(1,0)=105*Coeff:EcuJaune(1,1)= 35*Coeff
EndProcedure  

Procedure TraitVertical(X, Y, Hauteur, Epaisseur=1, Couleur=0) ; Trace un trait vertical avec épaisseur et couleur choisies
  Protected i = 0
  
  If Epaisseur >0
    While i < Epaisseur
      Line(x+i, y, 1, Hauteur, Couleur)
      i+1
    Wend
  Else
    Line(x, y, 1, Hauteur, Couleur)
  EndIf
EndProcedure

Procedure TraitHorizontal(X, Y, Longueur, Epaisseur=1, Couleur=0) ; Trace un trait horizontal avec épaisseur et couleur choisies
  Protected i = 0
  
  If Epaisseur > 0
    While i < Epaisseur
      Line(x, y+i, Longueur, 1, Couleur)
      i+1
    Wend
  Else
    Line(x, y, Longueur, 1, Couleur)
  EndIf
EndProcedure

Procedure Cadre(x, y, Largeur, Hauteur, Epaisseur=1, CouleurCadre=0); Trace un cadre simple de la couleur choisie
                                                                    ;Ligne supérieure
  TraitHorizontal(x, y, Largeur, Epaisseur, CouleurCadre)
  ;Ligne gauche
  TraitVertical(x, y, Hauteur+Epaisseur, Epaisseur, CouleurCadre)
  ;Ligne droite
  TraitVertical(x+Largeur, y, Hauteur+Epaisseur, Epaisseur, CouleurCadre)
  ;Ligne inférieure
  TraitHorizontal(x, y+Hauteur, Largeur, Epaisseur, CouleurCadre)
EndProcedure

Procedure Cercle(x, y, rayon, Epaisseur=1, CouleurCercle=0) ; x et y indique le centre
  Protected CouleurFond=Point(x, y)
  
  Circle(x, y, Rayon, CouleurCercle)
  Circle(x, y, Rayon-Epaisseur, CouleurFond)
EndProcedure

Procedure Jeter_le_de()
  De = Random(6, 1)
  ProcedureReturn De
EndProcedure

Macro DepartVert()
  StartDrawing(ScreenOutput())
  DrawRotatedText(CasesRondes(0, 1, 0)+40*Coeff, CasesRondes(0, 1, 1)+45*Coeff, "D", 180, 0)
  StopDrawing()
EndMacro

Macro DepartRouge()
  StartDrawing(ScreenOutput())
  DrawRotatedText(CasesRondes(1, 1, 0)+24*Coeff, CasesRondes(1, 1, 1)+40*Coeff, "D", 90, 0)
  StopDrawing()
EndMacro

Macro DepartBleu()
  StartDrawing(ScreenOutput())
  DrawRotatedText(CasesRondes(2, 1, 0)+30*Coeff, CasesRondes(2, 1, 1)+30*Coeff, "D", 0, 0)
  StopDrawing()
EndMacro

Macro DepartJaune()
  StartDrawing(ScreenOutput())
  DrawRotatedText(CasesRondes(3, 1, 0)+45*Coeff, CasesRondes(3, 1, 1)+30*Coeff, "D", 270, 0)
  StopDrawing()
EndMacro  

Macro V1()
  DisplayTransparentSprite(#Pion5,420+35*Coeff, 70-35*Coeff, 255, CoulFnd);J12
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, 0) ;V1
  Circle(560*Coeff, 70*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V2()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 70-35*Coeff, 255, CoulFnd);V1
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, 0);V1
  Circle(560*Coeff, 140*Coeff, Rayon*Coeff, Couleur)  ;V2
  StopDrawing()
  DepartVert()
EndMacro

Macro V3()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 140-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 140*Coeff, Rayon*Coeff, 5*Coeff, 0);V2
  Circle(560*Coeff, 210*Coeff, Rayon*Coeff, Couleur)   ;V3
  StopDrawing()
EndMacro

Macro V4()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 210-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 210*Coeff, Rayon*Coeff, 5*Coeff, 0);V4
  Circle(560*Coeff, 280*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V5()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 280-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 280*Coeff, Rayon*Coeff, 5*Coeff, 0);V5
  Circle(560*Coeff, 350*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V6()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 350-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 350*Coeff, Rayon*Coeff, 5*Coeff, 0);
  Circle(560*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V7()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);V7
  Circle(630*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V8()
  DisplayTransparentSprite(#Pion5,560+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(630*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);V8
  Circle(700*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V9()
  DisplayTransparentSprite(#Pion5,630+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(700*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);V9
  Circle(770*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V10()
  DisplayTransparentSprite(#Pion5,700+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(770*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);V10
  Circle(840*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V11()
  DisplayTransparentSprite(#Pion5,770+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(840*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);V11
  Circle(910*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro V12()
  DisplayTransparentSprite(#Pion5,840+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(910*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0) ;V12
  Circle(910*Coeff, 490*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R1()
  DisplayTransparentSprite(#Pion5,840+35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(910*Coeff, 490*Coeff, Rayon*Coeff, 5*Coeff, 0) ;V12
  Circle(910*Coeff, 560*Coeff, Rayon*Coeff, Couleur)    ;R1
  StopDrawing()
EndMacro

Macro R2()
  DisplayTransparentSprite(#Pion5,840+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(910*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);R1
  Circle(840*Coeff, 560*Coeff, Rayon*Coeff, Couleur)   ;R2
  StopDrawing()
  DepartRouge()
EndMacro

Macro R3()
  DisplayTransparentSprite(#Pion5,770+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(840*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);R3
  Circle(770*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R4()
  DisplayTransparentSprite(#Pion5,700+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(770*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);R4
  Circle(700*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R5()
  DisplayTransparentSprite(#Pion5,630+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(700*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);R5
  Circle(630*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R6()
  DisplayTransparentSprite(#Pion5,560+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(630*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);R6
  Circle(560*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R7()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);R7
  Circle(560*Coeff, 630*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R8()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 630-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 630*Coeff, Rayon*Coeff, 5*Coeff, 0);R8
  Circle(560*Coeff, 700*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R9()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 700-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 700*Coeff, Rayon*Coeff, 5*Coeff, 0);R9
  Circle(560*Coeff, 770*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R10()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 770-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 770*Coeff, Rayon*Coeff, 5*Coeff, 0);R10
  Circle(560*Coeff, 840*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R11()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 840-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 840*Coeff, Rayon*Coeff, 5*Coeff, 0) ;R11
  Circle(560*Coeff, 910*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro R12()
  DisplayTransparentSprite(#Pion5,490+35*Coeff, 910-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(560*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, 0);R11
  Circle(490*Coeff, 910*Coeff, Rayon*Coeff, Couleur)   ;R12
  StopDrawing()
EndMacro

Macro B1()
  DisplayTransparentSprite(#Pion5,420+35*Coeff, 910-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, 0) ;B1
  Circle(420*Coeff, 910*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B2()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 910-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, 0);B2
  Circle(420*Coeff, 840*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
  DepartBleu()
EndMacro

Macro B3()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 840-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 840*Coeff, Rayon*Coeff, 5*Coeff, 0);B3
  Circle(420*Coeff, 770*coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B4()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 770-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 770*coeff, Rayon*Coeff, 5*Coeff, 0);B4
  Circle(420*Coeff, 700*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B5()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 700-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 700*Coeff, Rayon*Coeff, 5*Coeff, 0);B5
  Circle(420*Coeff, 630*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B6()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 630-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 630*Coeff, Rayon*Coeff, 5*Coeff, 0);B6
  Circle(420*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B7()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);B7
  Circle(350*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B8()
  DisplayTransparentSprite(#Pion5,280+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(350*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);B8
  Circle(280*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B9()
  DisplayTransparentSprite(#Pion5,210+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(280*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);B9
  Circle(210*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B10()
  DisplayTransparentSprite(#Pion5,140+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(210*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0);B10
  Circle(140*Coeff, 560*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro B11()
  DisplayTransparentSprite(#Pion5,70+35*Coeff, 560-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(140*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0) ;B10
  Circle(70*Coeff, 560*Coeff, Rayon*Coeff, Couleur)     ;B11
  StopDrawing()
EndMacro

Macro B12()
  DisplayTransparentSprite(#Pion5,35*Coeff, 560-35*Coeff, 255, CoulFnd);B11
  StartDrawing(ScreenOutput())
  Cercle(70*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0) ;B11
  Circle(70*Coeff, 490*Coeff, Rayon*Coeff, Couleur)    ;B12
  StopDrawing()
EndMacro

Macro J1()
  DisplayTransparentSprite(#Pion5,35*Coeff, 490-35*Coeff, 255, CoulFnd);B12
  StartDrawing(ScreenOutput())
  Cercle(70*Coeff, 490*Coeff, Rayon*Coeff, 5*Coeff, 0);B12
  Circle(70*Coeff, 420*Coeff, Rayon*Coeff, Couleur)   ;J1
  StopDrawing()
EndMacro

Macro J2()
  DisplayTransparentSprite(#Pion5,35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  :Cercle(70*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);J1
  :Circle(140*Coeff, 420*Coeff, Rayon*Coeff, Couleur)  ;J2
  StopDrawing()
  DepartJaune()
EndMacro

Macro J3()
  DisplayTransparentSprite(#Pion5,70+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(140*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);J3
  Circle(210*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J4()
  DisplayTransparentSprite(#Pion5,140+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(210*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);J4
  Circle(280*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J5()
  DisplayTransparentSprite(#Pion5,210+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(280*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);J5
  Circle(350*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J6()
  DisplayTransparentSprite(#Pion5,280+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(350*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);J6
  Circle(420*Coeff, 420*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J7()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 420-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0);J7
  Circle(420*Coeff, 350*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J8()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 350-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 350*Coeff, Rayon*Coeff, 5*Coeff, 0);J8
  Circle(420*Coeff, 280*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J9()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 280-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 280*Coeff, Rayon*Coeff, 5*Coeff, 0);J9
  Circle(420*Coeff, 210*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J10()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 210-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 210*Coeff, Rayon*Coeff, 5*Coeff, 0);J10
  Circle(420*Coeff, 140*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro J11()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 140-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 140*Coeff, Rayon*Coeff, 5*Coeff, 0) ;J11
  Circle(420*Coeff, 70*Coeff, Rayon*Coeff, Couleur)
  StopDrawing() 
EndMacro

Macro J12()
  DisplayTransparentSprite(#Pion5,350+35*Coeff, 70-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(420*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Circle(490*Coeff, 70*Coeff, Rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro RV1()
  DisplayTransparentSprite(#Pion5,420+35*Coeff, 70-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, 0) ;J12
  Cercle(490*Coeff, 140*Coeff, Rayon*Coeff, 25*Coeff, Vert)
  StopDrawing()
EndMacro

Macro RV2()
  DisplayTransparentSprite(#Pion5,420+35*Coeff, 140-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Circle(490*Coeff, 140*Coeff, Rayon*Coeff, vert)
  Cercle(490*Coeff, 210*Coeff, Rayon*Coeff, 25*Coeff, vert)
  DrawRotatedText(495*Coeff, 145*Coeff, "1", 180, 0)
  StopDrawing()
EndMacro

Macro RV3()
  DisplayTransparentSprite(#Pion5,420+35*Coeff, 210-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 210*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 215*Coeff, "2", 180, 0)
  Cercle(490*Coeff, 280*Coeff, Rayon*Coeff, 25*Coeff, Vert)
  StopDrawing()
EndMacro

Macro RV4()
  DisplayTransparentSprite(#Pion5,420+35*Coeff, 280-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 280*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 285*Coeff, "3", 180, 0)
  Cercle(490*Coeff, 350*Coeff, Rayon*Coeff, 25*Coeff, Vert)
  StopDrawing()
EndMacro

Macro RV5()
  DisplayTransparentSprite(#Pion5,420+35*Coeff, 350-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 350*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 355*Coeff, "4", 180, 0)
  Cercle(490*Coeff, 420*Coeff, Rayon*Coeff, 25*Coeff, Vert)
  StopDrawing()
EndMacro

Macro Gagnant()
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 420*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 425*Coeff, "5", 180, 0)
  Cercle(560*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(555*Coeff, 495*Coeff, "5", 90, $FFFFFF)
  Cercle(490*Coeff, 560*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 555*Coeff, "5", 0, $FFFFFF)
  Cercle(420*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(430*Coeff, 485*Coeff, "5", 270, 0)
  Circle(490-Coeff, 490*Coeff, rayon*Coeff, Couleur)
  StopDrawing()
EndMacro

Macro RR1()
  DisplayTransparentSprite(#Pion5,910-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(840*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge)
  Cercle(910*Coeff, 490*Coeff, Rayon*Coeff, 5*Coeff, 0)
  StopDrawing()
EndMacro

Macro RR2()
  DisplayTransparentSprite(#Pion5,840-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(840*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(835*Coeff, 495*Coeff, "1", 90, $FFFFFF)
  Cercle(770*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge)
  StopDrawing()
EndMacro

Macro RR3()
  DisplayTransparentSprite(#Pion5,770-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(770*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(765*Coeff, 495*Coeff, "2", 90, $FFFFFF)
  Cercle(700*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge)
  StopDrawing()
EndMacro

Macro RR4()
  DisplayTransparentSprite(#Pion5,700-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(700*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(695*Coeff, 495*Coeff, "3", 90, $FFFFFF)
  Cercle(630*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge)
  StopDrawing()
EndMacro

Macro RR5()
  DisplayTransparentSprite(#Pion5,630-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(630*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(625*Coeff, 495*Coeff, "4", 90, $FFFFFF)
  Cercle(560*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge)
  StopDrawing()
EndMacro


Macro RB1()
  DisplayTransparentSprite(#Pion5,490-35*Coeff, 910-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 840*Coeff, Rayon*Coeff, 25*Coeff, Bleu)
  Cercle(490*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, 0)
  StopDrawing()
EndMacro

Macro RB2()
  DisplayTransparentSprite(#Pion5,490-35*Coeff, 840-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 840*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 835*Coeff, "1", 0, $FFFFFF)
  Cercle(490*Coeff, 770*Coeff, Rayon*Coeff, 25*Coeff, Bleu)
  StopDrawing()
EndMacro

Macro RB3()
  DisplayTransparentSprite(#Pion5,49-35*Coeff, 770-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 770*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 765*Coeff, "2", 0, $FFFFFF)
  Cercle(490*Coeff, 700*Coeff, Rayon*Coeff, 25*Coeff, Bleu)
  StopDrawing()
EndMacro

Macro RB4()
  DisplayTransparentSprite(#Pion5,490-35*Coeff, 700-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(490*Coeff, 700*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 695*Coeff, "3", 0, $FFFFFF)
  Cercle(490*Coeff, 630*Coeff, Rayon*Coeff, 25*Coeff, Bleu)
  StopDrawing()
EndMacro

Macro RB5()
  DisplayTransparentSprite(#Pion5,490-35*Coeff, 630-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())  
  Cercle(490*Coeff, 630*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 625*Coeff, "4", 0, $FFFFFF)
  Cercle(490*Coeff, 560*Coeff, Rayon*Coeff, 25*Coeff, Bleu)
  StopDrawing()
EndMacro



Macro RJ1()
  DisplayTransparentSprite(#Pion5,70-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(140*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune)
  Cercle(70*Coeff, 490*Coeff, Rayon*Coeff, 5*Coeff, 0)
  StopDrawing()
EndMacro

Macro RJ2()
  DisplayTransparentSprite(#Pion5,140-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(140*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(150*Coeff, 485*Coeff, "1", 270, 0)
  Cercle(210*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune)
  StopDrawing()
EndMacro

Macro RJ3()
  DisplayTransparentSprite(#Pion5,210-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(210*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(220*Coeff, 485*Coeff, "2", 270, 0)
  Cercle(280*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune)
  StopDrawing()
EndMacro

Macro RJ4()
  DisplayTransparentSprite(#Pion5,280-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(280*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(290*Coeff, 485*Coeff, "3", 270, 0)
  Cercle(350*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune)
  StopDrawing()
EndMacro

Macro RJ5()
  DisplayTransparentSprite(#Pion5,350-35*Coeff, 490-35*Coeff, 255, CoulFnd)
  StartDrawing(ScreenOutput())
  Cercle(350*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(360*Coeff, 485*Coeff, "4", 270, 0)
  Cercle(420*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune)
  StopDrawing()
EndMacro

Procedure DessinerPlateau()
  ;DrawingFont(#Police2)
  ;Tracer la grille de jeu
  TraitHorizontal(385*Coeff, 35*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 105*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 175*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 245*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 315*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(35*Coeff, 385*Coeff, 910*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(35*Coeff, 455*Coeff, 910*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(35*Coeff, 525*Coeff, 910*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(35*Coeff, 595*Coeff, 915*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 665*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 735*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 805*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 875*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitHorizontal(385*Coeff, 945*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  
  
  TraitVertical(35*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(105*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(175*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(245*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(315*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(385*Coeff, 35*Coeff, 910*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(455*Coeff, 35*Coeff, 910*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(525*Coeff, 35*Coeff, 910*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(595*Coeff, 35*Coeff, 915*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(665*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(735*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(805*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(875*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  TraitVertical(945*Coeff, 385*Coeff, 210*Coeff, 5*Coeff, CoulGrille)
  
  Cercle(560*Coeff,  70*Coeff, Rayon*Coeff, 5*Coeff, 0) ;V1
  Cercle(560*Coeff, 140*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 210*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 280*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 350*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(630*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(700*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(770*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(840*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(910*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0) ;V11
  Cercle(910*Coeff, 490*Coeff, Rayon*Coeff, 5*Coeff, 0) ;J12
  Cercle(910*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0) ;R1
  Cercle(840*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(770*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(700*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(630*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 630*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 700*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 770*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 840*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(560*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, 0) ;R11
  Cercle(490*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, 0) ;R12
  Cercle(420*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, 0) ;B1
  Cercle(420*Coeff, 840*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 770*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 700*coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 630*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(350*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(280*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(210*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(140*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle( 70*Coeff, 560*Coeff, Rayon*Coeff, 5*Coeff, 0) ;B11
  Cercle( 70*Coeff, 490*Coeff, Rayon*Coeff, 5*Coeff, 0) ;B12
  Cercle( 70*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0) ;J0
  Cercle(140*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(210*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(280*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(350*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 420*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 350*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 280*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 210*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff, 140*Coeff, Rayon*Coeff, 5*Coeff, 0)
  Cercle(420*Coeff,  70*Coeff, Rayon*Coeff, 5*Coeff, 0) ;J11
  Cercle(490*Coeff,  70*Coeff, Rayon*Coeff, 5*Coeff, 0) ;J12
  Cercle(490*Coeff, 140*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 145*Coeff, "1", 180, 0);RV1
  Cercle(490*Coeff, 210*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 215*Coeff, "2", 180, 0)
  Cercle(490*Coeff, 280*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 285*Coeff, "3", 180, 0)
  Cercle(490*Coeff, 350*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 355*Coeff, "4", 180, 0)
  Cercle(490*Coeff, 420*Coeff, Rayon*Coeff, 25*Coeff, Vert) : DrawRotatedText(495*Coeff, 425*Coeff, "5", 180, 0)
  Cercle(840*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(835*Coeff, 495*Coeff, "1", 90, $FFFFFF)
  Cercle(770*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(765*Coeff, 495*Coeff, "2", 90, $FFFFFF)
  Cercle(700*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(695*Coeff, 495*Coeff, "3", 90, $FFFFFF)
  Cercle(630*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(625*Coeff, 495*Coeff, "4", 90, $FFFFFF)
  Cercle(560*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Rouge) : DrawRotatedText(555*Coeff, 495*Coeff, "5", 90, $FFFFFF)
  Cercle(490*Coeff, 840*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 835*Coeff, "1", 0, $FFFFFF)
  Cercle(490*Coeff, 770*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 765*Coeff, "2", 0, $FFFFFF)
  Cercle(490*Coeff, 700*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 695*Coeff, "3", 0, $FFFFFF)
  Cercle(490*Coeff, 630*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 625*Coeff, "4", 0, $FFFFFF)
  Cercle(490*Coeff, 560*Coeff, Rayon*Coeff, 25*Coeff, Bleu) : DrawRotatedText(490*Coeff, 555*Coeff, "5", 0, $FFFFFF)
  Cercle(140*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(150*Coeff, 485*Coeff, "1", 270, 0)
  Cercle(210*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(220*Coeff, 485*Coeff, "2", 270, 0)
  Cercle(280*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(290*Coeff, 485*Coeff, "3", 270, 0)
  Cercle(350*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(360*Coeff, 485*Coeff, "4", 270, 0)
  Cercle(420*Coeff, 490*Coeff, Rayon*Coeff, 25*Coeff, Jaune) : DrawRotatedText(430*Coeff, 485*Coeff, "5", 270, 0)
  
  ;Dessiner les écuries
  Cadre(805*Coeff, 35*Coeff, 140*Coeff, 70*Coeff, 5*Coeff, Vert)
  Cadre(805*Coeff, 875*Coeff, 140*Coeff, 70*Coeff, 5*Coeff, Rouge)
  Cadre(35*Coeff, 875*Coeff, 140*Coeff, 70*Coeff, 5*Coeff, bleu)
  Cadre(35*Coeff, 35*Coeff, 140*Coeff, 70*Coeff, 5*Coeff, Jaune)
  
  Cercle(840*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, Vert)
  Cercle(910*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, Vert)
  Cercle(840*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, Rouge)
  Cercle(910*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, Rouge)
  Cercle(70*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, Bleu)
  Cercle(140*Coeff, 910*Coeff, Rayon*Coeff, 5*Coeff, Bleu)
  Cercle(70*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, Jaune)
  Cercle(140*Coeff, 70*Coeff, Rayon*Coeff, 5*Coeff, Jaune)
  
EndProcedure

Procedure AvancerV1()
  If V1Parti = 1 ;si position actuelle > 0 et si V1Parti = 1
    Select CmptV1 
      Case 2:V2()
      Case 3:V3()
      Case 4:V4()
      Case 5:V5()
      Case 6:V6()
      Case 7:V7()
      Case 8:V8()
      Case 9:V9()
      Case 10:V10()
      Case 11:V11()
      Case 12:V12()
      Case 13:R1()
      Case 14:R2()
      Case 15:R3()
      Case 16:R4()
      Case 17:R5()
      Case 18:R6()
      Case 19:R7()
      Case 20:R8()
      Case 21:R9()
      Case 22:R10()
      Case 23:R11()
      Case 24:R12()
      Case 25:B1()
      Case 26:B2()
      Case 27:B3()
      Case 28:B4()
      Case 29:B5()
      Case 30:B6()
      Case 31:B7()
      Case 32:B8()
      Case 33:B9()
      Case 34:B10()
      Case 35:B11()
      Case 36:B12()
      Case 37:J1()
      Case 38:J2()
      Case 39:J3()
      Case 40:J4()
      Case 41:J5()
      Case 42:J6()
      Case 43:J7()
      Case 44:J8()
      Case 45:J9()
      Case 46:J10()
      Case 47:J11()
      Case 48:J12():V1Parti = 2 ;si compteur cheval vert 1 = 48, alors V1Parti = 2
    EndSelect 
  EndIf
  
EndProcedure

Procedure AvancerV2()
  If PosAct And V2Parti = 1
    Select CmptV2 
      Case 2:V2()
      Case 3:V3()
      Case 4:V4()
      Case 5:V5()
      Case 6:V6()
      Case 7:V7()
      Case 8:V8()
      Case 9:V9()
      Case 10:V10()
      Case 11:V11()
      Case 12:V12()
      Case 13:R1()
      Case 14:R2()
      Case 15:R3()
      Case 16:R4()
      Case 17:R5()
      Case 18:R6()
      Case 19:R7()
      Case 20:R8()
      Case 21:R9()
      Case 22:R10()
      Case 23:R11()
      Case 24:R12()
      Case 25:B1()
      Case 26:B2()
      Case 27:B3()
      Case 28:B4()
      Case 29:B5()
      Case 30:B6()
      Case 31:B7()
      Case 32:B8()
      Case 33:B9()
      Case 34:B10()
      Case 35:B11()
      Case 36:B12()
      Case 37:J1()
      Case 38:J2()
      Case 39:J3()
      Case 40:J4()
      Case 41:J5()
      Case 42:J6()
      Case 43:J7()
      Case 44:J8()
      Case 45:J9()
      Case 46:J10()
      Case 47:J11()
      Case 48:J12():V2Parti = 2
    EndSelect 
  EndIf
EndProcedure

Procedure AvancerR1()
  If PosAct And R1Parti = 1
    Select CmptR1 
      Case 2:R2()
      Case 3:R3()
      Case 4:R4()
      Case 5:R5()
      Case 6:R6()
      Case 7:R7()
      Case 8:R8()
      Case 9:R9()
      Case 10:R10()
      Case 11:R11()
      Case 12:R12()
      Case 13:B1()
      Case 14:B2()
      Case 15:B3()
      Case 16:B4()
      Case 17:B5()
      Case 18:B6()
      Case 19:B7()
      Case 20:B8()
      Case 21:B9()
      Case 22:B10()
      Case 23:B11()
      Case 24:B12()
      Case 25:J1()
      Case 26:J2()
      Case 27:J3()
      Case 28:J4()
      Case 29:J5()
      Case 30:J6()
      Case 31:J7()
      Case 32:J8()
      Case 33:J9()
      Case 34:J10()
      Case 35:J11()
      Case 36:J12()
      Case 37:V1()
      Case 38:V2()
      Case 39:V3()
      Case 40:V4()
      Case 41:V5()
      Case 42:V6()
      Case 43:V7()
      Case 44:V8()
      Case 45:V9()
      Case 46:V10()
      Case 47:V11()
      Case 48:V12():R1Parti = 2
    EndSelect 
  EndIf
EndProcedure

Procedure AvancerR2()
  If PosAct And R2Parti = 1
    Select CmptR2 
      Case 2:R2()
      Case 3:R3()
      Case 4:R4()
      Case 5:R5()
      Case 6:R6()
      Case 7:R7()
      Case 8:R8()
      Case 9:R9()
      Case 10:R10()
      Case 11:R11()
      Case 12:R12()
      Case 13:B1()
      Case 14:B2()
      Case 15:B3()
      Case 16:B4()
      Case 17:B5()
      Case 18:B6()
      Case 19:B7()
      Case 20:B8()
      Case 21:B9()
      Case 22:B10()
      Case 23:B11()
      Case 24:B12()
      Case 25:J1()
      Case 26:J2()
      Case 27:J3()
      Case 28:J4()
      Case 29:J5()
      Case 30:J6()
      Case 31:J7()
      Case 32:J8()
      Case 33:J9()
      Case 34:J10()
      Case 35:J11()
      Case 36:J12()
      Case 37:V1()
      Case 38:V2()
      Case 39:V3()
      Case 40:V4()
      Case 41:V5()
      Case 42:V6()
      Case 43:V7()
      Case 44:V8()
      Case 45:V9()
      Case 46:V10()
      Case 47:V11()
      Case 48:V12():R2Parti = 2
    EndSelect 
  EndIf
EndProcedure

Procedure AvancerB1()
  If PosAct And B1Parti = 1
    Select CmptB1 
      Case 2:B2()
      Case 3:B3()
      Case 4:B4()
      Case 5:B5()
      Case 6:B6()
      Case 7:B7()
      Case 8:B8()
      Case 9:B9()
      Case 10:B10()
      Case 11:B11()
      Case 12:B12()
      Case 13:J1()
      Case 14:J2()
      Case 15:J3()
      Case 16:J4()
      Case 17:J5()
      Case 18:J6()
      Case 19:J7()
      Case 20:J8()
      Case 21:J9()
      Case 22:J10()
      Case 23:J11()
      Case 24:J12()
      Case 25:V1()
      Case 26:V2()
      Case 27:V3()
      Case 28:V4()
      Case 29:V5()
      Case 30:V6()
      Case 31:V7()
      Case 32:V8()
      Case 33:V9()
      Case 34:V10()
      Case 35:V11()
      Case 36:V12()
      Case 37:R1()
      Case 38:R2()
      Case 39:R3()
      Case 40:R4()
      Case 41:R5()
      Case 42:R6()
      Case 43:R7()
      Case 44:R8()
      Case 45:R9()
      Case 46:R10()
      Case 47:R11()
      Case 48:R12():B1Parti = 2
    EndSelect 
  EndIf
  
  If CmptB1 = 48 And B1Parti = 2
    If De = 1
      RB1()
      B1Parti=3
    EndIf
  EndIf        
  If CmptB1 = 48 And B1Parti = 3
    If De = 2
      RB2()
      B1Parti = 4
    EndIf  
  EndIf
  If CmptB1 = 48 And B1Parti = 4
    If De = 3
      RB3()
      B1Parti = 5
    EndIf
  EndIf
  If CmptB1 = 48 And B1Parti = 5
    If De = 4
      RB4()
      B1Parti = 6
    EndIf
  EndIf
  If CmptB1 = 48 And B1Parti = 6
    If De = 5
      RB5()
      B1Parti = 7
    EndIf
  EndIf
  If CmptB1 = 48 And B1Parti = 7
    If De = 6
      Gagnant()
    B1Parti=8:EndIf
  EndIf
EndProcedure

Procedure AvancerB2()
  If PosAct And B2Parti = 1
    Select CmptB2 
      Case 2:B2()
      Case 3:B3()
      Case 4:B4()
      Case 5:B5()
      Case 6:B6()
      Case 7:B7()
      Case 8:B8()
      Case 9:B9()
      Case 10:B10()
      Case 11:B11()
      Case 12:B12()
      Case 13:J1()
      Case 14:J2()
      Case 15:J3()
      Case 16:J4()
      Case 17:J5()
      Case 18:J6()
      Case 19:J7()
      Case 20:J8()
      Case 21:J9()
      Case 22:J10()
      Case 23:J11()
      Case 24:J12()
      Case 25:V1()
      Case 26:V2()
      Case 27:V3()
      Case 28:V4()
      Case 29:V5()
      Case 30:V6()
      Case 31:V7()
      Case 32:V8()
      Case 33:V9()
      Case 34:V10()
      Case 35:V11()
      Case 36:V12()
      Case 37:R1()
      Case 38:R2()
      Case 39:R3()
      Case 40:R4()
      Case 41:R5()
      Case 42:R6()
      Case 43:R7()
      Case 44:R8()
      Case 45:R9()
      Case 46:R10()
      Case 47:R11()
      Case 48:R12():B2Parti = 2
    EndSelect 
  EndIf
  
  If CmptB2 = 48 And B2Parti = 2
    If De = 1
      RB1()
      B2Parti=3
    EndIf
  EndIf        
  If CmptB2 = 48 And B2Parti = 3
    If De = 2
      RB2()
      B2Parti = 4
    EndIf  
  EndIf
  If CmptB2 = 48 And B2Parti = 4
    If De = 3
      RB3()
      B2Parti = 5
    EndIf
  EndIf
  If CmptB2 = 48 And B2Parti = 5
    If De = 4
      RB4()
      B2Parti = 6
    EndIf
  EndIf
  If CmptB2 = 48 And B2Parti = 6
    If De = 5
      RB5()
      B2Parti = 7
    EndIf
  EndIf
  If CmptB2 = 48 And B2Parti = 7
    If De = 6
      Gagnant()
      B2Parti=8
    EndIf
  EndIf
EndProcedure

Procedure AvancerJ1()
  If PosAct And J1Parti = 1
    Select CmptJ1 
      Case 2:J2()
      Case 3:J3()
      Case 4:J4()
      Case 5:J5()
      Case 6:J6()
      Case 7:J7()
      Case 8:J8()
      Case 9:J9()
      Case 10:J10()
      Case 11:J11()
      Case 12:J12()
      Case 13:V1()
      Case 14:V2()
      Case 15:V3()
      Case 16:V4()
      Case 17:V5()
      Case 18:V6()
      Case 19:V7()
      Case 20:V8()
      Case 21:V9()
      Case 22:V10()
      Case 23:V11()
      Case 24:V12()
      Case 25:R1()
      Case 26:R2()
      Case 27:R3()
      Case 28:R4()
      Case 29:R5()
      Case 30:R6()
      Case 31:R7()
      Case 32:R8()
      Case 33:R9()
      Case 34:R10()
      Case 35:R11()
      Case 36:R12()
      Case 37:B1()
      Case 38:B2()
      Case 39:B3()
      Case 40:B4()
      Case 41:B5()
      Case 42:B6()
      Case 43:B7()
      Case 44:B8()
      Case 45:B9()
      Case 46:B10()
      Case 47:B11()
      Case 48:B12():J1Parti = 2
    EndSelect 
  EndIf
  
  If CmptJ1 = 48 And J1Parti = 2
    If De = 1
      RJ1()
      J1Parti = 3
    EndIf
  EndIf        
  If CmptJ1 = 48 And J1Parti = 3
    If De = 2
      RJ2()
      J1Parti = 4
    EndIf  
  EndIf
  If CmptJ1 = 48 And J1Parti = 4
    If De = 3
      RJ3()
      J1Parti = 5
    EndIf
  EndIf
  If CmptJ1 = 48 And J1Parti = 5
    If De = 4
      RJ4()
      J1Parti = 6
    EndIf
  EndIf
  If CmptJ1 = 48 And J1Parti = 6
    If De = 5
      RJ5()
      J1Parti = 7
    EndIf
  EndIf
  If CmptJ1 = 48 And J1Parti = 7
    If De = 6
      Gagnant()
      J1Parti = 8
    EndIf
  EndIf
EndProcedure

Procedure AvancerJ2()
  If PosAct And J2Parti = 1
    Select CmptJ2 
      Case 2:J2()
      Case 3:J3()
      Case 4:J4()
      Case 5:J5()
      Case 6:J6()
      Case 7:J7()
      Case 8:J8()
      Case 9:J9()
      Case 10:J10()
      Case 11:J11()
      Case 12:J12()
      Case 13:V1()
      Case 14:V2()
      Case 15:V3()
      Case 16:V4()
      Case 17:V5()
      Case 18:V6()
      Case 19:V7()
      Case 20:V8()
      Case 21:V9()
      Case 22:V10()
      Case 23:V11()
      Case 24:V12()
      Case 25:R1()
      Case 26:R2()
      Case 27:R3()
      Case 28:R4()
      Case 29:R5()
      Case 30:R6()
      Case 31:R7()
      Case 32:R8()
      Case 33:R9()
      Case 34:R10()
      Case 35:R11()
      Case 36:R12()
      Case 37:B1()
      Case 38:B2()
      Case 39:B3()
      Case 40:B4()
      Case 41:B5()
      Case 42:B6()
      Case 43:B7()
      Case 44:B8()
      Case 45:B9()
      Case 46:B10()
      Case 47:B11()
      Case 48:B12():J2Parti = 2
    EndSelect 
  EndIf
  
  If CmptJ2 = 48 And J2Parti = 2
    If De = 1
      RJ1()
      J2Parti = 3
    EndIf
  EndIf        
  If CmptJ2 = 48 And J2Parti = 3
    If De = 2
      RJ2()
      J2Parti = 4
    EndIf  
  EndIf
  If CmptJ2 = 48 And J2Parti = 4
    If De = 3
      RJ3()
      J2Parti = 5
    EndIf
  EndIf
  If CmptJ2 = 48 And J2Parti = 5
    If De = 4
      RJ4()
      J2Parti = 6
    EndIf
  EndIf
  If CmptJ2 = 48 And J2Parti = 6
    If De = 5
      RJ5()
      J2Parti = 7
    EndIf
  EndIf
  If CmptJ2 = 48 And J2Parti = 7
    If De = 6
      Gagnant()
      J2Parti = 8
    EndIf
  EndIf
EndProcedure

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 !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Jeu de petits chevaux

Message par Micoute »

Suite du programme.

Code : Tout sélectionner

Procedure Gestion()
  EtatV = ObtenirEtatBoutonBascule(BtnEcurieVerte)
  If V1Parti = 0 And EtatV = 1 And CmptV1 = 0 And De = 6:V1Parti = 1:CmptV1 = 1:De = 0:V1()
    ;Si le cheval 1 vert à fait un 6, même principe pour les autres chevaux
    DisplayTransparentSprite(#Pion5, EcuVerte(0,0), EcuVerte(0,1), 255, CoulFnd) ;Gomme sur écurie vert cheval 1
  EndIf
  If V2Parti = 0 And EtatV = 1 And CmptV2 = 0 And V1Parti = 8 And De = 6:V2Parti = 1:CmptV2 = 1:De = 0:V1()
    DisplayTransparentSprite(#Pion5, EcuVerte(1,0), EcuVerte(1,1), 255, CoulFnd) ;Gomme sur écurie vert cheval 2
    DisplayTransparentSprite(#Pion5, CasesNum(0,0,0), CasesNum(0,0,1), 255, CoulFnd) ;Sortir le cheval 1 vert du jeu
  EndIf
  EtatR = ObtenirEtatBoutonBascule(BtnEcurieRouge)
  If R1Parti = 0 And EtatR = 1 And CmptR1 = 0 And De = 6:R1Parti = 1:CmptR1 = 1:De = 0:R1()
    DisplayTransparentSprite(#Pion5, EcuRouge(0,0), EcuRouge(0,1), 255, CoulFnd) ;Gomme sur écurie rouge cheval 1
  EndIf
  If R2Parti = 0 And EtatR = 1 And CmptR2 = 0 And R1Parti = 8 And De = 6:R2Parti = 1:CmptR2 = 1:De = 0:R1()
    DisplayTransparentSprite(#Pion5, EcuRouge(1,0), EcuRouge(1,1), 255, CoulFnd) ;Gomme sur écurie rouge cheval 2
    DisplayTransparentSprite(#Pion5, CasesNum(1,0,0), CasesNum(1,0,1), 255, CoulFnd)
  EndIf
  EtatB = ObtenirEtatBoutonBascule(BtnEcurieBleue)
  If B1Parti = 0 And EtatB = 1 And CmptB1 = 0 And De = 6:B1Parti = 1:CmptB1 = 1:De = 0:B1()
    DisplayTransparentSprite(#Pion5, EcuBleue(0,0), EcuBleue(0,1), 255, CoulFnd) ;Gomme sur écurie bleu cheval 1
  EndIf
  If B2Parti = 0 And EtatB = 1 And CmptB1 = 0 And B1Parti = 8 And De = 6:B2Parti = 1:CmptB2 = 1:De = 0:B1()
    DisplayTransparentSprite(#Pion5, EcuBleue(1,0), EcuBleue(1,1), 255, CoulFnd) ;Gomme sur écurie bleu cheval 2
    DisplayTransparentSprite(#Pion5, CasesNum(2,0,0), CasesNum(2,0,1), 255, CoulFnd)
  EndIf
  EtatJ = ObtenirEtatBoutonBascule(BtnEcurieJaune)
  If J1Parti = 0 And EtatJ = 1 And CmptJ1 = 0 And De = 6:J1Parti = 1:CmptJ1 = 1:De = 0:J1()
    DisplayTransparentSprite(#Pion5, EcuJaune(0,0), EcuJaune(0,1), 255, CoulFnd) ;Gomme sur écurie jaune cheval 1
  EndIf
  If J2Parti = 0 And EtatJ = 1 And CmptJ2 = 0 And J1Parti = 8 And De = 6:J2Parti = 1:CmptJ2 = 1:De = 0:J1()
    DisplayTransparentSprite(#Pion5, EcuJaune(1,0), EcuJaune(1,1), 255, CoulFnd) ;Gomme sur écurie jaune cheval 2
    DisplayTransparentSprite(#Pion5, CasesNum(3,0,0), CasesNum(3,0,1), 255, CoulFnd)
  EndIf
  
  ;ATTENTION LE BOUTON ECURIE VERTE EST PRESSE PAR DEFAUT
  
  If V1Parti = 1 
    If EtatV = 1:CmptV1 + De:EndIf ;si le cheval 1 vert est parti et si le BtnEcurieVerte a été pressé
    
    If CmptV1 > 48:Diff = 48 - De:CmptV1 = Diff:EndIf ;si le cheval a fait trop de points pour atteindre la case 48, il doit reculer d'autant
    
    PosAct = CmptV1 ;sauvegarde de la position actuelle
    
    If AncPos = 0:AncPos = 1:EndIf ;pour éviter d'effacer la case 0 qui n'existe pas !
    
    If AncPos <= 48 ;si le cheval n'a pas achevé son tour
      For i = AncPos-1 To PosAct-1:CmptV1 = i:AvancerV1():Next i; effacer toutes les cases depuis la position précedante
      CmptV1 = PosAct:AvancerV1()                               ;retauration du compteur cheval vert 1 et avancer son cheval sur la case désignée par le dé
    EndIf
  EndIf
  
  If V1Parti = 2
    If De = 1;si le cheval a fait le tour complet et a le droit de rentrer à l'écurie
      RV1()  ;alors on va sur la case arrivée 1
      V1Parti = 3
    EndIf  
  EndIf  
  If V1Parti = 3 
    If De = 2
      RV2()
      V1Parti = 4
    EndIf  
  EndIf  
  If V1Parti = 4
    If De = 3
      RV3()
      V1Parti = 5
    EndIf  
  EndIf  
  If V1Parti = 5
    If De = 4
      RV4()
      V1Parti = 6
    EndIf  
  EndIf  
  If V1Parti = 6
    If De = 5
      RV5()
      V1Parti = 7
    EndIf  
  EndIf  
  If V1Parti = 7
    If De = 6
      Gagnant() ;le cheval vert 1 a gagné
      V1Parti = 8
    EndIf  
  EndIf  
  
  
  If V2Parti = 1
    If EtatV = 1:CmptV2 + De:EndIf
    
    If CmptV2 > 48:Diff = 48 - De:CmptV2 = Diff:EndIf
    
    PosAct = CmptV2
    
    If AncPos = 0:AncPos = 1:EndIf
    
    If AncPos <= 48
      For i = AncPos-1 To PosAct-1:CmptV2 = i:AvancerV2():Next i
      CmptV2 = PosAct:AvancerV2()
    EndIf
  EndIf
  
  If V2Parti = 2
    If De = 1
      RV1()
      V2Parti = 3
    EndIf  
  EndIf  
  If V2Parti = 3 
    If De = 2
      RV2()
      V2Parti = 4
    EndIf  
  EndIf  
  If V2Parti = 4
    If De = 3
      RV3()
      V2Parti = 5
    EndIf  
  EndIf  
  If V2Parti = 5
    If De = 4
      RV4()
      V2Parti = 6
    EndIf  
  EndIf  
  If V2Parti = 6
    If De = 5
      RV5()
      V2Parti = 7
    EndIf  
  EndIf  
  If V2Parti = 7
    If De = 6
      Gagnant() ;le cheval vert 1 a gagné
      V2Parti = 8
    EndIf  
  EndIf
  
  If R1Parti = 1
    If EtatR = 1:CmptR1 + De:EndIf
    
    If CmptR1 > 48:Diff = 48 - De:CmptR1 = Diff:EndIf
    
    PosAct = CmptR1
    
    If AncPos = 0:AncPos = 1:EndIf
    
    If AncPos <= 48
      For i = AncPos-1 To PosAct-1:CmptR1 = i:AvancerR1():Next i
      CmptR1 = PosAct:AvancerR1()
    EndIf
  EndIf
  
  If R1Parti = 2
    If De = 1
      RR1()
      R1Parti = 3
    EndIf  
  EndIf  
  If R1Parti = 3 
    If De = 2
      RR2()
      R1Parti = 4
    EndIf  
  EndIf  
  If R1Parti = 4
    If De = 3
      RR3()
      R1Parti = 5
    EndIf  
  EndIf  
  If R1Parti = 5
    If De = 4
      RR4()
      R1Parti = 6
    EndIf  
  EndIf  
  If R1Parti = 6
    If De = 5
      RR5()
      R1Parti = 7
    EndIf  
  EndIf  
  If R1Parti = 7
    If De = 6
      Gagnant() ;le cheval rouge 1 a gagné
      R1Parti = 8
    EndIf  
  EndIf
  
  If R2Parti = 1 
    If EtatR = 1:CmptR2 + De:EndIf
    
    If CmptR2 > 48:Diff = 48 - De:CmptR2 = Diff:EndIf
    
    PosAct = CmptR2
    
    If AncPos = 0:AncPos = 1:EndIf
    
    If AncPos <= 48
      For i = AncPos-1 To PosAct-1:CmptR1 = i:AvancerR2():Next i
      CmptR1 = PosAct:AvancerR2()
    EndIf
  EndIf
  
  If R2Parti = 2
    If De = 1
      RR1()
      R2Parti = 3
    EndIf  
  EndIf  
  If R2Parti = 3 
    If De = 2
      RR2()
      R2Parti = 4
    EndIf  
  EndIf  
  If R2Parti = 4
    If De = 3
      RR3()
      R2Parti = 5
    EndIf  
  EndIf  
  If R2Parti = 5
    If De = 4
      RR4()
      R2Parti = 6
    EndIf  
  EndIf  
  If R2Parti = 6
    If De = 5
      RR5()
      R2Parti = 7
    EndIf  
  EndIf  
  If R2Parti = 7
    If De = 6
      Gagnant() ;le cheval rouge 2 a gagné
      R2Parti = 8
    EndIf  
  EndIf
  
  If B1Parti = 1
    If EtatB = 1:CmptB1 + De:EndIf
    
    If CmptB1 > 48:Diff = 48 - De:CmptB1 = Diff:EndIf
    
    PosAct = CmptB1
    
    If AncPos = 0:AncPos = 1:EndIf
    
    If AncPos <= 48
      For i = AncPos-1 To PosAct-1:CmptB1 = i:AvancerB1():Next i
      CmptR1 = PosAct
      AvancerB1()
    EndIf
  EndIf
  
  If B1Parti = 2
    If De = 1
      RB1()
      B1Parti = 3
    EndIf  
  EndIf  
  If B1Parti = 3 
    If De = 2
      RB2()
      B1Parti = 4
    EndIf  
  EndIf  
  If B1Parti = 4
    If De = 3
      RB3()
      B1Parti = 5
    EndIf  
  EndIf  
  If B1Parti = 5
    If De = 4
      RB4()
      B1Parti = 6
    EndIf  
  EndIf  
  If B1Parti = 6
    If De = 5
      RB5()
      B1Parti = 7
    EndIf  
  EndIf  
  If B1Parti = 7
    If De = 6
      Gagnant() ;le cheval bleu 1 a gagné
      B1Parti = 8
    EndIf  
  EndIf
  
  If B2Parti = 1
    If EtatB = 1:CmptB2 + De:EndIf
    If CmptB2 > 48:Diff = 48 - De:CmptB2 = Diff:EndIf
    PosAct = CmptB2
    If AncPos = 0:AncPos = 1:EndIf
    If AncPos <= 48
      For i = AncPos-1 To PosAct-1
        CmptB1 = i
        AvancerB2()
      Next i
      CmptR1 = PosAct
      AvancerB2()
    EndIf
  EndIf
  
  If B2Parti = 2
    If De = 1
      RB1()
      B2Parti = 3
    EndIf  
  EndIf  
  If B2Parti = 3 
    If De = 2
      RB2()
      B2Parti = 4
    EndIf  
  EndIf  
  If B2Parti = 4
    If De = 3
      RB3()
      B2Parti = 5
    EndIf  
  EndIf  
  If B2Parti = 5
    If De = 4
      RB4()
      B2Parti = 6
    EndIf  
  EndIf  
  If B2Parti = 6
    If De = 5
      RB5()
      B2Parti = 7
    EndIf  
  EndIf  
  If B2Parti = 7
    If De = 6
      Gagnant() ;le cheval bleu 2 a gagné
      B2Parti = 8
    EndIf  
  EndIf
  
  If J1Parti = 1
    If EtatJ = 1:CmptJ1 + De:EndIf
    If CmptJ1 > 48:Diff = 48 - De:CmptJ1 = Diff:EndIf
    PosAct = CmptJ1
    If AncPos = 0:AncPos = 1:EndIf
    If AncPos <= 48
      For i = AncPos-1 To PosAct-1
        CmptJ1 = i
        AvancerJ1()
      Next i
      CmptJ1 = PosAct
      AvancerR1()
    EndIf
  EndIf
  
  If J1Parti = 2
    If De = 1
      RJ1()
      J1Parti = 3
    EndIf  
  EndIf  
  If J1Parti = 3 
    If De = 2
      RJ2()
      J1Parti = 4
    EndIf  
  EndIf  
  If J1Parti = 4
    If De = 3
      RJ3()
      J1Parti = 5
    EndIf  
  EndIf  
  If J1Parti = 5
    If De = 4
      RJ4()
      J1Parti = 6
    EndIf  
  EndIf  
  If J1Parti = 6
    If De = 5
      RJ5()
      J1Parti = 7
    EndIf  
  EndIf  
  If J1Parti = 7
    If De = 6
      Gagnant() ;le cheval jaune 1 a gagné
      J1Parti = 8
    EndIf  
  EndIf
  
  If J2Parti = 1
    If EtatJ = 1:CmptJ2 + De:EndIf
    If CmptJ2 > 48:Diff = 48 - De:CmptJ2 = Diff:EndIf
    PosAct = CmptJ2
    If AncPos = 0:AncPos = 1:EndIf
    If AncPos <= 48
      For i = AncPos-1 To PosAct-1
        CmptJ1 = i
        AvancerJ2()
      Next i
      CmptJ1 = PosAct
      AvancerJ2()
    EndIf
  EndIf
  
  If J2Parti = 2
    If De = 1
      RJ1()
      J2Parti = 3
    EndIf  
  EndIf  
  If J2Parti = 3 
    If De = 2
      RJ2()
      J2Parti = 4
    EndIf  
  EndIf  
  If J2Parti = 4
    If De = 3
      RJ3()
      J2Parti = 5
    EndIf  
  EndIf  
  If J2Parti = 5
    If De = 4
      RJ4()
      J2Parti = 6
    EndIf  
  EndIf  
  If J2Parti = 6
    If De = 5
      RJ5()
      J2Parti = 7
    EndIf  
  EndIf  
  If J2Parti = 7
    If De = 6
      Gagnant() ;le cheval jaune 2 a gagné
      J2Parti = 8
    EndIf  
  EndIf
EndProcedure  

Procedure.s DemanderNombreDeJoueurs()
  Protected tmp$
  While tmp$ <"2" Or tmp$ >"4"
    tmp$ = InputRequester("Nombre de Joueurs", "Nombre de Joueurs ? (De 2 à 4)", "")
  Wend
  ProcedureReturn tmp$
EndProcedure
;NbreJoueurs$=DemanderNbreJoueurs()
;NbreJoueurs=Val(NbreJoueurs$)
;NbreJoueurs=4


; BoutonBasculeGadget.pbi
; Par Michel Lye 04/09/2012

;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
;
; Pour utiliser ce gadget personnalisé ajoutez la ligne de code suivante dans votre programme.
; IncludeFile "BoutonBasculeGadget.pbi"
;
; Syntaxe
; Resultat = BoutonBasculeGadget(#Gadget, X, Y, Largeur, Hauteur, Degrade, TexteInactif$, TexteActif$, [Etat], [FontID])
;
; Description
; crée un bouton personnalisé à bascule avec séparation Actif/Inactif des couleurs et des légendes.
;
; #Gadget ---> Spécifie un numéro pour identifier le nouveau gadget. #PB_Any peut être utilisé.
; X, Y    ---> Indique la position du nouveau gadget.
; Largeur   ---> Spécifie la largeur du gadget.
; Hauteur  ---> Spécifie la hauteur du gadget.
; Degrade ---> Spécifie le sens du dégradé 0 = pas de dégradé, 1 = diagonale tombante, 2 = diagonale montante, 3 = horitontal, 4 = vertical
; TexteActif$ ---> Spécifie la légende du gadget de l'état 'Actif'.
; TexteInactif$---> Spécifie la légende du gadget de l'état 'Inactif'.
; Etat   --->(Facultatif) Spécifie l'état initial du gadget, 0 = Inactif, 1 = Actif,  par défaut 'Inactif'.
; FontID  ---> (Facultatif) Spécifie la police à utiliser pour le texte du bouton
;
; Valeur Retournée >--- Retourne un valeur non nulle en cas de succès et zéro en cas d'échec. si #PB_Any a été utilisé
;   comme paramètre du #Gadget alors la valeur renvoyée est le numéro du gadget généré automatiquement.
;
; Utilisez 'InverserBoutonBascule(#Gadget)' dans la boucle d'événements pour activer le bouton
;
; Les procédures suivantes peuvent être utilisées pour contrôler le gadget.
;
;     DefinirTexteBoutonBascule(#Gadget, TexteInactif$, TexteActif$)
;        ---> Pour définir l'affichage du texte  dans l'état 'Actif' et 'Inactif'.
;
;     DefinirCouleurTexteBoutonBascule(#Gadget, CouleurTexteInactif, [CouleurTexteActif])
;        ---> Définit la couleur du texte du bouton pour l'état Actif/Inactif #PB_Ignore peut être utilisé aussi pour la couleur du texte
;             Noir est la couleur du texte par défaut.
;
;     DefinirCouleurBoutonBascule(#Gadget, Couleur1Inactif, Couleur2Inactif, [Couleur1Actif], [Couleur2Actif])
;        ---> définit le gradient de couleurs pour l'état Actif/Inactif du bouton, #PB_Ignore peut être utilisé pour n'importe quelle couleur
;
;     ObtenirEtatBoutonBascule(#Gadget) ---> Renvoye l'état du bouton, 1 = 'Actif', 0 = 'Inactif'
;
;     ObtenirTexteBoutonBascule(#Gadget, Etat) ---> Retourne le texte 'Actif' ou 'Inactif' du bouton.
;        si Etat = 0 le texte 'Inactif' est renvoyé; si Etat = 1 le texte 'Actif' est renvoyé.
;
;     DesactiverBoutonBascule(#Gadget, Etat)
;        ---> Activer/Désactiver le bouton, (désactiver, État = 1), (activer, État = 0).
;
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

Structure TBtn
  Largeur.i     ; Largeur bouton
  Hauteur.i     ; hauteur bouton
  Degrade.i     ; Forme du dégradé 1 -> diagonale tombante, 2 -> diagonale montante, 3 -> horizontale, 4 -> verticale
  TexteActif.s  ; légende pour état 'Actif'
  TexteInactif.s; légende pour état 'Inactif'
  Etat.b        ; bascule Actif ou Inactif
  FontID.i      ; utiliser cette police pour la légende du bouton
  C1Actif.i     ; première couleur du dégradé pour 'Actif'
  C2Actif.i     ; deuxième couleur du dégradé pour 'Actif'
  C1Inactif.i   ; première couleur du dégradé pour 'Inactif'
  C2Inactif.i   ; deuxième couleur du dégradé pour 'Inactif'
  CoulTexteActif.i  ; couleur du texte 'Actif'
  CoulTexteInactif.i; couleur du texte 'Inactif'
  ImageActif.i      ; numéro image pour état 'Actif'
  ImageInactif.i    ; numéro image pour état 'Inactif'
EndStructure

Dim BoutonBascule.TBtn(0)

NewMap BoutonIndex() ; une Map pour indexer BoutonBascule() avec le numéro de gadget

Declare CreerImage(NumeroBouton)

Macro VariablesCommunes
  Shared BoutonBascule.TBtn() ; tableau structuré
  Shared BoutonIndex()        ; Map
  Protected NumeroBouton = BoutonIndex(Str(IdGadget))
EndMacro

Procedure BoutonBasculeGadget(IdGadget, X, Y, Largeur, Hauteur, Degrade, TexteInactif.s, TexteActif.s = "", Etat = 0, FontID = 0)
  ;créer vos propres boutons gadgets à bascule
  
  Shared BoutonBascule.TBtn() ;tableau structuré
  Shared BoutonIndex()        ;Map
  Static CompteurBouton = 0
  
  ;couleurs bouton par défaut
  Static C1Actif   = $BBF6F5 ;dégradé de couleur 1 pour état 'Actif'
  Static C2Actif   = $149997 ;dégradé de couleur 2 pour état 'Actif'
  Static C1Inactif = $C5B3A2 ;dégradé de couleur 1 pour état 'Inactif'
  Static C2Inactif = $93765B ;dégradé de couleur 2 pour état 'Inactif'
  
  Protected ValeurRetounee, Image
  
  If X<0 Or Y<0 Or Largeur<1 Or Hauteur<1
    ProcedureReturn 0
  EndIf
  
  If CompteurBouton
    ReDim BoutonBascule.TBtn(CompteurBouton)
  EndIf
  
  With BoutonBascule(CompteurBouton)
    \Largeur          = Largeur
    \Hauteur          = Hauteur
    \Degrade          = Degrade
    \TexteActif       = TexteActif
    \TexteInactif     = TexteInactif
    \Etat             = Etat
    \FontID           = FontID
    \C1Actif          = C1Actif
    \C2Actif          = C2Actif
    \C1Inactif        = C1Inactif
    \C2Inactif        = C2Inactif
    \CoulTexteActif   = 0 ;Noir par défaut
    \CoulTexteInactif = 0 ;Noir par défaut
    \ImageActif       = CreateImage(#PB_Any, Largeur, Hauteur, 32)
    \ImageInactif     = CreateImage(#PB_Any, Largeur, Hauteur, 32)
    
    If CreerImage(CompteurBouton)
      ;
    Else
      ProcedureReturn #False
    EndIf
    
    If Etat & 1
      Image = \ImageActif
    Else
      Image = \ImageInactif
    EndIf
  EndWith
  
  If IdGadget = #PB_Any
    ValeurRetounee = ButtonImageGadget(#PB_Any, X, Y, Largeur, Hauteur, ImageID(Image))
    If ValeurRetounee
      SetGadgetAttribute(ValeurRetounee, #PB_Button_Image, ImageID(Image))
      BoutonIndex(Str(ValeurRetounee)) = CompteurBouton
    EndIf
  Else
    ValeurRetounee = ButtonImageGadget(IdGadget, X, Y, Largeur, Hauteur, ImageID(Image))
    If ValeurRetounee
      SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(Image))
      BoutonIndex(Str(IdGadget)) = CompteurBouton
    EndIf
  EndIf
  
  If ValeurRetounee
    CompteurBouton + 1
  EndIf
  
  ProcedureReturn ValeurRetounee
EndProcedure

Procedure DefinirTexteBoutonBascule(IdGadget, TexteInactif.s, TexteActif.s)
  VariablesCommunes
  
  With BoutonBascule(NumeroBouton)
    \TexteInactif = TexteInactif
    \TexteActif   =  TexteActif
    
    If CreerImage(NumeroBouton)
      If Not (\Etat & 1)
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageInactif))
      Else
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageActif))
      EndIf
      ProcedureReturn #True
    Else
      ProcedureReturn #False
    EndIf
    
  EndWith
EndProcedure

Procedure.s ObtenirTexteBoutonBascule(IdGadget, Etat)
  VariablesCommunes
  If Etat = 0
    ProcedureReturn BoutonBascule(NumeroBouton)\TexteInactif
  Else
    ProcedureReturn BoutonBascule(NumeroBouton)\TexteActif
  EndIf
EndProcedure

Procedure DefinirCouleurTexteBoutonBascule(IdGadget, CouleurTexteInactif, CouleurTexteActif = $000000 )
  VariablesCommunes
  
  With BoutonBascule(NumeroBouton)
    If CouleurTexteActif <> #PB_Ignore
      \CoulTexteActif = CouleurTexteActif
    EndIf
    If CouleurTexteInactif <> #PB_Ignore
      \CoulTexteInactif = CouleurTexteInactif
    EndIf
    
    If CreerImage(NumeroBouton)
      If Not (\Etat & 1)
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageInactif))
      Else
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageActif))
      EndIf
      ProcedureReturn #True
    Else
      ProcedureReturn #False
    EndIf
  EndWith
EndProcedure

Procedure DefinirCouleurBoutonBascule(IdGadget, Couleur1Inactif, Couleur2Inactif, Couleur1Actif = #PB_Ignore, Couleur2Actif = #PB_Ignore)
  VariablesCommunes
  
  With BoutonBascule(NumeroBouton)
    If Couleur1Actif  <> #PB_Ignore
      \C1Actif  = Couleur1Actif
    EndIf
    If Couleur2Actif  <> #PB_Ignore
      \C2Actif  = Couleur2Actif
    EndIf
    If Couleur1Inactif <> #PB_Ignore
      \C1Inactif = Couleur1Inactif
    EndIf
    If Couleur2Inactif <> #PB_Ignore
      \C2Inactif = Couleur2Inactif
    EndIf
    
    If CreerImage(NumeroBouton)
      If Not (\Etat & 1)
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageInactif))
      Else
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageActif))
      EndIf
      ProcedureReturn #True
    Else
      ProcedureReturn #False
    EndIf
  EndWith
EndProcedure

Procedure DefinirEtatBoutonBascule(IdGadget, Etat)
  VariablesCommunes
  
  With BoutonBascule(NumeroBouton)
    If Etat <> 0 ; Actif
      Etat = 1
      If Not (\Etat & 1)
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageActif))
      EndIf
    Else ; Inactif
      If \Etat & 1
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageInactif))
      EndIf
    EndIf
    \Etat = (\Etat & 2) | Etat
  EndWith
  
EndProcedure

Procedure ObtenirEtatBoutonBascule(IdGadget)
  VariablesCommunes
  ProcedureReturn BoutonBascule(NumeroBouton)\Etat & 1
EndProcedure

Procedure DesactiverBoutonBascule(IdGadget, Disable)
  VariablesCommunes
  
  With BoutonBascule(NumeroBouton)
    If Disable
      \Etat | 2
      DisableGadget(IdGadget, 1)
    Else
      \Etat & 1
      DisableGadget(IdGadget, 0)
    EndIf
    
    If CreerImage(NumeroBouton)
      If Not (\Etat & 1)
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageInactif))
      Else
        SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageActif))
      EndIf
      ProcedureReturn #True
    Else
      ProcedureReturn #False
    EndIf
    
  EndWith
EndProcedure

Procedure CreerImage(NumeroBouton)
  Shared BoutonBascule.TBtn() ;tableau structuré
  Protected Image, C1, C2, Tx, Ty, Texte.s, TexteColor
  
  With BoutonBascule(NumeroBouton)
    
    Image = \ImageActif
    Texte = \TexteActif
    C1 = \C1Actif
    C2 = \C2Actif
    TexteColor = \CoulTexteActif
    
    Repeat
      If StartDrawing(ImageOutput(Image))
        DrawingMode(#PB_2DDrawing_Gradient)
        If \FontID
          DrawingFont(\FontID)
        EndIf
        
        If \Etat & 2 ;Couleurs bouton désactivé
          TexteColor = $C0C0C0 
          FrontColor($B0B0B0)
          BackColor($909090)
        Else
          FrontColor(C1)
          BackColor(C2)
        EndIf
        
        If  \Degrade = 1 ;\
          LinearGradient(0, \Hauteur, \Largeur, 0)
        ElseIf  \Degrade = 2; /
          LinearGradient(\Hauteur, 0, \Largeur, \Hauteur)  
        ElseIf \Degrade = 3 ;--
          LinearGradient(0, \Hauteur, 0, 0)   
        ElseIf \Degrade = 4 ; |
          LinearGradient(0, \Hauteur, \Hauteur*4, \Hauteur) 		
          ;LinearGradient(0, \Hauteur, \Hauteur*2, \Hauteur) 		
        EndIf
        Box(0, 0, \Largeur, \Hauteur) ;dessiner le bouton
        DrawingMode(#PB_2DDrawing_Transparent)
        FrontColor(TexteColor)
        Ty = (\Hauteur - TextHeight(Texte)) / 2
        Tx = (\Largeur  - TextWidth(Texte)) / 2
        DrawText(Tx, Ty, Texte) ;dessiner légende
        StopDrawing()
      Else
        ProcedureReturn #False
      EndIf
      
      If Image = \ImageInactif
        Break
      EndIf
      
      Image = \ImageInactif
      Texte = \TexteInactif
      C1 = \C1Inactif
      C2 = \C2Inactif
      TexteColor = \CoulTexteInactif
    ForEver
  EndWith
  
  ProcedureReturn #True
EndProcedure

Procedure InverserBoutonBascule(IdGadget)
  VariablesCommunes
  
  With BoutonBascule(NumeroBouton)
    If \Etat & 1
      \Etat & 2
      SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageInactif))
    Else
      \Etat | 1
      SetGadgetAttribute(IdGadget, #PB_Button_Image, ImageID(\ImageActif))
    EndIf
  EndWith
EndProcedure

Procedure Ouvrir_Fenetre_principale()
  LargeurSup=200*Coeff
  OpenWindow(#Fenetre, 0, 0, LargeurEcran+LargeurSup, HauteurEcran, "Petits chevaux", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  SetWindowColor(#Fenetre, CoulFnd)
  OpenWindowedScreen(WindowID(#Fenetre),0,0,LargeurEcran,HauteurEcran,0,0,0,#PB_Screen_NoSynchronization)
  
  ClearScreen(CoulFnd)
  
  BtnJeu=BoutonBasculeGadget(#PB_Any, LargeurEcran+LargeurSup/2-40, (HauteurEcran-15)/2, 100*Coeff, 30*Coeff, 4, "JOUER", "JOUER", 1)
  NbreJoueurs = TextGadget(#PB_Any,LargeurEcran+LargeurSup/2-40, 40*Coeff, 100*Coeff, 40*Coeff, "Nombre de joueurs (2 à 4)")
  StrNbreJoueur=StringGadget(#PB_Any, LargeurEcran+LargeurSup/2-40, 90*Coeff, 100*Coeff, 30*Coeff, "1")
  BtnEcurieVerte=BoutonBasculeGadget(#PB_Any, LargeurEcran+LargeurSup/2-40, 200*Coeff, 100*Coeff, 30*Coeff, 4, "Vert" , "VERT")
  BtnEcurieRouge=BoutonBasculeGadget(#PB_Any, LargeurEcran+LargeurSup/2-40, 240*Coeff, 100*Coeff, 30*Coeff, 4, "Rouge", "ROUGE")
  BtnEcurieBleue=BoutonBasculeGadget(#PB_Any, LargeurEcran+LargeurSup/2-40, 280*Coeff, 100*Coeff, 30*Coeff, 4, "Bleu" , "BLEU")
  BtnEcurieJaune=BoutonBasculeGadget(#PB_Any, LargeurEcran+LargeurSup/2-40, 320*Coeff, 100*Coeff, 30*Coeff, 4, "Jaune", "JAUNE")
  
  DefinirEtatBoutonBascule(BtnEcurieVerte, 1)
  DefinirEtatBoutonBascule(BtnEcurieRouge, 0)
  DefinirEtatBoutonBascule(BtnEcurieBleue, 0)
  DefinirEtatBoutonBascule(BtnEcurieJaune, 0)
  
  DefinirCouleurBoutonBascule(BtnJeu, #PB_Ignore, #PB_Ignore, $4C9949, $B4FFFF)
  DefinirCouleurBoutonBascule(BtnEcurieVerte, $B0B0B0, $B0B0B0, $00BD00, $00FF00)
  DefinirCouleurBoutonBascule(BtnEcurieRouge, $B0B0B0, $B0B0B0, $0000FF, $BDBDFF)
  DefinirCouleurBoutonBascule(BtnEcurieBleue, $B0B0B0, $B0B0B0, $FF0000, $FFBDBD)
  DefinirCouleurBoutonBascule(BtnEcurieJaune, $B0B0B0, $B0B0B0, $00BDBD, $00FFFF)
  
  DefinirCouleurTexteBoutonBascule(BtnJeu, 0, Bleu)
  DefinirCouleurTexteBoutonBascule(BtnEcurieVerte, $00FF00, $000000)
  DefinirCouleurTexteBoutonBascule(BtnEcurieRouge, $0000FF, $FFFFFF)
  DefinirCouleurTexteBoutonBascule(BtnEcurieBleue, $FF0000, $FFFFFF)
  DefinirCouleurTexteBoutonBascule(BtnEcurieJaune, $00FFFF, $000000)
  
  SetGadgetState(BtnEcurieVerte, 1):Couleur = Vert
  BtnLancerDe=ButtonGadget(#PB_Any, LargeurEcran+LargeurSup/2-20, 400*Coeff, 60*Coeff, 60*Coeff, "Lancer le dé", #PB_Button_MultiLine)
  AfficheDE=CanvasGadget(#PB_Any, LargeurEcran+LargeurSup/2-20, 480*Coeff, 60*Coeff, 60*Coeff)
  HideGadget(NbreJoueurs,1)
  HideGadget(StrNbreJoueur,1)
  HideGadget(BtnEcurieVerte,1)
  HideGadget(BtnEcurieRouge,1)
  HideGadget(BtnEcurieBleue,1)
  HideGadget(BtnEcurieJaune,1)
  HideGadget(BtnLancerDe,1)
  HideGadget(AfficheDE,1)
  
  CreateSprite(#Pion1, 72, 72)
  StartDrawing(SpriteOutput(#Pion1))
  Circle(35,35,Rayon,$FF00)
  StopDrawing()
  CreateSprite(#Pion2, 72, 72)
  StartDrawing(SpriteOutput(#Pion2))
  Circle(35,35,Rayon, $FF)
  StopDrawing()
  CreateSprite(#Pion3, 72, 72)
  StartDrawing(SpriteOutput(#Pion3))
  Circle(35,35,Rayon, $FF0000)
  StopDrawing()
  CreateSprite(#Pion4, 72, 72)
  StartDrawing(SpriteOutput(#Pion4))
  Circle(35,35,Rayon, $FFFF)
  StopDrawing()
  CreateSprite(#Pion5, 72, 72)
  StartDrawing(SpriteOutput(#Pion5))
  Circle(35, 35, Rayon, CoulFnd)
  StopDrawing()
  
  StockerTailleTableau(Tableau, 0, #Pion1)
  StockerTailleTableau(Tableau, 1, #Pion2)
  StockerTailleTableau(Tableau, 2, #Pion3)
  StockerTailleTableau(Tableau, 3, #Pion4)
  StockerTailleTableau(Tableau, 4, #Pion5)
  
  StartDrawing(ScreenOutput())
  
  DessinerPlateau()
  
  StopDrawing()  
  
  DepartVert()
  DepartRouge()
  DepartBleu()
  DepartJaune()
  
  ;Placer les chevaux dans les écuries
  DisplayTransparentSprite(#Pion1, EcuVerte(0,0), EcuVerte(0,1), 255, Vert) ;cheval 1 vert
  DisplayTransparentSprite(#Pion1, EcuVerte(1,0), EcuVerte(1,1), 255, Vert) ;cheval 2 vert
  DisplayTransparentSprite(#Pion2, EcuRouge(0,0), EcuRouge(0,1), 255, Rouge);cheval 1 rouge
  DisplayTransparentSprite(#Pion2, EcuRouge(1,0), EcuRouge(1,1), 255, Rouge);cheval 2 rouge
  DisplayTransparentSprite(#Pion3, EcuBleue(0,0), EcuBleue(0,1), 255, Bleu) ;cheval 1 bleu
  DisplayTransparentSprite(#Pion3, EcuBleue(1,0), EcuBleue(1,1), 255, Bleu) ;cheval 2 bleu
  DisplayTransparentSprite(#Pion4, EcuJaune(0,0), EcuJaune(0,1), 255, Jaune);cheval 1 jaune
  DisplayTransparentSprite(#Pion4, EcuJaune(1, 0), EcuJaune(1, 1), 255, Jaune);cheval 2 jaune
  
EndProcedure

InitialiserPositions()

Ouvrir_Fenetre_principale()

;-Boucle événementielle
Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case BtnJeu
          HideGadget(BtnJeu,1)
          HideGadget(NbreJoueurs,0)
          HideGadget(StrNbreJoueur,0)
          HideGadget(BtnEcurieVerte,0)
          HideGadget(BtnEcurieRouge,0)
          HideGadget(BtnEcurieBleue,0)
          HideGadget(BtnEcurieJaune,0)
          HideGadget(BtnLancerDe,0)
          HideGadget(AfficheDE,0)
        Case BtnEcurieVerte
          ;If ObtenirEtatBoutonBascule(BtnEcurieVerte) = 1
            DefinirEtatBoutonBascule(BtnEcurieVerte, 1)
            DefinirEtatBoutonBascule(BtnEcurieBleue, 0)
            DefinirEtatBoutonBascule(BtnEcurieRouge, 0)
            DefinirEtatBoutonBascule(BtnEcurieJaune, 0)
            Couleur = Vert
          ;EndIf
        Case BtnEcurieRouge
          ;If ObtenirEtatBoutonBascule(BtnEcurieRouge) = 1
            DefinirEtatBoutonBascule(BtnEcurieRouge, 1)
            DefinirEtatBoutonBascule(BtnEcurieVerte, 0)
            DefinirEtatBoutonBascule(BtnEcurieBleue, 0)
            DefinirEtatBoutonBascule(BtnEcurieJaune, 0)
            Couleur = Rouge
          ;EndIf
        Case BtnEcurieBleue
          ;If ObtenirEtatBoutonBascule(BtnEcurieBleue) = 1
            DefinirEtatBoutonBascule(BtnEcurieBleue, 1)
            DefinirEtatBoutonBascule(BtnEcurieVerte, 0)
            DefinirEtatBoutonBascule(BtnEcurieRouge, 0)
            DefinirEtatBoutonBascule(BtnEcurieJaune, 0)
            Couleur = Bleu
          ;EndIf
        Case BtnEcurieJaune
          ;If ObtenirEtatBoutonBascule(BtnEcurieJaune) = 1
            DefinirEtatBoutonBascule(BtnEcurieJaune, 1)
            DefinirEtatBoutonBascule(BtnEcurieVerte, 0)
            DefinirEtatBoutonBascule(BtnEcurieBleue, 0)
            DefinirEtatBoutonBascule(BtnEcurieRouge, 0)
            Couleur = Jaune
          ;EndIf
        Case BtnLancerDe
          go=ElapsedMilliseconds()
          Repeat
            If CmptV1 > 1 Or CmptV2 > 1 Or CmptR1 > 1 Or CmptR2 > 1 Or CmptB1 > 1 Or CmptB2 > 1 Or CmptJ1 > 1 Or CmptJ2 > 1:AncPos = De:EndIf  
            Jeter_le_de()
            StartDrawing(CanvasOutput(AfficheDE))
            DrawingFont(Police)
            Box(0, 0, 60, 60, Couleur)
            DrawText(15, 2, Str(DE), RGB(255, 255, 255), Couleur)
            If Couleur = Vert Or Couleur = Jaune
              DrawText(15, 2, Str(DE), RGB(0, 0, 0), Couleur)
            EndIf  
            StopDrawing()
            Delay(100)
          Until ElapsedMilliseconds() - go >1000
          Gestion()
      EndSelect
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
  
  
  Delay(1)
  FlipBuffers()
Until Event = #PB_Event_CloseWindow

DataSection
  CasesRondesVertes:
  Data.i 525, 35,525,105,525,175,525,245,525,315,525,385,595,385,665,385,735,385,805,385,875,385,875,455
  CasesRondesRouges:
  Data.i 875,525,805,525,735,525,665,525,595,525,525,525,525,595,525,665,525,735,525,805,525,875,455,875
  CasesRondesBleues:
  Data.i 385,875,385,805,385,735,385,665,385,595,385,525,315,525,245,525,175,525,105,525, 35,525,35, 455
  CasesRondesJaunes:
  Data.i  35,385,105,385,175,385,245,385,315,385,385,385,385,315,385,245,385,175,385,105,385, 35,455, 35
  Casecentrale:
  Data.i 455,455
  CasesNumVertes:
  Data.i 455,105,455,175,455,245,455,315,455,385
  CasesNumRouges:
  Data.i 805,455,735,455,665,455,595,455,525,455
  CasesNumBleues:
  Data.i 455,805,455,735,455,665,455,595,455,525
  CasesNumJaunes:
  Data.i 105,455,175,455,245,455,315,455,385,455
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 !
Répondre