Espero no haberte confundido demasiado, la manera que a mi se me ocurrió para representar el tablero fue por medio de una matriz de NxN, en cada entrada puedes colocar un número digamos 0,1,2, etc. Estos números corresponden a un índice en la lista de imagenes que previamente tienes cargadas.
La matriz tiene esta apariencia.
0
1 0 0
0 0 0 0
0 0
2 0
0 0 0 0
De tal manera que en donde aparezca un número 0 se dibujara el fondo del mar y con los demás números se dibujarán otros objetos.
El código que te muestro a continuación transforma los valores de la matriz en coordenadas dentro del Canvas (lienzo) del control PaintBox.
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
const
ANCHO=32; ALTO=32;
MAR=0; AVION=1; EXPLOSION=2;
var
i,j: Integer;
Matriz: array [0..9, 0..9] of Integer;
begin
for j:=0 to 9 do
for i:=0 to 9 do
Matriz[j,i]:=MAR; Matriz[8,8]:=AVION; Matriz[4,4]:=EXPLOSION;
for j:=0 to 9 do
for i:=0 to 9 do
ImageList1.Draw(PaintBox1.Canvas,i*ANCHO,j*ALTO,Matriz[j,i]);
end;
El doble for recorre todas las entradas de la matriz y uso el método Draw(Canvas,X,Y,Indice) del ImageList para dibujar la imagen sobre el canvas del PaintBox, observa que el indice se obtiene de las entradas de la matriz.
Bueno, esta podría ser una forma de representarlo pero no es la única.
Saludos