示例#1
0
        /// <summary>
        /// Délégué : réponse à l'evt click gauche sur le rectangle, affichage des informations de la tuile
        /// </summary>
        /// <param name="sender"> le rectangle (la source) </param>
        /// <param name="e"> l'evt </param>
        unsafe void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var rectangle = sender as Rectangle;

            int column = Grid.GetColumn(rectangle);
            int row    = Grid.GetRow(rectangle);

            Case.etatCase etat    = MaPartie.getCarte().getCase(column, row).getEtatOccupation();
            int           nbUnite = -1;

            if (!(etat == Case.etatCase.libre))
            {
                nbUnite = MaPartie.getCarte().getCase(column, row).getUnitsOnCase().Count();
            }

            SelectionOperateur.etatSelection etatSelection = MaPartie.getSelectionOperateur().getEtatSelection();

            if (nbUnite > 1 && etatSelection == SelectionOperateur.etatSelection.RienEstSelectionne)
            {
                ComboBox unite = new ComboBox();
                unite.Width  = 20;
                unite.Height = 20;
                for (int i = 0; i < nbUnite; i++)
                {
                    unite.Items.Add(i);
                }
                Grid.SetColumn(unite, column);
                Grid.SetRow(unite, row);
                mapGrid.Children.Add(unite);
                unite.BringIntoView();
                unite.MouseLeftButtonDown += new MouseButtonEventHandler(mouse_leave);
                unite.SelectionChanged    += new SelectionChangedEventHandler(unite_SelectionChanged);
                unite.MouseLeftButtonDown += new MouseButtonEventHandler(mouse_leave);
            }
            else
            {
                traitement(column, row, 0);
            }
            // on arrête la propagation d'evt : sinon l'evt va jusqu'à la fenetre => affichage via "Window_MouseLeftButtonDown"
            e.Handled = true;
        }
