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

C# Discussion :

Instanciation multiple par référence


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Par défaut Instanciation multiple par référence
    bonsoir/jour à tous

    Débutante en développement c# , je viens à vous pour tenter de trouver une solution ( qui doit d'ailleurs être toute bête ^^ )

    Enfin voilà mon problème.

    J'ai dans mon code , une classe PlayerEntity que je dois instancier 2 fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     static PlayerEntity J1 = new PlayerEntity("Joueur 1") ;
     static PlayerEntity J2 = new PlayerEntity("Joueur 2") ;
    Dans ce cas je me retrouve avec l'instanciation J1 = J2. ( Les deux références , je l'imagine étant les mêmes ).

    Seulement j'ai peu d'autre idée pour pouvoir instancier plusieurs fois ma classe sans passé par la même références.

    Une petite aide ?

    Merci d'avance

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Dans ce cas je me retrouve avec l'instanciation J1 = J2. ( Les deux références , je l'imagine étant les mêmes ).
    Bonjour,

    Les références ne sont pas les mêmes vu que le constructeur est appelé deux fois (Et qui plus est avec deux arguments différents).

    Je pense qu'un peu de recherche et d'apprentissage sur le vocabulaire de base et le système de référence serait une bonne chose.

    Bon courage pour la suite.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Pour info, même si tu avais fait :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     static PlayerEntity J1 = new PlayerEntity("Joueur 1") ;
     static PlayerEntity J2 = new PlayerEntity("Joueur 1") ;

    Tu n'aurais pas eu les même références. J1 != J2.

    Par ailleurs, je m’interroge sur la raison du "static".
    Il y aurait peut-être besoin de revoir certaines notions de POO en effet.
    N'hésite pas à nous demander de t'éclairer sur certains point cependant.

  4. #4
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Par défaut
    Ok très bien.

    L'utilisation de static était la seul solution que j'ai trouvé pour solutionner les erreurs de compil :

    une référence d'objet est requise pour la propriété la méthode .....
    Voici une partie du 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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace CastleWarsConsole
    {
        class Program
        {
     
             static string read;
             static public DeckEntity MyDeck = new DeckEntity();
             static JoueurEntity J1 = new JoueurEntity("Joueur1");
             static JoueurEntity J2 = new JoueurEntity("Joueur2");
     
     
     
            static void Main(string[] args)
            {
     
                if (MenuDemarrage() == "1") 
                {
                    InitGame();
     
                    do
                    {
                        PlayerTurn(J1,J2.CastleHP);
                        Console.Clear();
                        Console.WriteLine("Next player");
                        //System.Threading.Thread.Sleep(1000);
                        PlayerTurn(J2,J1.CastleHP);
                    }
                    while (!J1._Winner || !J2._Winner || !J1._Loser || !J2._Loser);
                    Console.Clear();
                    if (J1._Winner || J2._Loser)
                        Console.WriteLine(J1._Playername + " win the game");
                    else
                        Console.WriteLine(J2._Playername + " win the game");
     
     
                }
     
            }
     
     
            static string MenuDemarrage()
            {
                Console.Clear();
                Console.WriteLine(" Bienvenue à CASTLEWARS \n\n\n");
     
                Console.WriteLine(" 1. Deux Joueurs \n" +
                                  " 2. Quitter \n ");
     
                Console.WriteLine("Mode Choisi :");
                do
                    read = Console.ReadLine();
                while (read != "1" && read != "2");
     
                return read;
            }
     
            static void InitGame()
            {
                MyDeck.GetStartCards(J1);
                MyDeck.GetStartCards(J2);
            }
     
            static void PlayerTurn(JoueurEntity Player, int hpennemy)
            {
     
                ScoreHeader(Player, hpennemy);
                if (MyDeck._DeckCards.Count > 0)
                {
                    Console.WriteLine("\n---Draw Phase--- \n");
                    MyDeck.GetOneCard(Player);
                }
                else
                {
                    Console.WriteLine("They are no more cards\n");
                }
                ScoreHeader(Player, hpennemy);
                Console.WriteLine("\n---Production Phase---");
                ScoreHeaderProduction(Player, hpennemy);
                Console.ReadKey();
                Console.WriteLine("\n---Action Phase---");
                ScoreHeader(Player, hpennemy);
                ShowHandCards(Player);
                Console.ReadKey();
                Console.WriteLine("End of " + Player._Playername + "'s turn ");
     
     
            }
    Sans les statics sur JoueurEntity , je me retrouve avec toutes les erreurs de compil concernant les références manquantes.

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Quelques précisions par rapport au code que tu nous a donné :

    Le principe de la POO est de séparer son code en différentes classes pour séparer les responsabilités.

    Ici ton main est juste censé gérer la sélection entrée par le joueur. Après ça, dès que le joueur choisit 1, tu dois instancier une classe qui va gérer ton jeu. Par exemple, on crée un GameManager auquel on passe le nombre de joueurs et on lance le jeu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GameManager gameManager = new GameManager(playersNumber);
    gameManager.LaunchGame();
    Ensuite, c'est dans le GameManager que l'on va gérer l'instanciation des joueurs :

    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
     
    private const int MIN_PLAYERS_NUMBER = 1;
    private const int MAX_PLAYERS_NUMBER = 4;
     
    private List<Player> players;
     
     
    public GameManager(int playersNumber)
    {
        if(playerNumber < MIN_PLAYERS_NUMBER || playersNumber > MAX_PLAYERS_NUMBER)
            throw new ArgumentException("Wrong player number");
     
        for(int i = 0; i < playersNumber; i++)
        {
            Player player = new Player("Joueur " + i.ToString());
            this.players.Add(player);
        }
    }
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  6. #6
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Par défaut
    Ok merci je vois un peu mieux le fonctionnement.

Discussions similaires

  1. [PHP 5.3] Multiplication d'objet par référence
    Par MaitrePylos dans le forum Langage
    Réponses: 2
    Dernier message: 29/06/2012, 21h56
  2. Réponses: 3
    Dernier message: 19/05/2005, 10h46
  3. [JACOB] Comment passer un objet par référence à une méthode
    Par zlavock dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2005, 18h28
  4. Réponses: 10
    Dernier message: 03/03/2005, 13h36
  5. Passage d'un tableau par référence?
    Par sebduth dans le forum C
    Réponses: 9
    Dernier message: 16/07/2003, 18h32

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