IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Jeu de dame problème


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Jeu de dame problème
    Bonjour, j'ai déjà fait un topic mais je me suis rendu compte que je m'étais tromper de forum, je m'en excuse.
    J'ai un projet d'informatique, celui-ci a pour but de créer un jeu de dame en C#. Pour vous dire où j'en suis, j'ai crée 100 labels que j'ai renommé (L1C1 pour Ligne1 Colonne1) je l'ai ai assemblés pour former un damier(10 lignes/10 colonnes). J'ai mis des images de pion noir/blanc dans mes labels (pas tous, je l'ai ai organisé comme sur un vrai damier).
    Mon professeur m'a expliqué qu'il ne fallait pas créer un déplacement mais faire croire à l'illusion d'un déplacement... Ce que j'ai fait, c'est que j'ai mis des pions noir / blanc partout sur le damier (donc en plus que ce de base) sauf que je leur ai mis la propriété Visible : false, afin qu'il soit invisible. Il faut que lorsque l'utilisateur clique sur un pion et souhaite aller sur la case en diagonale, si la case est vide alors le pion disparaît et le pion (invisible) apparaît sur la case choisi.
    J'aimerai savoir comment créer cette illusion ?
    Mon professeur m'a dit qu'il fallait créer un tableau à 2 dimensions dans lequel je remplierai mes cases des pions visibles, et les cases vides. Donc j'ai créer un tableau via le code : string[,] array = newstring[10,10]. J'ajouterai le code pour que vous puissiez voir. Mais là je suis bloqué, je ne sais pas quoi faire...
    J'ai mon tableau, j'ai rempli les cases mais je n'arrive pas à faire le déplacement en diagonale...
    Pourriez-vous m'éclairer sur ce déplacement s'il vous plaît.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace Jeu_de_dames
    {
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
                string[,] array = new string[10, 10];
                array[0, 2] = "V";
                array[0, 4] = "V";
                array[0, 6] = "V";
                array[0, 8] = "V";
                array[0, 9] = "V";
                array[1, 1] = "V";
                array[1, 3] = "V";
                array[1, 5] = "V";
                array[1, 7] = "V";
                array[1, 9] = "V";
                array[2, 0] = "V";
                array[2, 2] = "V";
                array[2, 4] = "V";
                array[2, 6] = "V";
                array[2, 8] = "V";
                array[3, 1] = "V";
                array[3, 3] = "V";
                array[3, 5] = "V";
                array[3, 7] = "V";
                array[3, 9] = "V";
                array[4, 0] = "V";
                array[4, 2] = "V";
                array[4, 4] = "V";
                array[4, 6] = "V";
                array[4, 8] = "V";
                array[5, 1] = "V";
                array[5, 3] = "V";
                array[5, 5] = "V";
                array[5, 7] = "V";
                array[5, 9] = "V";
                array[6, 0] = "V";
                array[6, 2] = "V";
                array[6, 4] = "V";
                array[6, 6] = "V";
                array[6, 8] = "V";
                array[7, 1] = "V";
                array[7, 3] = "V";
                array[7, 5] = "V";
                array[7, 7] = "V";
                array[7, 9] = "V";
                array[8, 0] = "V";
                array[8, 2] = "V";
                array[8, 4] = "V";
                array[8, 6] = "V";
                array[8, 8] = "V";
                array[9, 1] = "V";
                array[9, 3] = "V";
                array[9, 5] = "V";
                array[9, 7] = "V";
                array[9, 9] = "V";
                array[9, 1] = "V";
                array[0, 1] = "N";
                array[0, 3] = "N";
                array[0, 5] = "N";
                array[0, 7] = "N";
                array[0, 9] = "N";
                array[1, 0] = "N";
                array[1, 2] = "N";
                array[1, 4] = "N";
                array[1, 6] = "N";
                array[1, 8] = "N";
                array[2, 0] = "N";
                array[2, 2] = "N";
                array[2, 4] = "N";
                array[2, 6] = "N";
                array[2, 8] = "N";
                array[3, 0] = "N";
                array[3, 2] = "N";
                array[3, 4] = "N";
                array[3, 6] = "N";
                array[3, 8] = "N";
                array[6, 1] = "B";
                array[6, 3] = "B";
                array[6, 5] = "B";
                array[6, 7] = "B";
                array[6, 9] = "B";
                array[7, 0] = "B";
                array[7, 2] = "B";
                array[7, 4] = "B";
                array[7, 6] = "B";
                array[7, 8] = "B";
                array[8, 1] = "B";
                array[8, 3] = "B";
                array[8, 5] = "B";
                array[8, 7] = "B";
                array[8, 9] = "B";
                array[9, 0] = "B";
                array[9, 2] = "B";
                array[9, 4] = "B";
                array[9, 6] = "B";
                array[9, 8] = "B";
     
     
            }
        }
    }

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 641
    Points : 2 154
    Points
    2 154
    Par défaut
    Bonjour,

    le tableau a 2 dimensions sert uniquement a voir si le prochain coup du joueur sera valable ou non. Et enlever les pions en conséquence.

    Du coup, il faudrait faire quelque chose comme :

    - Premier click sur un pion => mettre a jour un booléen qui signale qu'un pion a été sélectionné.
    - Mémoriser le pion qui a été selectionné
    - Deuxieme click => a partir de ton tableau, tu vérifies si le mouvement est possible et correcte, puis tu switch la visibilité des 2 labels ou les 2 clicks ont eu lieu.
    - Remettre a 0 le booléen car le coup a été traité.

    etc ...

    Il y a plein de façons de faire. Par contre je te conseille de bien découper ton jeu de dames, histoire de pas te perdre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je me suis très mal expliqué, voici la question compréhensible

    Comment fait t-on pour que lorsqu'on que l'on clique sur un label puis sur un autre, le premier label devient invisible et celui visé devient visible ?

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Observation 1:si tu veux utiliser ton tableau de string ,il faut utiliser un class Sprite(class qui dessine un bitmap)au lieu des Label...chose complique pour un debutant ...et les clics ont lieu sur un Panel ou un PictureBox...

    Observation 2:si on utilise des Labels on peut se passer du tableau .Les clicks ont lieu sur les labels et non le Panel ..
    On teste alors la position diagonale ciblee est :
    - case vide ou inoccupee dans le panel(pas de Label) ,si oui on deplace le PION vers cette position..
    - case occupe par un Label adversaire ,on le supprime(PRISE) ..on deplace le PION vers cette position.. .



    Il faut d'abord
    1/ Dessiner le Background du jeu correctement (il y a des erreurs au vu de ton tableau de strings)..c'est un carroyage simplement...mais qui evite beaucoup d'erreurs ...

    1/ Positionner correctement les LABELS PION-ROUGES & PION-NOIRS sur ce background & là ou il y a réellement des PIONS ..Pas de labels invisibles et autre mauvaise innovation...

    2/ Ensuite distinguer le mvt des NOIRS de celui des ROUGES:
    Avec Les NOIRS en Haut et les ROUGES en BAS :
    1/ Deplacement DIAGONAL VERS LE BAS(SUD) des NOIRS :
    -vers une case VIDE ...il suffit d'ajuster la position du Label NOIR Clique(une case VIDE <=>il n'y a pas de label)...
    -vers une case ou il y a un Label ROUGE => PRISE : le Label ROUGE est supprime...et le NOIR est positionne à sa place...
    2/ Deplacement DIAGONAL VERS LE HAUT(NORD) des ROUGES :
    - idem...ou vice-versa...

    La gestion des Déplacements se fait par du DragDrop (mousedown,mousemove ,mouseup)...
    Une autre complication s'introduit c'est qu'on ne peut pas tester les positions relatives des Labels poses sur un Panel ...
    Ceci necessite d'introduire 4 labels SENTINELLES(qui simule le mvt possible):
    - SUDEST ET SUDOUEST pour le mvt SUD
    - NORDEST et NOROUEST pour le mvt NORD
    - ces SENTINELLES sont normalement "cachees" et n'apparaissent que lors du debut mousedown
    (dans l'exemple qui suit je leur ai donne les coordonnes point(0,0) mais on devrait leur donner des coordonnees negatives par exemple :-50,-50 pour les cacher)...

    Enfin un list<Rectangle> et un list<color> de couleurs servent à peindre le Background du Panel et positionner un list<de Label> plus souple (au lieu des tableaux ) ...
    Les labels des PIONS ont une taille fixe (64 pixels) qu'on peut regler ...
    Dans leurs champ Tag on memorise le type de label (NOIR ou ROUGE) grace à un enum...
    Les pions sont positionnes sur un Panel avec taille ajuste (10x64,10*64)....
    Le code .vb du form avec

    Bref si tu veux utiliser des labels voici le code(un form,un button et un panel) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinSimpleJeuDames
    {
        //des enums utiles
        public enum CouleurCase
        {
            Marron, Wheat
        }
        public enum PionType
        {
            NOIR, ROUGE
        }
     
        public partial class Form1 : Form
        {
            //variables generales
            private const int coteCase = 64;
            private const int nbLig= 10;
            private const int nbCol = 10;
            //variables pion
            private List<Label> labelCaseList;
            private Label pionNoir, pionRouge;
     
            //variables dessin du background
            private List<Rectangle> caseList ;
            private List<CouleurCase> couleurCaseList;
     
            //variables sentinelles
     
            private Label sentinelSudEst,  sentinelSudOuest ;
            private Label sentinelNordEst, sentinelNordOuest;
            private List<Label> sentinelList = new List<Label>();
            public Form1()
            {
                InitializeComponent();
                this.ResizeRedraw = true;
                this.DoubleBuffered = true;
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
     
                DrawBackground();
                AddLabels();
     
            }
     
     
            private void DrawBackground()
            {
                this.caseList = new List<Rectangle>();
                this.couleurCaseList = new List<CouleurCase>();
                int x, y;
     
                for (int ligne = 0; ligne < nbLig; ligne++)
                {
                    for (int colonne = 0; colonne < nbCol; colonne++)
                    {
                        CouleurCase color;
     
                        if (ligne % 2 == 1) //ligne impaire
                        {
                            if (colonne % 2 == 0) color = CouleurCase.Wheat;//colonne paire
                            else color = CouleurCase.Marron;
     
                            x = colonne * coteCase;
                            y = ligne * coteCase;
                            Rectangle rect = new Rectangle(x, y, coteCase, coteCase);
                            this.caseList.Add(rect);
                            this.couleurCaseList.Add(color);
                        }
                        else //ligne paire
                        {
                            if (colonne % 2 == 0) color = CouleurCase.Marron; //colonne paire
                            else color = CouleurCase.Wheat;
     
                            x = colonne * coteCase;
                            y = ligne * coteCase;
                            Rectangle rect = new Rectangle(x, y, coteCase, coteCase);
                            this.caseList.Add(rect);
                            this.couleurCaseList.Add(color);
                        }
     
     
                    }
                }
                this.panel1.Size = new Size(nbLig * coteCase, nbCol * coteCase);
                this.panel1.Location = new Point(50, 50);
                this.panel1.Dock = DockStyle.None;
                this.panel1.AutoSize = true;
                this.panel1.Invalidate();
            }
            private void AddLabels()
            {
                panel1.Controls.Clear();
     
                //AJOUT 2 SENTINELLES
                InitializeSentielles();
     
     
                this.labelCaseList = new List<Label>();
                for (int i = 0; i < couleurCaseList.Count; i++)
                {
                    if (i < 40)
                    {
                        if (couleurCaseList[i] == CouleurCase.Marron)
                        {
                            pionNoir = new Label();
                            pionNoir.AutoSize = false;
                            pionNoir.Size = caseList[i].Size;
                            pionNoir.Text = "NOIR";
                            pionNoir.ForeColor = Color.White; 
                            pionNoir.Tag = PionType.NOIR;
                            pionNoir.BackColor = Color.Black;
                            pionNoir.Location = caseList[i].Location;
                            this.labelCaseList.Add(pionNoir);
                        }
                    }
                    if (i > 59)
                    {
                        if (couleurCaseList[i] == CouleurCase.Marron)
                        {
                            pionRouge = new Label();
                            pionRouge.Text = "ROUGE";
                            pionRouge.ForeColor = Color.White;
                            pionRouge.AutoSize = false;
                            pionRouge.Size = caseList[i].Size;
                            pionRouge.Tag = PionType.ROUGE;
                            pionRouge.BackColor = Color.Red;
                            pionRouge.Location = caseList[i].Location;
                            this.labelCaseList.Add(pionRouge);
                        }
                    }
                }
     
                panel1.Controls.AddRange(this.labelCaseList.ToArray());
                foreach (Label item in this.labelCaseList)
                {
                    item.MouseEnter += new EventHandler(item_MouseEnter);
                    item.MouseLeave += new EventHandler(item_MouseLeave);
     
                    item.MouseDown += new MouseEventHandler(item_MouseDown);
                    item.MouseMove += new MouseEventHandler(item_MouseMove);
                    item.MouseUp += new MouseEventHandler(item_MouseUp);
                }
            }
            // Partie :4 LABELS SENTIELLES
            private void InitializeSentielles()
            {
                sentinelList = new List<Label>();
     
                sentinelSudEst = new Label();
                sentinelSudEst.Text = "SudEst";
                sentinelSudEst.BackColor = Color.FromArgb(50, Color.Violet );
                sentinelSudEst.Size = new Size(coteCase, coteCase);
                sentinelSudEst.Location = new Point();
     
                sentinelSudOuest = new Label();
                sentinelSudOuest.Text = "SudOuest";
                sentinelSudOuest.BackColor = Color.FromArgb(10, Color.Yellow);
                sentinelSudOuest.Size = new Size(coteCase, coteCase);
                sentinelSudOuest.Location = new Point();
     
                sentinelNordEst = new Label();
                sentinelNordEst.Text = "NordEst";
                sentinelNordEst.BackColor = Color.FromArgb(10, Color.Yellow);
                sentinelNordEst.Size = new Size(coteCase, coteCase);
                sentinelNordEst.Location = new Point();
     
                sentinelNordOuest = new Label();
                sentinelNordOuest.Text = "NordOuest";
                sentinelNordOuest.BackColor = Color.FromArgb(10, Color.Yellow);
                sentinelNordOuest.Size = new Size(coteCase, coteCase);
                sentinelNordOuest.Location = new Point();
     
     
                sentinelList.Add(sentinelSudEst);
                sentinelList.Add(sentinelSudOuest);
                sentinelList.Add(sentinelNordEst);
                sentinelList.Add(sentinelNordOuest);
     
     
                this.panel1.Controls.AddRange(sentinelList.ToArray());
     
     
            }
     
     
     
     
            // Partie :SURVOL
            private Color oldColor;
            void item_MouseLeave(object sender, EventArgs e)
            {
                Label lbl = sender as Label;
                lbl.BackColor = oldColor;
     
            }
     
            void item_MouseEnter(object sender, EventArgs e)
            {
                Label lbl = sender as Label;
                oldColor = lbl.BackColor;
                lbl.BackColor = Color.FromArgb(150, oldColor);
     
     
            }
     
     
     
     
     
     
           // Partie : PEINTURE
            private SolidBrush carreBrush = new SolidBrush(Color.Transparent);
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
                Graphics gr = e.Graphics;
                gr.Clear(Color.White);
                if (caseList == null) return;
                foreach (Rectangle item in caseList)
                {
                    int index = caseList.IndexOf(item);
                    if (couleurCaseList[index] == CouleurCase.Marron)
                    {
                        carreBrush = new SolidBrush(Color.Maroon);
                        gr.FillRectangle(carreBrush, item);
                        gr.DrawRectangle(new Pen(Color.Black, 2.0f), item);
                    }
                    else
                    { 
                        carreBrush = new SolidBrush(Color.Wheat );
                        gr.FillRectangle(carreBrush, item);
                        gr.DrawRectangle(new Pen(Color.Black, 2.0f), item);
                    }
     
                }
            }
     
            private void Form1_SizeChanged(object sender, EventArgs e)
            {
                DrawBackground();
                AddLabels();
     
            }
            private Point[]  positions =new Point [2] ;
            private bool  IsDragging ;
            private  Point ptDown  = Point.Empty;
            private Label  draggedLabel = null;
            private void item_MouseDown(object sender, MouseEventArgs e)
            {
                draggedLabel = sender as Label;
                draggedLabel.BringToFront();
                if (e.Button == MouseButtons.Left)
                {
     
                    IsDragging = true;
                    ptDown = e.Location;
     
                    positions[0] = draggedLabel.Location;
                    PionType tp = (PionType)draggedLabel.Tag;
                    if (tp == PionType.NOIR)
                    {
                        sentinelSudEst.Left = draggedLabel.Left + coteCase;
                        sentinelSudEst.Top = draggedLabel.Top + coteCase;
     
                        sentinelSudOuest.Left = draggedLabel.Left - coteCase;
                        sentinelSudOuest .Top = draggedLabel.Top + coteCase;
                    }
                    else if (tp == PionType.ROUGE)
                    {
                        sentinelNordOuest.Left = draggedLabel.Left - coteCase;
                        sentinelNordOuest.Top = draggedLabel.Top - coteCase;
                        sentinelNordEst.Left = draggedLabel.Left + coteCase;
                        sentinelNordEst.Top = draggedLabel.Top - coteCase;
     
     
                    }
     
     
                }
            }
            private void item_MouseMove(object sender, MouseEventArgs e)
            {
                draggedLabel = sender as Label;
                if (IsDragging && e.Button == MouseButtons.Left)
                {
                    draggedLabel.Left += e.Location.X - ptDown.X;
                    draggedLabel.Top += e.Location.Y - ptDown.Y;
     
     
                }
            }
     
            private void item_MouseUp(object sender, MouseEventArgs e)
            {
                draggedLabel = sender as Label;
     
                if (IsDragging && e.Button == MouseButtons.Left)
                {
                    if (draggedLabel.Bounds.IntersectsWith(sentinelSudEst.Bounds) &&
                          (sentinelSudEst.Location.X <= coteCase * 10) &&  
                          (sentinelSudEst.Location.Y <= coteCase * 10)) //limites SUD-EST
                    {
     
                        SwapPions(sentinelSudEst);
                    }
                    else if (draggedLabel.Bounds.IntersectsWith(sentinelSudOuest.Bounds) &&
                      (sentinelSudOuest.Location.X >= 0) &&
                      (sentinelSudEst.Location.Y <= coteCase * 10)) //limites SUD-OUEST
                    {
     
                        SwapPions(sentinelSudOuest);
                    }
                    else if (draggedLabel.Bounds.IntersectsWith(sentinelNordEst.Bounds) &&
                      (sentinelNordEst.Location.X <= coteCase * 10) &&
                      (sentinelNordEst.Location.Y >= 0)) //limites NordEst
                    {
     
                        SwapPions(sentinelNordEst);
                    }
                    else if (draggedLabel.Bounds.IntersectsWith(sentinelNordOuest.Bounds) &&
                    (sentinelNordOuest.Location.X >= 0) &&
                    (sentinelNordEst.Location.Y >= 0)) //limites NordOuest
                    {
     
                        SwapPions(sentinelNordOuest);
                    }
                    else
                    {
                        draggedLabel.Location = positions[0];
                    }
     
                    sentinelSudEst.Location = Point.Empty;
                    sentinelSudOuest.Location = Point.Empty;
                    sentinelNordEst.Location = Point.Empty;
                    sentinelNordOuest.Location = Point.Empty;
     
                    draggedLabel = null;
                    ptDown = Point.Empty;
                    positions[0] = Point.Empty;
                    positions[1] = Point.Empty;
     
                    IsDragging = false;
                }
     
     
            }
           //echange des pions (prise ) ou deplacement 
           private void SwapPions( Label  ctrl )
           {
                positions[1] = ctrl.Location;
                Label item = this.labelCaseList.Find( p => p.Location == ctrl.Location);
     
               if ( item != null  )
                { 
                    PionType tp=(PionType )item.Tag;
                    if (tp == PionType.ROUGE) // prise rouge
                    {
                        RemoveItem(item);
                        draggedLabel.Location = positions[1];
                    }
                    else if (tp == PionType.NOIR) //prise noir
                    {
                        RemoveItem(item);
                        draggedLabel.Location = positions[1];
                    }
                    else
                    {
                        draggedLabel.Location = positions[0];
                    }
     
                } 
                else 
                {
                    draggedLabel.Location = positions[1];
                }
     
            }
            //suppression de l'adversaire
           private void RemoveItem(Label item)
           { 
             this.labelCaseList.Remove(item);
             this.panel1.Controls.Remove(item );
           }
     
        }
    }
    Cette methode des sentinelles peut etre utilisee meme avec des sprites et evite la manip des index de tableaux....Elle est utilisable par exemple dans tout jeu de positionnement(puzzle,match three etc...)...
    bon code...

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ok je pense avoir compris, je te remercie de ta réponse

    EDIT : Je n'arrive pas à faire mon quadrillage , sur internet il parle de "Jpanel" , je n'arrive pas à utiliser la commande g.Drawline, j’obtiens toujours les mêmes lignes à savoir les diagonales+le contour.

    EDIT 2 : J'ai réussi à faire quelque chose, j'ai pris un panel que j'ai agrandi à la taille de mon Form à savoir 800;780 et à l'intérieur j'ai dessiné des carrés que j'ai positionné par rapport aux X / Y. J'obtiens un damier , c'est bon ? ( les carrés font 72;72 )

    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
                 private void Grille_Paint(object sender, PaintEventArgs e)
            {
                Graphics gObject = Grille.CreateGraphics();
     
                Brush white = new SolidBrush(Color.White);
                Pen whitePen = new Pen(white,8);
                Brush chocolate = new SolidBrush(Color.Chocolate);
                Pen chocolatePen = new Pen(chocolate, 8);
     
                //gObject.DrawLine(redPen, 10, 10, 400, 376);
     
                //première ligne
                gObject.FillRectangle(chocolate, 0, 0, 72, 72);
                gObject.FillRectangle(white, 72, 0, 72, 72);
                gObject.FillRectangle(chocolate, 144, 0, 72, 72);
                gObject.FillRectangle(white, 216, 0, 72, 72);
                gObject.FillRectangle(chocolate, 288, 0, 72, 72);
                gObject.FillRectangle(white, 360, 0, 72, 72);
                gObject.FillRectangle(chocolate, 432, 0, 72, 72);
                gObject.FillRectangle(white, 504, 0, 72, 72);
                gObject.FillRectangle(chocolate, 576, 0, 72, 72);
                gObject.FillRectangle(white, 648, 0, 72, 72);
                //deuxième ligne
                gObject.FillRectangle(white, 0, 72, 72, 72);
                gObject.FillRectangle(chocolate, 72, 72, 72, 72);
                gObject.FillRectangle(white, 144, 72, 72, 72);
                gObject.FillRectangle(chocolate, 216, 72, 72, 72);
                gObject.FillRectangle(white, 288, 72, 72, 72);
                gObject.FillRectangle(chocolate, 360, 72, 72, 72);
                gObject.FillRectangle(white, 432, 72, 72, 72);
                gObject.FillRectangle(chocolate, 504, 72, 72, 72);
                gObject.FillRectangle(white, 576, 72, 72, 72);
                gObject.FillRectangle(chocolate, 648, 72, 72, 72);
                //troisième ligne
                gObject.FillRectangle(chocolate, 0, 144, 72, 72);
                gObject.FillRectangle(white, 72, 144, 72, 72);
                gObject.FillRectangle(chocolate, 144, 144, 72, 72);
                gObject.FillRectangle(white, 216, 144, 72, 72);
                gObject.FillRectangle(chocolate, 288, 144, 72, 72);
                gObject.FillRectangle(white, 360, 144, 72, 72);
                gObject.FillRectangle(chocolate, 432, 144, 72, 72);
                gObject.FillRectangle(white, 504, 144, 72, 72);
                gObject.FillRectangle(chocolate, 576, 144, 72, 72);
                gObject.FillRectangle(white, 648, 144, 72, 72);
                //quatrième ligne
                gObject.FillRectangle(white, 0, 216, 72, 72);
                gObject.FillRectangle(chocolate, 72, 216, 72, 72);
                gObject.FillRectangle(white, 144, 216, 72, 72);
                gObject.FillRectangle(chocolate, 216, 216, 72, 72);
                gObject.FillRectangle(white, 288, 216, 72, 72);
                gObject.FillRectangle(chocolate, 360, 216, 72, 72);
                gObject.FillRectangle(white, 432, 216, 72, 72);
                gObject.FillRectangle(chocolate, 504, 216, 72, 72);
                gObject.FillRectangle(white, 576, 216, 72, 72);
                gObject.FillRectangle(chocolate, 648, 216, 72, 72);
                //cinquième ligne
                gObject.FillRectangle(chocolate, 0, 288, 72, 72);
                gObject.FillRectangle(white, 72, 288, 72, 72);
                gObject.FillRectangle(chocolate, 144, 288, 72, 72);
                gObject.FillRectangle(white, 216, 288, 72, 72);
                gObject.FillRectangle(chocolate, 288, 288, 72, 72);
                gObject.FillRectangle(white, 360, 288, 72, 72);
                gObject.FillRectangle(chocolate, 432, 288, 72, 72);
                gObject.FillRectangle(white, 504, 288, 72, 72);
                gObject.FillRectangle(chocolate, 576, 288, 72, 72);
                gObject.FillRectangle(white, 648, 288, 72, 72);
                //sixième ligne
                gObject.FillRectangle(white, 0, 360, 72, 72);
                gObject.FillRectangle(chocolate, 72, 360, 72, 72);
                gObject.FillRectangle(white, 144, 360, 72, 72);
                gObject.FillRectangle(chocolate, 216, 360, 72, 72);
                gObject.FillRectangle(white, 288, 360, 72, 72);
                gObject.FillRectangle(chocolate, 360, 360, 72, 72);
                gObject.FillRectangle(white, 432, 360, 72, 72);
                gObject.FillRectangle(chocolate, 504, 360, 72, 72);
                gObject.FillRectangle(white, 576, 360, 72, 72);
                gObject.FillRectangle(chocolate, 648, 360, 72, 72);
                //septième ligne
                gObject.FillRectangle(chocolate, 0, 432, 72, 72);
                gObject.FillRectangle(white, 72, 432, 72, 72);
                gObject.FillRectangle(chocolate, 144, 432, 72, 72);
                gObject.FillRectangle(white, 216, 432, 72, 72);
                gObject.FillRectangle(chocolate, 288, 432, 72, 72);
                gObject.FillRectangle(white, 360, 432, 72, 72);
                gObject.FillRectangle(chocolate, 432, 432, 72, 72);
                gObject.FillRectangle(white, 504, 432, 72, 72);
                gObject.FillRectangle(chocolate, 576, 432, 72, 72);
                gObject.FillRectangle(white, 648, 432, 72, 72);
                //huitième ligne
                gObject.FillRectangle(white, 0, 504, 72, 72);
                gObject.FillRectangle(chocolate, 72, 504, 72, 72);
                gObject.FillRectangle(white, 144, 504, 72, 72);
                gObject.FillRectangle(chocolate, 216, 504, 72, 72);
                gObject.FillRectangle(white, 288, 504, 72, 72);
                gObject.FillRectangle(chocolate, 360, 504, 72, 72);
                gObject.FillRectangle(white, 432, 504, 72, 72);
                gObject.FillRectangle(chocolate, 504, 504, 72, 72);
                gObject.FillRectangle(white, 576, 504, 72, 72);
                gObject.FillRectangle(chocolate, 648, 504, 72, 72);
                //neuvième ligne
                gObject.FillRectangle(chocolate, 0, 576, 72, 72);
                gObject.FillRectangle(white, 72, 576, 72, 72);
                gObject.FillRectangle(chocolate, 144, 576, 72, 72);
                gObject.FillRectangle(white, 216, 576, 72, 72);
                gObject.FillRectangle(chocolate, 288, 576, 72, 72);
                gObject.FillRectangle(white, 360, 576, 72, 72);
                gObject.FillRectangle(chocolate, 432, 576, 72, 72);
                gObject.FillRectangle(white, 504, 576, 72, 72);
                gObject.FillRectangle(chocolate, 576, 576, 72, 72);
                gObject.FillRectangle(white, 648, 576, 72, 72);
                //dixième ligne
                gObject.FillRectangle(white, 0, 648, 72, 72);
                gObject.FillRectangle(chocolate, 72, 648, 72, 72);
                gObject.FillRectangle(white, 144, 648, 72, 72);
                gObject.FillRectangle(chocolate, 216, 648, 72, 72);
                gObject.FillRectangle(white, 288, 648, 72, 72);
                gObject.FillRectangle(chocolate, 360, 648, 72, 72);
                gObject.FillRectangle(white, 432, 648, 72, 72);
                gObject.FillRectangle(chocolate, 504, 648, 72, 72);
                gObject.FillRectangle(white, 576, 648, 72, 72);
                gObject.FillRectangle(chocolate, 648, 648, 72, 72);
    EDIT 3 : J'avance petit à petit, j'ai placé mes pions comme tu me la dis ( c'est à dire les avec lesquels le joueur va jouer ). Il y a cependant des morceaux de ton code que je ne comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    //AJOUT 2 SENTINELLES
                InitializeSentielles();
     
     
                this.labelCaseList = new List<Label>();
                for (int i = 0; i < couleurCaseList.Count; i++)
                {
                    if (i < 40)
                    {
                        if (couleurCaseList[i] == CouleurCase.Marron)
                        {
                            pionNoir = new Label();
                            pionNoir.AutoSize = false;
                            pionNoir.Size = caseList[i].Size;
                            pionNoir.Text = "NOIR";
                            pionNoir.ForeColor = Color.White; 
                            pionNoir.Tag = PionType.NOIR;
                            pionNoir.BackColor = Color.Black;
                            pionNoir.Location = caseList[i].Location;
                            this.labelCaseList.Add(pionNoir);
                        }
                    }
                    if (i > 59)
                    {
                        if (couleurCaseList[i] == CouleurCase.Marron)
                        {
                            pionRouge = new Label();
                            pionRouge.Text = "ROUGE";
                            pionRouge.ForeColor = Color.White;
                            pionRouge.AutoSize = false;
                            pionRouge.Size = caseList[i].Size;
                            pionRouge.Tag = PionType.ROUGE;
                            pionRouge.BackColor = Color.Red;
                            pionRouge.Location = caseList[i].Location;
                            this.labelCaseList.Add(pionRouge);
                        }
                    }
                }
    Pourquoi i < 40 et i > 59 , je comprend pas pourquoi ces nombres ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
      // Partie :SURVOL
            private Color oldColor;
            void item_MouseLeave(object sender, EventArgs e)
            {
                Label lbl = sender as Label;
                lbl.BackColor = oldColor;
     
            }
     
            void item_MouseEnter(object sender, EventArgs e)
            {
                Label lbl = sender as Label;
                oldColor = lbl.BackColor;
                lbl.BackColor = Color.FromArgb(150, oldColor);
     
     
            }
    Sa je comprend pas à quoi sa sert
    Et le reste je comprend un peu mais j'arriverai à déchiffrer je pense, quelqu'un peut m'éclairer sur ces morceaux de code s'il vous plaît.

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Pour le class graphics il faut retenir cette regle vitale de base dans son emploi2 :

    1/Hors de l'evenement Control_Paint() ,n'importe ou, acceder au class Graphics via Control.CreateGraphics() et le Disposer apres usage:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinSimpleJeuDames
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }
            //hors de l'evenemnt 
            private void button1_Click(object sender, EventArgs e)
            {
                Graphics g = this.CreateGraphics();
                //dessiner
                Rectangle rect = new Rectangle(100, 100, 200, 150);
     
                Pen p = new Pen(Color.Black, 2.0f);
                SolidBrush br = new SolidBrush(Color.Blue);
                g.FillRectangle(br, rect); //fill d'abord
                g.DrawRectangle(p, rect);  // le trait apres
     
                // disposer .tres important
                // outils crayon et pinceau
                p.Dispose();
                br.Dispose();
                // le graphics
                g.Dispose();
            }
        }
    }
    Dans l'evenement Control_Paint() acceder au class Graphics via l'argument e sans disposer du graphics :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
               Graphics g = e.Graphics;
                //dessiner
                Rectangle rect = new Rectangle(100, 100, 200, 150);
     
                Pen p = new Pen(Color.Black, 2.0f);
                SolidBrush br = new SolidBrush(Color.Blue);
                g.FillRectangle(br, rect); //fill d'abord
                g.DrawRectangle(p, rect);  // le trait apres
     
                // disposer seulement des
                // outils crayon et pinceau
                p.Dispose();
                br.Dispose();
    Pour les resources (crayon et brush ) si on veut les garder constamment disponibles il faut les declarer au niveau du class form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinSimpleJeuDames
    {
        public partial class Form4 : Form
        {
            private  Pen p = new Pen(Color.Black, 2.0f);
            private SolidBrush br = new SolidBrush(Color.Blue);
            public Form4()
            {
                InitializeComponent();
     
            }
     
            private void Form4_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                //dessiner
                Rectangle rect = new Rectangle(100, 100, 200, 150);
     
     
                g.FillRectangle(br, rect); //fill d'abord
                g.DrawRectangle(p, rect);  // le trait apres
     
                // disposer seulement des
                // outils crayon et pinceau
                 //  neant
     
            }
        }
    }
    le damier est bon.......cette fois ...

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ok merci, je vais continuer et tenté de réussir

  8. #8
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Pourquoi <40 ?
    Parce que il y a 5 pions noirs (et 5 cases vides) on a 10 cases par range(ligne) et
    Et comme il y a 4 ranges de pions noirs =>4x10=40 cases...
    Les indices en csharp commencant à 0 on doit s'arreter à 39 qui est <40, la 1ere range du milieu de damier qui doit etre vide commence à 40..

    pourquoi >59?
    on sauté les 2 ranges vides du milieu soit 10 cases par rangee ou 2x10=20 en commencant à 40 ce qui fait QU4on doit s'arreter à 59 qui est <40...
    Si les indices commencaient en csharp à 1 on aurait eu :
    < 41 et > 60....
    bref il faut regarder soigneusement le damier pour comprendre....

    Le survol c'est l'histoire du rectangle de selection ...
    Comme dessiner un rectangle de selection necessite un custom label au dessus de tes connaissances j'ai mis cette methode simple du survol...
    Quand la souris passé au dessus(mouse_enter) du label sa couleur d'origine change (l'ancienne est store dans la variable oldcolor) et quand la souris quitte le label (mous_leave ) la couleur d'origine est restore...

    Si tu utilises 1 control ImageList droppe sur ton form pour storer les 2 images des labels PIONS NOIRS (idem pour les Rouges 1 Control ImageList et 2 images)
    Ensuite il suffit :
    -d'affecter la 1ere image( appelons la ImageNoirNormal) au labels des PIONS NOIRS au lieu d'utiliser la prop Backolor-
    -d'affecter la 2eme image ( appelons la ImageNoirSelectionne) au labels des PIONS NOIRS...Sur cette 2eme Paint est ton ami ,tu ouvres cette image et tu dessine un rectangle de selection et tu l'enregistres...
    Ce travail se fait dans les 2 if INCRIMINES (<40 et >59)...


    code behind .cs avec les modifs a faire si utilises 2 control ImageLists :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
     this.labelCaseList = new List<Label>();
                for (int i = 0; i < couleurCaseList.Count; i++)
                {
                    if (i < 40)
                    {
                        if (couleurCaseList[i] == CouleurCase.Marron)
                        {
                            pionNoir = new Label();
                            pionNoir.AutoSize = false;
                            pionNoir.Size = caseList[i].Size;
                            pionNoir.Text = "NOIR";
                            pionNoir.ForeColor = Color.White; 
                            pionNoir.Tag = PionType.NOIR;
                          //commenter cette ligne
                           //pionNoir.BackColor = Color.Black; 
                            //et la remplacer par cellec-ci
                            pionNoir.Image = imageListNoir.Images[0]; //image etat normal
     
                            pionNoir.Location = caseList[i].Location;
                            this.labelCaseList.Add(pionNoir);
                        }
                    }
                    if (i > 59)
                    {
                        if (couleurCaseList[i] == CouleurCase.Marron)
                        {
                            pionRouge = new Label();
                            pionRouge.Text = "ROUGE";
                            pionRouge.ForeColor = Color.White;
                            pionRouge.AutoSize = false;
                            pionRouge.Size = caseList[i].Size;
                            pionRouge.Tag = PionType.ROUGE;
                            //commenter cette ligne
                            //pionRouge.BackColor = Color.Red;
                            //et la remplacer par cellec-ci
                            pionRouge.Image = imageListRouge.Images[0];//image etat normal
     
     
                            pionRouge.Location = caseList[i].Location;
                            this.labelCaseList.Add(pionRouge);
                        }
                    }
                }
    Et dans les 2 events de survol le code doit etre modifie ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    // Partie :SURVOL
            //private Color oldColor;
            //La souris entre dans le label
            void item_MouseEnter(object sender, EventArgs e)
            {
                Label lbl = sender as Label;
                //commenter ces 2 lignes
                //oldColor = lbl.BackColor;
                //lbl.BackColor = Color.FromArgb(150, oldColor);
                //les remplacer par
                PionType tp = (PionType)lbl.Tag;
                if (tp == PionType.NOIR)
                {
                    lbl.Image = imageListNoir.Images[1]; //on affiche l'image NOIR modifie dans paint(avec un rect de selection) 
                }
                else if (tp == PionType.ROUGE)
                {
                    lbl.Image = imageListRouge.Images[1]; //on affiche l'image NOIR modifie dans paint(avec un rect de selection) 
                }
            }
            //La souris quitte le label
            void item_MouseLeave(object sender, EventArgs e)
            {
     
                Label lbl = sender as Label;
                //commenter cette ligne
                //lbl.BackColor = oldColor;
                //la remplacer par
                PionType tp = (PionType)lbl.Tag;
                if (tp == PionType.NOIR)
                {
                    lbl.Image = imageListNoir.Images[0]; //on affiche l'image NOIR normal 
                }
                else if  (tp == PionType.ROUGE )
                {
                    lbl.Image = imageListRouge.Images[0];//on affiche l'image ROUGE normal 
                 }
     
            }
    bon code...

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Désolé encore moi :s , pourriez-vous m'aider sur un point. J'ai pour tester créer un label dans lequel j'ai chargé mon image pion noir et comme sur le damier je l'ai positionné sur une case orange. J'ai ensuite fait un rectangle orange en diagonale ( comme sur le damier ) et j'aimerai réussir à faire un drag drop de ce label vers la case orange. Je n'y arrive pas, j'ai trouvé un code sur internet que j'ai essayé d'exploiter mais rien ne se passe, vous pouvez m'expliquer s'ill vous plaît ?
    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    private void Form1_Load(object sender, EventArgs e)
            {
                 // Enable drag and drop for this form
                 // (this can also be applied to any controls)
                    this.AllowDrop = true;
     
                // Add event handlers for the drag & drop functionality
                this.DragEnter += new DragEventHandler(Form1_DragEnter);
                this.DragDrop += new DragEventHandler(Form1_DragDrop);
    }
     
                 void Form1_DragDrop(object sender, DragEventArgs e)
                {
                    // Extract the data from the DataObject-Container into a string list
                    string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
     
                    // Do something with the data...
     
                    // For example add all files into a simple label control:
                    foreach (string File in FileList)
                        this.label1.Text += File + "\n";
                }
     
                 void Form1_DragEnter(object sender, DragEventArgs e)
                {
                    // Check if the Dataformat of the data can be accepted
                    // (we only accept file drops from Explorer, etc.)
                    if (e.Data.GetDataPresent(DataFormats.FileDrop))
                        e.Effect = DragDropEffects.Copy; // Okay
                    else
                        e.Effect = DragDropEffects.None; // Unknown data, ignore it
                }

  10. #10
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Tu es mal parti,parce que utliser un code sans le comprendre mene à une impasse certaine...Il faut regarder la Faq du forum qui est pleine de tutos sur ces notions de base....

    Bref le DragDrop necessite :
    1/ Un control source : c'est ton label PION NOIR...
    - dans son event Mouse_Down tu appele sa method DodragDrop()
    - comme on gere ses 2 points de chute "autorises" ,cette fois ce sont 2 bons rectangles "sentinelles" rectSudEst et rectSudOuest au lieu de 2 labels sentinelles qu'il faut initializer dans cet event...
    - il faut identifier le label en plus PION NOIR dans son champ Tag,comme dit dans les codes deja donnes car les mvts autorises des NOIRS ne sont pas les memes que ceux des ROUGES...

    2/Un control source : c'est ton label PION ROUGE...
    - meme travail à faire :boilerplate code ou code repetitif..


    2/ un control cible(target) :c'est le Form ou l'on depose le Label ....
    - dans son event DragEnter on definit l'effet autorise qui est un mouvement (non une copie) si c'est un Label qui est draggue...
    - dans l'event DragDrop on recupere le Label draggue et suivant le cas (NOIR ou ROUGE)
    on verifie qu'il intersecte une des 2 cases rectangles "autorises"...
    -si oui on le pose à la position du rectangle sentinelle autorise...
    code behind .cs du form exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinSimpleJeuDames
    {
        public enum PionType
        {
            NOIR, ROUGE
        }
        public partial class frmDragDrop : Form
        {
           private  Brush white = new SolidBrush(Color.White);
           private Pen whitePen = new Pen(Color.White , 8);
           private Brush chocolate = new SolidBrush(Color.Chocolate);
           private Pen chocolatePen = new Pen(Color.Chocolate, 8);
           private Brush brushToUse;
           private Rectangle[,] ArrRects = new Rectangle[10,10];
           private Label Noir,Rouge;
           private const int coteCase = 32;
            public frmDragDrop()
            {
                InitializeComponent();
                //le form autorise qu 'on droppe sur lui un control  
                this.AllowDrop = true;
                //eventhandlers 
                this.DragEnter += new DragEventHandler(frmDragDrop_DragEnter);
                this.DragDrop += new DragEventHandler(frmDragDrop_DragDrop);
            }
     
     
            private void frmDragDrop_Load(object sender, EventArgs e)
            {
                int x, y;
                for (int i = 0; i < ArrRects.GetUpperBound(0)+1; i++)
                {
                    for (int j = 0; j < ArrRects.GetUpperBound(1)+1; j++)
                    {
                        x = i * coteCase;
                        y = j * coteCase;
                        Rectangle rect = new Rectangle(x, y, coteCase, coteCase);
                        ArrRects[i, j] = rect;
                    }
                }
     
                Noir  = new Label();
                Noir.BackColor = Color.Black;
                Noir.Text = "Noir1";
                Noir.ForeColor = Color.White;
                Noir.TextAlign = ContentAlignment.MiddleCenter;
                Noir.Location = ArrRects[1, 0].Location;
                Noir.AutoSize = false;
                Noir.Size = ArrRects[1, 0].Size;
                Noir.Tag = PionType.NOIR;
                this.Controls.Add(Noir);
     
                Rouge = new Label();
                Rouge.BackColor = Color.Red ;
                Rouge.Text = "Rouge1";
                Rouge.Location = ArrRects[8, 9].Location;
                Rouge.AutoSize = false;
                Rouge.Size = ArrRects[8, 9].Size;
                Rouge.Tag = PionType.ROUGE ; 
                this.Controls.Add(Rouge);
     
                //eventhandlers du NOIR et du ROUGE
                Noir.MouseDown+=new MouseEventHandler(Noir_MouseDown);
                Rouge.MouseDown += new MouseEventHandler(Rouge_MouseDown);
     
     
            }
     
     
            private Rectangle rectDiagonalSudOuest = Rectangle.Empty;
            private Rectangle rectDiagonalSudEst = Rectangle.Empty;
     
            private void Noir_MouseDown(object sender, MouseEventArgs e)
            {
                Noir.DoDragDrop(Noir, DragDropEffects.Move);
                rectDiagonalSudEst = new Rectangle(Noir.Left + coteCase, Noir.Top + coteCase, 72, 72);
                rectDiagonalSudOuest = new Rectangle(Noir.Left - coteCase, Noir.Top + coteCase, 72, 72);
     
            }
            private Rectangle rectDiagonalNordOuest = Rectangle.Empty;
            private Rectangle rectDiagonalNordEst = Rectangle.Empty;
            void Rouge_MouseDown(object sender, MouseEventArgs e)
            {
                Rouge.DoDragDrop(Rouge, DragDropEffects.Move);
                rectDiagonalNordOuest = new Rectangle(Rouge.Left - coteCase, Rouge.Top - coteCase, 72, 72);
                rectDiagonalNordEst = new Rectangle(Rouge.Left + coteCase, Rouge.Top - coteCase, 72, 72);
     
            }
            private void frmDragDrop_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(typeof(Label)))
                {
                    e.Effect = DragDropEffects.Move;
                }
     
                else
                {
                    e.Effect = DragDropEffects.None;
                }
            }
            private  void frmDragDrop_DragDrop(object sender, DragEventArgs e)
            {
     
                if( e.Data.GetDataPresent(typeof(Label))) 
                {
                    Label item = (Label)e.Data.GetData(typeof(Label));
     
                    if (e.Effect == DragDropEffects.Move)
                    {
                        Point pt =this.PointToClient( new Point(e.X, e.Y));
                        PionType tp = (PionType)item.Tag;
                        switch (tp)
                        {
                            case PionType.NOIR:
                                if (rectDiagonalSudEst.Contains(pt) )
                                {
                                    item.Location = rectDiagonalSudEst.Location;
                                }
     
                                break;
                            case PionType.ROUGE:
                               if (rectDiagonalNordEst.Contains(pt))
                                {
                                    item.Location = rectDiagonalNordEst.Location;
                                }
                                else if (rectDiagonalNordOuest.Contains(pt))
                                {
                                    item.Location = rectDiagonalNordOuest.Location;
                                }  
                                break;
                            default:
                                break;
                        }
     
                    }
            }
     
        }
     
     
     
     
     
     
            private void frmDragDrop_Paint(object sender, PaintEventArgs e)
            {
                Graphics gObject = e.Graphics;
                gObject.Clear(Color.Transparent);
                for (int i = 0; i < ArrRects.GetUpperBound(0)+1; i++)
                {
                    for (int j = 0; j < ArrRects.GetUpperBound(1)+1; j++)
                    {
                        if (i % 2 == 1) //ligne impaire
                        {
                            if (j % 2 == 0) //colonne paire
                            {
                                brushToUse = chocolate;
                            }
                            else   //colonne impaire
                            {
                                brushToUse = white;
                            }
     
                        }
                        else //ligne paire
                        {
                            if (j % 2 == 0) //colonne paire
                            {
                                brushToUse = white;
                            }
                            else //colonne impaire
                            { 
                                brushToUse = chocolate; 
     
                            }
     
                        }
                        Rectangle rect = ArrRects[i, j];
                        gObject.FillRectangle(brushToUse, rect);
                    }
     
                }
     
            }
     
     
        }
    }
    De toute facon ce jeu de damier n'est pas une petite promenade ,et surtout il ne faut pas changer de methode à chaque etape ,sinon il ne sera jamais termine ...
    bon code....

Discussions similaires

  1. jeu de dame en c
    Par MALAKFATINE dans le forum Projets
    Réponses: 1
    Dernier message: 18/09/2006, 09h34
  2. créer jeu de dame en C
    Par SAMUELSalbert dans le forum C
    Réponses: 11
    Dernier message: 31/07/2006, 20h33
  3. Code source en c d'un jeu de dames
    Par ledawa dans le forum Développement 2D, 3D et Jeux
    Réponses: 33
    Dernier message: 22/05/2006, 08h54
  4. [Jeu de dames]Enregistrer les règles...
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/11/2005, 19h39
  5. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo