Mostrando entradas con la etiqueta CodeBlocks. Mostrar todas las entradas
Mostrando entradas con la etiqueta CodeBlocks. Mostrar todas las entradas

jueves, 15 de octubre de 2015

Guía Introductoria SDL


Autor: José Medina.
Competencia: Aprendizaje Autónomo.
Asignatura: Interfaces Gráficas.


Para poder comenzar a programar en algún lenguaje es necesario tener el conocimiento previo de como funciona, un poco de historia, como es visto por otros programadores, es decir, conocer la parte teórica de un lenguaje o biblioteca que se desee aprender a utilizar por eso realizaremos una pequeña guía introductoria sobre conceptos y funciones que implica buscar en la documentación oficial y de Internet sobre SDL para obtener el conocimiento base de esta librería antes de comenzar a programar con el.

1.    Explique con detalle:

a)    ¿Qué es SDL?
    Simple DirectMedia Layer (SDL) es un conjunto de bibliotecas desarrolladas en el lenguaje de programación C que proporcionan funciones básicas para realizar operaciones de dibujo en dos dimensiones, gestión de efectos de sonido y música, además de carga y gestión de imágenes.

b)    ¿Que hace SDL_Init()?
       Permite inicializar las características de SDL.

c)    ¿Cómo inicializar con SDL una superficie de 1280x900 pixeles con 16 millones de colores?
        Screen = SDL_SetVideoMode(1280,900,24)
        24 bits es igual a 16 millones de colores.

d)    ¿Qué es una superficie en SDL y como se define?
    Una superficie es un bloque de memoria utilizado para almacenar una región rectangular de píxeles. En esta área de memoria podemos almacenar dibujar sobre ella, cargar imágenes, etc.

e)    ¿Qué hace la función SDL_BlitSurface?
       Permite mostrar una gráfico por pantalla, copiando el gráfico anteriormente cargado y copiandolo en la superficie visible.

f)     ¿Qué hace la función SDL_SetClipRect?
       Permite decirle a SDl que cualquier operación gráfica que se realice se quedara dentro del rectángulo del surface. En caso que el recurso gráfico sea mayor que el surface, se recorta. 


2.    Manejo de eventos en SDL:

a)    ¿Que son los eventos en SDL?
       Los eventos son las acciones realizadas por el usuario para interactuar con el software, como el uso de mouse, uso de teclado, etc.

b)    Nombre al menos 4 eventos detectados por SDL.
       -Eventos teclado.
       -Eventos Movimiento ratón.
       -Eventos Joystick.
       -Eventos cierre de ventana.

c)    ¿Cuáles son las 3 formas de manejar eventos en SDL?
       Detectar el evento, capturar el evento y sondeo o almacenamiento de eventos.

d)    ¿Qué hacen las siguientes funciones:
d.1) SDL_PollEvent( )
       Permite comprobar los eventos pendientes en cola.
d.2) SDL_KeyboardEvent( )
       Almacena los eventos relacionados con el teclado.
d.3) SDL_GetKeyState( )
       Devuelve el estado actual del teclado, 0 no presionado, 1 presionado.
d.4) SDL_MouseMotionEvent( )
       Captura el movimiento del mouse.
d.5) SDL_JoyAxisEvent( )
        Captura los movimientos del eje del joystick.
d.6) SDL_Quitevent( )
       Evento de cierre.
d.7) SDL_resizeEvent( )
       Evento de redimensionado de ventana.

3.    Manejo de tiempos en SDL:
a)    ¿Por qué es importante manejar el tiempo en SDL?
       Permite evitar que nuestra aplicación se ejecute excesivamente rápida en ordenadores de ultima generación, normalizando los tiempos de ejecución.

b)    ¿Qué hace la función SDL_GetTicks( )?
       Devuelve el número de mili segundos desde que se inicializo la librería SDL.

c)    ¿Qué hace la función SDL_Delay( )?
       Ordena a la aplicación que se detenga un determinado tiempo de segundos antes de continuar con la ejecución.

4.    Analice y explique que hace el siguiente ejemplo:
#include 
#include 
#include 

