miércoles, 9 de septiembre de 2015

Crear juego RPG en C++ y Allegro 4 (10)

Continuamos con el curso de crea tu juego RPG en C++ y Allegro. En esta entrega se utilizará todo lo anterior para crear un nuevo escenario.






En este curso, se repasará todos los puntos para crear un escenario nuevo para el juego.





Para crear un nuevo escenario en el juego, se necesita crear una imagen del escenario en cuestión. Mientras se esta creando se recomienda hacerlo en un programa que permita capas, y hacer un mínimo de tres capas.

  1. La parte inferior o suelo, en esta capa se pintará todo lo que va en el suelo por donde el protagonista podrá moverse.
  2. La capa media o choque, en esta capa se pintará todo aquello que pueda bloquear el paso al personaje, ya sea un edificio, como un árbol.
  3. La capa alta o superior, en esta capa debe ir todo lo que se quiera que se pinte por encima del personaje, es decir, que lo van a tapar, como la copa de los arboles o los tejados de los edificios.
Todo esto se divide de esta manera para facilitar a la hora de hacer las tres capas que se necesitan para crear el escenario en cuestión. Para ellos se necesita una capa base, que lo contiene todo. Una segunda capa superior, en la que solo se pintará las cosas de la capa alta, y el resto se pintará del color rosa transparente. Y una tercera capa en la que se pintará las zonas bloqueadas con el color rojo, esta capa se hará a partir de la capa media.




Se recomienda tener bien claro lo que se desea hacer, ya que es muy laborioso hacer los escenarios como para que luego no guste o no sirvan.

En el tutorial 5, se explica la función de colisión, en ella aparece el control de cuatro colores; rojo, verde, azul y amarillo. Si desea añadir algún otro color es tan simple como añadir otra condición e indicar el color y el valor de la variable cambio, de esta forma se esta creando otro color con el que colisionar y realizar alguna acción.
Supongamos que se quiere añadir otro color para el control de acceso a un edificio.

            // color blanco
            if ( getpixel( choque, px+ci, py+cj) == 0xffffff ) cambio = 4;

El color blanco viene definido en hexadecimal 0xffffff pero se puede poner también en decimal si se desea. Si se cumple la condición la variable cambio vale 4, por tanto si cambio es 4, quiere decir que se ha pisado el color blanco. De esta manera en cualquiera de los escenario se puede añadir alguna nueva función en el caso de pisar el color blanco.

Se puede añadir tantos colores como se desee, pero cuantos mas se añadan mas lento será el proceso de colisión.

En cada escenario, es necesario definir que hacer en caso de colisionar con alguno de los colores, por tanto cuando la variable cambio tiene algún valor indica que se ha colisionado con uno de los colores.

Por ejemplo, en el mapa bosque se ha añadido la opción para poder pasar al nuevo escenario de la ciudad.

    case 2:   // bosque
         if ( cambio == 2 )
         {
              // cambiamos a otro lugar
              // casa
              lugar = 1;
              fondo  = (BITMAP *)datosjuego[dicasa].dat;
              choque = (BITMAP *)datosjuego[dicasachoque].dat;
              cielo  = (BITMAP *)datosjuego[dicasasup].dat;              

              // situamos al prota dentro de la casa
              jugador.posiciona( 290,440 ); 
              desplazamiento_map_x=0;
              desplazamiento_map_y=0;  
              desplaza=false;   
              sonido_abrirpuerta(); 
              para_sonido_ambiente();   
              musica_casa();   
         }
         if ( cambio == 3 )
         {
              // cambiamos a otro lugar
              // ciudad
              lugar = 3;
              fondo  = (BITMAP *)datosjuego[dicity1].dat;
              choque = (BITMAP *)datosjuego[dicity1choque].dat;
              cielo  = (BITMAP *)datosjuego[dicity1sup].dat;              

              // situamos al prota
              jugador.posiciona( 500,540 ); 
              desplazamiento_map_x=950;
              desplazamiento_map_y=510;  
              desplaza=true;    
              para_sonido_ambiente();   
              musica_ciudad1();   
         }         
         break;  

Tal y como muestra en el código, cuando se esta en el mapa bosque si se colisiona con el color amarillo carga los datos de la ciudad, sitúa al personaje en las coordenadas (500,540) de la pantalla, sitúa el mapa con un desplazamiento de (950,510), ya que el mapa es mucho mas grande que la resolución de la ventana. Se indica que el escenario tiene scroll, se detiene el sonido ambiente y se inicial la nueva música para la ciudad.

A la hora de pintar tambien hay que describir el escenario, quedando de la siguiente forma la función pinta_juego().

// Se encarga de pintar todo sobre el buffer   
void pinta_juego()
{
    int ancho, alto;
    int ax=0;
    int ay=0;
    int bx=0;
    int by=0;
    
    switch ( lugar ) 
    {           
    case 1:   // casa     
             bx=160;
             by=160; 
             ancho = 480;
             alto = 325;
             break;
    case 2:   // bosque 
             ax = desplazamiento_map_x; 
             ay = desplazamiento_map_y;
             ancho = PANTALLA_ANCHO;
             alto  = PANTALLA_ALTO;
             break;
    case 3:  // ciudad1
             ax = desplazamiento_map_x; 
             ay = desplazamiento_map_y;
             ancho = PANTALLA_ANCHO;
             alto  = PANTALLA_ALTO; 
             break;                     
    default:
         break;
    }  
    
    blit( fondo, buffer, ax, ay, bx, by, ancho, alto);                   
    jugador.pinta();     
    masked_blit( cielo, buffer, ax, ay, bx, by, ancho, alto); 
} 

En este caso, tal y como se muestra ya sea el bosque o la ciudad, ambos tienen los mismos datos, quizás más adelante cuando se tengan mas escenario nos daremos cuenta de que se repite siempre lo mismo, que solo es diferente para los mapas que son mas pequeño que la resolución utilizada para el proyecto del juego (800,600), por tanto se podrá simplificar, pero eso lo dejamos para otro momento.

Recordad, que cada escenario puede tener una música y un sonido ambiente, tal y como lo tiene el escenario del bosque. Espero que haya quedado más claro de como se hacen los escenarios por si alguno se anima a hacer alguno mas.

Aquí tenéis el mapa del nuevo escenario, la ciudad.



Llegados a este punto aquí os dejo todos los códigos que hay hecho hasta el momento, con esto el juego tiene tres escenarios: la casa, el bosque y la ciudad. En el archivo RAR viene comprimido el proyecto del DEV-C++ y todos los códigos, que con el archivo DAT tendrá para poder ejecutarlo.

Si quieres ver alguna de las anteriores entregas entra en el Contenido del Blog


Recuerda, si tienes algún problema con los ejemplos de la pagina, o alguna duda. Puedes plantear tu pregunta en el foro de programación:



4 comentarios:

  1. ¿Tienes las imagenes de city?

    ResponderEliminar
  2. Oye ¿por que cuando quiero abrir el archivo .dat, me sale un error que no lo pude cargar en el grabber?

    ResponderEliminar
    Respuestas
    1. Quizás sea porque no le pusiste la contraseña, mira la entrega anterior.

      Eliminar

Antes de publicar un comentario

Todos los comentarios que se realicen en el blog son moderados.

Debido a esto es muy probable que tu comentario no aparezca de inmediato ya que previamente debe ser revisado para evitar un mal uso (SPAM).

Podrán realizar comentario cualquiera que tenga una cuenta de Google.

Related Posts Plugin for WordPress, Blogger...