Este programa muestra una imagen a la cual le va aplicando unos cambios de colores para simular las estaciones del año.
A la misma vez también se muestra diferentes horas del día, mostrando mañana, tarde y noche.
A la misma vez también se muestra diferentes horas del día, mostrando mañana, tarde y noche.
A continuación se muestra todo el código del programa.
/* KODAYGAMES 2019 https://programacion-cpp.blogspot.com/ simulacion de las estaciones mediante colores y simulacion de dia, tarde, noche. */ #include <allegro.h> #define mdia 0xc6e8ea #define mtarde 0xdc7725 #define mnoche 0x0f0f6f #define mprimavera 0x4afa56 #define mverano 0xfefc44 #define motono 0xfc6f30 #define minvierno 0x2082fb void pintacomb( BITMAP* buffer, BITMAP* img, int trans){ int num = int(( trans * 255 ) / 100 ); set_multiply_blender(128,128,128,trans); draw_trans_sprite( buffer, img, 0, 0); }; void pintatrans( BITMAP* buffer, BITMAP* img, int trans){ int num = int(( trans * 255 ) / 100 ); set_trans_blender(0,0,0,num); draw_trans_sprite( buffer, img, 0, 0); }; int main() { allegro_init(); install_timer(); install_keyboard(); install_mouse(); set_color_depth(32); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0); BITMAP *buffer = create_bitmap(800, 600); BITMAP *ant = create_bitmap(800, 600); BITMAP *matizcolor = create_bitmap(800, 600); BITMAP *matizdiario = create_bitmap(800, 600); clear_to_color(buffer, 0x333333); clear_to_color(matizcolor, mprimavera); clear_to_color(ant, mverano); clear_to_color(matizdiario, mdia); BITMAP *cursor = load_bmp("cursor.bmp",NULL); BITMAP *w = load_bmp("web.bmp",NULL); BITMAP *fondo = load_bmp("bosque.bmp",NULL); BITMAP *tdia = load_bmp("dia.bmp",NULL); BITMAP *ttarde = load_bmp("tarde.bmp",NULL); BITMAP *tnoche = load_bmp("noche.bmp",NULL); BITMAP *tprimavera = load_bmp("primavera.bmp",NULL); BITMAP *tverano = load_bmp("verano.bmp",NULL); BITMAP *totono = load_bmp("otono.bmp",NULL); BITMAP *tinvierno = load_bmp("invierno.bmp",NULL); bool salir = false; int swd = 1; int swp = 0; int swe = 1; int cont = 0; while ( !salir ) { cont++; blit( buffer, ant, 0, 0, 0, 0, 800, 600); blit( fondo, buffer, 0, 0, 0, 0, 800, 600); if ( cont % 500 == 0 ) { swd++; swp=1; } if ( swd == 4 ) swd = 1; if ( cont % 1500 == 0 ) { swe++; } if ( swe == 5 ) swe = 1; if ( swd == 1 ) clear_to_color(matizdiario, mdia); if ( swd == 2 ) clear_to_color(matizdiario, mtarde); if ( swd == 3 ) clear_to_color(matizdiario, mnoche); if ( swe == 1 ) clear_to_color(matizcolor, mprimavera); if ( swe == 2 ) clear_to_color(matizcolor, mverano); if ( swe == 3 ) clear_to_color(matizcolor, motono); if ( swe == 4 ) clear_to_color(matizcolor, minvierno); //Circulo iluminado circlefill( matizdiario, mouse_x+5, mouse_y+9, 85, mdia); pintatrans( buffer, matizcolor, 30 ); pintacomb ( buffer, matizdiario, 200 ); if ( swe == 1 ){ masked_blit( tprimavera, buffer, 0,0,40,40, 125,27); } if ( swe == 2 ){ masked_blit( tverano, buffer, 0,0,40,40, 125,27); } if ( swe == 3 ){ masked_blit( totono, buffer, 0,0,40,40, 125,27); } if ( swe == 4 ){ masked_blit( tinvierno, buffer, 0,0,40,40, 125,27); } if ( swd == 1 ){ masked_blit( tdia, buffer, 0,0,170,40, 44,27); } if ( swd == 2 ){ masked_blit( ttarde, buffer, 0,0,170,40, 69,27); } if ( swd == 3 ){ masked_blit( tnoche, buffer, 0,0,170,40, 79,27); } textprintf_ex( buffer, font, 10, 585, 0xFFFFFF, -1, "Allegro Ver. %s ", ALLEGRO_VERSION_STR ); masked_blit( w, buffer, 0,0, 185, 550, 431,35); masked_blit( cursor, buffer, 0,0,mouse_x, mouse_y, 14,19); if ( swp == 1 ) { // se a cambiado de hora swp=0; } blit(buffer, screen, 0, 0, 0, 0, 800, 600); if ( key[KEY_ESC] ) { salir = true; } } destroy_bitmap(buffer); return 0; } END_OF_MAIN();
Si no quieres copiarlo puedes descargarlo haciendo click aqui
Lo primero de todo en nuestro código es incluir la librería Allegro. A continuación se definen unas constantes que contiene los colores para cada una de las estaciones del año y horas del día.
La función pintacomb(); se encarga de poner sobre la imagen buffer, la imagen img con un grado de opacidad determinada por trans (0-100), multiplicando los colores para producir un color más oscuro.
La función pintatrans(); se encarga de superponer la imagen img sobre la imagen buffer, con un grado de transparencia que viene determinada por el parámetro trans. Para ello se habilita un modo de mezclador para combinar píxeles de color verdadero translúcido o iluminado.
En el programa principal se inicialíza el Allegro y se define el tamaño de la ventana que va a utilizar el programa. A continuación se declaran e inicializan todas las variables que se van a utilizar en el programa. El bucle principal se estará repitiendo hasta que la variable salir sea verdadero, y por tanto solo se finalizará cuando se pulse la tecla ESC.
El funcionamiento del programa se basa en controlar un contador llamado cont, esta variable en cada ciclo aumenta en uno. Cuando el contador es múltiplo de 500 cambia de hora del día (swd), y cuando el contador es múltiplo de 1500 cambia de estación del año(swe). Según los valores de swd y swe se aplican los colores correspondientes.
Para poder hacer funcionar este programa requiere de las imágenes utilizadas, para ello a continuación tenéis unos enlaces:
A continuación se muestra un vídeo del programa en ejecución.
0 comentarios:
Publicar un comentario