Para esto vamos a utilizar el IDE denominado Borland C++ Builder para realizarlo.
La forma solamente tendrá un "Timer", debido a que graficaremos directamente sobre ella y es un programa tan básico que no empleara ningún botón para funcionar. El Timer empezara a funcionar en cuanto la forma sea creada.
El código quedará de la siguiente manera:
Para el archivo ".h":
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTimer *Timer1;
void __fastcall FormPaint(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);
private: // User declarations
POINT Puntos[10000]; // Matriz para mantener la posición de 10000 puntos
int Contador; // Contador general para la matriz anterior
int MediaX, MediaY; // Punto medio del área de dibujo.- a donde se dirigiran los pixeles
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
y el .cpp quedaria de la siguiente manera:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender) // usamos el evento OnPaint de la forma
{
for(int N = 0; N < 10000; 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] = clRed;
}
Contador = 0; // Inicializar el contador
MediaX = ClientWidth / 2; // Y calcular el punto medio
MediaY = ClientHeight / 2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
for (int N = 0; N < 10000; N++)
{// Desplazar 10000 puntos en cada ciclo, cambia la cantidad a 100 o a 1000
// Desactivar el punto de su posición actual igualando el pixel al color de la forma
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;
//if(Puntos[Contador].x < MediaX) Puntos[Contador].x += 1;
//else if(Puntos[Contador].x > MediaX) Puntos[Contador].x -= 1;
Puntos[Contador].y += (Puntos[Contador].y < MediaY)*1 +
(Puntos[Contador].y > MediaY)*-1;
//if(Puntos[Contador].x < MediaY) Puntos[Contador].y += 1;
//else if(Puntos[Contador].x > MediaY) Puntos[Contador].y -= 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 == 10000)
Contador = 0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
MediaX = X; // Cambiamos la posicion de X y de Y conforme movamos el mouse en la forma
MediaY = Y; // Para que los puntos se dirijan a la posicion del mouse
}
//---------------------------------------------------------------------------
El Resultado sera el Siguiente:
Y si movemos el cursor los puntos siguen otra dirección y asemejan la "cruz" en la posición donde éste se ubique.
Como vemos es algo muy básico, pero nos servirá como introducción debido a que proximamente estaré presentando programas con mayor complejidad.
Gracias por su visita y hasta la proxima.
Gracias por su visita y hasta la proxima.
No hay comentarios:
Publicar un comentario