El programa ejecutándose se muestra en la imagen:
Les muestro los componentes de la forma
2 Timer
11 PaintBox
El dibujado del muñeco se hizo sobre los PaintBox.
Este es el código del dibujado del muñeco, tengan en cuenta que el orden de los PaintBox en la forma dibujaran círculos y deben coincidir para formar el muñeco:
Todo este código va sobre un Timer
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
this->Canvas->Brush->Color=clSilver+random(40);
this->Canvas->Ellipse(10,10,110,110);
PaintBox4->Canvas->Brush->Color=clMaroon;
PaintBox5->Canvas->Brush->Color=clMaroon;
PaintBox4->Canvas->Rectangle(0,0,PaintBox4->Width, PaintBox4->Height);
PaintBox5->Canvas->Rectangle(0,0,PaintBox5->Width, PaintBox5->Height);
PaintBox1->Canvas->Brush->Color=clWhite;
PaintBox2->Canvas->Brush->Color=clWhite;
PaintBox3->Canvas->Brush->Color=clWhite;
PaintBox1->Canvas->Pen->Color=clWhite;
PaintBox2->Canvas->Pen->Color=clWhite;
PaintBox3->Canvas->Pen->Color=clWhite;
PaintBox1->Canvas->Ellipse(0,0,PaintBox1->Width, PaintBox1->Height);
PaintBox2->Canvas->Ellipse(0,0,PaintBox2->Width, PaintBox2->Height);
PaintBox3->Canvas->Ellipse(0,0,PaintBox3->Width, PaintBox3->Height);
PaintBox6->Canvas->Brush->Color=clBlack;
PaintBox7->Canvas->Brush->Color=clBlack;
PaintBox8->Canvas->Brush->Color=clBlack;
PaintBox9->Canvas->Brush->Color=clBlack;
PaintBox6->Canvas->Ellipse(0,0,PaintBox6->Width, PaintBox6->Height);
PaintBox7->Canvas->Ellipse(0,0,PaintBox7->Width, PaintBox7->Height);
PaintBox8->Canvas->Ellipse(0,0,PaintBox8->Width, PaintBox8->Height);
PaintBox9->Canvas->Ellipse(0,0,PaintBox9->Width, PaintBox9->Height);
PaintBox10->Canvas->Pen->Color=clBlack;
PaintBox10->Canvas->Pen->Width=5;
PaintBox11->Canvas->Pen->Color=clBlack;
PaintBox11->Canvas->Pen->Width=5;
PaintBox10->Canvas->MoveTo(0,PaintBox10->Height);
PaintBox10->Canvas->LineTo(PaintBox10->Width,0);
PaintBox11->Canvas->MoveTo(PaintBox11->Width, PaintBox11->Height);
PaintBox11->Canvas->LineTo(0,0);
}
Para dibujar la nieve inicializamos las variables en el .h
private:
// User declarations
POINT Puntos[1000];//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
POINT Nieve[1000];
Nos vamos al evento FormPaint y ponemos las posicio iniciales de los puntos o pixeles
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 ; // Y calcular el punto medio
MediaY = ClientHeight ;
}
Ahora el movimiento de los pixeles se pone en el otro Timer, se agrego una breve descripción de lo que hace el código
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
for (int N = 0; N < 10000; 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] = clNavy;
// 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] = clWhite;//Black;
Contador++; // Pasar al punto siguiente
//O al primero si ya se han recorrido todos
if (Contador == 1000)
Contador = 0;
}
}
Al ejecutar el programa se observa que la nieve se mueve de forma diagonal.
El código del muñeco se puede omitir sin afectar el funcionamiento del programa.
El fin de este programa fue manipular los pixeles en c++. Para ver el uso de pixeles en c# vayan la publicación donde esta el juego de la serpiente en este mismo blog.
Próximamente se subirán mas ejemplos con pixeles y también programación en 3D.
Comenten y den sugerencias GRACIAS!
que librerias usaste?
ResponderEliminar