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 :

Tableau de char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut Tableau de char
    Bonjour,

    Je travaille sur un petit jeu de tableau (réflexion). Il y a 30 tableaux, dont les maps sont stockées dans un tableau de char :
    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
    const char * levels[30] = {
    	"1k1k152a1515213322332115152137g121151523312231231515233122312315152138211515213322k1i1312115152a151k1k",
    	"1k172617162234221615224134i12215152136413121151521382115152138211515213141362115152233413222151622k131g13122161726171k",
    	"1k1k1834181841314131181641344131k1161638161634g1324116164136i11618341818413241181k1k",
    	"1k1k1k152a15152133213121k13121151521e121e121e124151521e121e121e12131g121151521i1215131e12131512115152a151k1k1k",
    	"11271c1121i1324131211c112135261711213521342117112131g13321324131211711213341j1213427111127324221j1324131211117213421352111172151374131211117263521111c2134k121111c2711",
    	"1k1621k121312131213116163142351616312131213121312116164234413116162131213121312131161641324133411616312131213121312116163241334131161621312131213121311616334133i1161k",
    	"12241424161221i1314114314131211612237115314121161221g12214317131211224122131211a2231k12113311be121322113311631113112e12132211331e251e3324112e124133112e113314212e114133112e118e114122134e92113132112211d",
    	"2k2131e33341344133i1k12121312i213441354137212i31212137413441352121312i2133413651344132212a322821354131413142324133g121213141314139412133212k",
    	"1k12314133413113413441121139113811113341344111324134k1111141354132114134j1411211341134113415113411413141311134151134113911g131411111413241113241334132113311113411413241351133111231i11334413141124131j1111k",
    	"1k1k12j1314113g13141311333121231k13113423141f33141311212i13213324213331213f115f116f11313f115f116f11312331331413141133141811212314131f3324131133312123313324213j13141121k1k",
    	"251a252133211a213241212131j1g1211226122151322121413221122133i121e233412122112212213124122517213241312115e1111328312511e111132131512141322132k121j12111e111227121314132213241213141312231212141312e322121314131413141314131413141314131413141212k",
    	"1k143841314131141432g13641321414314132413714144135413313114143c14143141364133141432k13914143413141334131141431i1324137141441384132141k",
    	"1k14261a142144211a1421i13142211a14214132221a122333211b12214332261612214331e134g1211612214331e135211612214331e134k12116122c161k",
    	"112i11112131413di1211111213171321132713211327131k1211111211g211111211g211111213111327132113271321131112111112131g131113171331133113111211111221f21111121311f21111121317131513111337133113171211111213g2111112i11",
    	"11231g1121k12111251a112131f2218131g1211a1121312331231a112135211425131125312114d13321131521b126332113152135c1315132211315273421131b213421131b21i13321131b2613",
    	"1k122g1212213741314131g131k12112122141133a138211212213b413141211212213541334134211212214132413a2112122137613341322112122131i1314138131211212213b4131412112122g121k",
    	"11221b261121i113221621413321112171142116213141314121112213312111241121j1332115217121113271211122f12319f116f11319f113211232j111112131e2322111f12132711232g111112131112411f1241233111121711631213213f1131122168121k131f421121923142212",
    	"182b1111283241362111112131413241k121392111112141263241344131211111213121j132e13141324135211111213121i132113613321111121412133e133413621111121312639211111213121142137413121111121412837211111213241324131j12911112a19",
    	"1f43121381e441e6431213e11b431213e1134316e11313g1e341j141e24113e113174312e113e11318e113e113e11311k14131413112e113e113e113113512e113e113e1131141314231e291124312e113113142321543e2411311j133i1154316",
    	"112713261321i131g13241312111213621122137211121314132422112213723362112213241k13421364121122135413242312133121122113541344134211221413e4121122132413341233621122137211121314132413121122141314134211121344221121127132613",
    	"1k152a15152131c13121g131c1i1211515213121b121b122512115152131213121512132211515213121312131213122151521312131c141213221151521d126312115152133213241312115152131213321k12215152a151k",
    	"2k21i132413312413141513271232113e112e1123422112321j1e241e14321342113222113e111432131423115212141e241e1432141324112e11221214112e1122333712111e1122121451134413113e1122121124311361331122121124311j1141331126211b211121g1k1232k",
    	"1k13i131411831g1k113123516413341121231413141311635121235114132411132413141121341334139131633413341161631413241311311616381616311314131413216173141314132171k",
    	"2k21i131413241334121342131k12123112271237121112271221121211i21211i2123712131114221112111221122712121332132422131211122j122j12121112671214131e132e1327121211931182121712611213121712211221121213241314131413121324131g14133212k",
    	"1k152a1515214136412115152133g132413121151521324322115152132131k11322115152132131i11322115152132432211515214135413121151521314135412115152a151k",
    	"1k11i1e921e114k11211e1162111e111e1112112e11211e11221e421e512e11211e113e112e111e111e111e4211111e512e111e111e111e112e11211e113j112e111e111e111e112e11211e821e4g1e32111112111e111j112e1112111e111e11513e111e112e113e111e11513e111ea211413e22112211b",
    	"14413b4113143141e94131131431e1413741e131131431e13141e54131e131131431e131e1413341e131e131131431e131e13141e14131e131e131131431e131e131e1k1g1i1e131e131131431e131e13141e34131e131131431e131e1413541e131131431e13141e74131131431e1413941131441e1211d",
    	"1k18241816223141322216142231k13313222141321324131213221g13141312113122132413221322134i121121221364137211213213241311334131413121131422344133221416223422161824181k",
    	"1k271d21322131k1211d21352e21332332a1131121345121233321331322135212135213621332321g134211312231512333212e35211d21i134211d271k",
    	"1k11i13341321831421111371833111133413241144132413311113f1321114413141354134413111143341311354133111433173511134132411331g1k111413341111341314131133141344132111334133441314132111k"
    };
    J'aimerai créer un fonction qui me permettrait de prendre une ligne de ce tableau et d'en extraire chaque caractère, afin de dessiner mon tableau. Mais je n'arrive pas à la faire.

    Un petit coup de main ? merci.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Peux-tu préciser tes difficultés ? Qu'as-tu tenté qui ne fonctionne pas ?

    La conception du format est de toi ?

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut
    Oui, la conception est de moi.

    En fait, si je veux utiliser la premier ligne du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "1k1k152a1515213322332115152137g121151523312231231515233122312315152138211515213322k1i1312115152a151k1k"
    Je voulais faire un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int i;
    for(i=0; i < strlen(levels[0]); i++){
    char v = levels[0][i];
    if(v == 49){
    ... dessin de ma tile correspondant à "1"
    }
    }
    J'ai besoin de récupérer la valeur ASCII de chaque caractère de la ligne.
    Mais bien sûr, ça compile pas.... J'ai un peu de mal avec la manipulation de chaine caractère par caractère en C. J'imagine que c'est une question d'habitude...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par zecreator Voir le message
    Je travaille sur un petit jeu de tableau (réflexion). Il y a 30 tableaux, dont les maps sont stockées dans un tableau de char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char * levels[30] = {
    Ben déjà là moi je vois un tableau de "char étoile" et un "char étoile" n'est absolument pas un "char". Donc commencer par donner une description erronée de ton problème ne t'aidera certainement pas à avoir des solutions qui y répondent...

    Citation Envoyé par zecreator Voir le message
    J'aimerai créer un fonction qui me permettrait de prendre une ligne de ce tableau et d'en extraire chaque caractère, afin de dessiner mon tableau. Mais je n'arrive pas à la faire.
    C'est un peu normal. Une fonction ne peut retourner qu'un seul truc alors qu'à te lire tu veux retourner "chaque" élément. Or qui dit "chaque" dit impérativement "élément différent d'un appel sur l'autre". Donc cela signifie que ta fonction doit sauvegarder, lorsqu'elle est invoquée, l'endroit où elle en est pour pouvoir repartir de là lors de l'appel suivant (et donc rennvoyer l'élément suivant).
    C'est posible bien entendu mais cela a un prix
    • soit tu définis dans ta fonction une zone "statique" qui lui servira à mémoriser son travail. Cette zone étant sauvegardée même lorsque la fonction se termine, à l'appel suivant elle pourra récupérer ses infos pour pouvoir repartir du même endroit. Mais tu devras alors définir une syntaxe pour que la fonction sache si elle est au "premier" appel (dans ce cas la zone en question est alors initialisée) ou à l'appel "X". Et tu ne pourras pas invoquer cette fonction dans 2 contextes distincts (style je traite en parallèle un tableau "A" et un tableau "B") car il n'y a qu'une seule zone statique donc une seule mémorisation possible (on nomme ce type de fonction "fonction non réentrante"). Ou alors tu pars sur la base d'un tableau de X mémoires permettant de travailler en parallèle sur X items mais d'une part ça fait "usine à gaz" et d'autre part tu seras toujours limité à "X". Quoi qu'il en soit, ce type de fonction est possible (cas de "strchr").
    • soit tu demandes à l'appelant de prévoir lui-même une zone que la fonction utilisera comme mémoire. Les problèmes du cas précédent disparaissent totalement mais tu impose alors à l'appelant un travail dont il aimerait bien se passer. Mais c'est là aussi une solution éprouvée (fonction "strchr_r")
    • Soit tu redéfinis ton besoin en te demandant pourquoi tu as besoin de faire une fonction alors qu'une simple boucle fait aussi bien

    ...
    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]

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut
    Merci pour tes infos. Oui, la différence entre pointer et variable, c'est pas encore très clair. Et j'imagine que le problème vient de là. En fait, je ne veux pas un fonction qui me renvoi 1 caractère, je veux un fonction qui va lire l'ensemble du char, caractère par caractère, et en fonction du caractère, dessiner la tuile de ma map. La fonction ne doit rien me retourner. Genre :
    Autre info utile (sûrement), j'utilise le compiler SDCC pour Zilog 80, car mon programme est destiné à l'Amstrad CPC. Du coup, je ne peux pas utiliser des gros tableau de type int, ou matrice car la mémoire est très limitée.

    CNom : game.png
Affichages : 209
Taille : 4,3 Koapture d'écran du jeu en cours :

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zecreator Voir le message
    Merci pour tes infos. Oui, la différence entre pointer et variable, c'est pas encore très clair.
    C'est tout simple: une variable est un "truc" permettant de mémoriser une information.
    Ensuite tout dépend du type d'information. Si l'information est un nombre entier, alors il faut la mémoriser dans une variable de type "int". Si l'information est un caractère alors la variable sera de type "char". Et si l'information est une adresse, alors la variable sera de type "pointeur". A ce niveau là il y aura alors une seconde réflexion. Si à l'adresse en question il y a un "int" alors le pointeur devra être "int*". Si à l'adresse il y a un "char" alors le pointeur devra être "char *". Et etc.

    Citation Envoyé par zecreator Voir le message
    En fait, je ne veux pas un fonction qui me renvoi 1 caractère, je veux un fonction qui va lire l'ensemble du char, caractère par caractère, et en fonction du caractère, dessiner la tuile de ma map. La fonction ne doit rien me retourner. Genre :
    Ah ? Jute ça ? Alors rien de bien compliqué

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void DrawMap(char *level[30])
    {
        char **ligne;
        char *c;
        size_t i, j;
     
        // Boucle sur chaque ligne du level
        for (i=0, ligne=level; i < 30; i++, ligne++)
        {
            // Boucle sur chaque caractère de la ligne
            for (c=(*ligne), j=0; *c != '\0'; c++, j++)
                DrawCar(*c, i, j);
        }
    }
    A toi bien entendu d'écrire la fonction "DrawCar" pour qu'elle dessine ce qu'il faut à la posiiton (i, j) en fonction du caractère reçu...
    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]

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut
    Haaaa, merci. Je commençais à devenir dingue Je vais tout de même me remettre à jour sur le pointers et les types de variables en C.

    Merci beaucoup.

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

Discussions similaires

  1. decalage à gauche sur une tres grand tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/07/2005, 22h40
  2. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  3. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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