int main (int argc, char *argv[])
{
    SDL_Surface *image, *screen;
    SDL_Event event;
    SDL_Rect dest;
    int i, done = 0;

    atexit(SDL_Quit);

       if(SDL_Init(SDL_INIT_VIDEO)<0)
        {
            printf("Error de video");
            exit(1);
        }
    screen = SDL_SetVideoMode(800,500,24,SDL_HWSURFACE);
    if(screen == NULL)
    {
        printf("Error Modeo Grafico");
        exit(1);
    }
    image=SDL_LoadBMP("r2.bmp");
    SDL_SetColorKey(image, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(image->format,255,0,0));

    for(i=1;i<=5;i++)
    {
        SDL_SetAlpha(image, SDL_SRCALPHA|SDL_RLEACCEL, rand()%255);
        dest.x = rand()%800;
        dest.y = rand()%500;
        dest.w = image->w;
        dest.h = image->h;
        SDL_BlitSurface(image,NULL,screen,&dest);
    }
    SDL_Flip(screen);
    SDL_FreeSurface(image);
    while(done==0)
    {
        while(SDL_PollEvent(&event))
        {
            if(event.type == SDL_KEYDOWN)
                done = 1;
        }
    }
    return 0;
}

La apliacion es bastante sencilla ya que lo que hace es inicializar SDL en modo video y el surface visible con sus resperctivas exepciones en caso de error. Luego carga una imagen la posiciona de forma random en la pantalla un total de cinco veces y en cada ocacion degrada los colores de la la imagen. 



Reflexión:

     La actividad anterior permite tener el conocimiento básico del funcionamiento de SDL indagando en el uso de sus funciones, la inicialización de pantalla, la captura de eventos, entre otras permitiéndonos adquirir conocimientos de forma autónoma al indagar en la documentación existente de SDL sobre los conceptos teóricos de su funcionamiento.

jueves, 1 de octubre de 2015





Tutorial SDL + Code Blocks 


Autor: José Medina.
Competencia: Gestión del Conocimiento.
Asignatura: Interfaces gráficas.

Este es un pequeño tutorial para todos aquellos que se están iniciando en la programación de vídeojuegos orientado a proporcionar una guía introductoria del como utilizar SDL y principalmente el como instalar SDL la IDE de programación Code Blocks a mi parecer uno de los mejores compiladores del lenguaje C en Windows en comparación a otros conocidos como dev C++ el cual mas de un dolor de cabeza les a dado a mas de alguna persona debido a su falta de actualización y estabilidad en comparación a Code Blocks ademas de la demostracion de su uso mediante ejemplos practicos como la creacion de una imagen y la implementacion de SDL para la simulacion de una so.
  
¿ Que es SDL ?


Simple DirectMedia Layer (SDL) es un conjunto de bibliotecas desarrolladas en el lenguaje de programación C que proporcionan funciones básicas para realizar operaciones de dibujo en dos dimensiones, gestión de efectos de sonido y música, además de carga y gestión de imágenes. Fueron desarrolladas inicialmente por Sam Lantinga, un desarrollador de videojuegos para la plataforma GNU/Linux. SDL está escrito en el lenguaje C funcionando de forma nativa con C++ y múltiples otros lenguajes como ada, C#, pascal y python.

SDL fue diseñado para permitir un acceso a bajo nivel a todos los dispositivos de una computadora, es decir, audio, teclado, ratón, joystick y los gráficos de hardware mediante de OpenGl o Direct3D.

Por otro lado SDL se le pueden incorporar componentes adicionales, los que complementan las funcionalidades y capacidades de la biblioteca base a través de :
  • SDL Mixer: Permite extender las capacidades de SDL para la gestión y uso de sonido en vídeo juegos (reproducir pistas). Es compatible con formatos de sonido populares tales como MP3, OGG, WAV, entre otros. 
  • SDL Image: Ayuda a utilizar formatos de imagen en la edición de videojuegos. soportando conocidos formatos  de multimedia como BMPJPEG,TIFFPNGPNMPCXXPMLBMGIF, y TGA.
  • SDL Net: Proporciona funciones y tipos de dato multi plataforma para programar aplicaciones que trabajen con redes o impliquen computación paralela.
  • SDL RTF: Posibilita el abrir para leer en aplicaciones SDL archivos de texto usando el formato Rich Text Format RTF.
  • SDL TTF: Permite usar tipografías TrueType en aplicaciones SDL.

Descarga e instalación Code Blocks

