Ver Mensaje Individual
  #2  
Antiguo 15-11-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Reputación: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No lo probé porque no tengo Delphi a mano, pero supongo que es aproximandamente lo que quieres:
Recorre de arriba a abajo y de izquierda a derecha el terreno.
Si encuentra una celda vacía recorre de arriba a abajo y de izquierda a derecha las posiciones que ocuparía la casa.
Si durante la búsqueda encuentra una celda ocupada, avanza la posición, porque estoy seguro de que no entrará.
Código Delphi [-]
const
  LargoTerreno=10;
  AltoTerreno=10;
  LargoCasa=3;
  AltoCasa=2;
var
  Terreno : array[1..LargoTerreno, 1..AltoTerreno] of byte;
  Casa : array[1..LargoCasa, 1..AltoCasa] of byte;
  tx, ty : byte;
  cx, cy : byte;
  CeldaOcupada : boolean;
begin
  // Recorro el terreno con dos whiles;
  // Solo recorro hasta la posicion donde la casa es mas grande que el terreno
  tx := 1;
  ty := 1; 
  while (tx < LargoTerreno) and (LargoTerreno - tx > LargoCasa) do
  begin
    while (ty < AltoTerreno) and (AltoTerreno - ty > AltoCasa) do
    begin
      // Si no está ocupada
      if (Terreno[tx, ty]=0) then
      begin
        // Recorro el terreno que ocuparía la casa buscando espacio
        // Aqui estoy seguro de que la casa entra dentro del terreno
        cx := 1;
        cy := 1; 
        CeldaOcupada := False;
        while (cx < LargoCasa) and (not CeldaOcupada) do
        begin
          while (cy < AltoCasa) and (not CeldaOcupada) do
          begin
            if (Terreno[tx+cx-1, ty+cy-1]=1) then
            begin
              CeldaOcupada := True;
              // Avanzo la posición de búsqueda.
              ty := ty + cy;
            end;
            inc(cy);
          end;
          inc(cx);
          cy := 1;
        end;
        // Si ninguna de las celdas esta ocupada encontré un lugar
        if (not CeldaOcupada) then
          ShowMessage(Format('Lugar encontrado: (%d;%d)', [tx, ty]));
      end;
      inc(ty);
    end;
    inc(tx);
    ty := 1;
  end
end;
Responder Con Cita