/* * Desc: O programa desenha pixels em posições e cores aleatórias * usando a função putpixel, que pode ser encontrada na * documentação da SDL, na parte de exemplos. */ #include <stdlib.h> #include <time.h> #include <SDL/SDL.h> // Set the pixel void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel); // Variavel que representa a tela SDL_Surface *screen = NULL; // Ponto inicial da aplicação int main(int argc, char *argv[]) { // Coordenadas do pixel int x, y; // Cor do pixel Uint32 pixel; // Flag de encerramento int bExit = 0; // Inicia o gerador de números aleatórios srand(time(NULL)); // Inicializa a SDL com o Video e Audio if((SDL_Init(SDL_INIT_VIDEO) == -1)) return 1; // Define a resolução 640x480 e 16 bits com "Double Buffer" screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF); if (screen == NULL) return 2; // Muda o titulo da janela SDL_WM_SetCaption("Pixels Aleatórios - SDL", NULL); // Pinta a tela de azul SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 255)); // Laço principal do programa while (!bExit) { SDL_Event evento; // Verifica os eventos pendentes while (SDL_PollEvent(&evento)) { switch (evento.type) { case SDL_KEYDOWN: // Verifica se foi pressionado uma tecla switch(evento.key.keysym.sym) { case SDLK_ESCAPE: // Se a tecla foi ESC então sai bExit = 1; break; } break; case SDL_QUIT: // Se foi selecionador para fechar a janela bExit = 1; break; } } // Gera posições e uma cor aleatória x = rand() % 640; y = rand() % 480; pixel = SDL_MapRGB(screen->format, rand() % 256, rand() % 256, rand() % 256); // Pinta o pixel na tela putpixel(screen, x, y, pixel); // Executa o Flip (vira o "Double Buffer") SDL_Flip(screen); } // Libera a memória alocada para a tela SDL_FreeSurface(screen); // Finaliza a biblioteca SDL e a aplicação SDL_Quit(); return 0; } /* * Set the pixel at (x, y) to the given value * NOTE: The surface must be locked before calling this! */ void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel) { int bpp = surface->format->BytesPerPixel; /* Here p is the address to the pixel we want to set */ Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp; switch(bpp) { case 1: *p = pixel; break; case 2: *(Uint16 *)p = pixel; break; case 3: if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { p[0] = (pixel >> 16) & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = pixel & 0xff; } else { p[0] = pixel & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = (pixel >> 16) & 0xff; } break; case 4: *(Uint32 *)p = pixel; break; } }
Pixels Aleatórios em SDL – C
Deixe um comentário