A continuación realizaremos la descarga e instalación de Code Blocks con para ello nos dirigiremos  al sitio web oficial de Code Blocks para ello dar clic aqui  el menu general nos dirigiremos a descargas, al descargar code blocks para windows se nos presentaran 2 versiones una la cual no incluye el compilador mingw (antiguamente mingw 32) y otra sin mingw, en ese caso se descargara la versión con dicho compilador desde Sourcefourge.net ya que es necesaria en Windows 10 para ejecutar los códigos en SDL desde Code Blocks. 




   Una ves descargado el instalador en nuestro ordenador procederemos a realizar la instalación de nuestro IDE para ello aplicaremos la regla tradicional del "siguiente siguiente siguiente", ojo cuando se nos pida los componentes instalar los seleccionaremos todos o mejor dicho realizaremos una Full-instalación que incluya MinGW como se puede ver a continuación.


Listo el paso anterior seleccionamos la ruta y Code Blocks quedara instalado y listo para utilizarse en nuestro ordenador.






SDL en Code BLocks


Continuando procederemos a instalar o agregar SDL a nuestro compilador existen varias formas para realizar esto es necesario descargar en el siguiente link, el contenido incluye los dll de compilación de SDL en Windows, dll de imagen, audio y red.

Procedemos a copiar el contenido de la carpeta en la dirección de instalación de nuestro code block  en la ruta de la carpeta MinGW reemplazando todo el contenido.


Para finalizar ahora copiaremos el contenido de la carpeta dll en la carpeta Windows dando un total de 13 archivos para agregar incluyendo el ddl de SDL.



Una ves instalado nuestro IDE procederemos a dirigirnos a Settings opción compiler lo cual nos llevara a las opciones generales del compilador.


Captura opciones generales.











Una ves situados sobre las opciones nos situaremos en la pestaña Linker Settings (segunda pestaña), una vez hay nos situaremos en el cuadro de texto Other linker options en donde copiaremos y pegaremos los siguientes comandos:


-lmingw32
-lSDLmain
-lSDL
-lSDL_image
-lSDL_mixer

-lSDL_ttf

Dichos comandos permiten agregar los complementos de manejo de imágenes, audio, red y compilación de SDl mediante MinGW




Finalizado la tarea anterior procederemos a dar clic en OK para cerrar la ventana.



Ejemplo Código SDL

Crearemos un archivo en blanco donde copiaremos y pegaremos el siguiente código para la creación de un pequeño cuadrado.


#include <stdio.h>
#include <SDL/SDL.h>


void imprimir_rectangulo (SDL_Surface *screen, int x, int y)
{
       SDL_Rect rect = {x, y, 50, 50};
       Uint32 a = SDL_MapRGB(screen->format, 255, 200, 100);

       SDL_FillRect(screen, &rect, a);
       SDL_UpdateRect(screen, rect.x, rect.y, rect.w, rect.h);
}

int main(int argc, char *argv[])
{
       SDL_Surface *screen;
       SDL_Event event;

       if (SDL_Init(SDL_INIT_VIDEO) == -1)
       {
               printf("Error: %s\n", SDL_GetError());
               return 1;
       }

       screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE);

       if (screen == NULL)
       {
               printf("Error: %s\n", SDL_GetError());
               return 1;
       }

       SDL_WM_SetCaption("Demo SDL", NULL);

       imprimir_rectangulo(screen, 20, 30);

       while (SDL_WaitEvent(&event))
       {
               if (event.type == SDL_QUIT)
                       break;
       }
       SDL_Quit();
       return 0;
}


---

Captura ejecución código. 




Ejemplo 2: Simulación de una sonda con SDL

Lo siguiente corresponde al contexto de una  simulación de un grupo de sondas que transmitirán imagen en vivo desde un planeta distante y capturaran sus componentes químicos antes de perder su energía.

La aplicación debe de :

  • Enviar imágenes del recorrido de las sondas al realizar el recorrido en tiempo real en una ventana externa activada al teclear una determinada tecla.
  • Capturara los componentes químicos de cada Baldosa y los graficara en una sub ventana.
  • Cada sonda contara con una batería que se descargara al avanzar, al llegar a 0 la sonda se detendrá y recargara la batería.  



   
Link Codigo
Reflexión

SDL es una potente herramienta que programación que permite diseñar al "hueso" nuestros códigos para la realización de video juegos dándonos conocimiento y control total de cada linea de código, si bien ya no es tan utilizada debido a la aparición de nuevos motores gráficos muchos mas sencillos de usar sigue siendo una potente herramienta que permite codificar nuestros códigos en cualquier sistema operativo como windows, linux, mac, entre otros de manera fácil e intuitiva, siendo una excelente herramienta de aprendizaje para programadores novatos en el mundo de la programación en 2D.