Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 15-11-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
El proyecto Matriz poliburro La Taberna 1 03-11-2007 02:33:03
matriz de 4ª dimension? (MAJ) La Taberna 7 30-04-2007 21:26:53
matriz editable jsanchez OOP 11 20-01-2006 15:28:41
matriz 3 dimensiones Lidia SQL 2 12-12-2005 18:59:58
Guardar matriz? danytorres Varios 1 27-10-2003 04:10:23


La franja horaria es GMT +2. Ahora son las 18:26:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi