Partage
  • Partager sur Facebook
  • Partager sur Twitter

Avoir accès à un object créer dans toute mes forms

Sujet résolu
    26 août 2011 à 16:55:47

    Bonjour à tous,

    Je vous expose le problème que j'ai rencontrer lors du codage de mon projet de jeu de combat en c#.
    Bref, ma solution est composée de 2 forms et de 2 class (objet).

    Ma question est la suivante : comment déclarer mes objet :

    joueur1 player1 = new joueur1();
    


    de manière à que je puisse appeler les méthodes de mes objet sur toute mes forms en procédant ainsi :

    player1.attaque();
    


    Merci de vos réponses

    P.S : Si vous ne comprenez pas faites le moi savoir.

    Morceef
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      26 août 2011 à 17:00:21

      Tu pourrais créer une propriété statique de ta classe, comme ça :
      public class Player
      {
          // ...
          public static Player Current {get; set;}
          // ...
      


      Ensuite tu fais quelque chose comme ça :
      Player.Current.DoSomething();
      
      • Partager sur Facebook
      • Partager sur Twitter
        26 août 2011 à 17:07:04

        Salut,
        Grilled !!


        Regarde voir ici http://msdn.microsoft.com/fr-fr/library/wbx7zzdd.aspx

        Je croit que cela s’appelle les méthodes partielles.

        Ma technique ne serait pas bonne Aethec?

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          26 août 2011 à 17:08:34

          Citation : zyhou

          Salut,
          Grilled !!


          Regarde voir ici http://msdn.microsoft.com/fr-fr/library/wbx7zzdd.aspx

          Je croit que cela s’appelle les méthodes partielles.


          Ma technique ne serait pas bonne Aethec?


          J'pense pas que ce soit ce qu'il veut.
          Il veut avoir un objet accessible depuis toutes les classes ; tu lui proposes une classe dispersée sur plusieurs fichiers.
          • Partager sur Facebook
          • Partager sur Twitter
            26 août 2011 à 17:13:08

            Bonjour,

            Aethec je ne comprend pas ta proposition mais peut-être m'as-tu mal compris ?

            J'aimerai pouvoirs utiliser mes méthode que j'ai dans ma classe (objet) joueur2 par exemple que voilà :

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            
            namespace WindowsFormsApplication1
            {
                class joueur2
                {
                    public int vie;
                    public string nom;
            
                    public joueur2(int vie)
                    {
                        this.vie = vie;
                        
                    }
            
                    public int life
                    {
                        get { return this.vie; }
                        set { this.vie = value; }
                    }
                    public string name
                    {
                    	get { return this.nom; }
                    	set { this.nom = value; }
                    }
            
                    public void recoisDegat(int degats)
                    {
                        this.vie = this.vie - degats;
                    }
                    public int attaquer()
                    {
                        int numalea;
                        Random rand = new Random();
                        numalea = rand.Next(11);
                        return numalea;
                    }
                }
            }
            


            Et comme j'aimerais sur ma 1ère form modifier la valeur de nom (string) par ma méthode name. Et en gardant la même instance de mon objet joueur2, lui faire attaquer ou prendre des dégât depuis ma 2eme form.

            Donc il faudrait que je puisse instancer mes objet joueur1 et joueur2 pour tout mon projet.

            Merci

            Morceef
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              26 août 2011 à 17:32:03

              Attends...t'as deux classes Joueur1 et Joueur2 qui font la même chose ou quoi ?

              Fais quelque chose comme ça :
              public class Joueur
              {
                  // Ces deux-là peuvent être accédés depuis n'importe où
                  public static Joueur Joueur1 {get; set;}
                  public static Joueur Joueur2 {get; set;}
              
              
                  public int PointsDeVie {get; set;}
                  public string Nom {get; set;}
              
                  public Joueur(int pointsDeVie)
                  {
                      this.PointsDeVie = pointsDeVie;
                  }
              
                  public void FaireMal(int degats)
                  {
                      this.PointsDeVie -= degats;
                  }
                      
                  public int Attaquer()
                  {
                      return new Random().Next(11); // plus court
                  }
              }
              


              Ensuite quand tu as envie d'utiliser ton Joueur1, par exemple, tu peux faire ça :
              Joueur.Joueur1 = new Joueur( 100 );
              Joueur.Joueur1.FaireMal( Joueur.Joueur2.Attaquer() ); // aïe !
              

              Joueur1 et Joueur2 sont des propriétés statiques. Elles peuvent être utilisées depuis n'importe où, en utilisant le nom de la classe et pas une instance de la classe.
              Que ce soit dans ta Form1 ou ta Form2, Joueur.Joueur1 référence le même objet.
              • Partager sur Facebook
              • Partager sur Twitter
                26 août 2011 à 17:41:44

                ton code est très bien mais c'est quand il est question de l'utiliser. Je sais que je px appeler une classe (objet) depuis n'importe ou mais moi je cherche à modifier l'instance joueur1 depuis n'importe quel endroit car recréer une instance à chaque fois qu'on tape ses point de vie sont à chaque fois réinitialiser. Tu voit en c++ par ex. on peut utiliser les headers pour faire ça en VB il y a les modules. Mais comment puis-je modifier une seule et même instance dans toutes mes forms.

                Désoler mais si je suis vraiment incompréhensible merci de me le dire.

                Merci

                Morceef
                • Partager sur Facebook
                • Partager sur Twitter
                  26 août 2011 à 17:45:16

                  Citation : Aethec


                  Joueur1 et Joueur2 sont des propriétés statiques. Elles peuvent être utilisées depuis n'importe où, en utilisant le nom de la classe et pas une instance de la classe.
                  Que ce soit dans ta Form1 ou ta Form2, Joueur.Joueur1 référence le même objet.



                  Relis et relis ce bout de paragraphe... C'est exactement ce que tu veux! Joueur.Joueur1 est une instance de Joueur, qui sera accessible de partout.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 août 2011 à 17:59:39

                    Voilà J'ai suivis ton code Aethec il marche du feu de dieu.

                    mais quand mon bouton a pour fonction :

                    Citation : Aethec

                    Joueur.Joueur1 = new Joueur( 100 );
                    Joueur.Joueur1.FaireMal( Joueur.Joueur2.Attaquer() ); // aïe !
                    


                    La vie de joueur1 se remet a 100 et d’ailleurs si je ne mettais pas non plus joueur2 le debugger m’annonçais un bug alors j'ai du le mettre aussi du coup la vie de joueur repart à chaque fois de 100. Soit je ne sais pas utiliser, dans se cas la merci de me faire une petit précision de l'utilisation. Soit ce que je souhaite est impossible en c#.

                    Voila la fonction de mon bouton :

                    private void button1_Click(object sender, EventArgs e)
                    {
                        Joueur.Joueur1 = new Joueur(100);
                        Joueur.Joueur2 = new Joueur(100);
                        Joueur.Joueur1.FaireMal(Joueur.Joueur2.Attaquer());
                        vieJoueur2.Value = Joueur.Joueur1.PointsDeVie; // c'est un numericupdown
                    }
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      26 août 2011 à 18:28:15

                      Tu peux instancier les deux joueurs dans un constructeur statique si tu veux. (un constructeur statique c'est comme un constructeur mais il n'est appelé que la première fois où tu références la classe, et c'est une méthode statique donc sans this) :
                      // A placer dans la classe Joueur
                      static Joueur()
                      {
                          Joueur1 = new Joueur( 100 );
                          Joueur2 = new Joueur( 100 );
                      }
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 août 2011 à 18:41:41

                        Merci aethec Tu ma sortis de mon problème.

                        Je te remercie Maintenant tout vas comme je veux. Grace à toi je px finir mon projet.

                        Merci Le site du zéro.

                        Morceef
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Avoir accès à un object créer dans toute mes forms

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown