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 :

Demande d'avis et de conseils


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Demande d'avis et de conseils
    Bonjour à tous !
    Je sais pas trop si on peut se permettre de demander ça, mais ça m'aiderait beaucoup ^^'

    Donc voilà, je développe une petite appli toute bête, permettant de générer un équipement aléatoire pour un jeu, tout en y associant les images lui correspondant. On peut ajouter le nombre de joueur que l'on souhaite avec leur pseudo.
    Dans l'idéal plusieurs fonctionnalités se rajouteront.
    Celle décrite ci-dessus fonctionne sans soucis. Le problème est que j'ai l'impression de faire de la *****.
    Je suis persuadé que je m'y prends très mal, et j'aimerai discuter sur un chat, voir à l'oral si possible, avec quelqu'un qui s'y connait pas mal afin de me dire un peu comment j'aurais pu gérer telle ou telle chose.

    Voili voilou, j'espère qu'une âme charitable pourra me guider sur la voix du bon code

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    si tu veux mettre des parties de code ici, certains les commenteront sans soucis

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bah j'peux toujours tenter, mais j'pense que ça sera un peu l'bordel quand même.

    J'vais faire petit à petit.


    Chapitre 1

    Déjà, les images des armes.
    Actuellement, elles sont dans les ressources du programme. Je les stocke dans une imagelist avec leur nom, ça me fait donc 25 instructions pour les ajouter une à une.
    J'ai essayé de voir du côté du ResourceManager, sans arriver à faire ce que je voulais...

    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
     
    private static void Armes(ImageList _Liste)
            {
                System.Resources.ResourceManager RM = new System.Resources.ResourceManager("WindowsFormsApplication2.Resources.resx", _Liste.GetType().Assembly);
     
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre1);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre2);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre3);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre4);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre5);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre6);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre7);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre8);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre9);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre10);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre11);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre12);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre13);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre14);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre15);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre16);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre17);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre18);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre19);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre30);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre31);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre32);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre33);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre34);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre35);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre36);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre37);
                    _Liste.Images.Add(WindowsFormsApplication2.Properties.Resources.Sans_titre38);
     
    }
    L'essai avec un RM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    System.Resources.ResourceManager RM = new System.Resources.ResourceManager("WindowsFormsApplication2.Resources.resx", _Liste.GetType().Assembly);
     
    Bitmap img = (Bitmap)RM.GetObject(baseName + i.ToString());
    _Liste.Images.Add(img);
    Le but étant d'utiliser une boucle donc. (baseName est un string = "Sans_titre")

    Question : Le RM est-il plus adapté ? Comment cela fonctionne t-il ?

    Chapitre 2

    Actuellement, je possède un form servant de fenêtre principale, et un autre contenant le programme proprement dit.
    Je rentre un pseudo dans une box, et le logiciel me sort 3 armes aléatoire et un Skill (pouvoir).
    En fait, il instancie un objet "Joueur".

    La classe joueur est la seule à avoir besoin de l'imageList. Pour l'instant, je me sert d'un singleton que voici :

    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
     
    namespace WindowsFormsApplication2
    {
        public class Listage
        {
            public ImageList _Liste;
            private static Listage _instance;
     
            private Listage()
            {
                _Liste = new ImageList();
                _Liste.ImageSize = new Size(62, 62);
                _Liste.ColorDepth = ColorDepth.Depth32Bit;
                Armes(_Liste);
            }
     
            public static Listage getInstance()
            {
                if (_instance == null)
                    _instance = new Listage();
     
                return _instance;
            }
    Armes(_Liste) étant la fonction du chapitre 1.

    Question : Le singleton est-il une bonne solution ?

    Chapitre 3

    Pour l'affichage, j'ai choisi de mettre les images en tant que BackgroundImage de différentes groupbox:



    Question : Existe t-il plus adapté dans les contrôles natifs de .Net ? On voit que le fond dépasse du cadre de la groupbox pour aller jusqu'en haut du titre.. Peut-on faire autrement ?

    Chapitre 4

    La seule méthode que j'ai trouvé pour associer les boxs à chaque joueur, je les passe en paramètre, comme ceci:

    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
     
    switch (equipeA.Count)
                        {
                            case 0:
                                J11 = new Joueur(1,arme111, arme112, arme113, skill11, _Listage._Liste);
                                Joueur11.Text = txtNomJoueur.Text;
                                equipeA.Add(J11);
                                break;
                            case 1:
                                J12 = new Joueur(1, arme121, arme122, arme123, skill12, _Listage._Liste);
                                Joueur12.Text = txtNomJoueur.Text;
                                equipeA.Add(J12);
                                break;
                            case 2:
                                J13 = new Joueur(1, arme131, arme132, arme133, skill13, _Listage._Liste);
                                Joueur13.Text = txtNomJoueur.Text;
                                equipeA.Add(J13);
                                break;
                            case 3:
                                J14 = new Joueur(1, arme141, arme142, arme143, skill14, _Listage._Liste);
                                Joueur14.Text = txtNomJoueur.Text;
                                equipeA.Add(J14);
                                break;
                            case 4:
                                J15 = new Joueur(1, arme151, arme152, arme153, skill15, _Listage._Liste);
                                Joueur15.Text = txtNomJoueur.Text;
                                equipeA.Add(J15);
                                break;
                            case 5:
                                J16 = new Joueur(1, arme161, arme162, arme163, skill16, _Listage._Liste);
                                Joueur16.Text = txtNomJoueur.Text;
                                equipeA.Add(J16);
                                break;
                        }
    Question : Bien ou pas bien ?

    Chapitre 5

    J'vais m'arrêter là je pense, ça fait déjà beaucoup.
    Une p'tite dernière quand même, concernant la liste.
    Si je décide de mettre un formulaire de config, où on pourrait cocher les armes que l'ont souhaite retirer du random.. ça me paraît un peu bordélique avec ce système, non ?

    (J'en demande peut-être beacoup, en tout cas merci de votre attention :p)

  4. #4
    Membre régulier
    Profil pro
    profiler
    Inscrit en
    Février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : Février 2008
    Messages : 84
    Points : 99
    Points
    99
    Par défaut
    Pour le chapitre 3

    Encapsule un Panel dans ton GroupBox et rends l'image dans le Panel

  5. #5
    Membre régulier
    Profil pro
    profiler
    Inscrit en
    Février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : Février 2008
    Messages : 84
    Points : 99
    Points
    99
    Par défaut
    Pour le chapitre 1

    Regarde là bas. J'utilise Reflection pour connaitre toutes les ressources dans l'Assembly.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci pour tes réponses, j'ai essayé avec le panel, en effet ça me permet de mieux gérer la taille !

    Concernant la façon de récupérer les ressources, j'essaie de comprendre mais je saisi pas tout, j'ai écrit en commentaire ce que je comprends :

    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
     
    static public Stream GetInternalResource(string name)
                    {
     
    //Il récupère l'assembly actuel (l'assembly étant en gros le projet ?) 
                            Assembly assembly = Assembly.GetExecutingAssembly();
                            if (assembly == null)
                                    return null;
     
    //GetManifest, je suppose que ça récupère les différentes ressources, ou groupes de ressources ? Il cherche donc le nom qu'on lui passe en paramètre.
                            List<string> list = new List<string>(assembly.GetManifestResourceNames());
                            if (list.Contains(name))
                                    return assembly.GetManifestResourceStream(name);
     
    //Entry assembly = ?
                            assembly = Assembly.GetEntryAssembly();
                            if (assembly == null)
                                    return null;
                            list = new List<string>(assembly.GetManifestResourceNames());
                            if (list.Contains(name))
                                    return assembly.GetManifestResourceStream(name);
     
     
                            return null;
                    }

  7. #7
    Membre régulier
    Profil pro
    profiler
    Inscrit en
    Février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : Février 2008
    Messages : 84
    Points : 99
    Points
    99
    Par défaut
    Regarde ici aussi, ça te retourne toutes les ressources internes. Un simple copier/coller dans ton programme devrait marcher (pense à ajouter les références).

    Pour les références :
    Assembly.GetManifestResourceNames
    Assembly.GetEntryAssembly

Discussions similaires

  1. [CV] Demande d'avis, conseils
    Par Dia_FR dans le forum CV
    Réponses: 7
    Dernier message: 25/01/2017, 19h28
  2. Demande d'avis et conseils pour choisir SGBD
    Par Ceddoc dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 18/01/2012, 11h38
  3. Réponses: 1
    Dernier message: 08/06/2011, 18h09
  4. [Débutant] Demande d'avis et de conseils
    Par projetM dans le forum Emploi
    Réponses: 8
    Dernier message: 02/11/2009, 15h13
  5. Demande d'Avis et conseils
    Par laguiff dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 20/06/2006, 08h54

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