Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "include/SDL2/SDL.h"
- #include <time.h>
- //Para Visual Studio
- //#include "include/SDL.h"
- //#pragma comment (lib, "lib/x86/SDL2")
- //#pragma comment (lib, "lib/x86/SDL2main")
- /*
- Muy recomendado
- http://headerphile.com/sdl2/sdl2-part-2-your-first-sdl2-application/
- http://headerphile.com/sdl2/sdl2-part-3-drawing-rectangles/
- */
- using namespace std;
- int main(int argc, char* args[]) {
- uint8_t r,g,b,a; // RGBA
- //Inicializacion de objetos usados en el juego
- bool up=false, down=false, left=false, right=false; //KEYS KEYBOARD
- SDL_Window* ventana = nullptr; //Ventana
- SDL_Renderer* render = nullptr;//Render (El que dibuja los objetos)
- SDL_Rect Cuadrado; //Declaro un objeto tipo SDL_RECT llamado cuadrado
- SDL_Init(SDL_INIT_EVERYTHING); //Inicio el Subsystem de SDL
- //Defino las propiedades de la ventana
- ventana=SDL_CreateWindow("Cuadrado trambolico",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,600,SDL_WINDOW_SHOWN);
- //Defino el tipo de render
- //https://wiki.libsdl.org/SDL_RendererFlags?highlight=%28%5CbCategoryEnum%5Cb%29%7C%28SDLEnumTemplate%29 IMPORTANTE
- render=SDL_CreateRenderer(ventana,-1,SDL_RENDERER_PRESENTVSYNC);
- //Defino el color con que dibujara el render
- SDL_SetRenderDrawColor(render,255,255,255,120);
- //Refrescamos el render con la nueva informacion (https://wiki.libsdl.org/SDL_RenderClear)
- SDL_RenderClear(render);
- //Presentamos por pantalla
- SDL_RenderPresent(render);
- //Defino objeto cuadrado
- Cuadrado.h=50;
- Cuadrado.w=50;
- Cuadrado.x=380;
- Cuadrado.y=250;
- //Defino el color del render para dibujar cuadrado
- SDL_SetRenderDrawColor(render,255,255,255,255);
- //Dibujo cuadrado en el render
- SDL_RenderFillRect(render,&Cuadrado);
- //Presento el render en pantalla
- SDL_RenderPresent(render);
- ///Hasta aqui es lo que se ve en el primer Frame del programa, a partir de ahora
- //Volvere a dibujar cuadrado en las posiciones que toquen a traves de un sistema de eventos
- //Basado en keyboard, cada vez que movamos el cuadrado este sera renderizado de un color diferente
- //Creo la variable evento tipo SDL_EVENT
- SDL_Event evento;
- //Game loo0p infinito
- while(1){
- srand(time(NULL));
- //Mientras se espera un evento (https://wiki.libsdl.org/SDL_PollEvent) no entiendo exactamente
- while(SDL_PollEvent(&evento) != 0){
- //Si no se esta presionando ninguna tecla mencionada en el Swicht
- //Dejar variables en false
- if(evento.type==SDL_KEYUP){
- switch (evento.key.keysym.sym){//Funcion que controla las teclas pulsadas
- //en el teclado
- case SDLK_UP: up = false; break;
- case SDLK_DOWN: down = false; break;
- case SDLK_LEFT: left = false; break;
- case SDLK_RIGHT: right = false; break;
- }
- }
- //Si se esta presionando algunas de las teclas del swicht
- //colocar en el caso que toque las variables en true
- else if(evento.type == SDL_KEYDOWN){
- switch (evento.key.keysym.sym) {
- case SDLK_UP: up = true; break;
- case SDLK_DOWN: down = true; break;
- case SDLK_LEFT: left = true; break;
- case SDLK_RIGHT: right = true; break;
- }
- }
- }
- //Si up es true y el cuadrado no se encuentra en el limite
- //del eje y de la ventana subir 10 pixeles y asi con todos los casos event.
- //Hay que tener en cuenta en los calculos que cuadrado ya mide 50X50 px.
- if(up) {
- if(Cuadrado.y>0) {
- Cuadrado.y-=10;
- r=rand()%256;
- g=rand()%256;
- b=rand()%256;
- a=100+rand()%256-1;
- }
- }
- if(down){
- if(Cuadrado.y<550){
- Cuadrado.y+=10;
- r=rand()%256;
- g=rand()%256;
- b=rand()%256;
- a=100+rand()%256-1;
- }
- }
- if(left){
- if(Cuadrado.x>0){
- Cuadrado.x-=10;
- r=rand()%256;
- g=rand()%256;
- b=rand()%256;
- a=100+rand()%256-1;
- }
- }
- if(right){
- if(Cuadrado.x<750){
- Cuadrado.x+=10;
- r=rand()%256;
- g=rand()%256;
- b=rand()%256;
- a=100+rand()%256-1;
- }
- }
- //Seteo la paleta de color del render al color que le toque a cuadrado
- SDL_SetRenderDrawColor(render,r,g,b,a);
- //Renderizo cuadrado
- SDL_RenderFillRect(render,&Cuadrado); //SDL_RenderDrawRect(render, &Cuadrado ) Rectangulo sin relleno some curiosity.
- SDL_RenderPresent(render);
- //Seteo el render al color original de mi ventana(aun sin efecto real en la ejecucion)
- SDL_SetRenderDrawColor(render,255,255,255,120);
- //Muestro el frame y se queda a la espera de un evento(game loop)
- SDL_RenderPresent(render);
- //Refresco la ventana para ir al siguiente frame
- SDL_RenderClear(render);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement