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 :

Création d'instance dans une boucle ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Par défaut Création d'instance dans une boucle ?
    Bonjour à tous,

    Je développe actuellement un jeu sous XNA (en C# donc) pour mon projet de fin d'étude de Master 2 Multimédia (je ne suis donc pas un spécialiste de la prog).
    Voila mon problème : l'utilisateur choisit le nombre de joueur (compris entre 3 et 10). A partir de cela, j'aimerais générer X instance de mon objet "Joueur" via une boucle allant de 1 à Xjoueurs (Xjoueurs étant définit par l'utilisateur).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 1; i <= _nbJoueurs; i++) {
                    Joueur _joueur+i = new Joueur(.....);
                }
    ou _joueur+i correspond à une instance de joueur plus l'indice de la boucle.
    Cette syntaxe ne marche pas bien évidemment...J'en ai essayé d'autres mais sans succès...
    Auriez vous une solution à mon problème ?
    Si vous avez la moindre question, n'hésitez pas...
    Merci par avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    List<Joueur> kList = new List<Joueur>( iNbJoueur );
    for( int i = 0; i < iNbJoueur ; i ++ )
    {
      kList.Add( new Joueur ( <...> ) );
    }
    generic rulez! Je te conseil de les regarder de près pour pas t'embeter avec ce genre de truc

    En même temps si vous devez coder, essayez aussi de voir ce que c'est la prog Objet... Sinon vous aurez un jeu catastrophiquement réalisé...
    Vous etes pas en équipe avec des dev d'un coté pour vous aider?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Par défaut
    Merci pour cette réponse rapide.
    Non pour ma part c'est un projet individuel...
    J'avais effectivement essayer cette technique avec les generic.
    Le problème est que cela ne fonctionnait pas avec les accesseurs set de "Joueur". Par exemple, si je fais ceci (avec l'accesseur get) ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for( int i = 0; i < iNbJoueur ; i ++ )
    {
      kList[i].getNomJoueur;
    }
    Mais si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for( int i = 0; i < iNbJoueur ; i ++ )
    {
      kList[i].setScore=10;
    }
    cela ne fonctionne plus... Le compilateur me met qu'il lui est impossible de modifier la valeur de retour de.......car il ne s'agit pas d'une variable...

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    On a l'impression que tu écrits des accesseurs C# que tu essayes d'utiliser comme du Java, ou l'inverse (sachant que Java n'a pas d'accesseurs).

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Question bète : Tu écris bien un propriété (qui est en fait un accesseur en Dotnet) comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public string NomJoueur
    {
    get{return _nomJoueur;}
    set{_nomJoueur = value;}
    }
    ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Par défaut
    Merci à tous.
    J'ai effectivement fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public string NomJoueur {
    get{return _nomJoueur;}
    set{_nomJoueur = value;}
    }
    du coup j'arrive à accéder au get mais pas à modifier via le set....

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    getNomJoeur et SetScore sont des méthode ou des propriétés?

    essaye avec joueur comme cela plutot :
    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
     
    class Joueur
    {
      private string m_Nom = "Nom";
      public string Nom
      {
        get{ return m_Nom; }
        set{ m_Nom = value; }
      }
     
      private uint m_Score = 0;
      public uint Score //Je doute qu'un score soit négatif... Quoi que...
      {
        get{ return m_Score; }
        set{ m_Score = value; }
      }
     
    }
    Les "Propriétés" évite d'avoir des méthode get...(); ou set...();
    le get permet de récupérer la valeur,
    le set de la mettre à jour.

    Mais la valeur elle même est contenue dans un membre (voir plusieurs, voir aucun) Tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
      private uint m_NbEnnemiesKilled = 0;
      private uint m_NbGirlsKissed = 0;
     
      public uint Score //Je doute qu'un score soit négatif... Quoi que...
      {
        get{ return m_NbEnnemiesKilled + m_NbGirlsKissed; }
        //set{ m_Score = value; } // ici pas de set, la propriété est "read-only"
      }

  8. #8
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Il faudrait que tu appronfondisses les bases de la programmation C#, tu irais plus vite

    Pour répondre à ta question, je vais rester bref pour éviter de te perdre en parlant de référence, tableau/liste dynamique, portée de variables, génériques, etc...

    Donc, tu désires avoir X instances (objets) de la classe Joueur... Et tu tentes de faire l'instanciation à l'intérieur d'une boucle... Or premier problème auquel tu vas être confronté : ces instances n'existent qu'à l'intérieur de la boucle. Il faut donc les "porter" en dehors de la boucle, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Joueur _joueur = null;
    for (int i = 1; i <= _nbJoueurs; i++) {
        _joueur = new Joueur(.....);
    }
    // Tu peux utiliser la variable _joueur ici
    Le problème avec cette solution, c'est que _joueur ne peut contenir qu'une seule instance, donc la première instance est perdue à cause de la deuxième, la deuxième est ensuite perdue à cause de la troisième, etc.

    Lorsque tu désires manipuler une liste d'instance du même type, on a recourt à des classes qui permettent de contenir des collections d'objets. Le plus basique de tous est le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Ici, _joueurs est un tableau d'objets Joueur.
    // Avec cette instanciation, je dis que je veux que mon tableau contienne X Joueur où X = _nbJoueurs.
    // A noter ici que chaque case contient null, c'est toi d'y mettre une instance de type Joueur
    Joueur[] _joueurs = new Joueur[_nbJoueurs];
    for (int i = 1; i <= _nbJoueurs; i++) {
        // Ici on classe la nouvelle instance dans le tableau
        _joueurs[i-1] = new Joueur(.....);
    }
    // Si tu désires connaîtes le nombre de cases dans ton tableau, tu peux utiliser la propriété Length
    int count = _joueurs.Length;
    // Si tu veux récupérer l'objet Joueur numéro 2, il te suffit de faire
    Joueur tmpJoueur = _joueurs[1];
    Voila, ceci n'est qu'un petit aperçu quand on commence. Si tu as des questions n'hésite pas.

Discussions similaires

  1. Création de contrôles dans une boucle
    Par koktel_dfr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/01/2010, 14h36
  2. [E-03] Création de graph dans une boucle
    Par chichichocho dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/01/2009, 19h22
  3. [MySQL] Création de variables dans une boucle et récupération de données avec une requête
    Par lavande4 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/09/2008, 11h10
  4. Création d'objets dans une boucle for
    Par urban_p dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2008, 10h34
  5. probleme de création de variable dans une boucle
    Par misterweb dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2007, 19h21

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