Advertisement
fenix15100

cuadrado Trambolico SDL

Mar 10th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.41 KB | None | 0 0
  1. #include <iostream>
  2. #include "include/SDL2/SDL.h"
  3. #include <time.h>
  4.  
  5.  
  6. //Para Visual Studio
  7. //#include "include/SDL.h"
  8. //#pragma comment (lib, "lib/x86/SDL2")
  9. //#pragma comment (lib, "lib/x86/SDL2main")
  10.  
  11. /*
  12.  Muy recomendado
  13. http://headerphile.com/sdl2/sdl2-part-2-your-first-sdl2-application/
  14. http://headerphile.com/sdl2/sdl2-part-3-drawing-rectangles/
  15. */
  16.  
  17. using namespace std;
  18.  
  19. int main(int argc, char* args[]) {
  20.     uint8_t r,g,b,a; // RGBA
  21.  
  22.  
  23.     //Inicializacion de objetos usados en el juego
  24.     bool up=false, down=false, left=false, right=false; //KEYS KEYBOARD
  25.     SDL_Window* ventana = nullptr; //Ventana
  26.     SDL_Renderer* render = nullptr;//Render (El que dibuja los objetos)
  27.     SDL_Rect Cuadrado; //Declaro un objeto tipo SDL_RECT llamado cuadrado
  28.  
  29.  
  30.  
  31.  
  32.  
  33.     SDL_Init(SDL_INIT_EVERYTHING); //Inicio el Subsystem de SDL
  34.  
  35.     //Defino las propiedades de la ventana
  36.     ventana=SDL_CreateWindow("Cuadrado trambolico",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,600,SDL_WINDOW_SHOWN);
  37.  
  38.     //Defino el tipo de render
  39.  
  40.     //https://wiki.libsdl.org/SDL_RendererFlags?highlight=%28%5CbCategoryEnum%5Cb%29%7C%28SDLEnumTemplate%29 IMPORTANTE
  41.     render=SDL_CreateRenderer(ventana,-1,SDL_RENDERER_PRESENTVSYNC);
  42.  
  43.     //Defino el color con que dibujara el render
  44.     SDL_SetRenderDrawColor(render,255,255,255,120);
  45.  
  46.     //Refrescamos el render con la nueva informacion (https://wiki.libsdl.org/SDL_RenderClear)
  47.     SDL_RenderClear(render);
  48.  
  49.     //Presentamos por pantalla
  50.     SDL_RenderPresent(render);
  51.  
  52.     //Defino objeto cuadrado
  53.     Cuadrado.h=50;
  54.     Cuadrado.w=50;
  55.     Cuadrado.x=380;
  56.     Cuadrado.y=250;
  57.  
  58.     //Defino el color del render para dibujar cuadrado
  59.     SDL_SetRenderDrawColor(render,255,255,255,255);
  60.  
  61.     //Dibujo cuadrado en el render
  62.     SDL_RenderFillRect(render,&Cuadrado);
  63.  
  64.     //Presento el render en pantalla
  65.     SDL_RenderPresent(render);
  66.  
  67.     ///Hasta aqui es lo que se ve en el primer Frame del programa, a partir de ahora
  68.     //Volvere a dibujar cuadrado en las posiciones que toquen a traves de un sistema de eventos
  69.     //Basado en keyboard, cada vez que movamos el cuadrado este sera renderizado de un color diferente
  70.  
  71.     //Creo la variable evento tipo SDL_EVENT
  72.     SDL_Event evento;
  73.  
  74.     //Game loo0p infinito
  75.  
  76.     while(1){
  77.         srand(time(NULL));
  78.  
  79.         //Mientras se espera un evento (https://wiki.libsdl.org/SDL_PollEvent) no entiendo exactamente
  80.         while(SDL_PollEvent(&evento) != 0){
  81.             //Si no se esta presionando ninguna tecla mencionada en el Swicht
  82.             //Dejar variables en false
  83.             if(evento.type==SDL_KEYUP){
  84.                 switch (evento.key.keysym.sym){//Funcion que controla las teclas pulsadas
  85.                         //en el teclado
  86.                     case SDLK_UP: up = false; break;
  87.                     case SDLK_DOWN: down = false; break;
  88.                     case SDLK_LEFT: left = false; break;
  89.                     case SDLK_RIGHT: right = false; break;
  90.  
  91.                 }
  92.  
  93.             }
  94.             //Si se esta presionando algunas de las teclas del swicht
  95.             //colocar en el caso que toque las variables en true
  96.             else if(evento.type == SDL_KEYDOWN){
  97.                 switch (evento.key.keysym.sym) {
  98.                     case SDLK_UP: up = true; break;
  99.                     case SDLK_DOWN: down = true; break;
  100.                     case SDLK_LEFT: left = true; break;
  101.                     case SDLK_RIGHT: right = true; break;
  102.  
  103.  
  104.                 }
  105.  
  106.  
  107.             }
  108.         }
  109.  
  110.         //Si up es true y el cuadrado no se encuentra en el limite
  111.         //del eje y de la ventana subir 10 pixeles y asi con todos los casos event.
  112.  
  113.         //Hay que tener en cuenta en los calculos que cuadrado ya mide 50X50 px.
  114.  
  115.         if(up) {
  116.             if(Cuadrado.y>0) {
  117.                 Cuadrado.y-=10;
  118.                 r=rand()%256;
  119.                 g=rand()%256;
  120.                 b=rand()%256;
  121.                 a=100+rand()%256-1;
  122.  
  123.             }
  124.         }
  125.  
  126.         if(down){
  127.             if(Cuadrado.y<550){
  128.                 Cuadrado.y+=10;
  129.                 r=rand()%256;
  130.                 g=rand()%256;
  131.                 b=rand()%256;
  132.                 a=100+rand()%256-1;
  133.  
  134.             }
  135.         }
  136.  
  137.  
  138.         if(left){
  139.             if(Cuadrado.x>0){
  140.                 Cuadrado.x-=10;
  141.                 r=rand()%256;
  142.                 g=rand()%256;
  143.                 b=rand()%256;
  144.                 a=100+rand()%256-1;
  145.             }
  146.         }
  147.  
  148.         if(right){
  149.             if(Cuadrado.x<750){
  150.                 Cuadrado.x+=10;
  151.                 r=rand()%256;
  152.                 g=rand()%256;
  153.                 b=rand()%256;
  154.                 a=100+rand()%256-1;
  155.             }
  156.         }
  157.  
  158.  
  159.  
  160.  
  161.         //Seteo la paleta de color del render al color que le toque a cuadrado
  162.         SDL_SetRenderDrawColor(render,r,g,b,a);
  163.  
  164.  
  165.  
  166.         //Renderizo cuadrado
  167.  
  168.         SDL_RenderFillRect(render,&Cuadrado);   //SDL_RenderDrawRect(render, &Cuadrado ) Rectangulo sin relleno  some curiosity.
  169.         SDL_RenderPresent(render);
  170.  
  171.         //Seteo el render al color original de mi ventana(aun sin efecto real en la ejecucion)
  172.  
  173.         SDL_SetRenderDrawColor(render,255,255,255,120);
  174.  
  175.         //Muestro el frame y se queda a la espera de un evento(game loop)
  176.         SDL_RenderPresent(render);
  177.  
  178.         //Refresco la ventana para ir al siguiente frame
  179.         SDL_RenderClear(render);
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.     }
  188.  
  189.  
  190.  
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement