Que opinan sobre esta idea para el code de un juego.

Iniciado por anonimo12121, 25 Agosto 2012, 11:12 AM

0 Miembros y 1 Visitante están viendo este tema.

anonimo12121

Mira me explico. Estaba hoy trabajando en el sistema de colisiones de mi juego.
Que funciona de la siguiente manera, carga una imagen en blanco y negro el negro es colisión, entonces lo que hace cada vez que comprueba si hay colisión es comprobar si el color de la imagen es negro, si es negro colisiona, y he pensado si lo hiciera de esta otra forma en tiempo play iría más rápido, me explico:

1- Carga la imagen en blanco y negro, comprueba su resolución en pixels.
2- Creo un bucle que añade a un bool[][] true si hay colisión y false si no lo hay.

entonces la idea básica es que a la hora de cargar el mapa y todo eso es algo más lento quizás pero a la hora de jugar es más rápido, por que no hay que llamar a una función par comprobar el color de cierto pixel de la imagen.

Código (cpp) [Seleccionar]
for(int y=0;y<SizeMapY*32;y++){
       for(int x=0;x<SizeMapX*32;x++){
           if(IMap->getPixel(x,y) == sf::Color::Black)PixelMap[y][x]=true;
           else PixelMap[y][x]=false;
       }
   }


El único inconveniente que le veo es a la hora de hacer mapa exagerados de quizás
Código (cpp) [Seleccionar]

bool map[1000000][1000000]

Los números son cada pixel, en este caso son 1000000 de ancho por alto. Una exageración pero bueno xD
Ustedes que opinan sobre esto?

Esto es una archivo de texto generado a partir de bucle.
http://img338.imageshack.us/img338/3791/mapmg.png
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

do-while

¡Buenas!

Anidar distintos bucles uno dentro de otro suele ser mas lento que ejecutar uno solo (por lo menos a mi me lo parece). Si tienes que recorrer una mtriz de n dimensiones, con rango Nn,...,N1 en cada una de ellas te basta con un solo bucle:

tipo matriz[Nn][Nn-1][N1];

for(i = 0 ; i < Nn * ... * N1 ; i++)

Teniendo esto, el subindice mas a la derecha sera: i % N1
Y yendo en orden hacia la izquierda, el subindice k sera: (i / (Nk-1 * ... * N1)) % Nk

En este caso tendrias:


for(i = 0 ; i < DIM_X * DIM_Y ; i++)
    if(v[i / DIM_Y][i % DIM_Y] == loquesea)


No se si te servira o no, ya te digo que no se si esto es mas rapido que anidar bucles. Lo pensare. Si alguno sabeis (con argumentos, claro esta) si es mas rapido esto que anidar bucles nos lo podriais contar...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

anonimo12121

Hombre si me dices que es más rápido lo hago así XD
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

do-while

#3
Voy a hacer una prueba y te comento los resultados.

¡Hasta ahora!

XD, la prueba falla. Esto (la parte de los bucles anidados) me da falta de segmentacion:
#include <time.h>

#define DIM1 1000LU
#define DIM2 1000LU
#define DIM3 1000LU

int main(int argc, char *argv[])
{
   int v[DIM1][DIM2][DIM3];
   unsigned long i,j,k,t;

   t = time(NULL);

   for(i = 0 ; i < DIM1 ; i++)
       for(j = 0 ; j < DIM2 ; j++)
           for(k = 0 ; k < DIM3 ; k++)
               v[i][j][k] = i;


Evidentemente no he puesto todo el codigo...

¿Os pasa lo mismo?

Compilado en ubuntu:

gcc -o ejecutable fuente

XD
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

anonimo12121

Por que pones 1000LU y no 1000? no se que es eso de LU xD
Yo apuesto a que te sales de la memoria xDD
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

do-while

LU despues de una constante significa que es unsigned long.

Es posible que el desplazamiento generado sobre el puntero v se salga de rango... aunque cada una de las dimensiones esta dentro del rango de un unsigned long...

De todas formas, reduciendo el valor de las constantes, no da la falta, pero ambos bucles terminan en menos de un segundo, por lo que no puedo hacer las comparaciones...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

0xDani

Evidentemente los bucles no se salen del rango de v, pero quiza el sistema no te deja reservar tanta memoria. Quiza funcione si reduces el tamaño del array y pones otro bucle que incluya a los otros tres, haga un tratamiento de la informacion almacenada en el array y lo vuelva a rellenar. Es decir, que el array no llegue a contener toda la informacion, sino que lo llenas, lo tratas y lo vuelves a llenar.

Piensa que al hacer:
Código (cpp) [Seleccionar]
int v[DIM1][DIM2][DIM3]; Estas reservando 1000x1000x1000xsizeof(int) bytes.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

anonimo12121

Hay cosas como esos de 1000LU que en mi vida he visto en un tutorial ni manual ni nada, no se como aprendiste eso XD.
creo que 0xDani tiene razón a mi antes me ha pasado algo similar  haciendo lo de  bool x[1000000][100000] xD

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

do-while

Es cierto, el problema esta en la declaracion.

Suponiendo que gcc trabaja con ints de 4 bytes, con las constantes indicadas v ocuparia 3,725290298GB. Un poco demasiado, ¿no?  :xD

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

0xDani

Cita de: XafiHay cosas como esos de 1000LU que en mi vida he visto en un tutorial ni manual ni nada, no se como aprendiste eso XD.

En serio? Yo si recuerdo haberlo visto en el curso C++ con Clase, creo.

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM