FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Jeu de dames Emptypar Jack Aujourd'hui à 10:03

» Un autre pense-bête...
Jeu de dames Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Jeu de dames Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Jeu de dames Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Jeu de dames Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Jeu de dames Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Jeu de dames Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Jeu de dames Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Jeu de dames Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Jeu de dames Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Jeu de dames Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Jeu de dames Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Jeu de dames Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Jeu de dames Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Jeu de dames Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-20%
Le deal à ne pas rater :
Drone Dji DJI Mini 4K (EU)
239 € 299 €
Voir le deal

 

 Jeu de dames

Aller en bas 
+4
bignono
papydall
Jean Claude
Jicehel
8 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Jeu de dames   Jeu de dames EmptySam 19 Mai 2012 - 19:53

Bonjour,
Je viens de commencer un jeu de dames (merci à JL35 pour quelques bouts de code récupérés bien pratiques comme pour l'aide par exemple Wink )
Voilà, le programme viens de commencer, pour l'instant j'ai fais un début de menu et l’initialisation, tracé du damier ... Il ne reste plus qu'à faire le moteur de jeu maintenant ... Wink
Je vais attaquer ça bientôt
Code:
REM Jeu de dames par Jean-Charles
REM V0.1 du 19/05/2011
REM Programmation en cours - affichage du damier terminé

LABEL Init: GOTO Init

Aide:
SHOW 900
RETURN

Faide:
HIDE 900
RETURN

Regle:
SHOW 910
RETURN

Fregle:
HIDE 910
RETURN

Quitter:
TERMINATE
RETURN

Dessine_Damier:
2D_TARGET_IS 2
2D_PEN_COLOR 128,128,128: 2D_RECTANGLE 0,0,WIDTH(2),HEIGHT(2)
case% = 0
FOR j% = 0 TO 9
  FOR k% = 0 TO 9
    IF case% = 0
      2D_FILL_COLOR 255,255,255
      case% = 1
    ELSE
      2D_FILL_COLOR 64,64,64
      case% = 0
    END_IF
    2D_RECTANGLE k%*pas_case,j%*pas_case,(k%+1)*pas_case,(j%+1)*pas_case
    Caption 0, "Avant Dessine_piece"
    IF damier%(j%,k%) > 0 THEN GOSUB Dessine_piece
    2D_PEN_COLOR 128,128,128
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%
RETURN

Dessine_piece:
  SELECT damier%(j%,k%)
    CASE 0: ' NORMALEMENT ON NE LE FAIT JAMAIS
    CASE 1
      2D_PEN_COLOR 0,0,0 : 2D_FILL_COLOR 205,205,205 : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR 180,180,180 : 2D_FILL_COLOR 205,205,205 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
    CASE 2
      2D_PEN_COLOR 0,0,0 : 2D_FILL_COLOR 30,30,30 : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR 20,20,20 : 2D_FILL_COLOR 30,30,30 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
    CASE 9
      2D_PEN_COLOR 0,0,0 : 2D_FILL_COLOR 205,205,205 : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR 180,180,180 : 2D_FILL_COLOR 205,205,205 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
      2D_PEN_COLOR 0,0,0 : 2D_FILL_COLOR 205,205,205 : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case-3+r%,r% -  7
      2D_PEN_COLOR 180,180,180 : 2D_FILL_COLOR 205,205,205 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%-6,r% -  7 : 2D_PEN_WIDTH 3
    CASE 8
      2D_PEN_COLOR 0,0,0 : 2D_FILL_COLOR 30,30,30 : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR 50,50,50 : 2D_FILL_COLOR 30,30,30 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
      2D_PEN_COLOR 0,0,0 : 2D_FILL_COLOR 30,30,30 : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case-3+r%,r% -  7
      2D_PEN_COLOR 20,20,20 : 2D_FILL_COLOR 30,30,30 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%-6,r% -  7 : 2D_PEN_WIDTH 3
  END_SELECT
RETURN

Clic_Damier:
RETURN

Init:
CAPTION 0,"Init"
LABEL Aide,Regle,Faide, Fregle, Quitter, Clic_Damier, Dessine_Damier, Dessine_piece
DIM x_Max, y_Max : x_Max=1000 : y_max=700
DIM Marge_x, Marge_y : Marge_x = 20 : Marge_y = 30
DIM hlp$,regle$, j%,k%,case%
DIM damier%(10,10) : ' 0: Case vide, 1: Pion du joueur, 9: Dame du joueur, 2: Pion de l'Ai, 8: Dame de l'Ai
DIM Sposx, Sposy : ' Position du pion sélectionné
DIM Nposx, Nposy : ' Position de la destination sélectionné
DIM pas_case : if (y_Max - 2* Marge_y) > (x_Max - 2 * Marge_x) Then pas_case= (x_Max - 2 * Marge_x) / 11 : else: pas_case= (y_Max - 2 * Marge_y) / 11
DIM rc$ : rc$=CHR$(10)
DIM r%: r% = pas_case/2 -1
CAPTION 0, "Jeu de dames en Basic Panoramic par Jean-Charles"
WIDTH 0,x_Max : HEIGHT 0, y_max

' Menu Principal
MAIN_MENU 1 : REM On reserve les objets 1 à 30 pour le menu
SUB_MENU 11: PARENT 11, 1: CAPTION 11, "Fichier"
SUB_MENU 16: PARENT 16, 1: CAPTION 16, "Aide"
SUB_MENU 17: PARENT 17, 1: CAPTION 17, "Règle"
ON_CLICK 16, Aide : ON_CLICK 17, Regle

' Sous menu Fichier
SUB_MENU 21: CAPTION 21,"Quitter" : PARENT 21, 11
ON_CLICK 21, Quitter

' Préparation de l'aide
hlp$=CHR$(9)+CHR$(9)+CHR$(9)+" -  AIDE DU JEU DE DAMES  -"+rc$
hlp$=hlp$+CHR$(9)+CHR$(9)+CHR$(9)+"    ==============================="+rc$+rc$
hlp$=hlp$+"A remplir"+rc$
FORM 900: TOP 900,2*Marge_y: LEFT 900,3*Marge_X: WIDTH 900,x_Max-6*Marge_X: HEIGHT 900,y_Max-4*Marge_y: HIDE 900
FONT_SIZE 900,10
LIST 901: PARENT 901,900: WIDTH 901,WIDTH(900)-16: HEIGHT 901,HEIGHT(900)-80
k% = INSTR(hlp$, rc$)
WHILE k% > 0
    ITEM_ADD 901, LEFT$(hlp$, k%-1): hlp$ = MID$(hlp$, k%+1, 9000)
    k% = INSTR(hlp$, rc$)
END_WHILE
BUTTON 902: PARENT 902,900: TOP 902,HEIGHT(900)-70: LEFT 902,280: CAPTION 902,"OK"
ON_CLICK 902, Faide

regle$=CHR$(9)+CHR$(9)+CHR$(9)+" - REGLES DU JEU DE DAMES -"+rc$
regle$=regle$+CHR$(9)+CHR$(9)+CHR$(9)+"    ==============================="+rc$+rc$
rem regle$=regle$+""+rc$ : ' Modèle d'une ligne vide
regle$=regle$+"Le jeu de dames international se joue sur un damier carré divisé en 100 cases égales, alternativement claires et foncées."+rc$
regle$=regle$+"Le jeu se joue sur les cases foncées du damier. Il y a donc 50 cases actives."+rc$
regle$=regle$+"La plus longue diagonale, joignant deux coins du damier et comprenant 10 cases foncées, se dénomme la grande diagonale."+rc$
regle$=regle$+"Le damier doit être placé de sorte que la première case de gauche, pour chaque joueur, soit une case foncée."+rc$
regle$=regle$+"Le jeu de dames international se joue avec 20 pions blancs (clairs) et 20 pions noirs (foncés)"+rc$
regle$=regle$+"Avant de débuter une partie, les 20 pions noirs et les 20 pions blancs sont disposés sur les 4 premières rangées de chaque joueur."+rc$
regle$=regle$+"Il faut manger tous les pions de l'autre en passant par dessus avec l'un de vos pions."+rc$
regle$=regle$+"Les déplacements autoriser : seulement d'une case en avant, en diagonale si celle ci est libre."+rc$
regle$=regle$+"Le premier coup est toujours joué par les blancs. Les adversaires jouent un coup chacun à tour de rôle avec leurs pièces."+rc$
regle$=regle$+"Pour cela, on couronne le pion en plaçant dessus un deuxième pion de la même couleur."+rc$
regle$=regle$+"Il est interdit de reculer en dehors des prises"+rc$
regle$=regle$+"Si un pion avance jusqu'à la dernière rangée, il devient une Dame."+rc$
regle$=regle$+"La dame peut se déplacer de plusieurs cases en avant ou en arrière si ces cases sont vides."+rc$
regle$=regle$+"La prise des pièces adverse est obligatoire et s’effectue aussi bien en avant qu’en arrière."+rc$
regle$=regle$+"Lorsqu’un pion se trouve en présence, diagonalement, d’une pièce adverse derrière laquelle se trouve une case libre, il doit"+rc$
regle$=regle$+"obligatoirement sauter par-dessus cette pièce et occuper la case libre. Cette pièce adverse est alors enlevée du damier."+rc$
regle$=regle$+"Cette opération complète est la prise par un pion."+rc$
regle$=regle$+"Lorsqu’au cours d’une prise par un pion, celui-ci se trouve à nouveau en présence, diagonalement, d’une pièce adverse derrière "+rc$
regle$=regle$+"laquelle se trouve une case libre, il doit obligatoirement sauter par-dessus cette seconde pièce, voire d’une troisième et"+rc$
regle$=regle$+"ainsi de suite, et occuper la case libre se trouvant derrière la dernière pièce capturée. Les pièces adverses ainsi capturées"+rc$
regle$=regle$+"sont ensuite enlevées du damier dans l’ordre de la prise."+rc$
regle$=regle$+"Cette opération complète est une rafle par un pion."+rc$
regle$=regle$+"Lorsqu’au cours d’une prise par une dame, celle-ci se trouve à nouveau en présence, sur une même diagonale, d’une pièce adverse"+rc$
regle$=regle$+"derrière laquelle se trouve une ou plusieurs cases libres, elle doit obligatoirement sauter par-dessus cette seconde pièce, voire"+rc$
regle$=regle$+"d’une troisième et ainsi de suite, et occuper au choix une case libre se trouvant derrière et sur la même diagonale que la dernière"+rc$
regle$=regle$+"pièce capturée. Les pièces adverses ainsi capturées sont ensuite enlevées du damier dans l’ordre de la prise."+rc$
regle$=regle$+"Cette opération complète est une rafle par une dame."+rc$
regle$=regle$+"Au cours d’une rafle, il est interdit de passer au-dessus de ses propres pièces."+rc$
regle$=regle$+"Au cours d’une rafle, il est permis de passer plusieurs fois sur une même case libre mais il est interdit de passer plus d’une fois "+rc$
regle$=regle$+"au-dessus d’une même pièce adverse."+rc$
regle$=regle$+"Une rafle doit être clairement indiquée, pièce par pièce, en posant la pièce preneuse sur la case de saut, le temps d’y passer, et"+rc$
regle$=regle$+"en déposant cette pièce sur la case terminale."+rc$
regle$=regle$+"Les pièces prises ne peuvent être enlevées du damier qu’à l’issue de l’exécution complète de la rafle."+rc$
regle$=regle$+"La prise du plus grand nombre de pièces est prioritaire, donc obligatoire. Dans ce cas, une dame compte pour une pièce, tout comme un pion."+rc$
regle$=regle$+"Elle ne confère nulle priorité et n’impose aucune obligation."+rc$
regle$=regle$+"Si les pièces à prendre sont en nombre égal dans deux ou plusieurs possibilités de prise ou de rafle, le joueur est libre de choisir "+rc$
regle$=regle$+"une de ces possibilités, soit avec un pion, soit avec une dame."+rc$
regle$=regle$+"Un pion qui au cours d’une rafle, ne fait que passer sur une des 5 cases de la rangée de base adverse reste un pion lorsque la rafle est terminée."+rc$

FORM 910: TOP 910,2*Marge_y: LEFT 910,3*Marge_X: WIDTH 910,x_Max-6*Marge_X: HEIGHT 910,y_Max-4*Marge_y: HIDE 910
FONT_SIZE 910,10
LIST 911: PARENT 911,910: WIDTH 911,WIDTH(910)-16: HEIGHT 911,HEIGHT(910)-80
k% = INSTR(regle$, rc$)
WHILE k% > 0
    ITEM_ADD 911, LEFT$(regle$, k%-1): regle$ = MID$(regle$, k%+1, 9000)
    k% = INSTR(regle$, rc$)
END_WHILE
BUTTON 912: PARENT 912,910: TOP 912,HEIGHT(910)-70: LEFT 912,280: CAPTION 912,"OK"
ON_CLICK 902, Fregle

' INITIALISATION DES PIONS SUR LE DAMIER
' PIONS DE L'AI
    Caption 0, "PIONS AI"
case% = 0
FOR j% = 0 TO 3
  FOR k% = 0 TO 9
    IF case% = 0 THEN case% = 1 : ELSE : damier%(j%,k%)= 2 : case% = 0
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%
' PIONS DU JOUEUR
    Caption 0, "PIONS JOUEUR"
case% = 0
FOR j% = 6 TO 9
  FOR k% = 0 TO 9
    IF case% = 0 THEN case% = 1 : ELSE : damier%(j%,k%)= 1 : case% = 0
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%

' Représentation du Damier
PICTURE 2
WIDTH  2, 10 * pas_case : HEIGHT 2, 10 * pas_case
TOP 2,Marge_y: LEFT 2, Marge_x: ON_CLICK 2, Clic_Damier
GOSUB Dessine_Damier

END
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptySam 19 Mai 2012 - 20:35

Salut Jicehel,

Bon courage pour la suite.

Une petite remarque: les pions noirs sur les cases noires c'est pas pas trop bon pour le visuel.

à suivre.

A+
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptySam 19 Mai 2012 - 20:41

Salut Jean-Charles dit Jicehel !
C’est bien toi Jicehel, Jean-Charles ?

Boh, ton jeu de dames, (en tout cas la partie déjà codée) promet d’être sympa !
Je voie que ma demande à toi de programmer un jeu de dames a été prise au sérieux ! Alors bonne continuation !

J’ai ajouté, au début du sous-programme ‘INIT :’ color 0,250,225,0
Ça donne un fond un peu plus gai ! Mais ceci est une question de goût !

PS:
Je suis d’accord avec Jean-Claude en ce qui concerne la couleur.

lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptySam 19 Mai 2012 - 21:12

Bonsoir Jicehel, Very Happy
J'ai hâte de jouer aux dames! Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptySam 19 Mai 2012 - 21:46

En plus c'est un peu de ta faute Bignono ... Je vais me lancer dans la pseudo intelligence (si j'y arrive) mais bon, j'ai pris un sujet moins dur que le Tarot (enfin je pense) pour essayer
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 0:32

