Exemplo n.º 1
0
        /// <summary>Gère les action nécessaire après un coup</summary>
        /// <param name="liDest">Indice de la ligne de destination</param>
        /// <param name="colDest">Indice de la colonne de destination</param>
        private void ApresCoup(byte liDest, byte colDest)
        {
            string chaine = echiquier.ToString(); // Représentation en chaine de l'échiquier

            formPartie.AfficherEchiquier(echiquier.ToString());

            actif = (Couleur)((byte)Couleur.BLANC + (byte)Couleur.NOIR - (byte)actif); // Truc de Patrick pour inverser
            formPartie.Message = "C'est à " + joueurs[actif].Nom + " de jouer";

            // Règle des 50 coups
            if (echiquier.EstPion(liDest, colDest) || posistions.Last()[liDest * 8 + colDest] != ' ')
            {
                coups = 0;
            }
            else if (++coups == 50)
            {
                FormPartie.AfficherBoiteDialogue("Partie nulle car les 50 derniers coups consécutifs ont été joués par chacun des joueurs sans le mouvement d'aucun pion et sans aucune prise de pièce. Retour au menu principal.", "Partie nulle");
                formPartie.Close();
            }

            posistions.Add(chaine);

            // Troisième répétition d'une même position
            if (posistions.GroupBy(position => position).Where(group => group.Count() == 3).Count() > 0)
            {
                FormPartie.AfficherBoiteDialogue("Partie nulle car la même position a été répétée trois fois. Retour au menu principal.", "Partie nulle");
                formPartie.Close();
            }

            // Échec et mat
            List <(byte, byte)> menaces = Menaces(echiquier.PositionRoi(actif), echiquier);

            if (menaces.Count > 0)
            {
                if (Mat(menaces))
                {
                    formPartie.Message = "Échec et mat";
                    Victoire((Couleur)((byte)Couleur.BLANC + (byte)Couleur.NOIR - (byte)actif));
                }
                else
                {
                    formPartie.Message = "Échec. " + formPartie.Message;
                }

                // Pat
            }
            else if (Pat())
            {
                formPartie.Message = "Pat. " + formPartie.Message;
                FormPartie.AfficherBoiteDialogue("Partie nulle car le joueur au trait est en situation de pat. Retour au menu principal.", "Partie nulle");
                formPartie.Close();
            }
        }
Exemplo n.º 2
0
        Echec m_echec;          //Référence à Echec

        //Constructeur
        public Partie(Joueur p_joueur1, Joueur p_joueur2, Echec p_echec)
        {
            m_joueurBlanc = p_joueur1;
            m_joueurNoir  = p_joueur2;

            m_interface = new FormPartie(this);
            m_interface.Show();

            m_tour = true;

            m_plateau = new Plateau();
            refreshForm();

            m_joueurTour = m_joueurBlanc;
            m_interface.afficherTour(m_joueurTour.NomJoueur);
            m_echec = p_echec;
        }
Exemplo n.º 3
0
        /// <summary>Crée une partie d'échec</summary>
        /// <param name="noir">Joueur avec les pièces noires</param>
        /// <param name="blanc">Joueur avec les pièces blanches</param>
        public Partie(Joueur noir, Joueur blanc)
        {
            joueurs = new Dictionary <Couleur, Joueur> {
                { Couleur.NOIR, noir },
                { Couleur.BLANC, blanc }
            };

            echiquier = new Echiquier();
            echiquier.InitialisationPieces();
            formPartie = new FormPartie(this);

            actif      = Couleur.NOIR;
            coups      = 0;
            posistions = new List <string>()
            {
                echiquier.ToString()
            };
        }
Exemplo n.º 4
0
        /// <summary>Effectue la fin de la parite par la victoire d'un joueur</summary>
        /// <param name="vainqueur">Couleur du joueur vainqueur</param>
        private void Victoire(Couleur vainqueur)
        {
            foreach (Joueur joueur in joueurs.Values)
            {
                joueur.Jouees++;
            }

            joueurs[vainqueur].Victoires++;

            Couleur perdant = (Couleur)((byte)Couleur.BLANC + (byte)Couleur.NOIR - (byte)vainqueur);

            FormPartie.AfficherBoiteDialogue("Victoire de " + joueurs[vainqueur].Nom + "\n"
                                             + joueurs[vainqueur] + " -> " + (joueurs[vainqueur] + joueurs[perdant]) + "\n"
                                             + joueurs[perdant] + " -> " + (joueurs[perdant] - joueurs[vainqueur]) + "\nRetour au menu principal.", "Victoire");

            // Ajuster pointage
            joueurs[vainqueur].Pointage = joueurs[vainqueur] + joueurs[perdant];
            joueurs[perdant].Pointage   = joueurs[perdant] - joueurs[vainqueur];

            formPartie.Close();
        }