Ver Mensaje Individual
  #2  
Antiguo 12-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A mi de gráficos se me da poco pero si estuviera haciendo algo como lo que explicas comenzaría así:

Para empezar me olvidaría de los TShape y usaría: un TPaintBox para presentar la imagen al jugador y tres TBitmap, uno para guardar la imagen original del mar y otros dos para las figuras de aciertos y fallos y una matriz (un array cuadrado) de enteros para representar en código las celdas de la imagen.

Cada celda de la matriz podría tener uno de tres valores:

0 - Nada (no se ha 'tirado' ahí)
1 - Acierto
2 - Fallo

En el evento OnPaint del TPaintBox copias el bitmap del mar primero y luego los bitmaps de aciertos y fallos sobre las celdas adecuadas según indique la matriz. Algo así como:

Código Delphi [-]
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  I, J: Integer;

begin
  CopiaFondo;
  
  for I := 1 to NumFilas do
    for J := 1 to NumColumnas do
      case Matriz[I, J] of
        1: CopiaCuadro(bmpAcierto, I, J);
        2: CopiaCuadro(bmpFallo, I, J);
      end;  
end;

Claro que la parte difícil es la de las rutinas CopiaFondo y CopiaCuadro. En ambos casos podrías usar el método CopyRect del Canvas del PaintBox que copia parte de otro canvas en él mismo. Este método tiene estos parámetros:

Dest: TRect;
Canvas: TCanvas;
Source: TRect

Dest es la porción sobre la que vas a copiar el otro canvas. En el caso de CopiaFondo abarcaría todo el PaintBox y en el caso de CopiaCuadro abarcaría sólo el rectángulo en tu imagen que corresponda a las coordenadas I, J. Tendrás que calcularlo a partir de las medidas de cada celda.

Canvas es el canvas que contiene la imagen que vas a copiar. En este caso sería el canvas de los TBitmap.

Source es el rectángulo del canvas origen que vas a copiar. En este caso sería un rectángulo que abarque todo el bitmap.

No sé que tan buena o mala sea esta técnica pero es una idea para empezar.

// Saludos
Responder Con Cita