Bon courage Jicehel !
J’ai hâte de damer le pion ! Smile Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 16:14

Coucou, j'ai avancé un peu, je viens d'ajouter les déplacements des pions
Prochaine étape regarder s'il y a un souffler n'est pas jouer quand on ne prend pas
(Il faudra plus tard regarder si l'on prend là ou il y avait le plus de pion à prendre, mais ça, je verrais plus tard, quand j'attaquerais l'intelligence artificielle et les estimations de prises)
Là, on peut bouger et prendre les pions jusqu'à ce que l'on atteigne les dames (le mouvement des dames n'est pas encore pris en charge)
Code:
REM Jeu de dames par Jean-Charles
REM V0.2 du 20/05/2011
REM Programmation en cours - Selection des pièces - mouvements de base terminée

LABEL Init: GOTO Init

Aide:
SHOW 900
RETURN

Faide:
HIDE 900
RETURN

Regle:
SHOW 910
RETURN

Fregle:
HIDE 910
RETURN

Quitter:
TERMINATE
RETURN

Dessine_Damier:
2D_TARGET_IS 2
2D_PEN_COLOR 40,40,40: 2D_RECTANGLE 0,0,WIDTH(2),HEIGHT(2)
case% = 0
FOR j% = 0 TO 9
  FOR k% = 0 TO 9
    IF case% = 0
      2D_FILL_COLOR CDR,CDV,CDB
      case% = 1
    ELSE
      2D_FILL_COLOR CCR,CCV,CCB
      case% = 0
    END_IF
    2D_RECTANGLE k%*pas_case,j%*pas_case,(k%+1)*pas_case,(j%+1)*pas_case
    IF damier%(j%,k%) > 0 THEN GOSUB Dessine_piece
    2D_PEN_COLOR 40,40,40
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%
RETURN

Dessine_piece:
  SELECT damier%(j%,k%)
    CASE 0: ' NORMALEMENT ON NE LE FAIT JAMAIS
    CASE 1
      ' PION BLANC
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CBR - 60,CBV - 60,CBB - 60 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
    CASE 2
      ' PION NOIR
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CNR - 30,CNV - 30,CNB - 30 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
    CASE 9
      ' DAME BLANCHE
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CBR - 60,CBV - 60,CBB - 60 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case-3+r%,r% -  7
      2D_PEN_COLOR CBR - 60,CBV - 60,CBB - 60 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%-6,r% -  7 : 2D_PEN_WIDTH 3
    CASE 8
      ' DAME NOIRE
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CNR - 30,CNV - 30,CNB - 30 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case-3+r%,r% -  7
      2D_PEN_COLOR CNR - 30,CNV - 30,CNB - 30 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%-6,r% -  7 : 2D_PEN_WIDTH 3
  END_SELECT
RETURN

Clic_Damier:
  OFF_CLICK 2
  Sposx = INT(MOUSE_X_POSITION(2)/pas_case)
  Sposy = INT(MOUSE_Y_POSITION(2)/pas_case)
Clic_Damier3:
  IF tour=0
  ' Tour des blancs
    IF damier%(Sposy,Sposx) = 1 OR damier%(Sposy,Sposx) = 9
      2D_PEN_COLOR 255,0,0 : 2D_FILL_COLOR CCR,CCV,CCB
      2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
      j%=Sposy : k%= Sposx : GOSUB Dessine_piece
      ON_CLICK 2, Clic_Damier2
    ELSE
        ON_CLICK 2, Clic_Damier
    END_IF
  ELSE
  ' Tour des noirs
    IF damier%(Sposy,Sposx) = 2 OR damier%(Sposy,Sposx) = 8
      2D_PEN_COLOR 255,0,0 : 2D_FILL_COLOR CCR,CCV,CCB
      2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
      j%=Sposy : k%= Sposx : GOSUB Dessine_piece
      ON_CLICK 2, Clic_Damier4
    ELSE
        ON_CLICK 2, Clic_Damier
    END_IF
  END_IF
RETURN

Clic_Damier4:
OFF_CLICK 2
 Nposx = INT(MOUSE_X_POSITION(2)/pas_case) :  Nposy = INT(MOUSE_Y_POSITION(2)/pas_case)
IF damier%(Nposy,Nposx) = 0 and Nposy = Sposy+1
    IF (Nposx = (Sposx + 1)) OR (Nposx = (Sposx - 1))
      ' On déplace le pion normalement, à ajouter: tester si il y a un soffler n'est pas jouer
        2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
        2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
        j%=Nposy : k%= Nposx : damier%(j%,k%) = damier%(Sposy,Sposx) : damier%(Sposy,Sposx)=0: GOSUB Dessine_piece
        tour = 0
        ON_CLICK 2, Clic_Damier
    ELSE
        GOSUB Test_clic_noir
    END_IF
ELSE
    IF damier%(Nposy,Nposx) = 0 AND Nposy = Sposy+2
    ' Test de la prise vers l'avant
                IF (Nposx = (Sposx + 2))
                    IF damier%(Sposy+1,Sposx+1) = 1 OR damier%(Sposy+1,Sposx+1) = 9
                      GOSUB Prise : ' On prend le pion adverse
                      Nb_blancs = Nb_blancs - 1
                      GOSUB Test_Rafle
                    ELSE
                      GOSUB Test_clic_noir
                    END_IF
                ELSE
                  IF (Nposx = (Sposx - 2))
                      IF damier%(Sposy+1,Sposx-1) = 1 OR damier%(Sposy+1,Sposx-1) = 9
                          GOSUB Prise : ' On prend le pion adverse
                          Nb_blancs = Nb_blancs - 1
                          GOSUB Test_Rafle
                      ELSE
                          GOSUB Test_clic_noir
                      END_IF
                  ELSE
                      GOSUB Test_clic_noir
                  END_IF
                END_IF
    ELSE
          IF damier%(Nposy,Nposx) = 0 AND Nposy = Sposy-2
          ' Test de la prise vers l'arriere
                  IF (Nposx = (Sposx + 2))
                        IF damier%(Sposy-1,Sposx+1) = 1 OR damier%(Sposy-1,Sposx+1) = 9
                          GOSUB Prise : ' On prend le pion adverse
                          Nb_blancs = Nb_blancs - 1
                          GOSUB Test_Rafle
                        ELSE
                          GOSUB Test_clic_noir
                        END_IF
                    ELSE
                      IF (Nposx = (Sposx - 2))
                          IF  damier%(Sposy-1,Sposx-1) = 1 OR damier%(Sposy-1,Sposx-1) = 9
                              GOSUB Prise : ' On prend le pion adverse
                              Nb_blancs = Nb_blancs - 1
                              GOSUB Test_Rafle
                          ELSE
                              GOSUB Test_clic_noir
                          END_IF
                      ELSE
                          GOSUB Test_clic_noir
                      END_IF
                    END_IF
            ELSE
                  GOSUB Test_clic_noir
            END_IF
    END_IF
END_IF
IF tour=0 AND Nposy=9 THEN IF damier%(Nposy,Nposx)=2 THEN j%=Nposy : k%= Nposx : damier%(j%,k%)=8 : GOSUB Dessine_piece
RETURN

Clic_Damier2:
  OFF_CLICK 2
  Nposx = INT(MOUSE_X_POSITION(2)/pas_case) :  Nposy = INT(MOUSE_Y_POSITION(2)/pas_case)
  IF damier%(Nposy,Nposx) = 0 AND Nposy = Sposy-1
        IF (Nposx = (Sposx + 1)) OR (Nposx = (Sposx - 1))
            ' On déplace le pion normalement, à ajouter: tester si il y a un soffler n'est pas jouer
            2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
            2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
            j%=Nposy : k%= Nposx : damier%(j%,k%) = damier%(Sposy,Sposx) : damier%(Sposy,Sposx)=0 : GOSUB Dessine_piece
            tour = 1
            ON_CLICK 2, Clic_Damier
        ELSE
            GOSUB Test_clic_blanc
        END_IF
    ELSE
        IF damier%(Nposy,Nposx) = 0 AND Nposy = Sposy-2
        ' Test de la prise vers l'avant
                IF (Nposx = (Sposx + 2))
                    IF damier%(Sposy-1,Sposx+1) = 2 OR damier%(Sposy-1,Sposx+1) = 8
                      GOSUB Prise : ' On prend le pion adverse
                      Nb_Noirs = Nb_Noirs - 1
                      GOSUB Test_Rafle
                    ELSE
                      GOSUB Test_clic_blanc
                    END_IF
                ELSE
                  IF (Nposx = (Sposx - 2))
                      IF  damier%(Sposy-1,Sposx-1) = 2 OR damier%(Sposy-1,Sposx-1) = 8
                          GOSUB Prise : ' On prend le pion adverse
                          Nb_Noirs = Nb_Noirs - 1
                          GOSUB Test_Rafle
                      ELSE
                          GOSUB Test_clic_blanc
                      END_IF
                  ELSE
                      GOSUB Test_clic_blanc
                  END_IF
                END_IF
        ELSE
          IF damier%(Nposy,Nposx) = 0 AND Nposy = Sposy+2
          ' Test de la prise vers l'arriere
                  IF (Nposx = (Sposx + 2))
                        IF damier%(Sposy+1,Sposx+1) = 2 OR damier%(Sposy+1,Sposx+1) = 8
                          GOSUB Prise : ' On prend le pion adverse
                          Nb_Noirs = Nb_Noirs - 1
                          GOSUB Test_Rafle
                        ELSE
                          GOSUB Test_clic_blanc
                        END_IF
                    ELSE
                      IF (Nposx = (Sposx - 2))
                          IF  damier%(Sposy+1,Sposx-1) = 2 OR damier%(Sposy+1,Sposx-1) = 8
                              GOSUB Prise : ' On prend le pion adverse
                              Nb_Noirs = Nb_Noirs - 1
                              GOSUB Test_Rafle
                          ELSE
                              GOSUB Test_clic_blanc
                          END_IF
                      ELSE
                          GOSUB Test_clic_blanc
                      END_IF
                    END_IF
            ELSE
                  GOSUB Test_clic_blanc
            END_IF
        END_IF
    END_IF
IF tour=1 AND Nposy=0 THEN IF damier%(Nposy,Nposx)=1 THEN j%=Nposy : k%= Nposx : damier%(j%,k%)=9 : GOSUB Dessine_piece
RETURN

Test_Rafle:
PeutPrendre = 0
IF tour=0
  j%=2 : k%=8
ELSE
  j%=1 : k%=9
END_IF
IF Nposx < 8
  IF Nposy < 8
    IF damier%(Nposy+1,Nposx+1)=j% OR damier%(Nposy+1,Nposx+1)=k%
      IF damier%(Nposy+2,Nposx+2)= 0
          PeutPrendre = 1
      END_IF
    END_IF
  END_IF
  IF Nposy > 1
    IF damier%(Nposy-1,Nposx+1)=j% OR damier%(Nposy-1,Nposx+1)=k%
      IF damier%(Nposy-2,Nposx+2)= 0
        PeutPrendre = 1
      END_IF
    END_IF
  END_IF
END_IF
IF Nposx > 1
    IF Nposy < 8
      IF damier%(Nposy+1,Nposx-1)=j% OR damier%(Nposy+1,Nposx-1)=k%
        IF damier%(Nposy+2,Nposx-2)= 0
          PeutPrendre = 1
        END_IF
      END_IF
    END_IF
    IF Nposy > 1
      IF damier%(Nposy-1,Nposx-1)=j% OR damier%(Nposy-1,Nposx-1)=k%
        IF damier%(Nposy-2,Nposx-2)= 0
          PeutPrendre = 1
        END_IF
      END_IF
    END_IF
END_IF
IF PeutPrendre = 0
  IF tour=1 THEN tour = 0 : ELSE : tour = 1
  ON_CLICK 2, Clic_Damier
ELSE
  Sposx=Nposx : Sposy=Nposy
  2D_PEN_COLOR 255,0,0 : 2D_FILL_COLOR CCR,CCV,CCB
  2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
  j%=Sposy : k%= Sposx : GOSUB Dessine_piece
  IF tour=1 THEN ON_CLICK 2, Clic_Damier4 : ELSE : ON_CLICK 2, Clic_Damier2
END_IF
RETURN

Prise:
  2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
  2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
  IF Nposy > Sposy
      IF Nposx > Sposx
          damier%(Sposy+1,Sposx+1) = 0
          2D_RECTANGLE (Sposx+1)*pas_case,(Sposy+1)*pas_case,(Sposx+2)*pas_case,(Sposy+2)*pas_case
      ELSE
          damier%(Sposy+1,Sposx-1) = 0
          2D_RECTANGLE (Sposx-1)*pas_case,(Sposy+1)*pas_case,Sposx*pas_case,(Sposy+2)*pas_case
      END_IF
  ELSE
      IF Nposx > Sposx
          damier%(Sposy-1,Sposx+1) = 0
          2D_RECTANGLE (Sposx+1)*pas_case,(Sposy-1)*pas_case,(Sposx+2)*pas_case,Sposy*pas_case
      ELSE
          damier%(Sposy-1,Sposx-1) = 0
          2D_RECTANGLE (Sposx-1)*pas_case,(Sposy-1)*pas_case,Sposx*pas_case,Sposy*pas_case
      END_IF
  END_IF
  j%=Nposy : k%= Nposx : damier%(j%,k%) = damier%(Sposy,Sposx) : damier%(Sposy,Sposx)=0 : GOSUB Dessine_piece
RETURN

Test_clic_blanc:
      IF damier%(Nposy,Nposx) = 1 or damier%(Nposy,Nposx) = 9
          2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
          2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
          GOSUB Dessine_piece
          Sposx=Nposx : Sposy=Nposy : Goto Clic_Damier3
      ELSE
        ON_CLICK 2,Clic_Damier2
      END_IF

RETURN

Test_clic_noir:
      IF damier%(Nposy,Nposx) = 2 or damier%(Nposy,Nposx) = 8
          2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
          2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
          GOSUB Dessine_piece
          Sposx=Nposx : Sposy=Nposy : Goto Clic_Damier3
      ELSE
        ON_CLICK 2,Clic_Damier4
      END_IF
RETURN

Init:
COLOR 0,180,100,60
LABEL Aide,Regle,Faide, Fregle, Quitter, Clic_Damier, Clic_Damier2, Clic_Damier3, Clic_Damier4, Dessine_Damier, Dessine_piece
LABEL Test_clic_blanc, Test_clic_noir, Prise, Test_Rafle
DIM x_Max, y_Max : x_Max=1000 : y_max=700
DIM Marge_x, Marge_y : Marge_x = 20 : Marge_y = 30
DIM hlp$,regle$, j%,k%,case%,tour,PeutPrendre
DIM damier%(10,10) : ' 0: Case vide, 1: Pion du joueur, 9: Dame du joueur, 2: Pion de l'Ai, 8: Dame de l'Ai
DIM Sposx, Sposy : ' Position du pion sélectionné
DIM Nposx, Nposy : ' Position de la destination sélectionné
DIM pas_case : if (y_Max - 2* Marge_y) > (x_Max - 2 * Marge_x) Then pas_case= (x_Max - 2 * Marge_x) / 11 : else: pas_case= (y_Max - 2 * Marge_y) / 11
DIM rc$ : rc$=CHR$(10)
DIM Nb_Noirs,Nb_blancs : Nb_Noirs = 20 : Nb_blancs = 20 : ' Nombre de pions noirs et blancs
DIM r%: r% = pas_case/2 -1
DIM CBR,CBV,CBB, CNR, CNV, CNB
CBR = 205 : CBV = 205: CBB = 205 : ' Couleurs des pions blancs
CNR = 55  : CNV = 55 : CNB = 55  : ' Couleurs des pions noirs
DIM CDR,CDV,CDB,CCR,CCV,CCB
CDR = 255 : CDV = 255: CDB = 255 : ' Couleurs des cases 'blanches'
CCR = 30  : CCV = 30 : CCB = 180 : ' Couleurs des cases 'noires'
CAPTION 0, "Jeu de dames en Basic Panoramic par Jean-Charles"
WIDTH 0,x_Max : HEIGHT 0, y_max

' Menu Principal
MAIN_MENU 1 : REM On reserve les objets 1 à 30 pour le menu
SUB_MENU 11: PARENT 11, 1: CAPTION 11, "Fichier"
SUB_MENU 16: PARENT 16, 1: CAPTION 16, "Aide"
SUB_MENU 17: PARENT 17, 1: CAPTION 17, "Règle"
ON_CLICK 16, Aide : ON_CLICK 17, Regle

' Sous menu Fichier
SUB_MENU 21: CAPTION 21,"Quitter" : PARENT 21, 11
ON_CLICK 21, Quitter

' Préparation de l'aide
hlp$=CHR$(9)+CHR$(9)+CHR$(9)+" -  AIDE DU JEU DE DAMES  -"+rc$
hlp$=hlp$+CHR$(9)+CHR$(9)+CHR$(9)+"    ==============================="+rc$+rc$
hlp$=hlp$+"A remplir"+rc$
FORM 900: TOP 900,2*Marge_y: LEFT 900,3*Marge_X: WIDTH 900,x_Max-6*Marge_X: HEIGHT 900,y_Max-4*Marge_y: HIDE 900
FONT_SIZE 900,10
LIST 901: PARENT 901,900: WIDTH 901,WIDTH(900)-16: HEIGHT 901,HEIGHT(900)-80
k% = INSTR(hlp$, rc$)
WHILE k% > 0
    ITEM_ADD 901, LEFT$(hlp$, k%-1): hlp$ = MID$(hlp$, k%+1, 9000)
    k% = INSTR(hlp$, rc$)
END_WHILE
BUTTON 902: PARENT 902,900: TOP 902,HEIGHT(900)-70: LEFT 902,280: CAPTION 902,"OK"
ON_CLICK 902, Faide

regle$=CHR$(9)+CHR$(9)+CHR$(9)+" - REGLES DU JEU DE DAMES -"+rc$
regle$=regle$+CHR$(9)+CHR$(9)+CHR$(9)+"    ==============================="+rc$+rc$
rem regle$=regle$+""+rc$ : ' Modèle d'une ligne vide
regle$=regle$+"Le jeu de dames international se joue sur un damier carré divisé en 100 cases égales, alternativement claires et foncées."+rc$
regle$=regle$+"Le jeu se joue sur les cases foncées du damier. Il y a donc 50 cases actives."+rc$
regle$=regle$+"La plus longue diagonale, joignant deux coins du damier et comprenant 10 cases foncées, se dénomme la grande diagonale."+rc$
regle$=regle$+"Le damier doit être placé de sorte que la première case de gauche, pour chaque joueur, soit une case foncée."+rc$
regle$=regle$+"Le jeu de dames international se joue avec 20 pions blancs (clairs) et 20 pions noirs (foncés)"+rc$
regle$=regle$+"Avant de débuter une partie, les 20 pions noirs et les 20 pions blancs sont disposés sur les 4 premières rangées de chaque joueur."+rc$
regle$=regle$+"Il faut manger tous les pions de l'autre en passant par dessus avec l'un de vos pions."+rc$
regle$=regle$+"Les déplacements autoriser : seulement d'une case en avant, en diagonale si celle ci est libre."+rc$
regle$=regle$+"Le premier coup est toujours joué par les blancs. Les adversaires jouent un coup chacun à tour de rôle avec leurs pièces."+rc$
regle$=regle$+"Pour cela, on couronne le pion en plaçant dessus un deuxième pion de la même couleur."+rc$
regle$=regle$+"Il est interdit de reculer en dehors des prises"+rc$
regle$=regle$+"Si un pion avance jusqu'à la dernière rangée, il devient une Dame."+rc$
regle$=regle$+"La dame peut se déplacer de plusieurs cases en avant ou en arrière si ces cases sont vides."+rc$
regle$=regle$+"La prise des pièces adverse est obligatoire et s’effectue aussi bien en avant qu’en arrière."+rc$
regle$=regle$+"Lorsqu’un pion se trouve en présence, diagonalement, d’une pièce adverse derrière laquelle se trouve une case libre, il doit"+rc$
regle$=regle$+"obligatoirement sauter par-dessus cette pièce et occuper la case libre. Cette pièce adverse est alors enlevée du damier."+rc$
regle$=regle$+"Cette opération complète est la prise par un pion."+rc$
regle$=regle$+"Lorsqu’au cours d’une prise par un pion, celui-ci se trouve à nouveau en présence, diagonalement, d’une pièce adverse derrière "+rc$
regle$=regle$+"laquelle se trouve une case libre, il doit obligatoirement sauter par-dessus cette seconde pièce, voire d’une troisième et"+rc$
regle$=regle$+"ainsi de suite, et occuper la case libre se trouvant derrière la dernière pièce capturée. Les pièces adverses ainsi capturées"+rc$
regle$=regle$+"sont ensuite enlevées du damier dans l’ordre de la prise."+rc$
regle$=regle$+"Cette opération complète est une rafle par un pion."+rc$
regle$=regle$+"Lorsqu’au cours d’une prise par une dame, celle-ci se trouve à nouveau en présence, sur une même diagonale, d’une pièce adverse"+rc$
regle$=regle$+"derrière laquelle se trouve une ou plusieurs cases libres, elle doit obligatoirement sauter par-dessus cette seconde pièce, voire"+rc$
regle$=regle$+"d’une troisième et ainsi de suite, et occuper au choix une case libre se trouvant derrière et sur la même diagonale que la dernière"+rc$
regle$=regle$+"pièce capturée. Les pièces adverses ainsi capturées sont ensuite enlevées du damier dans l’ordre de la prise."+rc$
regle$=regle$+"Cette opération complète est une rafle par une dame."+rc$
regle$=regle$+"Au cours d’une rafle, il est interdit de passer au-dessus de ses propres pièces."+rc$
regle$=regle$+"Au cours d’une rafle, il est permis de passer plusieurs fois sur une même case libre mais il est interdit de passer plus d’une fois "+rc$
regle$=regle$+"au-dessus d’une même pièce adverse."+rc$
regle$=regle$+"Une rafle doit être clairement indiquée, pièce par pièce, en posant la pièce preneuse sur la case de saut, le temps d’y passer, et"+rc$
regle$=regle$+"en déposant cette pièce sur la case terminale."+rc$
regle$=regle$+"Les pièces prises ne peuvent être enlevées du damier qu’à l’issue de l’exécution complète de la rafle."+rc$
regle$=regle$+"La prise du plus grand nombre de pièces est prioritaire, donc obligatoire. Dans ce cas, une dame compte pour une pièce, tout comme un pion."+rc$
regle$=regle$+"Elle ne confère nulle priorité et n’impose aucune obligation."+rc$
regle$=regle$+"Si les pièces à prendre sont en nombre égal dans deux ou plusieurs possibilités de prise ou de rafle, le joueur est libre de choisir "+rc$
regle$=regle$+"une de ces possibilités, soit avec un pion, soit avec une dame."+rc$
regle$=regle$+"Un pion qui au cours d’une rafle, ne fait que passer sur une des 5 cases de la rangée de base adverse reste un pion lorsque la rafle est terminée."+rc$

FORM 910: TOP 910,2*Marge_y: LEFT 910,3*Marge_X: WIDTH 910,x_Max-6*Marge_X: HEIGHT 910,y_Max-4*Marge_y: HIDE 910
FONT_SIZE 910,10
LIST 911: PARENT 911,910: WIDTH 911,WIDTH(910)-16: HEIGHT 911,HEIGHT(910)-80
k% = INSTR(regle$, rc$)
WHILE k% > 0
    ITEM_ADD 911, LEFT$(regle$, k%-1): regle$ = MID$(regle$, k%+1, 9000)
    k% = INSTR(regle$, rc$)
END_WHILE
BUTTON 912: PARENT 912,910: TOP 912,HEIGHT(910)-70: LEFT 912,280: CAPTION 912,"OK"
ON_CLICK 912, Fregle

' INITIALISATION DES PIONS SUR LE DAMIER
' PIONS DE L'AI
case% = 0
FOR j% = 0 TO 3
  FOR k% = 0 TO 9
    IF case% = 0 THEN case% = 1 : ELSE : damier%(j%,k%)= 2 : case% = 0
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%
' PIONS DU JOUEUR
case% = 0
FOR j% = 6 TO 9
  FOR k% = 0 TO 9
    IF case% = 0 THEN case% = 1 : ELSE : damier%(j%,k%)= 1 : case% = 0
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%

tour=0 : ' Les blancs commencent
' Représentation du Damier
PICTURE 2
WIDTH  2, 10 * pas_case : HEIGHT 2, 10 * pas_case
TOP 2,Marge_y: LEFT 2, Marge_x: ON_CLICK 2, Clic_Damier
GOSUB Dessine_Damier

END


Dernière édition par Jicehel le Dim 20 Mai 2012 - 22:30, édité 2 fois
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 17:57

Je viens de tester, çà marche bien
Je pense que tu as fait le plus gros du travail...

A+

PS: n'oublies pas, (si je me rappelle bien la règle) que le joueur qui vient de prendre un pion garde la main. Ce n'est pas le cas actuellement.


Dernière édition par Jean Claude le Dim 20 Mai 2012 - 18:13, édité 1 fois
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 18:12

Pour un jeu à deux, oui, mais pour jouer contre l'ordi, il va falloir que je me creuse les méninges... C'est mon défit pour essayer de faire aussi bien que Bignono (j'ai bien dit essayer ...) au niveau de l'intelligence artificielle (en fait si j'arrive à le faire, j'aimerais même permettre de régler le niveau de l'AI, mais bon, je ne pense pas que j'irais jusque là honnêtement, si déjà j'arrive à faire jouer l'ordi convenablement en respectant les règles, je serais content). Il est quasiment sûr par contre que dans les options, il y aura la possibilité de jouer l'un contre l'autre ou contre l'ordi (c'est aussi pour ça que je code la partie "noire" des déplacements car normalement ce ne serait pas la peine puisque l'ordi par défaut ne jouera que là où c'est possible.
Pour jouer, l'ordi devra tester les possibilités de prendre et d'être pris ensuite sur quelques coups. Je pense que Nardo avait parlé d'un système comme ça. Je crois que je devrais m'orienter vers une solution utilisant son arbre pour garder la meilleure possibilité (dans ce cas le réglage de la difficulté se ferait sur la profondeur de l'arbre), mais bon, on verra bien d'ici là.
Ce que je suis sûr de faire, c'est que l'ordi joue (au pire aléatoirement ses pions s'il ne doit pas prendre) et gérer les déplacement des joueurs (Un petit texte à droite affichera le nombre de pions blancs, de pions noirs et qui joue) Après pour m'amuser, je mettrais peut être des petit commentaires
mais ce sera vraiment sur la fin, quand je jeu tournera, pour agrémenter le jeu.
(Peut être même que Bignono me fera des musiques d'ambiances, sinon j'en mettrais, récupérées sur le web)
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 18:19

Je retire ce que j'ai dit au sujet de jouer 2 fois de suite si on vient de prendre.

voir ici: http://www.ffjd.fr/Web/index.php?page=reglesdujeu au chapitre irrégularités.

A+
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 18:50

Salut Jicehel.

Tu t’avances bien ; c’est parfait !
J’ai joué et j’ai pu amener mon pion jusqu'à la dernière ligne ! Quant à damer ce pion….

Les couleurs sont maintenant plus gaies et la suite sera certainement bonne. Mais, (hé oui, il y a toujours des mais !!) je fais une petite remarque qui ne t’a surement pas échappé : dans les sous-menus ‘Aide’ et Règle’ les boutons ‘OK’ sont sans effet. Bien sur, ce n’est pas urgent et ça viendra.

Bonne continuation !
lol! lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 19:13

Merci, j'avais oublié de modifier la ligne 428
Il faut remplacer le 902 par 912 (problème de copier/coller), ce qui donne: ON_CLICK 912, Fregle
C'est corrigé dans mon source et je le modifie dans le programme dans le forum Wink
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyDim 20 Mai 2012 - 23:02

Bonsoir Jicehel, Smile
C'est prometteur! Mais maintenant, il faut maintenir le cap et faire le programme coûte que coûte! Il faut faire comme moi, aller jusqu'au bout quand on commence quelque chose. Et peut-être que je te ferais quelques musiques d'ambiance...! (Je vais te faire un aveu, le Tarot, tel qu'il est maintenant, j'ai mis plus d'un mois à le faire, et crois moi si tu veux, mais certains problèmes m'ont pris une semaine entière pour les résoudre!)
Alors, courage, et tu vas y arriver!!! C'est tout le mal que je te souhaite. Wink
Revenir en haut Aller en bas
pascal10000

pascal10000


Nombre de messages : 812
Localisation : Troyes
Date d'inscription : 05/02/2011

Jeu de dames Empty
MessageSujet: teste le jeu de dame   Jeu de dames EmptyLun 21 Mai 2012 - 20:04

je vien de teste ton jeu et il a un ptit <hic> la prise est obligatoire dans regle officiel
du jeu et là je peut joue un autre pion alors qu'il doit faire une prise sinon il est tres bien
et je te souhaite bon courage pour réalise ton jeu parce que il sera tres complexe a le cree
pour joue contre l'ordi
salut
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyLun 21 Mai 2012 - 20:19

oui, je l'ai indiqué dans un message précédent, je testerais bientôt s'il faut prendre, j'ai déjà une idée pour le faire, mais bon, je n'ai pas encore eu le temps de m'en occuper. Ce soir, je vais essayer d'optimiser un peu le code pour le simplifier avant de continuer et coder le déplacement des dames, j'ai déjà mon idée aussi pour le faire. Après, je m'attaque au test pour savoir s'il faut prendre (pour commencer, je ferais la méthode 'bourrin' du test de toutes les cases, tu verras bientôt.
Mais bon, c'est un programme vivant, il sera améliorable / et amélioré au fil du temps..
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyLun 21 Mai 2012 - 23:52

Salut Jicehel.

Du courage ! Je sais que tu en as, mais c’est toujours réconfortant d’être encouragé !

study

A+
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMar 22 Mai 2012 - 2:16

Merci Papydall,

Bon, j'ai un peu joué ce soir, mais j'ai codé le déplacement des dames / refait la routine de déplacement plus propre. Le programme ne permet pas encore de gérer l'obligation de prendre ni la possibilité de prendre plusieurs pions pour les dames sont séparés par plusieurs cases, je m'y attellerais demain, mais bon, les dames se font bougent et prennent (la rafle n'ayant pas était modifiée fonctionne comme pour les pions pour le moment)

Code:
REM Jeu de dames par Jean-Charles
REM V0.3 du 23/05/2011
REM Programmation en cours - Selection des pièces - mouvements de base terminés
REM Gestion du couronnement - Gestion du comptage des pièces et des tours

LABEL Init: GOTO Init

Aide:
SHOW 900
RETURN

Faide:
HIDE 900
RETURN

Regle:
SHOW 910
RETURN

Fregle:
HIDE 910
RETURN

Quitter:
TERMINATE
RETURN

Dessine_Damier:
2D_TARGET_IS 2
2D_PEN_COLOR 40,40,40: 2D_RECTANGLE 0,0,WIDTH(2),HEIGHT(2)
case% = 0
FOR j% = 0 TO 9
  FOR k% = 0 TO 9
    IF case% = 0
      2D_FILL_COLOR CDR,CDV,CDB
      case% = 1
    ELSE
      2D_FILL_COLOR CCR,CCV,CCB
      case% = 0
    END_IF
    2D_RECTANGLE k%*pas_case,j%*pas_case,(k%+1)*pas_case,(j%+1)*pas_case
    IF damier%(j%,k%) > 0 THEN GOSUB Dessine_piece
    2D_PEN_COLOR 40,40,40
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%
RETURN

Dessine_piece:
  SELECT damier%(j%,k%)
    CASE 0: ' NORMALEMENT ON NE LE FAIT JAMAIS
    CASE 1
      ' PION BLANC
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CBR - 60,CBV - 60,CBB - 60 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
    CASE 2
      ' PION NOIR
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CNR - 30,CNV - 30,CNB - 30 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
    CASE 9
      ' DAME BLANCHE
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CBR - 60,CBV - 60,CBB - 60 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case-3+r%,r% -  7
      2D_PEN_COLOR CBR - 60,CBV - 60,CBB - 60 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%-6,r% -  7 : 2D_PEN_WIDTH 3
    CASE 8
      ' DAME NOIRE
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+3+r%,r% -  7
      2D_PEN_COLOR CNR - 30,CNV - 30,CNB - 30 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%,r% -  7 : 2D_PEN_WIDTH 3
      2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_PEN_WIDTH 3 : 2D_CIRCLE k%*pas_case+r%,j%*pas_case-3+r%,r% -  7
      2D_PEN_COLOR CNR - 30,CNV - 30,CNB - 30 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_CIRCLE k%*pas_case+r%,j%*pas_case+r%-6,r% -  7 : 2D_PEN_WIDTH 3
  END_SELECT
RETURN

Clic_Damier:
  OFF_CLICK 2
  Sposx = INT(MOUSE_X_POSITION(2)/pas_case)
  Sposy = INT(MOUSE_Y_POSITION(2)/pas_case)
Clic_Damier3:
  IF tour=0
  ' Tour des blancs
    IF damier%(Sposy,Sposx) = 1 OR damier%(Sposy,Sposx) = 9
      2D_PEN_COLOR 255,0,0 : 2D_FILL_COLOR CCR,CCV,CCB
      2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
      j%=Sposy : k%= Sposx : GOSUB Dessine_piece
      ON_CLICK 2, Clic2_Damier_blancs
    ELSE
        ON_CLICK 2, Clic_Damier
    END_IF
  ELSE
  ' Tour des noirs
    IF damier%(Sposy,Sposx) = 2 OR damier%(Sposy,Sposx) = 8
      2D_PEN_COLOR 255,0,0 : 2D_FILL_COLOR CCR,CCV,CCB
      2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
      j%=Sposy : k%= Sposx : GOSUB Dessine_piece
      ON_CLICK 2, Clic2_Damier_noirs
    ELSE
        ON_CLICK 2, Clic_Damier
    END_IF
  END_IF
RETURN

Clic2_Damier_noirs:
Nposx = INT(MOUSE_X_POSITION(2)/pas_case) :  Nposy = INT(MOUSE_Y_POSITION(2)/pas_case)
IF NposX <> SposX OR NposY <> SposY
  OFF_CLICK 2
  Delta=abs(Sposx - Nposx):PeutPrendre=0:i%=0:Cpt=0:j%=(NposX - SposX)/Delta : k%=(NposY - SposY)/Delta
  IF damier%(Nposy,Nposx) = 0 THEN i%=1
  IF i%=1
    IF NposY > SposY
      IF (NposY - Delta) = SposY THEN i%=2
    ELSE
      IF (NposY + Delta) = SposY THEN i%=2
    END_IF
  END_IF
  IF Delta = 1 AND SposY < NposY AND i%=2
        PeutPrendre=1
  ELSE
      IF Delta = 2 AND i%=2
        IF Damier%(SposY+k%,SposX+j%)=1 OR Damier%(SposY+k%,SposX+j%)=9 THEN PeutPrendre=1:Cpt=1:PionX=SposX+j%: PionY=SposY+k%
      ELSE
        IF Damier%(SposY,SposX)=8 AND i%=2
          PeutPrendre=1
          FOR i% = 1 TO Delta
              IF Damier%(SposY+(k%*i%),SposX+(j%*i%))=1 OR Damier%(SposY+(k%*i%),SposX+(j%*i%))=9
                  IF Cpt=0
                      Cpt=1:PionX=SposX+(j%*i%): PionY=SposY+(k%*i%)
                  ELSE
                      PeutPrendre=0 : i%=Delta
                  END_IF
              ELSE
                  IF Damier%(SposY+(k%*i%),SposX+(j%*i%))=2 OR Damier%(SposY+(k%*i%),SposX+(j%*i%))=8 THEN PeutPrendre=0 : i%=Delta
              END_IF
          NEXT i%
        END_IF
    END_IF
  END_IF
  IF PeutPrendre=1
      2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
      2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
      ' On déplace le pion normalement, à ajouter: tester si il y a un pion à prendre
      j%=Nposy : k%= Nposx : damier%(j%,k%) = damier%(Sposy,Sposx) : damier%(Sposy,Sposx)=0 : GOSUB Dessine_piece
      IF Cpt=0
        2D_TARGET_IS 0 : 2D_PEN_COLOR 180,100,60 : 2D_FILL_COLOR 180,100,60 : 2D_CIRCLE 11*pas_case+r%+5*Marge_X,0.5*pas_case+r%,7
        tour = 0 : 2D_PEN_COLOR  30,100,30 : 2D_FILL_COLOR  60,150,60 : 2D_CIRCLE 10*pas_case+r%+Marge_X,0.5*pas_case+r%,7 : 2D_TARGET_IS 2
        ON_CLICK 2, Clic_Damier
      ELSE
          IF Cpt=1
              damier%(PionY,PionX)=0 : Nb_blancs = Nb_blancs - 1 : CAPTION 40,Nb_blancs
              2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
              2D_RECTANGLE (PionX)*pas_case,(PionY)*pas_case,(PionX+1)*pas_case,(PionY+1)*pas_case
              GOSUB Test_Rafle
          END_IF
      END_IF
  ELSE
      IF damier%(Nposy,Nposx) = 2 or damier%(Nposy,Nposx) = 8
          2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
          2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
          j%=SposY:k%=SposX: GOSUB Dessine_piece
          Sposx=Nposx : Sposy=Nposy : Goto Clic_Damier3
      ELSE
        ON_CLICK 2,Clic2_Damier_noirs
      END_IF
  END_IF
IF tour=0 AND Nposy=9 THEN IF damier%(Nposy,Nposx)=2 THEN j%=Nposy : k%= Nposx : damier%(j%,k%)=8 : GOSUB Dessine_piece
END_IF
RETURN

Clic2_Damier_blancs:
Nposx = INT(MOUSE_X_POSITION(2)/pas_case) :  Nposy = INT(MOUSE_Y_POSITION(2)/pas_case)
IF NposX <> SposX OR NposY <> SposY
  OFF_CLICK 2
  Delta=abs(Sposx - Nposx):PeutPrendre=0:i%=0:Cpt=0:j%=(NposX - SposX)/Delta : k%=(NposY - SposY)/Delta
  IF damier%(Nposy,Nposx) = 0 THEN i%=1
  IF i%=1
    IF NposY > SposY
      IF (NposY - Delta) = SposY THEN i%=2
    ELSE
      IF (NposY + Delta) = SposY THEN i%=2
    END_IF
  END_IF
  IF Delta = 1 AND SposY > NposY AND i%=2
        PeutPrendre=1
  ELSE
      IF Delta = 2 AND i%=2
        IF Damier%(SposY+k%,SposX+j%)=2 OR Damier%(SposY+k%,SposX+j%)=8 THEN PeutPrendre=1:Cpt=1:PionX=SposX+j%: PionY=SposY+k%
      ELSE
        IF Damier%(SposY,SposX)=9 AND i%=2
          PeutPrendre=1
          FOR i% = 1 TO Delta
              IF Damier%(SposY+(k%*i%),SposX+(j%*i%))=2 OR Damier%(SposY+(k%*i%),SposX+(j%*i%))=8
                  IF Cpt=0
                      Cpt=1:PionX=SposX+(j%*i%): PionY=SposY+(k%*i%)
                  ELSE
                      PeutPrendre=0 : i%=Delta
                  END_IF
              ELSE
                  IF Damier%(SposY+(k%*i%),SposX+(j%*i%))=1 OR Damier%(SposY+(k%*i%),SposX+(j%*i%))=9 THEN PeutPrendre=0 : i%=Delta
              END_IF
          NEXT i%
        END_IF
    END_IF
  END_IF
  IF PeutPrendre=1
      2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
      2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
      ' On déplace le pion normalement, à ajouter: tester si il y a un pion à prendre
      j%=Nposy : k%= Nposx : damier%(j%,k%) = damier%(Sposy,Sposx) : damier%(Sposy,Sposx)=0 : GOSUB Dessine_piece
      IF Cpt=0
        2D_TARGET_IS 0 : 2D_PEN_COLOR 180,100,60 : 2D_FILL_COLOR 180,100,60 : 2D_CIRCLE 10*pas_case+r%+Marge_X,0.5*pas_case+r%,7
        tour = 1 : 2D_PEN_COLOR  30,100,30 : 2D_FILL_COLOR  60,150,60 : 2D_CIRCLE 11*pas_case+r%+5*Marge_X,0.5*pas_case+r%,7 : 2D_TARGET_IS 2
        ON_CLICK 2, Clic_Damier
      ELSE
          IF Cpt=1
              damier%(PionY,PionX)=0 : Nb_Noirs = Nb_Noirs - 1 : CAPTION 41,Nb_noirs
              2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
              2D_RECTANGLE (PionX)*pas_case,(PionY)*pas_case,(PionX+1)*pas_case,(PionY+1)*pas_case
              GOSUB Test_Rafle
          END_IF
      END_IF
  ELSE
      IF damier%(Nposy,Nposx) = 1 or damier%(Nposy,Nposx) = 9
          2D_PEN_COLOR 40,40,40: 2D_FILL_COLOR CCR,CCV,CCB
          2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
          j%=SposY:k%=SposX: GOSUB Dessine_piece
          Sposx=Nposx : Sposy=Nposy : Goto Clic_Damier3
      ELSE
        ON_CLICK 2,Clic2_Damier_blancs
      END_IF
  END_IF
IF tour=1 AND Nposy=0 THEN IF damier%(Nposy,Nposx)=1 THEN j%=Nposy : k%= Nposx : damier%(j%,k%)=9 : GOSUB Dessine_piece
END_IF
RETURN

Test_Rafle:
PeutPrendre = 0
IF tour=0
  j%=2 : k%=8
ELSE
  j%=1 : k%=9
END_IF
IF Nposx < 8
  IF Nposy < 8
    IF damier%(Nposy+1,Nposx+1)=j% OR damier%(Nposy+1,Nposx+1)=k%
      IF damier%(Nposy+2,Nposx+2)= 0
          PeutPrendre = 1
      END_IF
    END_IF
  END_IF
  IF Nposy > 1
    IF damier%(Nposy-1,Nposx+1)=j% OR damier%(Nposy-1,Nposx+1)=k%
      IF damier%(Nposy-2,Nposx+2)= 0
        PeutPrendre = 1
      END_IF
    END_IF
  END_IF
END_IF
IF Nposx > 1
    IF Nposy < 8
      IF damier%(Nposy+1,Nposx-1)=j% OR damier%(Nposy+1,Nposx-1)=k%
        IF damier%(Nposy+2,Nposx-2)= 0
          PeutPrendre = 1
        END_IF
      END_IF
    END_IF
    IF Nposy > 1
      IF damier%(Nposy-1,Nposx-1)=j% OR damier%(Nposy-1,Nposx-1)=k%
        IF damier%(Nposy-2,Nposx-2)= 0
          PeutPrendre = 1
        END_IF
      END_IF
    END_IF
END_IF
IF PeutPrendre = 0
  IF tour=1
    tour = 0
    2D_TARGET_IS 0
    2D_PEN_COLOR 180,100,60 : 2D_FILL_COLOR 180,100,60 : 2D_CIRCLE 11*pas_case+r%+5*Marge_X,0.5*pas_case+r%,7
    2D_PEN_COLOR 30, 100,30 : 2D_FILL_COLOR 60,150,60  : 2D_CIRCLE 10*pas_case+r%+Marge_X,0.5*pas_case+r%,7
    2D_TARGET_IS 2
  ELSE
    tour = 1
    2D_TARGET_IS 0
    2D_PEN_COLOR 180,100,60 : 2D_FILL_COLOR 180,100,60 : 2D_CIRCLE 10*pas_case+r% + Marge_X,0.5*pas_case+r%,7
    2D_PEN_COLOR  30,100,30 : 2D_FILL_COLOR  60,150,60 : 2D_CIRCLE 11*pas_case+r%+5*Marge_X,0.5*pas_case+r%,7
    2D_TARGET_IS 2
  END_IF
  ON_CLICK 2, Clic_Damier
ELSE
  Sposx=Nposx : Sposy=Nposy
  2D_PEN_COLOR 255,0,0 : 2D_FILL_COLOR CCR,CCV,CCB
  2D_RECTANGLE Sposx*pas_case,Sposy*pas_case,(Sposx+1)*pas_case,(Sposy+1)*pas_case
  j%=Sposy : k%= Sposx : GOSUB Dessine_piece
  IF tour=1 THEN ON_CLICK 2, Clic2_Damier_noirs : ELSE : ON_CLICK 2, Clic2_Damier_blancs
END_IF
RETURN

Init:
COLOR 0,180,100,60
LABEL Aide,Regle,Faide, Fregle, Quitter, Clic_Damier, Clic2_Damier_blancs, Clic_Damier3, Clic2_Damier_noirs, Dessine_Damier, Dessine_piece
LABEL Test_Rafle, Relance
DIM x_Max, y_Max : x_Max=1000 : y_max=700
DIM Marge_x, Marge_y : Marge_x = 20 : Marge_y = 30
DIM hlp$,regle$,i%,j%,k%,case%,tour,PeutPrendre, Delta, Cpt, PionX, PionY
DIM damier%(10,10) : ' 0: Case vide, 1: Pion du joueur, 9: Dame du joueur, 2: Pion de l'Ai, 8: Dame de l'Ai
DIM Sposx, Sposy : ' Position du pion sélectionné
DIM Nposx, Nposy : ' Position de la destination sélectionné
DIM pas_case : if (y_Max - 2* Marge_y) > (x_Max - 2 * Marge_x) Then pas_case= (x_Max - 2 * Marge_x) / 11 : else: pas_case= (y_Max - 2 * Marge_y) / 11
DIM rc$ : rc$=CHR$(10)
DIM Nb_Noirs,Nb_blancs : ' Nombre de pions noirs et blancs
DIM r%: r% = pas_case/2 -1
DIM CBR,CBV,CBB, CNR, CNV, CNB
CBR = 205 : CBV = 205: CBB = 205 : ' Couleurs des pions blancs
CNR = 55  : CNV = 55 : CNB = 55  : ' Couleurs des pions noirs
DIM CDR,CDV,CDB,CCR,CCV,CCB
CDR = 255 : CDV = 255: CDB = 255 : ' Couleurs des cases 'blanches'
CCR = 30  : CCV = 30 : CCB = 180 : ' Couleurs des cases 'noires'
CAPTION 0, "Jeu de dames en Basic Panoramic par Jean-Charles"
WIDTH 0,x_Max : HEIGHT 0, y_max

' Création de l'image support pour le damier
PICTURE 2 : WIDTH  2, 10 * pas_case : HEIGHT 2, 10 * pas_case : TOP 2,Marge_y: LEFT 2, Marge_x

' Menu Principal
MAIN_MENU 1 : REM On reserve les objets 1 à 30 pour le menu
SUB_MENU 11: PARENT 11, 1: CAPTION 11, "Fichier"
SUB_MENU 16: PARENT 16, 1: CAPTION 16, "Aide"
SUB_MENU 17: PARENT 17, 1: CAPTION 17, "Règle"
ON_CLICK 16, Aide : ON_CLICK 17, Regle

' Sous menu Fichier
SUB_MENU 25: CAPTION 25,"Relancer partie" : PARENT 25, 11
SUB_MENU 26: CAPTION 26,"Quitter" : PARENT 26, 11
ON_CLICK 25, Relance :ON_CLICK 26, Quitter

' Préparation de l'aide
hlp$=CHR$(9)+CHR$(9)+CHR$(9)+" -  AIDE DU JEU DE DAMES  -"+rc$
hlp$=hlp$+CHR$(9)+CHR$(9)+CHR$(9)+"    ==============================="+rc$+rc$
hlp$=hlp$+"A remplir"+rc$
FORM 900: TOP 900,2*Marge_y: LEFT 900,3*Marge_X: WIDTH 900,x_Max-6*Marge_X: HEIGHT 900,y_Max-4*Marge_y: HIDE 900
FONT_SIZE 900,10
LIST 901: PARENT 901,900: WIDTH 901,WIDTH(900)-16: HEIGHT 901,HEIGHT(900)-80
k% = INSTR(hlp$, rc$)
WHILE k% > 0
    ITEM_ADD 901, LEFT$(hlp$, k%-1): hlp$ = MID$(hlp$, k%+1, 9000)
    k% = INSTR(hlp$, rc$)
END_WHILE
BUTTON 902: PARENT 902,900: TOP 902,HEIGHT(900)-70: LEFT 902,280: CAPTION 902,"OK"
ON_CLICK 902, Faide

regle$=CHR$(9)+CHR$(9)+CHR$(9)+" - REGLES DU JEU DE DAMES -"+rc$
regle$=regle$+CHR$(9)+CHR$(9)+CHR$(9)+"    ==============================="+rc$+rc$
rem regle$=regle$+""+rc$ : ' Modèle d'une ligne vide
regle$=regle$+"Le jeu de dames international se joue sur un damier carré divisé en 100 cases égales, alternativement claires et foncées."+rc$
regle$=regle$+"Le jeu se joue sur les cases foncées du damier. Il y a donc 50 cases actives."+rc$
regle$=regle$+"La plus longue diagonale, joignant deux coins du damier et comprenant 10 cases foncées, se dénomme la grande diagonale."+rc$
regle$=regle$+"Le damier doit être placé de sorte que la première case de gauche, pour chaque joueur, soit une case foncée."+rc$
regle$=regle$+"Le jeu de dames international se joue avec 20 pions blancs (clairs) et 20 pions noirs (foncés)"+rc$
regle$=regle$+"Avant de débuter une partie, les 20 pions noirs et les 20 pions blancs sont disposés sur les 4 premières rangées de chaque joueur."+rc$
regle$=regle$+"Il faut manger tous les pions de l'autre en passant par dessus avec l'un de vos pions."+rc$
regle$=regle$+"Les déplacements autoriser : seulement d'une case en avant, en diagonale si celle ci est libre."+rc$
regle$=regle$+"Le premier coup est toujours joué par les blancs. Les adversaires jouent un coup chacun à tour de rôle avec leurs pièces."+rc$
regle$=regle$+"Pour cela, on couronne le pion en plaçant dessus un deuxième pion de la même couleur."+rc$
regle$=regle$+"Il est interdit de reculer en dehors des prises"+rc$
regle$=regle$+"Si un pion avance jusqu'à la dernière rangée, il devient une Dame."+rc$
regle$=regle$+"La dame peut se déplacer de plusieurs cases en avant ou en arrière si ces cases sont vides."+rc$
regle$=regle$+"La prise des pièces adverse est obligatoire et s’effectue aussi bien en avant qu’en arrière."+rc$
regle$=regle$+"Lorsqu’un pion se trouve en présence, diagonalement, d’une pièce adverse derrière laquelle se trouve une case libre, il doit"+rc$
regle$=regle$+"obligatoirement sauter par-dessus cette pièce et occuper la case libre. Cette pièce adverse est alors enlevée du damier."+rc$
regle$=regle$+"Cette opération complète est la prise par un pion."+rc$
regle$=regle$+"Lorsqu’au cours d’une prise par un pion, celui-ci se trouve à nouveau en présence, diagonalement, d’une pièce adverse derrière "+rc$
regle$=regle$+"laquelle se trouve une case libre, il doit obligatoirement sauter par-dessus cette seconde pièce, voire d’une troisième et"+rc$
regle$=regle$+"ainsi de suite, et occuper la case libre se trouvant derrière la dernière pièce capturée. Les pièces adverses ainsi capturées"+rc$
regle$=regle$+"sont ensuite enlevées du damier dans l’ordre de la prise."+rc$
regle$=regle$+"Cette opération complète est une rafle par un pion."+rc$
regle$=regle$+"Lorsqu’au cours d’une prise par une dame, celle-ci se trouve à nouveau en présence, sur une même diagonale, d’une pièce adverse"+rc$
regle$=regle$+"derrière laquelle se trouve une ou plusieurs cases libres, elle doit obligatoirement sauter par-dessus cette seconde pièce, voire"+rc$
regle$=regle$+"d’une troisième et ainsi de suite, et occuper au choix une case libre se trouvant derrière et sur la même diagonale que la dernière"+rc$
regle$=regle$+"pièce capturée. Les pièces adverses ainsi capturées sont ensuite enlevées du damier dans l’ordre de la prise."+rc$
regle$=regle$+"Cette opération complète est une rafle par une dame."+rc$
regle$=regle$+"Au cours d’une rafle, il est interdit de passer au-dessus de ses propres pièces."+rc$
regle$=regle$+"Au cours d’une rafle, il est permis de passer plusieurs fois sur une même case libre mais il est interdit de passer plus d’une fois "+rc$
regle$=regle$+"au-dessus d’une même pièce adverse."+rc$
regle$=regle$+"Une rafle doit être clairement indiquée, pièce par pièce, en posant la pièce preneuse sur la case de saut, le temps d’y passer, et"+rc$
regle$=regle$+"en déposant cette pièce sur la case terminale."+rc$
regle$=regle$+"Les pièces prises ne peuvent être enlevées du damier qu’à l’issue de l’exécution complète de la rafle."+rc$
regle$=regle$+"La prise du plus grand nombre de pièces est prioritaire, donc obligatoire. Dans ce cas, une dame compte pour une pièce, tout comme un pion."+rc$
regle$=regle$+"Elle ne confère nulle priorité et n’impose aucune obligation."+rc$
regle$=regle$+"Si les pièces à prendre sont en nombre égal dans deux ou plusieurs possibilités de prise ou de rafle, le joueur est libre de choisir "+rc$
regle$=regle$+"une de ces possibilités, soit avec un pion, soit avec une dame."+rc$
regle$=regle$+"Un pion qui au cours d’une rafle, ne fait que passer sur une des 5 cases de la rangée de base adverse reste un pion lorsque la rafle est terminée."+rc$

FORM 910: TOP 910,2*Marge_y: LEFT 910,3*Marge_X: WIDTH 910,x_Max-6*Marge_X: HEIGHT 910,y_Max-4*Marge_y: HIDE 910
FONT_SIZE 910,10
LIST 911: PARENT 911,910: WIDTH 911,WIDTH(910)-16: HEIGHT 911,HEIGHT(910)-80
k% = INSTR(regle$, rc$)
WHILE k% > 0
    ITEM_ADD 911, LEFT$(regle$, k%-1): regle$ = MID$(regle$, k%+1, 9000)
    k% = INSTR(regle$, rc$)
END_WHILE
BUTTON 912: PARENT 912,910: TOP 912,HEIGHT(910)-70: LEFT 912,280: CAPTION 912,"OK"
ON_CLICK 912, Fregle

' Creation des compteurs de pions
ALPHA 40 : LEFT 40,3*Marge_X + 11* pas_case : TOP 40,pas_case - 15: WIDTH 40, 40 : FONT_SIZE 40,20
2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_PEN_WIDTH 3 : 2D_CIRCLE 11*pas_case+r%,0.5*pas_case+3+r%,r% -  7
2D_PEN_COLOR CBR - 60,CBV - 60,CBB - 60 : 2D_FILL_COLOR CBR,CBV,CBB : 2D_CIRCLE 11*pas_case+r%,0.5*pas_case+r%,r% -  7
ALPHA 41 : LEFT 41,7*Marge_X + 12* pas_case : TOP 41,pas_case - 15: WIDTH 41, 40 : FONT_SIZE 41,20
2D_PEN_COLOR 20, 20, 20 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_PEN_WIDTH 3 : 2D_CIRCLE 12*pas_case+r%+4*Marge_X,0.5*pas_case+3+r%,r% -  7
2D_PEN_COLOR CNR - 30,CNV - 30,CNB - 30 : 2D_FILL_COLOR CNR,CNV,CNB : 2D_CIRCLE 12*pas_case+r%+4*Marge_X,0.5*pas_case+r%,r% -  7

Relance:
' INITIALISATION DES PIONS SUR LE DAMIER
' PIONS DE L'AI
case% = 0
FOR j% = 0 TO 3
  FOR k% = 0 TO 9
    IF case% = 0 THEN case% = 1 : ELSE : damier%(j%,k%)= 2 : case% = 0
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%
' CASES VIDES
FOR j% = 4 TO 5
  FOR k% = 0 TO 9
    damier%(j%,k%)= 0
  NEXT k%
NEXT j%
' PIONS DU JOUEUR
case% = 0
FOR j% = 6 TO 9
  FOR k% = 0 TO 9
    IF case% = 0 THEN case% = 1 : ELSE : damier%(j%,k%)= 1 : case% = 0
  NEXT k%
  IF case%=0 THEN case%=1 : ELSE : case%=0
NEXT j%

Nb_Noirs = 20 : Nb_blancs = 20 :CAPTION 40,Nb_blancs : CAPTION 41,Nb_noirs

tour=0 : ' Les blancs commencent
2D_TARGET_IS 0 : 2D_PEN_COLOR 30,100,30 : 2D_FILL_COLOR 60,150,60 : 2D_CIRCLE 10*pas_case+r%+Marge_X,0.5*pas_case+r%,7
' Représentation du Damier

GOSUB Dessine_Damier
ON_CLICK 2, Clic_Damier

END


Dernière édition par Jicehel le Mer 23 Mai 2012 - 7:20, édité 1 fois
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMar 22 Mai 2012 - 7:15

On s'approche du but cheers

Une suggestion: pourrais-tu intégrer 2 voyants (noir et blanc) qui serait entourée de rouge (comme sur la piste) pour indiquer quel joueur a la main.

Bon courage.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMar 22 Mai 2012 - 7:26

Woui, c'est prévu en effet.
Je prévoyais de finir les déplacements avant, mais sinon, je voudrais avoir les scores de pions noirs et de pions blancs avec un indicateurs devant pour dire à qui c'est de jouer.
En dessous, je mettrais une zone de texte pour dire ce qui se passe, par exemple que le joueur doit prendre et plus tard, des petits messages quand l'ordi ou le joueur fait une rafle ou a une dame...
Mais tu as raisons, les score et l'indicateur de tour devrait aller vite à coder, je m'en occuperais ce soir Wink
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMar 22 Mai 2012 - 7:36

Bonjour Jicehel, Smile
Pas mal du tout pour le moment. C'est jouable!
Il faut aussi que tu penses à coder l'éventualité où tous les pions sont bloqués et ne peuvent plus bouger! Ça arrive de bloquer une partie à cause de cela.
A+ Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMar 22 Mai 2012 - 8:30

Woui, je n'ai pas encore codé les conditions de victoires ou de nuls pour le moment ... Wink Ca viendra, mais bon pas tout de suite ... mais il faudra en effet que je code les différents cas (ou du moins les plus courants et l'abandon)
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMer 23 Mai 2012 - 7:23

J'ai modifié le code du code source d'hier pour ajouter l'affichage du tour et du nombre de pièces. J'ai voulu programmé un peu hier soir, mais je me suis endormi ... j'avais mon idée pour faire le teste de rafle pour les dames, mais ce sera sans doute pour ce soir .... Wink
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMer 23 Mai 2012 - 8:08

Pour le moment, çà marche bien.

Pour le comptage, crois-tu qu'il serait bon de compter séparément les pions et les dames Question

Mais avant tout repose toi un peu Sleep , on n'est pas payé au rendement Very Happy

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMer 23 Mai 2012 - 10:18

Pour le moment Jean-Claude, ce n'est pas prévu (le comptage va également me servir pour la fin de partie)
Là, si je joue un peu moins ce soir, je vais programmer le test pour savoir si on peut jouer et si on doit prendre (c'est simple à coder)
La nouvelle partie est codée aussi pour le moment en passant par Fichier - abandon
Pour plus tard
Après, je mettrais les conditions de victoire simples => impossible de jouer, pion=0, abandon du joueur
Après je rajouterais un menu avec un ou deux joueurs
Pour faire jouer l'ordi, je passerais par des listes virtuelles et un damier virtuel pour calculer là où l'on doit prendre le plus (ça servira aussi pour calculer le pion qu'il est autorisé de jouer).
Pour faire simple, si l'on ne doit pas prendre, je ferais une liste de là où l'on peut jouer un pion et un tirage aléatoire du pion à jouer dedans après évaluation sur un coup du nombre de pion pris avant déplacement, du nombre après déplacement et si après déplacement on peut prendre. C'est cette partie qui sera à améliorer plus tard, mais ça je verrais si je me lance dedans, ce n'est pas sûr pour le moment.
Idées que je pense faire par contre: Une variable texte qui reprenne l'historique des coups permettant de rejouer la partie coup par coup et la possibilité de reprendre ou de revenir en arrière par le menu et de sauvegarder une partie avec son historique (donc aussi la possibilité de la charger).
L'idée aussi serait d'avoir des parties (scénarios), donc un éditeur de parties où l'on peut déplacer les pions et les changer de nature (pion <-> dames) et choisir le tour de jeu.

Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames EmptyMer 23 Mai 2012 - 12:37

Salut Jicehel.

Bravo. C’est super.
Bonne continuation !
study
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Jeu de dames Empty
MessageSujet: Re: Jeu de dames   Jeu de dames Empty

Revenir en haut Aller en bas
 
Jeu de dames
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Le problème des 8 dames
» Le source d'un jeu de dames internationnales si ça interesse
»  Le problème des huit dames
» Les dames françaises - la table d'exercices

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les jeux faits avec Panoramic-
Sauter vers: