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éer une variable dont le nom est la valeur d'une autre variable


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Créer une variable dont le nom est la valeur d'une autre variable
    Bonjour
    Je suis en train de développer un shoot them up, et je suis en train de voir comment implémenter les tirs.

    Je dois déclarer un handler d'image, qui se fait par picture NomDeLimage;.

    Si je fais ça, pour initialiser l'image, je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    picture ImageHandler;
    pictureInit(&ImageHandler, &imageNameInRefFile, sprite №, palette №, x, y);
    Jusque là tout va bien. Sauf que je devrais créer un handler d'image par balle, le nombre maximum étant 100. Et pour les gérer ensuite, je dois pouvoir créer et utiliser ce ImageHandler avec une boucle for(i=0;i<truc;i++). je voudrais donc pouvoir créer une variable par exécution de la boucle, avec comme nom par exemple bulleti. Par exemple picture bulleti; donc si i=1, bullet1, i=2 bullet2, etc... je cherche donc comment faire, ça pourrait m'aider énormément si vous savez comment faire (ou si c'est impossible)

    Merci :)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Ce que tu cherches c'est la "reflection" (l'introspection étant un sous-ensemble, lien wiki en anglais) (ou réflexion en français)
    Qui n'existe pas en C


    Citation Envoyé par defalt45 Voir le message
    Par exemple picture bulleti; donc si i=1 bullet1, i=2 bullet2, etc... je cherche donc comment faire, ça pourrait m'aider énormément si vous savez comment faire (ou si c'est impossible)
    Par contre "Par exemple picture bulleti; donc si i=1 bullet[1], i=2 bullet[2], etc..."

    Le langage C est un langage de génération 2, donc il faut penser moins haut niveau : pointeur, tableau, tas, ... et des structures pour faire des interfaces/ organiser son code/ pour s'approcher de loin de la POO

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Sauf que là le problème c'est que je ne peux pas utiliser bullet[i] comme nom pour une variable :/
    Là ce qui fait outrageusement chier c'est que chaque picture handler doit absolument avoir un nom et pas un numéro, et vu que j'utilise une lib dont le code source n'est pas distribué, je suis dans la merde. Le pire c'est que je sais que c'est possible, je vois juste pas comment. En tous cas merci de ta réponse Je m'y remettrai demain, après avoir grappillé quelques heures de sommeil.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par defalt45 Voir le message
    chaque picture handler doit absolument avoir un nom et pas un numéro
    Ouais c'est une table d'indexation


    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
    typedef struct s_picture_handler_index {
        char* filename; // or char filename[XXX];
        size_t index;
    } t_picture_handler_index;
     
     
    t_picture_handler_index* picture_handler_index_tab; // maybe private
     
     
    unsigned char /*bool*/ index_tab_insert_picture_handler(char* filename);
     
    size_t index_tab_get_index(char* filename);
     
    unsigned char /*bool*/ index_tab_remove_picture_handler(char* filename);
     
    unsigned char /*bool*/ index_tab_remove_picture_handler_with_index(size_t index);
     
    // ...
    Peut-être que c'est trop simpliste et il y a sûrement d'autres façons de faire

    Édit : Ou alors mettre dans le nom des assets des informations (comme 1 index, 1 date, 1 identifiant, ...) et faire un algo qui les extraie.
    Par exemple, bullet1 -> algo -> index: 1

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par defalt45 Voir le message
    Sauf que là le problème c'est que je ne peux pas utiliser bullet[i] comme nom pour une variable :/
    Là ce qui fait outrageusement chier c'est que chaque picture handler doit absolument avoir un nom et pas un numéro,
    C'est là que je ne pige pas. Un nom c'est une string. Si tu as différentes strings dans différentes variables (ie tableau) tu peux remplacer la string par la variable (ie le bon élément du tableau) qui va bien et ta lib reçoit dans tous les cas la même chose !!!

    Sinon tu as 2 opérateurs "#" et "##" (le second en C++ seulement) qui peuvent t'aider
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    #define mkstr(s)	#s
    #define concat(a, b)	a##b
     
    int main() {
    	// Le premier
    	printf("%s\n", mkstr(Hello));
     
    	// Le second
    	int xy=30;
    	printf("%d\n", concat(x, y));
    }
    Me semble que le second ressemble à ce que tu cherches à faire...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ce que tu cherches c'est un tableau.
    Si tu veux utiliser une string comme clé, alors c'est une structure de map.
    je ne peux pas utiliser bullet[i]
    Et pourquoi pas ?
    Une fois compilée on s'en tamponne du nom des variables, il reste que des adresses.
    Quant à vouloir afficher un nom bulleti pour chaque i... printf.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Et pourquoi pas ?
    Une fois compilée on s'en tamponne du nom des variables, il reste que des adresses.
    Il veut faire un jeu
    Mais le moteur va certes indexer en mémoire les assets (les textures, les ennemis, les armes, ...) mais tu vas avoir un/ plusieurs fichier(s) pour créer un niveau qui va/ vont y faire référence via le nom du fichier (ou d'autres techniques mais ce sera un fichier ou dans les fichiers)

    Tu vois bien que le moteur du jeu ne peut pas perdre le nom du fichier, sinon on ne pourra jamais créer des niveaux ... mais le moteur doit juste prendre des assets en entrée et faire le jeu.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Rien à voir.
    Le nom du fichier sera utile principalement dans l'éditeur.
    Et quand bien même on veut garder le nom d'un objet dans celui-ci, il suffit d'y ajouter un membre pour le conserver.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Moi non plus je ne vois pas la difficulté. Je reprends son exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    picture ImageHandler;
    pictureInit(&ImageHandler, &imageNameInRefFile, sprite no, palette no, x, y);

    Je devrais créer un handler d'image par balle, le nombre maximum étant 100. Et pour les gérer ensuite, je dois pouvoir créer et utiliser ce ImageHandler avec une boucle for(i=0;i<truc;i++). je voudrais donc pouvoir créer une variable par exécution de la boucle, avec comme nom par exemple bulleti. Par exemple picture bulleti; donc si i=1, bullet1, i=2 bullet2, etc...
    Ca se règle de cette façon
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    picture bullet[100];
    for (i=0; i < 100; i++) pictureInit(&bullet[i] /* ou bullet+i */, &imageNameInRefFile, sprite no, palette no, x, y);

    Et on peut même optimiser le décalage lié à l'indexation (il veut faire un jeu donc rapidité) via un pointeur
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    picture bullet[100];
    picture *pt;
    for (i=0, pt=bullet; i < 100; i++, pt++) pictureInit(pt, &imageNameInRefFile, sprite no, palette no, x, y);

    Parce que ce qu'il a demandé (bulleti avec i=1 i=2 etc) c'est exactement ce pour quoi ont été créés les tableaux...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour
    Merci beaucoup, je sais pas comment j'ai pu pas penser à faire picture truc[100]. Vraiment merci beaucoup, c'est presque le dernier truc "difficile" qui manquait avant de pouvoir développer tout le reste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 20h39
  2. [Débutant] Créer un répertoire dont le nom est la date en visual basic express 2010
    Par debutant007 dans le forum VB.NET
    Réponses: 6
    Dernier message: 25/02/2015, 17h22
  3. Créer un objet dont le nom est issu d'un String
    Par Claude_Azoulai dans le forum VB.NET
    Réponses: 7
    Dernier message: 05/04/2010, 14h02
  4. Créer un variable dont le nom est une valeur de la base
    Par nicolas2603 dans le forum Langage
    Réponses: 3
    Dernier message: 25/09/2009, 09h45
  5. Réponses: 7
    Dernier message: 23/03/2007, 18h49

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