示例#2
0
        /// <summary>
        /// Effectue le traitement lorsqu'un utilisateur clique sur une case
        /// </summary>
        /// <param name ="column">la colonne de la case</param>
        /// <param name ="row">la ligne de la case </param>
        /// <param name ="unitSelected">la nième unité de la case</param>
        unsafe private void traitement(int column, int row, int unitSelected)
        {
            int x1 = 0, y1 = 0, x2 = 0, y2 = 0;

            Case.etatCase etat = MaPartie.getCarte().getCase(column, row).getEtatOccupation();

            if (!(etat == Case.etatCase.libre))
            {
                List <UniteDeBase> listUnite = MaPartie.getCarte().getCase(column, row).getUnitsOnCase();
                changeListeViewUnite(listUnite[unitSelected]);
                setGen();
                UniteDeBase u = listUnite[unitSelected];
                listUnite.RemoveAt(unitSelected);
                listUnite.Insert(0, u);
            }
            else
            {
                initListUnite();
            }

            // la var etat est soit libre soit joueur1 soit joueur2
            SelectionOperateur.etatSelection etatSelection = MaPartie.getSelectionOperateur().getEtatSelection();
            // la var etatSelection est soit RienEstSelectionne soit UniteDeDepartDelectionnee soit UniteDarriveeSelectionnee
            //(normalement l'utilisateur n'aura pas le temps de cliquer sur quoi que ce soit lors de la transition de l'etat UniteDarriveeSelectionnee vers RienEstSelectionne)
            switch (etat)
            {
            case Case.etatCase.libre:
                if (etatSelection != SelectionOperateur.etatSelection.UniteDeDepartDelectionnee)
                {
                    MessageBox.Show("Attention, vous avez sélectionné une case vide !");
                    // se produit surtout quand on est dans l'etat RienEstSelectionne et que l'on essaie de jouer une case qui est vide...
                    MaPartie.getSelectionOperateur().FinDeSelection();
                }
                else     //ici on est sur d'être dans l'etat UniteDeDepartDelectionnee
                {
                    //                       MessageBox.Show("Vous déplacez votre unité vers une case vide.");
                    MaPartie.getSelectionOperateur().selectCase(column, row);              // donc ici on passe dans l'etat UniteDarriveeSelectionnee
                    MaPartie.getSelectionOperateur().getSelectedCases(&x1, &y1, &x2, &y2); //donc il n'y a pas besoin de vérifier isSecondSelection1 cependant il faut conserver l'opération getSelectedCase

                    Case   casedep = MaPartie.getCarte().getCase(x1, y1);
                    Case   casearr = MaPartie.getCarte().getCase(x2, y2);
                    Peuple p;
                    Joueur j;
                    int    numJoueur;
                    if (MaPartie.getJoueur1ALaMain())
                    {
                        p         = MaPartie.joueur1.getPeuple();
                        j         = MaPartie.joueur1;
                        numJoueur = 1;
                    }
                    else
                    {
                        p         = MaPartie.joueur2.getPeuple();
                        j         = MaPartie.joueur2;
                        numJoueur = 2;
                    }
                    MaPartie.getCarte().moveProcessing(x1, y1, x2, y2, casedep, casearr, p.nomPeuple, j, numJoueur);
                    clearEllipses();
                    updateGraphiqueUnite(MaPartie.joueur1, 1);
                    updateGraphiqueUnite(MaPartie.joueur2, 2);
                }
                break;

            case Case.etatCase.joueur1: if (!MaPartie.getJoueur1ALaMain())
                {     //le joueur2 a cliqué sur une case du joueur1
                    if (etatSelection != SelectionOperateur.etatSelection.UniteDeDepartDelectionnee)
                    {
                        MessageBox.Show("Attention vous avez sélectionné une case appartenant au joueur adverse !");
                        MaPartie.getSelectionOperateur().FinDeSelection();
                    }
                    else
                    {
                        MaPartie.getSelectionOperateur().selectCase(column, row);
                        MaPartie.getSelectionOperateur().getSelectedCases(&x1, &y1, &x2, &y2);
                        Case    casedep        = MaPartie.getCarte().getCase(x1, y1);
                        Case    casearr        = MaPartie.getCarte().getCase(x2, y2);
                        Peuple  p              = MaPartie.joueur2.getPeuple();
                        Boolean doitSeDeplacer = MaPartie.getCarte().fightProcessing(x1, y1, x2, y2, casedep, casearr, p.nomPeuple, MaPartie.joueur2, MaPartie.joueur1);
                        if (doitSeDeplacer)
                        {
                            MessageBox.Show("Vous avez déclenché un combat !");
                        }
                        if (MaPartie.joueur2.getUnite().Count == 0 || MaPartie.joueur1.getUnite().Count == 0)
                        {
                            MessageBox.Show("La Partie est finie !");
                            MessageBox.Show(MaPartie.evaluerFinDePartie());
                        }
                        if (doitSeDeplacer)
                        {
                            MaPartie.getCarte().moveProcessing(x1, y1, x2, y2, casedep, casearr, p.nomPeuple, MaPartie.joueur2, 2);
                        }
                        clearEllipses();
                        updateGraphiqueUnite(MaPartie.joueur1, 1);
                        updateGraphiqueUnite(MaPartie.joueur2, 2);
                    }
                }
                else
                {    //le joueur1 a cliqué sur une case du joueur1
                    List <int> laList = MaPartie.getCarte().listeDesCasesPossibles(column, row, MaPartie.getCarte().getCase(column, row), MaPartie.joueur1.getPeuple().nomPeuple);
                    updateRectSelection(laList);

                    switch (etatSelection)
                    {
                    case SelectionOperateur.etatSelection.RienEstSelectionne:
                        MaPartie.getSelectionOperateur().selectCase(column, row);

                        /*Case caseSelectionnee = MaPartie.getCarte().getCase(column, row);
                         * if (caseSelectionnee.getUnitsOnCase().Count == 0)
                         * {
                         *  MaPartie.getSelectionOperateur().FinDeSelection();
                         * }*/

                        // listeDesCasesPossibles(int xdep, int ydep,int numJoueur, Peuple.NomPeuple nompeuple)
                        break;

                    case SelectionOperateur.etatSelection.UniteDeDepartDelectionnee:         // dans ce cas il s'agit d'un déplacement d'une des unités du joueur vers une case où il a déjà des unités mais c'est autorisé
                        MaPartie.getSelectionOperateur().selectCase(column, row);
                        MaPartie.getSelectionOperateur().getSelectedCases(&x1, &y1, &x2, &y2);
                        Case   casedep = MaPartie.getCarte().getCase(x1, y1);
                        Case   casearr = MaPartie.getCarte().getCase(x2, y2);
                        Peuple p       = MaPartie.joueur1.getPeuple();
                        MaPartie.getCarte().moveProcessing(x1, y1, x2, y2, casedep, casearr, p.nomPeuple, MaPartie.joueur1, 1);
                        clearEllipses();
                        updateGraphiqueUnite(MaPartie.joueur1, 1);
                        updateGraphiqueUnite(MaPartie.joueur2, 2);
                        break;

                    case SelectionOperateur.etatSelection.UniteDarriveeSelectionnee:
                        MessageBox.Show("Vous avez déjà sélectionné 2 cases !");
                        MaPartie.getSelectionOperateur().FinDeSelection();
                        break;
                    }

                    /* if (etatSelection != SelectionOperateur.etatSelection.UniteDarriveeSelectionnee) {
                     *   MaPartie.getSelectionOperateur().selectCase(column, row);
                     * }else{
                     *   MessageBox.Show("Vous avez déjà sélectionné 2 cases !"); //Ne devrait pas trop arriver
                     *   MaPartie.getSelectionOperateur().FinDeSelection();
                     * }*/
                }
                break;

            case Case.etatCase.joueur2:
                if (MaPartie.getJoueur1ALaMain())
                {     //le joueur1 a cliqué sur une case du joueur2
                    if (etatSelection != SelectionOperateur.etatSelection.UniteDeDepartDelectionnee)
                    {
                        MessageBox.Show("Attention vous avez sélectionné une case appartenant au joueur adverse !");
                        MaPartie.getSelectionOperateur().FinDeSelection();
                    }
                    else
                    {
                        MaPartie.getSelectionOperateur().selectCase(column, row);
                        MaPartie.getSelectionOperateur().getSelectedCases(&x1, &y1, &x2, &y2);
                        Case    casedep        = MaPartie.getCarte().getCase(x1, y1);
                        Case    casearr        = MaPartie.getCarte().getCase(x2, y2);
                        Peuple  p              = MaPartie.joueur1.getPeuple();
                        Boolean doitSeDeplacer = MaPartie.getCarte().fightProcessing(x1, y1, x2, y2, casedep, casearr, p.nomPeuple, MaPartie.joueur1, MaPartie.joueur2);
                        if (doitSeDeplacer)
                        {
                            MessageBox.Show("Vous avez déclenché un combat !");
                        }
                        if (MaPartie.joueur2.getUnite().Count == 0 || MaPartie.joueur1.getUnite().Count == 0)
                        {
                            MessageBox.Show("La Partie est finie !");
                            MessageBox.Show(MaPartie.evaluerFinDePartie());
                        }
                        if (doitSeDeplacer)
                        {
                            MaPartie.getCarte().moveProcessing(x1, y1, x2, y2, casedep, casearr, p.nomPeuple, MaPartie.joueur1, 1);
                        }
                        clearEllipses();
                        updateGraphiqueUnite(MaPartie.joueur1, 1);
                        updateGraphiqueUnite(MaPartie.joueur2, 2);
                    }
                }
                else
                {    //le joueur2 a cliqué sur une case du joueur2
                    clearEllipses();
                    updateGraphiqueUnite(MaPartie.joueur1, 1);
                    updateGraphiqueUnite(MaPartie.joueur2, 2);
                    List <int> laList2 = MaPartie.getCarte().listeDesCasesPossibles(column, row, MaPartie.getCarte().getCase(column, row), MaPartie.joueur2.getPeuple().nomPeuple);
                    updateRectSelection(laList2);
                    switch (etatSelection)
                    {
                    case SelectionOperateur.etatSelection.RienEstSelectionne:
                        MaPartie.getSelectionOperateur().selectCase(column, row);

                        /*Case caseSelectionnee = MaPartie.getCarte().getCase(column, row);
                         * if (caseSelectionnee.getUnitsOnCase().Count == 0)
                         * {
                         *  MaPartie.getSelectionOperateur().FinDeSelection();
                         * }*/
                        break;

                    case SelectionOperateur.etatSelection.UniteDeDepartDelectionnee:         // dans ce cas il s'agit d'un déplacement d'une des unités du joueur vers une case où il a déjà des unités mais c'est autorisé
                        MaPartie.getSelectionOperateur().selectCase(column, row);
                        MaPartie.getSelectionOperateur().getSelectedCases(&x1, &y1, &x2, &y2);
                        Case   casedep = MaPartie.getCarte().getCase(x1, y1);
                        Case   casearr = MaPartie.getCarte().getCase(x2, y2);
                        Peuple p       = MaPartie.joueur2.getPeuple();
                        MaPartie.getCarte().moveProcessing(x1, y1, x2, y2, casedep, casearr, p.nomPeuple, MaPartie.joueur2, 2);
                        clearEllipses();
                        updateGraphiqueUnite(MaPartie.joueur1, 1);
                        updateGraphiqueUnite(MaPartie.joueur2, 2);
                        break;

                    case SelectionOperateur.etatSelection.UniteDarriveeSelectionnee:
                        MessageBox.Show("Vous avez déjà sélectionné 2 cases !");
                        MaPartie.getSelectionOperateur().FinDeSelection();
                        break;
                    }

                    /*if (etatSelection != SelectionOperateur.etatSelection.UniteDarriveeSelectionnee)
                     * {
                     *  MaPartie.getSelectionOperateur().selectCase(column, row);
                     * }
                     * else
                     * {
                     *  MessageBox.Show("Vous avez déjà sélectionné 2 cases !");
                     *  MaPartie.getSelectionOperateur().FinDeSelection();
                     * }*/
                }
                break;
            }
            // V2 : gestion avec Binding
            // Mise à jour du rectangle selectionné => le label sera mis à jour automatiquement par Binding
            Grid.SetColumn(selectionRectangle, column);
            Grid.SetRow(selectionRectangle, row);

            selectionRectangle.Visibility = System.Windows.Visibility.Visible;

            // V1 : gestion avec evts classiques
            //if (selectedVisual != null)
            //    selectedVisual.StrokeThickness = 1;
            //selectedVisual = rectangle;
            //selectedVisual.Tag = tile; // Tag : ref par defaut sur la tuile logique
            //rectangle.StrokeThickness = 3;
            //infoLabel.Content = String.Format("[{0:00} - {1:00}] {2} Fer : {3}", column, row, tile, tile.Iron);
            Boolean isSecondSelection = MaPartie.getSelectionOperateur().getSelectedCases(&x1, &y1, &x2, &y2);

            if (isSecondSelection)
            {
                //MessageBox.Show("Bravo vous avez bien sélectionner 2 deux cases: " + x1.ToString() + " " + y1.ToString() + " " + x2.ToString() + " " + y2.ToString());
                MaPartie.getSelectionOperateur().FinDeSelection();
            }
        }