Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Abc7 en 25 de Octubre de 2004, 04:17:06 AM

Título: Dimensiones Del Mapa Dinamicas
Publicado por: Abc7 en 25 de Octubre de 2004, 04:17:06 AM
 weno yo tengo el siguiente codigo

// Dynamic Map Size ******
tile **MAP; // Pointer to a 'tile' pointer
cout << sizeof(tile) << endl;
MAP = new (tile*[50]);
//MAP = (tile**)malloc(sizeof(tile*) * 50);
for(x = 0; x < 50; x++)
{
 MAP[x] = new (tile[50]);
 //MAP[x] = (tile*)malloc(sizeof(tile) * 50);

}
// ****** Dynamic Map Size

cout << "Cargando Tiles..." << endl;

for (x=0;x<50;x++) {
 for (y=0;y<50;y++) {
  cout << x << " " << y << endl;
  MAP[x][y].loadgfx("grass.bmp");
  MAP[x][y].setpos(x*32,y*32,x*32-1,y*32-1);
 }
}

cout << "OK" << endl;

pero no funciona.. osea la clase TILE tiene a su vez un puntero a una clase TEXTURE, que la cargo dinamicamente tambien (osea con el operador new) y pero casi seguro q el error esta en ese codigo.. lo puse d las 2 maneras en q hago, con malloc y new, pero lo comente al malloc.. osea con el new me llega hasta x=23 y=1 y con malloc me llega hasta x=23 y=0 :S medio raro.. buen cosas de c++ =P

alguno sabe d esto? o sino como hicieron un mapa asi con dimensiones variables en c++?? graciasss saludosssss
Título: Dimensiones Del Mapa Dinamicas
Publicado por: Haddd en 25 de Octubre de 2004, 07:42:47 AM
 Si tu defines Tile **mapa, el compilador no tiene forma de resolver: mapa[X][y]. Lo que tienes que hace es:


TILE *mapa;

mapa=new tile[ancho*alto];

Y crear un función:

TILE *Posicion(int x,int y)
{
return mapa+x+y*ancho;
}
Título: Dimensiones Del Mapa Dinamicas
Publicado por: Pogacha en 25 de Octubre de 2004, 01:03:16 PM
 Lo mejor seria la clase Mapa


class Mapa {
 Tile *Datos;
 unsigned int int x,y;
public:
 Tile *TomarTile(unsigned int i, unsigned int j) { return &(Datos[( i%n) * x + (j%y)]); }
 Mapa(unsigned int i, unsigned int j) { x=i; y=j; Datos=new Tile[x*y]; }
};


Y despues asegurarte de que no cargas el grafico en cada tile sino que solo dejas un puntero al grafico
Y carga el mapa desde un archivo  :lol:

struct Tile
{
 bool atravesable, pierde_energia, choca, activa_evento1;

 TBitMap *Grafico;
 SetGrafico(TBitMap *g) { Grafico = g; }
};

Mapa *mapa=NULL;

TBitMap *Graficos;

void CargarMapa(void)
{
static unsigned char s[256];
 FILE *f;
 int i,j,x,y;
 int n_Graficos;

  f=fopen("Mapa.txt", "rt");

  s=fgets(s,f); // nunca me acuerdo si esta al reves fgets(f,s);
  sscanf(  s, "%d", &n_Graficos);

  Graficos=new TBitMap[n_Graficos];

  for(i=0; i<n_Graficos; i++)
 {
    s=fgets(s,f);
    Graficos[i].Cargar(s);
 }

  s=fgets(s,f); // nunca me acuerdo si esta al reves fgets(f,s);
  sscanf(  s, "%d %d", &x, &y);

 mapa=new Mapa(x,y);

  for (i=0;i<j; i++)
  {
      s=fgets(s,f); // nunca me acuerdo si esta al reves fgets(f,s);
      for (j=0;j<x;j++)   mapa->TomarTile(i,j)->SetGrafico( &Graficos[unsigned int(s[j])] );
  }
}


Ojo: Escrito al vuelo. ;)
Saludos
Título: Dimensiones Del Mapa Dinamicas
Publicado por: Abc7 en 26 de Octubre de 2004, 04:02:24 AM
 ahhhhh la verdad es q no entendi nada lo d pogacha.. buen pero me voi a fijar luego como hacerlo bien.. gracias por la rapida respuesta!!  :D  
Título: Dimensiones Del Mapa Dinamicas
Publicado por: Abc7 en 03 de Noviembre de 2004, 02:20:59 AM
 el problema era como dijo pogacha q estaba cargando unas 2500 texturas (en realidad llegaba hasta 1150) eso ocasionaba el error... aora funciona bien... gracias!!!