30

Martial Demolins :
idem, mais surtout pour la facilité de maintenance (surtout en cours de développement).


En effet, on peut faire qqc du genre :

Pour les sprites suivante :
static unsigned long altarL[]={...};
static unsigned long altarD[]={...};

On code pour faire la sauvegarde :

FILE *f = fopen("maRes", "wb");

fwrite (altarL, sizeof(unsigned long), 32, f);
fwrite (altarD, sizeof(unsigned long), 32, f);

Dans le jeu, on déclare les tableaux suivants :

unsigned long * altarL ;
unsigned long * altarD ;

On récupère comme suit :

FILE *f = fopen("maRes", "rb");

altarL = malloc(sizeof(unsigned long) * 32);
altarD = malloc(sizeof(unsigned long) * 32);

fread (altarL, sizeof(unsigned long), 32, f);
fread (altarD, sizeof(unsigned long), 32, f);

J'ai pas vérifié (comme je sais que quelqu'un vas le souligner s'il y a une erreur), mais ça devrait fonctionner ...

31

ouais je trouve que l'idée de quesoft est pas mal. C'est ce que j'ai cherché cet aprèm avec le FOPEN.
Sinon pour la méthode de kevin kofler, une fois que j'ai le fichier externe. Comment je fais pour utiliser
les données à l'intérieur?
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

32

l'idée de kevin est un peu compliquée. Comment est-ce qu'on peut mettre des marqueurs directement et ne pas avoir de fonction main??
sinon pour quesoft, cela voudrais dire qu'il faut par exemple faire un fichier qui installe les sprites et les maps?
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

33

À bas fopen sur TI, c'est la manière la plus inefficace d'accéder à un fichier. Vive vat.h!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

34

Kevin Kofler :
À bas fopen sur TI, c'est la manière la plus inefficace d'accéder à un fichier. Vive vat.h!

Sur, mais c'est la manière la plus conviviale, à mon avis ...

35

Je sais que tu es pour la simplicité de programmation avant l'efficacité, mais je ne suis pas d'accord avec toi sur ce point.

Et puis je trouve que vat.h est vraiment très facile à utiliser une fois qu'on est sorti de l'idée fixe des fichiers comme "streams", et rentré dans le concept de fichiers en mémoire. Concept qui d'ailleurs est supporté sous POSIX aussi, même si pas tout à fait de la même manière évidemment (mmap).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

36

Kevin Kofler :
Je sais que tu es pour la simplicité de programmation avant l'efficacité, mais je ne suis pas d'accord avec toi sur ce point.


