Pages: [1]   Bas de page
Imprimer
Auteur Fil de discussion: [NDS] Tableau en argument  (Lu 496 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Dr.Razor Hors ligne
Newbie
*
Messages: 25


Voir le profil
« 30 Avril 2012, 16:49:52 »

Salut a tous,

Je suis en train de développer dans le cadre d'un projet un moteur de jeu. J'ai choisi de faire un moteur de
jeu pokemon, mais j'ai un problème avec une fonction: ma fonction generationmap prend comme argument un tableau map, la taille du tableau, la valeur du tile, et un autre tableau tiles (qui lie une valeur_tile à ces
4 tiles de 8x8 pour faire un tile de 16x16).

Code:
generationmap(int map[int mapx][int mapy], int valeur_tiles,int tiles[tilesmax][4]); //je sais que c'est faux =)
s32 i,j;
for (i = 0; i < mapy;i++)
{
        for (j = 0; j < mapx;j++) {
   valeur_tile = map[j][i];
if (valeur_tile>=0){
PA_SetLargeMapTile(1, 3, i*2, j*2, tiles[valeur_tile][0]);
PA_SetLargeMapTile(1, 3, (i*2)+1, j*2, tiles[valeur_tile][1]);
PA_SetLargeMapTile(1, 3, i*2, (j*2)+1, tiles[valeur_tile][2]);
PA_SetLargeMapTile(1, 3, (i*2)+1, (j*2)+1, tiles[valeur_tile][3]);
}
if (valeur_tile<0){
valeur_tile*=(-1);
PA_SetLargeMapTile(1, 3, i*2, j*2, tiles[valeur_tile][1]);
PA_SetLargeMapTile(1, 3, (i*2)+1, j*2, tiles[valeur_tile][0]);
PA_SetLargeMapTile(1, 3, i*2, (j*2)+1, tiles[valeur_tile][3]);
PA_SetLargeMapTile(1, 3, (i*2)+1, (j*2)+1, tiles[valeur_tile][2]);


PA_SetMapTileHflip(1, 3, i*2, j*2,1);
PA_SetMapTileHflip(1, 3, (i*2)+1, j*2, 1);
PA_SetMapTileHflip(1, 3, i*2, (j*2)+1, 1);
PA_SetMapTileHflip(1, 3, (i*2)+1, (j*2)+1,1);
}

        }
    }
}

Comment je fais pour mettre mes arguments dans ma fonction?
Est-ce je dois passer par un pointeur ?  Mercu
Si vous voulez tester ce qu'il en est pour l'instant,c'est par la:
(marchez pas sur la haute herbe)
http://bayfiles.com/file/8PqD/yiWagf/pokengine.nds
« Dernière édition: 30 Avril 2012, 18:27:00 par Dr.Razor » Journalisée

Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 924


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« Réponse #1 : 30 Avril 2012, 20:17:45 »

Quand tu envoies un tableau en argument en C tu peux pas spécifier la taille entre les crochets… Il me semble que tu dois simplement les laisser vide.
Du coup en général, tu envoies la taille en argument pour éviter tout dépassement (ou dans le cas où tu es sûr de la taille rentrée de ton tableau tu gères comme si la taille était connue).

Ou alors je n'ai pas bien compris la question.
Journalisée


Pas si petit…
PypeBros Hors ligne
Hero Member
*****
Messages: 707


Voir le profil WWW
Posez-vous les bonnes questions

« Réponse #2 : 03 Mai 2012, 10:42:11 »

vu le nombre d'arguments, ça commence à valoir la peine d'avoir une structure Map qui reprend toutes les infos sur ton niveau et de passer ça à générationMap, je trouve.

Code:
struct Map {
     unsigned mapwidth, mapheight;
     unsigned tilesmax;
     int *map;
     int *tiles;
};

Map map={
    mapx, mapy, tmax,
    your_map_array,
    your_tile_array
};

generationmap(&map, valeur_tiles);

generationmap(struct Map *m) {
    for (int i=0; i<m->mapheight; i++)
        for (int j=0; j<m->mapwidth; j++) {
            int vt = m->map[i*m->mapwidth+j]; // *
            if (vt>=0) {
               PA_SetLarge...(,m->tiles[vt][0]);
        }
}

Celà dit, calculer l'offset i*m->mapwidth+j à chaque itération est bourrin et inutile. On est en C, on a des pointeurs, alors je réécris:

Code:
generationmap(struct Map *m) {
    int *map = m->map; // commence au début du tableau
    for (int i=0; i<m->mapheight; i++)
        for (int j=0; j<m->mapwidth; j++) {
            int vt = *map++; // "prend la valeur à la position courante, puis avance d'une position"
            if (vt>=0) {
               PA_SetLarge...(,m->tiles[vt][0]);
        }
}
« Dernière édition: 22 Mai 2012, 08:23:31 par PypeBros » Journalisée

Dr.Razor Hors ligne
Newbie
*
Messages: 25


Voir le profil
« Réponse #3 : 11 Mai 2012, 16:44:57 »

ok merci je vais faire comme ça  Azn
Journalisée

Pages: [1]   Haut de page
Imprimer

Aller à: