Hola chavos que tal! Espero que estén todos muy bien y pues en esta ocasión continuaremos realizando aplicaciones en C++ Builder. Ahora crearemos un programa muy sencillo lo único que hará será mover pixeles hacia el centro de la pantalla. En esta ocasión utilizaremos la estructura POINT, la cual cuenta con campos para las posiciones X y Y en donde dibujaremos los pixeles, lo cual lo haremos de manera aleatoria en la forma.
Para esta aplicación lo único que utilizaremos será un Timer, el cual se encuentra en la pestaña System de la barra de componentes. Y también cambiamos el color de la forma a blanco, para evitar el rastro que dejan los pixeles en el efecto de movimiento.
Bueno pues para comenzar necesitamos ir al archivo H, donde está la definición de la clase TForm1 y agregar las siguientes declaraciones en la parte "private", debe quedar de la siguiente manera:
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTimer *Timer1;
void __fastcall FormPaint(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
private: // User declarations
POINT Puntos[1000]; // Matriz para mantener la posición de 1000 puntos
int Contador; // Contador general para la matriz anterior
int MediaX, MediaY; // Punto medio del área de dibujo
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
Ahora buscamos en evento de la forma llamado OnPaint y damos doble clic para abrirlo, entonces escribimos el siguiente código:
void __fastcall TForm1::FormPaint(TObject *Sender)
{
for(int N = 0; N < 1000; N++)
{
// Calcular los 1000 puntos
Puntos[N].x = random(ClientWidth); // de forma aleatoria
Puntos[N].y = random(ClientHeight);
Canvas->Pixels[Puntos[N].x][Puntos[N].y] = clBlack;
}
Contador = 0; // Inicializar el contador
MediaX = ClientWidth / 2; // Y calcular el punto medio
MediaY = ClientHeight / 2;
}
//---------------------------------------------------------------------------
Finalmente damos doble clic en el Timer agregado en la forma y escribimos el siguiente código:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
for (int N = 0; N < 1000; N++)
{
// Desplazar 100 puntos en cada ciclo, probar en vez de 100 - 1000
// Desactivar el punto de su posición actual
Canvas->Pixels[Puntos[Contador].x][Puntos[Contador].y] = clWhite;
// Calcular su nueva posición
Puntos[Contador].x+=(Puntos[Contador].x<MediaX)*1+(Puntos[Contador].x>MediaX)*-1;
Puntos[Contador].y+=(Puntos[Contador].y<MediaY)*1+(Puntos[Contador].y>MediaY)*-1;
// Si el punto está en el centro del área debe desaparecer
if (Puntos[Contador].x == MediaX && Puntos[Contador].y == MediaY)
{
// Reapareciendo en un punto aleatorio
Puntos[Contador].x = random(ClientWidth);
Puntos[Contador].y = random(ClientHeight);
}
// Mostrarlo en la nueva posición
Canvas->Pixels[Puntos[Contador].x][Puntos[Contador].y] = clRed;//Black;
Contador++; // Pasar al punto siguiente
// O al primero si ya se han recorrido todos
if (Contador == 1000)
Contador = 0;
}
}
//---------------------------------------------------------------------------
Bueno finalmente compilamos y corremos nuestra aplicación y deberíamos tener algo por el estilo:
Bueno amigos terminamos por esta ocasión, la siguiente vez modificaremos nuestra aplicación para que se vea mejor y seguir prácticando nuetras habilidades con el C++ Builder, nos vemos hasta la próxima amigos!!
No hay comentarios:
Publicar un comentario