Los trabajos en diseño y producción de Sandwich Tower progresan, pronto podremos ver los resultados
Un año mas en Barcelona Games World
Con el fin de facilitar un poco la compresión del código utilizado en el juego os pasaremos unas notas que creemos que os ayudarán.
Máquina de estados: Según mis apuntes «Entendemos por un estado de un videojuego un módulo independiente que realiza una funcionalidad específica y que tiene su propio gestor de eventos, su bucle principal y su engine gráfico para mostrar la información por pantalla» ¿No esta claro?Nota:En la entrada damos un ejemplo de la implementación de un estado en el juego
Alta de un jugador: En este apartado explicamos como crear un jugador nuevo en esta caso player3, creación de los objetos, como especificar la teclas de movimientos, etc.
Control de disparo: ¿Donde se ha visto un juego de disparos en el que no se pueda disparar? Pues eso, en esta caso explicamos los detalle de control de disparos movimiento de los proyectiles, puntuación del jugador y mucho mas.
Creación de niveles: Ultimo punto pero no menos importa te, aquí describiremos como se crea el escenario donde transcurre la partida
Recordad que el juego ha sido desarrollado en C++ y OpenGL. Es código abierto sobre licencia y que esta disponible en githud
Encontrareis puntos expuestos:
La estrategia has seguida para que modelar el escenario se podra definir en dos partes principales.
En el primer punto leeremos un fichero (bmp) y buscaremos los pixel de color negro una vez localizados pasaremos esas coordenadas referentes a la imagen y crearemos un objeto del tipo Wall
Finalmente en la creación de este objeto se añadirá a la lista de elementos para el control de colisiones
Creamos dos objetos del tipo BITMAPFILEHEADER BITMAPINFOHEADER
BITMAPFILEHEADER oBMPHeader; BITMAPINFOHEADER oBMPInfo;
Leemos el fichero bmp donde está definido el mapa dl escenario
// read binary file FILE* pFile = fopen("./Images/level003.bmp","rb"); // read both headers fread(&oBMPHeader,sizeof(BITMAPFILEHEADER),1,pFile); fread(&oBMPInfo,sizeof(BITMAPINFOHEADER),1,pFile)
Información de las estructuras con la imagen de ejemplo
oBMPHeader
oBMPInfo
Recorremos los la imagen y por cada pixel de color negro llamamos a createWall el cual se encargara de crean un objeto tipo Wall y será añadido a la lista de elementos para el control de colisiones
Búsqueda de los pixel negros
Pixel24* curPos = aoPixels; for (int y = 0; y < oBMPInfo.biHeight; y++) { for (int x = 0; x < oBMPInfo.biWidth; x++) { //get pixel and save it to array using switch Pixel24 pixel = *curPos; curPos++; int r = (pixel.r&0xff)<<16; int g = (pixel.g&0xff)<<8; int b = (pixel.b&0xff); int p = r|b|g; switch(p) { case 0x00000000: this->createWall(x*64+32, y*64+32, m_Wallfile); break; default: break; } } } fclose(pFile); delete [] aoPixels;
Creación de los obstáculos
Wall* pWall = new Wall(a_filename, a_x, a_y); pWall->SetFaction(FT_WALL); if (m_pkGridIndex != nullptr) m_pkGridIndex->AddNode(pWall);