Пример #1
0
        private void EstValidePionMange(Cases A, Cases B)
        {
            Vector3 déplacement = (B.Centre - A.Centre);

            if (!PièceA.EstValidePion(déplacement))
            {
                ResetPièces(PièceA, PièceB);
            }
        }
Пример #2
0
        private void GérerDéplacement()
        {
            if (GestionInput.EstNouveauClicGauche())
            {
                foreach (Cases o in ListeDesCases)
                {
                    //ON PROJETE LES VECTOR3 POUR OBTERNIR DES COORDONNÉES ÉCRAN

                    Vector3 HG = Game.GraphicsDevice.Viewport.Project(o.HG, CaméraJeu.Projection, this.CaméraJeu.Vue, Matrix.Identity);

                    Vector3 HD = Game.GraphicsDevice.Viewport.Project(o.HD, this.CaméraJeu.Projection, this.CaméraJeu.Vue, Matrix.Identity);

                    Vector3 BG = Game.GraphicsDevice.Viewport.Project(o.BG, this.CaméraJeu.Projection, this.CaméraJeu.Vue, Matrix.Identity);

                    Vector3 BD = Game.GraphicsDevice.Viewport.Project(o.BD, this.CaméraJeu.Projection, this.CaméraJeu.Vue, Matrix.Identity);


                    //ON CRÉE LES RECTANGLES DE COLLISIONS DES CASES
                    int       height = 0;
                    int       width  = 0;
                    Rectangle zone   = new Rectangle(0, 0, 0, 0);
                    if (Couleur == BLACK)
                    {
                        height = (int)(HD.Y - HG.Y);
                        width  = (int)(BG.X - HG.X);
                        zone   = new Rectangle((int)HG.X, (int)HG.Y, width, height);
                    }
                    else
                    {
                        height = (int)(HG.Y - HD.Y);
                        width  = (int)(HG.X - BG.X);
                        zone   = new Rectangle((int)BG.X, (int)HD.Y, width, height);
                    }



                    Point PosSouris = GestionInput.GetPositionSouris();


                    float k = Compteur;
                    if (zone.Contains(PosSouris))
                    {
                        //COLLISION ENTRE SOURIS ET CASE

                        if (CaseA != CaseB)
                        {
                            VérifierChangementCouleur(o);
                        }
                        if (CaseA == null)
                        {
                            CaseA = o;
                            VérifierChangementCouleur(o);
                        }
                        else
                        {
                            //LES DEUX CASES NE SONT PAS NULLES
                            CaseB = o;



                            foreach (Pieces a in ListeDesPièces.ToList())
                            {
                                if (CaseA != null && CaseB != null)
                                {
                                    //ON ENREGISTRE LA POSITION INITIALE DES PIÈCES
                                    SetÉtat();

                                    foreach (Pieces b in ListeDesPièces)
                                    {
                                        if (EstPropriétaire(b.Position, CaseB.Centre))
                                        {
                                            //ON TROUVE LA PIÈCE SE TROUVANT SUR caseB
                                            PièceB = b;
                                        }
                                    }
                                    if (EstPropriétaire(a.Position, CaseA.Centre))
                                    {
                                        //ON TROUVE LA PIÈCE SUR LA caseA ET ON VÉRIFIE SI ELLE RESPECTE LOGIQUE ET NESAUTEPAS
                                        if (a.Couleur == Couleur)
                                        {
                                            if (a.LogiqueDéplacement(new Vector2((CaseB.Centre.Z - CaseA.Centre.Z), (CaseB.Centre.X - CaseA.Centre.X))) && NeSautePas(CaseA.Centre, CaseB.Centre))
                                            {
                                                Compteur++;
                                                PièceA = a;


                                                if (PièceB == null)
                                                {
                                                    //ON PASSE ICI SI IL N'Y A PAS DE pièceB (DÉPLACEMENT SANS MANGER)
                                                    ResetCouleur();
                                                    PièceA.Deplacer(CaseB.Centre);

                                                    if (PièceA.Nom == "/pawn")
                                                    {
                                                        //ON VÉRIFIE LE CAS DU DÉPLACEMENT DU PION SANS MANGER
                                                        if (EstValidePionSeul(CaseA, CaseB))
                                                        {
                                                            PièceA.Deplacer(CaseA.Centre);
                                                            Compteur--;

                                                            ResetCouleur();
                                                        }
                                                        else
                                                        {
                                                            //ON VÉRIFIE SI LE PION EST AUX BORNES (PROMOTION)
                                                            if (EstAuBorne(PièceA.Couleur, CaseB))
                                                            {
                                                                NouvelleReine(PièceA);
                                                            }
                                                        }
                                                    }
                                                    if (PièceA.Nom == "/king")
                                                    {
                                                        //ON VÉRIFIE SI LE JOUEUR ESSAIE DE ROQUER
                                                        if (Math.Abs(CaseB.Centre.Z - CaseA.Centre.Z) > Partie.LONGUEUR_CASE && (!EstEnEchec(PièceA.Couleur)))
                                                        {
                                                            GèrerRook();
                                                        }
                                                    }


                                                    if (!EstPropriétaire(PièceA.Position, CaseA.Centre))
                                                    {
                                                        // SI pièceA A BOUGÉ, ON VÉRIFIE SI LE JOUEUR SE MET LUI-MÊME EN ÉCHEC
                                                        if (EstEnEchec(Couleur))
                                                        {
                                                            //ON REMET LA PIÈCE À SA POSITION INITIALE CAR LE MOUVEMENT EST INVALIDE (SE MET EN ÉCHEC)
                                                            PièceA.Deplacer(CaseA.Centre);
                                                            Compteur--;

                                                            ResetCouleur();
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    if (PièceA.Couleur != PièceB.Couleur)
                                                    {
                                                        //ON PASSE ICI SI LA pièceA VEUT MANGER LA pièceB
                                                        PièceB.Sortir(NbSortiesBlanc, NbSortiesNoir);


                                                        PièceA.Deplacer(CaseB.Centre);
                                                        ResetCouleur();

                                                        if (PièceA.Nom == "/pawn")
                                                        {
                                                            //ON VÉRIFIE LE CAS UNIQUE DU PION QUI MANGE UNE PIÈCE
                                                            Vector3 déplacement = (CaseB.Centre - CaseA.Centre);
                                                            if (!PièceA.EstValidePion(déplacement))
                                                            {
                                                                //ON RESET LES PIÈCES SI LE DÉPLACEMENT DU PION EST INVALIDE
                                                                ResetPièces(PièceA, PièceB);
                                                            }
                                                            else
                                                            {
                                                                if (EstAuBorne(PièceA.Couleur, CaseB))
                                                                {
                                                                    //ON PROMOTE LE PION SI IL EST AUX BORNES
                                                                    NouvelleReine(PièceA);
                                                                }
                                                            }
                                                        }

                                                        if (PièceA.Nom == "/king")
                                                        {
                                                            //IMPOSSIBLE DE ROQUER LORSQU'ON MANGE UNE PIÈCE, ON VÉRIFIE QUE LE JOUEUR N'ESSAIE PAS DE ROQUER
                                                            if (Math.Abs(CaseB.Centre.Z - CaseA.Centre.Z) > Partie.LONGUEUR_CASE)
                                                            {
                                                                ResetPièces(PièceA, PièceB);
                                                            }
                                                        }



                                                        if (EstEnEchec(Couleur))
                                                        {
                                                            //ON RESET LES PIÈCES SI LE JOUEUR S'EST MIS EN ÉCHEC
                                                            ResetPièces(PièceA, PièceB);
                                                        }
                                                        else
                                                        {
                                                            //ON MODIFIE LA POSITION DE SORTIE PUISQU'UNE PIÈCE EST SORTIE SI ON PASSE ICI
                                                            if (PièceB.Couleur == "White")
                                                            {
                                                                NbSortiesBlanc += 1;
                                                            }
                                                            else
                                                            {
                                                                NbSortiesNoir += 1;
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //ON RESET LA PIÈCE CAR LE JOEUEUR A TENTÉ DE MANGER UNE PIÈCE DE LA MAUVAISE COULEUR

                                                        Compteur--;
                                                        ResetCouleur();
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                ResetCouleur();
                                            }
                                        }
                                        else
                                        {
                                            //ON UTILISE LA pièceB comme pièceA CAR LE JOUEUR A CLICKÉ SUR DEUX PIÈCES DE SA COULEUR
                                            ResetCouleur();
                                            VérifierChangementCouleur(CaseB);
                                            PièceA = PièceB;
                                            PièceB = null;
                                            CaseA  = CaseB;
                                            CaseB  = null;
                                        }
                                    }
                                    if (a == ListeDesPièces[NbPiece - 1])
                                    {
                                        //LE JOUEUR A PRIS UNE CASE VIDE COMME caseA, ON MET DONC LA caseB COMME ÉTANT caseA
                                        ResetCouleur();
                                        if (CaseB != null)
                                        {
                                            VérifierChangementCouleur(CaseB);
                                        }
                                        PièceA = PièceB;
                                        PièceB = null;
                                        CaseA  = CaseB;
                                        CaseB  = null;
                                    }



                                    foreach (Pieces g in ListeDesPièces.FindAll(x => x.Nom == "/rook" || x.Nom == "/king" || x.Nom == "/pawn"))
                                    {
                                        //POUR LES PIÈCES QUI DOIVENT SAVOIR SI ELLES SONT À LEUR PREMIER DÉPLACEMENT, ON VÉRIFIE SI ELLES ONT BOUGÉ
                                        if (g.Position != g.PosIni)
                                        {
                                            g.EstPremierMove = false;
                                        }
                                    }
                                }
                            }

                            float p = Compteur;
                            if (k != p)
                            {
                                //ON VÉRIFIE À L'AIDE DU COMPTEUR SI LE COUP A ÉTÉ JOUÉ, ON FAIT TOURNER LA CAMÉRA ET ON JOUE LE SON DE DÉPLACEMENT

                                CaméraJeu.Compteur = 0;
                                Chess_Hit_Sound.Play();
                            }
                            //ON VÉRIFIE SI IL FAUT JOUER LES SONS ÉCHEC/ÉCHEC ET MAT
                            JouerSons();
                        }
                    }
                }
            }
        }