Polígonos Aleatórios em Allegro – C

//================================================================
// Nome do Arquivo: random_polygons.c
// Filename: random_polygons.c
//
// Descrição: O programa exibe polígonos preenchidas em posições
//            e cores aleatórias, com 3 a 12 vértices, usando a
//            função polygon da biblioteca allegro
//================================================================

#include <stdlib.h>
#include <time.h>
#include <allegro.h>

int main(int argc, char *argv[])
{
    // Total de vértices e ponteiro de pontos do polígono
    int vertices, *points;
    // Cor do polígono
    int color;
    // Contador
    int i;

	// Inicializa a biblioteca Allegro
	allegro_init();

	// Inicializa o módulo do relógio
	install_timer();

	// Inicializa o teclado
	install_keyboard();

	// Define a profundidade de cores para 32 bits
	set_color_depth(32);

	// Define a resolução de 640x480 no modo janela
	set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

	// A falta de acento é proposital
	// Muda o título da janela
	set_window_title("Poligonos");

	// Inicia o gerador de números aleatórios
	srand(time(NULL));

	// Fica em loop até pressionar a tecla ESC
	while(!key[KEY_ESC])
	{
	    // Gera um total aleatório de vértices
	    vertices = (rand() % 10) + 3;
	    // Aloca memória para o polígono
	    points = (int *) malloc(sizeof(int) * vertices * 2);
	    // Gera os pontos do polígono de forma aleatória
	    for(i = 0; i &lt; vertices; i++) {
	         points[i * 2]     = rand() % 640;
	         points[i * 2 + 1] = rand() % 480;
        }
        // Cria uma cor aleatória
	    color  = makecol(rand() % 256, rand() % 256, rand() % 256);

	    // Desenha um polígono em uma posição e cor aleatória
	    polygon(screen, vertices, points, color);
	    free(points);

	    // Espera 300 milisegundos para economizar processamento
	    rest(300);

		// Espera a sincronização vertical
		vsync();
	}

	// Sai do programa
	allegro_exit();
	return 0;
}
// Esta macro converte o main para WinMain()
END_OF_MAIN();