En fait je suis pour le fonctionnel, i.e. orienter le développement de programmes vers la rencontre des objectifs qu'on s'est fixé, plutôt qu'une recherche fanatique d'efficiency(italique = emprunt à l'anglais pour faire plaisir aux puristes).
Kevin Kofler :
Et puis je trouve que vat.h est vraiment très facile à utiliser une fois qu'on est sorti de l'idée fixe des fichiers comme "streams", et rentré dans le concept de fichiers en mémoire. Concept qui d'ailleurs est supporté sous POSIX aussi, même si pas tout à fait de la même manière évidemment (mmap).

Je l'ai utilisé à quelques reprises, dans les dernières mises à jour du MDK et pour PBasic, et je dois avouer que tu as raison : ce n'est pas si obscure. Mais je trouve l'exemple avec fopen plus simple (pas de SYM_ENTRY, HeapLock, etc...).

37

38

filelib ne sert à rien, utilise vat.h directement, c'est facile!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

39

40

trop trop bien : la méthode de quesoft fonctionne parfaitement.
Le truc c'est qu'il faut faire un fichier d'installation. Comment c'est trop bien!!!
merci merci merci.
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

41

DoomAngel :
trop trop bien : la méthode de quesoft fonctionne parfaitement.
Le truc c'est qu'il faut faire un fichier d'installation. Comment c'est trop bien!!!
merci merci merci.

Pas de problème ...

42

Pas besoin de faire un fichier d'installation pour l'utilisateur, tu lances ton programme une fois, tu récupères le fichier qui sort et tu le fournis avec ton programme principal.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

43

Bon alors la il y a quelque chose que je ne comprends pas du tout.
J'ai stocké les sprites dans un fichier externe. Le prog principal utilise
ces sprites sans problèmes.
Mais voila, je veux créer une matrice qui stock l'ordre des sprites
ex {{spr1 LIGHT,spr1 DARK},{spr2 LIGHT,spr2 DARK}...} << dans le programme c'est Usprites. #include <tigcclib.h> #include <extgraph.h> #define ymax 13 #define xmax 13 short map[ymax+1][xmax+1]={ {04,-1,04,-1,04,-1,04,-1,04,-1,04,-1,04,-1}, {-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3}, {04,-1,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,04,-1}, {-2,-3,-5,03,-1,-5,07,-1,-5,05,-1,-5,-2,-3},      {04,-1,-5,-2,-3,-5,-2,-3,-5,-2,-3,-5,04,-1}, {-2,-3,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-2,-3}, {04,-1,-5,02,-1,-5,01,-1,-5,00,-1,-5,04,-1}, {-2,-3,-5,-2,-3,-5,-2,-3,-5,-2,-3,-5,-2,-3}, {04,-1,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,04,-1}, {-2,-3,-5,-5,06,-1,-5,-5,-5,-5,-5,-5,-5,-5}, {04,-1,-5,-5,-2,-3,-5,-5,-5,-5,-5,-5,-5,-5}, {-2,-3,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-2,-3}, {04,-1,04,-1,04,-1,04,-1,04,-1,04,-1,04,-1}, {-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3}}; // prépare les noms des sprites unsigned long * altarL ;  unsigned long * altarD ;  unsigned long * cryptL ;  unsigned long * cryptD ;  unsigned long * graveyardL ;  unsigned long * graveyardD ;  unsigned long * hauntedL ;  unsigned long * hauntedD ;  unsigned long * zigguratL ;  unsigned long * zigguratD ;  unsigned long * zigguratTL ;  unsigned long * zigguratTD ;  unsigned long * templeL ;  unsigned long * templeD ;  unsigned long * necropolisL ;  unsigned long * necropolisD ; long *Usprites[8][2]={{}}; void DRAWMAP(short x, short y,short mode); void move(short x,short y); short mod16(short x); void initiate(void); void empty(void); void _main() {      INT_HANDLER ai1,ai5;      ai1=GetIntVec(AUTO_INT_1);   ai5=GetIntVec(AUTO_INT_5);   SetIntVec(AUTO_INT_1,DUMMY_HANDLER);   SetIntVec(AUTO_INT_5,DUMMY_HANDLER);            short mapX=0,mapY=0;      ClrScr();         Usprites[8][2]={      {altarL,altarD},      {cryptL,cryptD},      {graveyardL,graveyardD},      {hauntedL,hauntedD},      {zigguratL,zigguratD},      {zigurratTL,zigguratTD},      {templeL,templeD},      {necropolisL,necropolisD}};                        if (!GrayOn())           return;      ClrScr();      Sprite32 (0, 0, 32, altarL, GetPlane(0), SPRT_OR);       Sprite32 (0, 0, 32, altarD, GetPlane(1), SPRT_OR);      Sprite32 (0, 32, 32, cryptL, GetPlane(0), SPRT_OR);       Sprite32 (0, 32, 32, cryptD, GetPlane(1), SPRT_OR);      Sprite32 (0, 64, 32, graveyardL, GetPlane(0), SPRT_OR);       Sprite32 (0, 64, 32, graveyardD, GetPlane(1), SPRT_OR);      Sprite32 (32, 0, 32, hauntedL, GetPlane(0), SPRT_OR);       Sprite32 (32, 0, 32, hauntedD, GetPlane(1), SPRT_OR);      Sprite32 (32, 32, 32, zigguratL, GetPlane(0), SPRT_OR);       Sprite32 (32, 32, 32, zigguratD, GetPlane(1), SPRT_OR);      Sprite32 (32, 64, 32, zigguratTL, GetPlane(0), SPRT_OR);       Sprite32 (32, 64, 32, zigguratTD, GetPlane(1), SPRT_OR);      Sprite32 (64, 0, 32, templeL, GetPlane(0), SPRT_OR);       Sprite32 (64, 0, 32, templeD, GetPlane(1), SPRT_OR);      Sprite32 (64, 32, 32, necropolisL, GetPlane(0), SPRT_OR);       Sprite32 (64, 32, 32, necropolisD, GetPlane(1), SPRT_OR);      ngetchx();      ClrScr();            move(mapX,mapY);      GrayOff();      SetIntVec(AUTO_INT_1,ai1);   SetIntVec(AUTO_INT_5,ai5); } void initiate(void) {      FILE *f = fopen("wardata", "rb");  // prépare la taille des sprites      altarL = malloc(sizeof(unsigned long) * 32);       altarD = malloc(sizeof(unsigned long) * 32);       cryptL = malloc(sizeof(unsigned long) * 32);       cryptD = malloc(sizeof(unsigned long) * 32);       graveyardL = malloc(sizeof(unsigned long) * 32);       graveyardD = malloc(sizeof(unsigned long) * 32);       hauntedL = malloc(sizeof(unsigned long) * 32);       hauntedD = malloc(sizeof(unsigned long) * 32);       zigguratL = malloc(sizeof(unsigned long) * 32);       zigguratD = malloc(sizeof(unsigned long) * 32);       zigguratTL = malloc(sizeof(unsigned long) * 32);       zigguratTD = malloc(sizeof(unsigned long) * 32);       templeL = malloc(sizeof(unsigned long) * 32);       templeD = malloc(sizeof(unsigned long) * 32);       necropolisL = malloc(sizeof(unsigned long) * 32);       necropolisD = malloc(sizeof(unsigned long) * 32);  // recherche les données correspondantes aux sprites      fread (altarL, sizeof(unsigned long), 32, f);       fread (altarD, sizeof(unsigned long), 32, f);       fread (cryptL, sizeof(unsigned long), 32, f) ;       fread (cryptD, sizeof(unsigned long), 32, f) ;       fread (graveyardL, sizeof(unsigned long), 32, f) ;       fread (graveyardD, sizeof(unsigned long), 32, f) ;       fread (hauntedL, sizeof(unsigned long), 32, f) ;       fread (hauntedD, sizeof(unsigned long), 32, f) ;       fread (zigguratL, sizeof(unsigned long), 32, f) ;       fread (zigguratD, sizeof(unsigned long), 32, f) ;       fread (zigguratTL, sizeof(unsigned long), 32, f) ;       fread (zigguratTD, sizeof(unsigned long), 32, f) ;       fread (templeL, sizeof(unsigned long), 32, f) ;       fread (templeD, sizeof(unsigned long), 32, f) ;       fread (necropolisL, sizeof(unsigned long), 32, f) ;       fread (necropolisD, sizeof(unsigned long), 32, f) ;  } void empty(void){      // libère l'espace utilisé par les sprites      free(altarL) ;       free(altarD) ;       free(cryptL) ;       free(cryptD) ;       free(graveyardL) ;       free(graveyardD) ;       free(hauntedL) ;       free(hauntedD) ;       free(zigguratL) ;       free(zigguratD) ;       free(zigguratTL) ;       free(zigguratTD) ;       free(templeL) ;       free(templeD) ;       free(necropolisL) ;       free(necropolisD) ;       } void move(short x,short y) {      short tmpx=1,tmpy=1;            DRAWMAP(x,y,0);      do {           if (tmpx!=x || tmpy!=y)                DRAWMAP(x,y,1);                tmpx=x;                tmpy=y;                           if (_keytest(RR_LEFT) && x>-144){                ScrollRight160(GetPlane(0),100);                ScrollRight160(GetPlane(1),100);                x--;                               }           if (_keytest(RR_RIGHT) && x<xmax*16  ){                ScrollLeft160(GetPlane(0),100);                ScrollLeft160(GetPlane(1),100);                x++;           }           if (_keytest(RR_UP) && y>-80){                ScrollDown160(GetPlane(0),100);                ScrollDown160(GetPlane(1),100);                y--;           }           if (_keytest(RR_DOWN) && y<ymax*16  ){           //     GraySprite16_XOR(posX,posY,16,frame,frame,GetPlane(0),GetPlane(1));                ScrollUp160(GetPlane(0),100);                ScrollUp160(GetPlane(1),100);                y++;           }                                       } while (!_keytest(RR_ESC)); } short mod16(short x) {           return (x-(x%16))/16; } // dessine toute la partie d'ecran utilisee void DRAWMAP(short x, short y,short mode) {           short i=0,j=0,tmp; //           GraySprite16_XOR_R(posX,posY,16,frame,frame,GetPlane(0),GetPlane(1));            if (mode==0){                 for( i = mod16(x); i < (mod16(x)+11); i++)                 for( j = mod16(y); j < (mod16(y)+7); j++)                  if (i>=0 && i<=xmax && j>=0 && j<=ymax)                            GrayClipSprite32_OR_R((16*i)-x,(16*j)-y, 16, Usprites[(map[j][i])][0], Usprites[(map[j][i])][1],GetPlane(0),GetPlane(1));         }         else{ // Initilisation de j                           j=mod16(y); // Cote haut              for( i = mod16(x); i < (mod16(x)+11); i++)                   if (i>=0 && i<=xmax && j>=0)                   GrayClipSprite32_OR_R((16*i)-x,(16*j)-y, 16, Usprites[(map[j][i])][0], Usprites[(map[j][i])][1],GetPlane(0),GetPlane(1)); // Cote bas                           for(tmp=j+5;tmp<j+7;tmp++)                   for( i = mod16(x); i < (mod16(x)+11); i++)                        if (i>=0 && i<=xmax && tmp<=ymax)                        GrayClipSprite32_OR_R((16*i)-x,(16*tmp)-y, 16, Usprites[(map[tmp][i])][0], Usprites[(map[tmp][i])][1],GetPlane(0),GetPlane(1));      // Initialisation de i                           i=mod16(x); // Cote gauche              for( j = mod16(y); j < (mod16(y)+7); j++)                   if (i>=0 && j>=0 && j<=ymax)                   GrayClipSprite32_OR_R((16*i)-x,(16*j)-y, 16, Usprites[(map[j][i])][0], Usprites[(map[j][i])][1],GetPlane(0),GetPlane(1)); // Cote droit                            for(tmp=i+9;tmp<i+11;tmp++)                  for( j = mod16(y); j < (mod16(y)+7); j++)                        if (tmp<=xmax && j>=0 && j<=ymax)                        GrayClipSprite32_OR_R((16*tmp)-x,(16*j)-y, 16, Usprites[(map[j][tmp])][0], Usprites[(map[j][tmp])][1],GetPlane(0),GetPlane(1));         }                              }
Mais le problème c'est que le compilateur me donne une "Parse Error Before "{" token" au niveau de Usprites[8][2]={{altarL,altarD},...}
dans le main.
Je vois vraiment pas d'ou vient l'erreur.
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

44

DoomAngel :
Bon alors la il y a quelque chose que je ne comprends pas du tout.
J'ai stocké les sprites dans un fichier externe. Le prog principal utilise
ces sprites sans problèmes.
Mais voila, je veux créer une matrice qui stock l'ordre des sprites
ex {{spr1 LIGHT,spr1 DARK},{spr2 LIGHT,spr2 DARK}...} << dans le programme c'est Usprites. #include <tigcclib.h> #include <extgraph.h> #define ymax 13 #define xmax 13 short map[ymax+1][xmax+1]={ {04,-1,04,-1,04,-1,04,-1,04,-1,04,-1,04,-1}, {-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3}, {04,-1,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,04,-1}, {-2,-3,-5,03,-1,-5,07,-1,-5,05,-1,-5,-2,-3},      {04,-1,-5,-2,-3,-5,-2,-3,-5,-2,-3,-5,04,-1}, {-2,-3,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-2,-3}, {04,-1,-5,02,-1,-5,01,-1,-5,00,-1,-5,04,-1}, {-2,-3,-5,-2,-3,-5,-2,-3,-5,-2,-3,-5,-2,-3}, {04,-1,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,04,-1}, {-2,-3,-5,-5,06,-1,-5,-5,-5,-5,-5,-5,-5,-5}, {04,-1,-5,-5,-2,-3,-5,-5,-5,-5,-5,-5,-5,-5}, {-2,-3,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-2,-3}, {04,-1,04,-1,04,-1,04,-1,04,-1,04,-1,04,-1}, {-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3,-2,-3}}; // prépare les noms des sprites unsigned long * altarL ;  unsigned long * altarD ;  unsigned long * cryptL ;  unsigned long * cryptD ;  unsigned long * graveyardL ;  unsigned long * graveyardD ;  unsigned long * hauntedL ;  unsigned long * hauntedD ;  unsigned long * zigguratL ;  unsigned long * zigguratD ;  unsigned long * zigguratTL ;  unsigned long * zigguratTD ;  unsigned long * templeL ;  unsigned long * templeD ;  unsigned long * necropolisL ;  unsigned long * necropolisD ; long *Usprites[8][2]={{}}; void DRAWMAP(short x, short y,short mode); void move(short x,short y); short mod16(short x); void initiate(void); void empty(void); void _main() {      INT_HANDLER ai1,ai5;      ai1=GetIntVec(AUTO_INT_1);   ai5=GetIntVec(AUTO_INT_5);   SetIntVec(AUTO_INT_1,DUMMY_HANDLER);   SetIntVec(AUTO_INT_5,DUMMY_HANDLER);            short mapX=0,mapY=0;      ClrScr();         Usprites[8][2]={      {altarL,altarD},      {cryptL,cryptD},      {graveyardL,graveyardD},      {hauntedL,hauntedD},      {zigguratL,zigguratD},      {zigurratTL,zigguratTD},      {templeL,templeD},      {necropolisL,necropolisD}};                        if (!GrayOn())           return;      ClrScr();      Sprite32 (0, 0, 32, altarL, GetPlane(0), SPRT_OR);       Sprite32 (0, 0, 32, altarD, GetPlane(1), SPRT_OR);      Sprite32 (0, 32, 32, cryptL, GetPlane(0), SPRT_OR);       Sprite32 (0, 32, 32, cryptD, GetPlane(1), SPRT_OR);      Sprite32 (0, 64, 32, graveyardL, GetPlane(0), SPRT_OR);       Sprite32 (0, 64, 32, graveyardD, GetPlane(1), SPRT_OR);      Sprite32 (32, 0, 32, hauntedL, GetPlane(0), SPRT_OR);       Sprite32 (32, 0, 32, hauntedD, GetPlane(1), SPRT_OR);      Sprite32 (32, 32, 32, zigguratL, GetPlane(0), SPRT_OR);       Sprite32 (32, 32, 32, zigguratD, GetPlane(1), SPRT_OR);      Sprite32 (32, 64, 32, zigguratTL, GetPlane(0), SPRT_OR);       Sprite32 (32, 64, 32, zigguratTD, GetPlane(1), SPRT_OR);      Sprite32 (64, 0, 32, templeL, GetPlane(0), SPRT_OR);       Sprite32 (64, 0, 32, templeD, GetPlane(1), SPRT_OR);      Sprite32 (64, 32, 32, necropolisL, GetPlane(0), SPRT_OR);       Sprite32 (64, 32, 32, necropolisD, GetPlane(1), SPRT_OR);      ngetchx();      ClrScr();            move(mapX,mapY);      GrayOff();      SetIntVec(AUTO_INT_1,ai1);   SetIntVec(AUTO_INT_5,ai5); } void initiate(void) {      FILE *f = fopen("wardata", "rb");  // prépare la taille des sprites      altarL = malloc(sizeof(unsigned long) * 32);       altarD = malloc(sizeof(unsigned long) * 32);       cryptL = malloc(sizeof(unsigned long) * 32);       cryptD = malloc(sizeof(unsigned long) * 32);       graveyardL = malloc(sizeof(unsigned long) * 32);       graveyardD = malloc(sizeof(unsigned long) * 32);       hauntedL = malloc(sizeof(unsigned long) * 32);       hauntedD = malloc(sizeof(unsigned long) * 32);       zigguratL = malloc(sizeof(unsigned long) * 32);       zigguratD = malloc(sizeof(unsigned long) * 32);       zigguratTL = malloc(sizeof(unsigned long) * 32);       zigguratTD = malloc(sizeof(unsigned long) * 32);       templeL = malloc(sizeof(unsigned long) * 32);       templeD = malloc(sizeof(unsigned long) * 32);       necropolisL = malloc(sizeof(unsigned long) * 32);       necropolisD = malloc(sizeof(unsigned long) * 32);  // recherche les données correspondantes aux sprites      fread (altarL, sizeof(unsigned long), 32, f);       fread (altarD, sizeof(unsigned long), 32, f);       fread (cryptL, sizeof(unsigned long), 32, f) ;       fread (cryptD, sizeof(unsigned long), 32, f) ;       fread (graveyardL, sizeof(unsigned long), 32, f) ;       fread (graveyardD, sizeof(unsigned long), 32, f) ;       fread (hauntedL, sizeof(unsigned long), 32, f) ;       fread (hauntedD, sizeof(unsigned long), 32, f) ;       fread (zigguratL, sizeof(unsigned long), 32, f) ;       fread (zigguratD, sizeof(unsigned long), 32, f) ;       fread (zigguratTL, sizeof(unsigned long), 32, f) ;       fread (zigguratTD, sizeof(unsigned long), 32, f) ;       fread (templeL, sizeof(unsigned long), 32, f) ;       fread (templeD, sizeof(unsigned long), 32, f) ;       fread (necropolisL, sizeof(unsigned long), 32, f) ;       fread (necropolisD, sizeof(unsigned long), 32, f) ;  } void empty(void){      // libère l'espace utilisé par les sprites      free(altarL) ;       free(altarD) ;       free(cryptL) ;       free(cryptD) ;       free(graveyardL) ;       free(graveyardD) ;       free(hauntedL) ;       free(hauntedD) ;       free(zigguratL) ;       free(zigguratD) ;       free(zigguratTL) ;       free(zigguratTD) ;       free(templeL) ;       free(templeD) ;       free(necropolisL) ;       free(necropolisD) ;       } void move(short x,short y) {      short tmpx=1,tmpy=1;            DRAWMAP(x,y,0);      do {           if (tmpx!=x || tmpy!=y)                DRAWMAP(x,y,1);                tmpx=x;                tmpy=y;                           if (_keytest(RR_LEFT) && x>-144){                ScrollRight160(GetPlane(0),100);                ScrollRight160(GetPlane(1),100);                x--;                               }           if (_keytest(RR_RIGHT) && x<xmax*16  ){                ScrollLeft160(GetPlane(0),100);                ScrollLeft160(GetPlane(1),100);                x++;           }           if (_keytest(RR_UP) && y>-80){                ScrollDown160(GetPlane(0),100);                ScrollDown160(GetPlane(1),100);                y--;           }           if (_keytest(RR_DOWN) && y<ymax*16  ){           //     GraySprite16_XOR(posX,posY,16,frame,frame,GetPlane(0),GetPlane(1));                ScrollUp160(GetPlane(0),100);                ScrollUp160(GetPlane(1),100);                y++;           }                                       } while (!_keytest(RR_ESC)); } short mod16(short x) {           return (x-(x%16))/16; } // dessine toute la partie d'ecran utilisee void DRAWMAP(short x, short y,short mode) {           short i=0,j=0,tmp; //           GraySprite16_XOR_R(posX,posY,16,frame,frame,GetPlane(0),GetPlane(1));            if (mode==0){                 for( i = mod16(x); i < (mod16(x)+11); i++)                 for( j = mod16(y); j < (mod16(y)+7); j++)                  if (i>=0 && i<=xmax && j>=0 && j<=ymax)                            GrayClipSprite32_OR_R((16*i)-x,(16*j)-y, 16, Usprites[(map[j][i])][0], Usprites[(map[j][i])][1],GetPlane(0),GetPlane(1));         }         else{ // Initilisation de j                           j=mod16(y); // Cote haut              for( i = mod16(x); i < (mod16(x)+11); i++)                   if (i>=0 && i<=xmax && j>=0)                   GrayClipSprite32_OR_R((16*i)-x,(16*j)-y, 16, Usprites[(map[j][i])][0], Usprites[(map[j][i])][1],GetPlane(0),GetPlane(1)); // Cote bas                           for(tmp=j+5;tmp<j+7;tmp++)                   for( i = mod16(x); i < (mod16(x)+11); i++)                        if (i>=0 && i<=xmax && tmp<=ymax)                        GrayClipSprite32_OR_R((16*i)-x,(16*tmp)-y, 16, Usprites[(map[tmp][i])][0], Usprites[(map[tmp][i])][1],GetPlane(0),GetPlane(1));      // Initialisation de i                           i=mod16(x); // Cote gauche              for( j = mod16(y); j < (mod16(y)+7); j++)                   if (i>=0 && j>=0 && j<=ymax)                   GrayClipSprite32_OR_R((16*i)-x,(16*j)-y, 16, Usprites[(map[j][i])][0], Usprites[(map[j][i])][1],GetPlane(0),GetPlane(1)); // Cote droit                            for(tmp=i+9;tmp<i+11;tmp++)                  for( j = mod16(y); j < (mod16(y)+7); j++)                        if (tmp<=xmax && j>=0 && j<=ymax)                        GrayClipSprite32_OR_R((16*tmp)-x,(16*j)-y, 16, Usprites[(map[j][tmp])][0], Usprites[(map[j][tmp])][1],GetPlane(0),GetPlane(1));         }                              }
Mais le problème c'est que le compilateur me donne une "Parse Error Before "{" token" au niveau de Usprites[8][2]={{altarL,altarD},...}
dans le main.
Je vois vraiment pas d'ou vient l'erreur.

Je ne sais pas si tu peux initialiser ton tableau après l'avoir déclaré ... Kevin pourra te répondre.

Est-ce que ça marche avec ce qui suit ?
Usprites={
{altarL,altarD},
{cryptL,cryptD},
{graveyardL,graveyardD},
{hauntedL,hauntedD},
{zigguratL,zigguratD},
{zigurratTL,zigguratTD},
{templeL,templeD},
{necropolisL,necropolisD}};

ou encore (si on ne peux pas initialiser) :

Usprites[0][0] = altarL ;
Usprites[0][1] = altarD ;
Usprites[1][0] = cryptL;
Usprites[1][1] = cryptD;
...

-edit-
Les crochets n'apparaissent pas ... Je ne me souviens plus des balises pour pouvoir afficher des caractères réservés. Tu peux editer mon post pour les voir en attendant ...

45

ben le pb c'est que si je met Usprites en dehors du main il me dit qu'aucun des éléments n'est constant.
j'attend kevin alors
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

46

> À bas fopen sur TI, c'est la manière la plus inefficace d'accéder à un fichier. Vive vat.h!
> filelib ne sert à rien, utilise vat.h directement, c'est facile!
C'est vrai. filelib est une réinvention de la roue, encore plus qu'on peut le penser quand on ne sait pas ce qu'AMS contient vraiment...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

47

DoomAngel :
ben le pb c'est que si je met Usprites en dehors du main il me dit qu'aucun des éléments n'est constant.
j'attend kevin alors

Mais si tu déclare un tableau global 8 x 2 :

unsigned long * Usprites[8][2] ; //Tableau de pointeurs vers des ulong ...

et qu'ensuite tu le remplis case par case, je ne comprend pas pourquoi ça ne marche pas ...

Au pire, si c'est un problème avec le C qui ne 'voit' pas les dimensions de ton tableau, fais en un plat et émule les deux dimensions :
unsigned long * Usprites[8*2] ;

...
#define ligne 0;
#define colonne 0 ;
Usprites[ligne * 2 + colonne] = altarL ;
...

48

Vire ça:
  Usprites[8][2]={
     {altarL,altarD},
     {cryptL,cryptD},
     {graveyardL,graveyardD},
     {hauntedL,hauntedD},
     {zigguratL,zigguratD},
     {zigurratTL,zigguratTD},
     {templeL,templeD},
     {necropolisL,necropolisD}};

de ton _main et mets directement:
long *Usprites[8][2]={
     {altarL,altarD},
     {cryptL,cryptD},
     {graveyardL,graveyardD},
     {hauntedL,hauntedD},
     {zigguratL,zigguratD},
     {zigurratTL,zigguratTD},
     {templeL,templeD},
     {necropolisL,necropolisD}};

en global.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

49

Kevin Kofler :
Vire ça:
  Usprites[8][2]={
     {altarL,altarD},
     {cryptL,cryptD},
     {graveyardL,graveyardD},
     {hauntedL,hauntedD},
     {zigguratL,zigguratD},
     {zigurratTL,zigguratTD},
     {templeL,templeD},
     {necropolisL,necropolisD}};

de ton _main et mets directement:
long *Usprites[8][2]={
     {altarL,altarD},
     {cryptL,cryptD},
     {graveyardL,graveyardD},
     {hauntedL,hauntedD},
     {zigguratL,zigguratD},
     {zigurratTL,zigguratTD},
     {templeL,templeD},
     {necropolisL,necropolisD}};

en global.


Je suis peut-être roullé en C et je peux me tromper, mais il me semble que ça ne fonctionnera pas :

Quand le tableau global de pointeurs USprites sera initialisé (au début du programme je suppose), ses pointeurs vont pointer vers des adresses différentes de celles des blocs alloués ultérieurement par malloc, non ?

À moins de faire une double indirrection i.e. tableau de pointeurs vers des pointeurs ... mais ça ne semble pas être le cas (tableau de pointeurs) ...

50

Ah oui. Je n'avais pas vu en survolant qu'il allouait ça avec malloc, je pensais que c'étaient des tableaux dans le programme. sick, 16 malloc...

Je mettrais:
unsigned long (*Usprites)[2][32];

void _main(void)
{
  Usprites=malloc(8*2*32*sizeof(unsigned long));
  ...
  free(Usprites);
}


Un seul malloc suffit, et pas besoin d'un tableau de pointeurs.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

51

Kevin Kofler :
Ah oui. Je n'avais pas vu en survolant qu'il allouait ça avec malloc, je pensais que c'étaient des tableaux dans le programme. sick, 16 malloc...

Je mettrais:
unsigned long (*Usprites)[2][32];

void _main(void)
{
  Usprites=malloc(8*2*32*sizeof(unsigned long));
  ...
  free(Usprites);
}


Un seul malloc suffit, et pas besoin d'un tableau de pointeurs.

Ok, ça me rassure, j'ai pas tout perdu ce que j'avais appris du C ...

C'est cute :
unsigned long (*Usprites)[2][32];
Je ne savais pas que l'on pouvait faire ça pour indiquer les dimentions du tableau au compilateur ...

52

On est obligé de les indiquer, sinon, il ne sait pas vers quoi Usprites pointe, et ne peux pas gérer correctement l'arithmétique des pointeurs.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

53

ben j'ai tout essayé encore mais ca ne marche toujours pas.
quand je met après tout ce que vous m'avez dis
Usprites[8][2]={
{altarL,altarD},
{cryptL,cryptD},
{graveyardL,graveyardD},
{hauntedL,hauntedD},
{zigguratL,zigguratD},
{zigurratTL,zigguratTD},
{templeL,templeD},
{necropolisL,necropolisD}};
le compilateur me remet "parse error before '{' token" en me montrant le { juste après le =.
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

54

Ben, il ne faut pas mettre ça. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

55

mais c'est bizarre comme erreur. Ca pourrait venir du compilateur?
parce que le code a l'air correct apparemment.
sinon j'ai essayé de stocker Usprites dans le fichier externe et la le compilateur ne dit rien.
après j'ai fait pour unsigned long *Usprites[8][2]

Dans le prog principal j'ai
Usprites=malloc(8*2*sizeof(unsigned long));
fread (Usprites, sizeof(unsigned long), 8*2, f) ; //après un fopen

mais par exemple si je met
Sprite32 (0, 0, 32, Usprites[0][0], GetPlane(0), SPRT_OR);
j'ai a l'écran un truc bizarre sans forme apparente.Est-ce que j'ai bien défini Usprites?

Edit par Ximoon: couleurs enlevées, code fixé
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

56

DoomAngel :
mais c'est bizarre comme erreur. Ca pourrait venir du compilateur?
parce que le code a l'air correct apparemment.

En fait, c'est juste que le compilateur n'accepte pas que tu assigne un 'littéral de tableau' (je ne sais pas comment le qualifier) autrement que comme valeur initiale.
DoomAngel :
sinon j'ai essayé de stocker Usprites dans le fichier externe et la le compilateur ne dit rien.
après j'ai fait pour unsigned long *Usprites[8][2]

Dans le prog principal j'ai
Usprites=malloc(8*2*sizeof(unsigned long));
fread (Usprites, sizeof(unsigned long), 8*2, f) ; //après un fopen

Tu alloues un tableau de 8 x 2 unsigned long. Il faut que tu le déclare comme Kevin le proposait, i.e. comme un pointeur ‘casté’ en tableau de 8 x 2 x 32 :
unsigned long (*Usprites)[8][2][32]


et que tu l'alloues en conséquence :
Usprites=malloc(8*2*32*sizeof(unsigned long));

Ensuite, tu peux récupérer les sprites une par une :
fread (Usprites[0][0], sizeof(unsigned long), 32, f);
fread (Usprites[0][1], sizeof(unsigned long), 32, f);
…


ou tout d’un bloc :
fread (Usprites, 8 * 2 * sizeof(unsigned long), 32, f);

DoomAngel :
mais par exemple si je met
Sprite32 (0, 0, 32, Usprites[0][0], GetPlane(0), SPRT_OR); 

j'ai a l'écran un truc bizarre sans forme apparente.Est-ce que j'ai bien défini Usprites?

En fait, assure toi que tu enregistre et récupère bien tes sprites. Pour l’enregistrement, si tu récupère tout d’un bloc, assure toi de respecter l’ordre du tableau.
[0][0] ; [0][1] ; …
altarD,  altarL, …

57

sinon je voudrais utiliser un sprintf puis un printf pour afficher ce que une case de la matrice Usprites contient.
C'est quoi que je dois utiliser pour le type "unsigned long"? %ul?
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

58

Presque. %lu.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

59

ok merci. j'espère que je pourrais trouver l'erreur
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

60

bon ben apparemment il y a des gros problèmes dans les cases de la matrice.
Je pense que je vais changer de méthode.Je vais faire une matrice générale du style:
Usprites[][]={
{,,,,,,,,,,,,,,,,,}, // sprites altarL
{,,,,,,,,,,,,,,,,,}, // sprites altarD
....
{.................}};
Je sais pas si c'est pas plus conseillé de faire ca?
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)