# mission1b.adb

    --
    -- Nom    :
    -- Prenom :
    -- Groupe :
    --

    with EcoRobot ;

    procedure Mission1b is

       package E renames EcoRobot ;

       -- Déplace le robot dans la direction indiquée.
       procedure Walk(Num : Integer ; Direction : Integer) is
          -- Coordonnées du robot
          X : Integer := E.Abscisse(Num) ;
          Y : Integer := E.Ordonnee(Num) ;
       begin
          -- Nouvelles coordonnées selon la direction voulue.
          if Direction = E.Nord then
             Y := Y - 1 ;
          elsif Direction = E.Sud then
             Y := Y + 1 ;
          elsif Direction = E.Est then
             X := X + 1 ;
          else
             X := X - 1 ;
          end if ;
          E.Step(Num, X, Y) ;
       end Walk ;

       procedure Test_Walk is
       begin
          for Num in 1..E.Nombre_Robots loop
             Walk(Num, E.Sud) ;
             Walk(Num, E.Ouest) ;
             Walk(Num, E.Nord) ;
             Walk(Num, E.Est) ;
          end loop ;
       end Test_Walk ;

       -- Déplace le robot si possible et indique si le déplacement a été fait.
       function Safe_Walk(Num : Integer ; Direction : Integer) return Boolean is
          -- Coordonnées du robot
          X : Integer := E.Abscisse(Num) ;
          Y : Integer := E.Ordonnee(Num) ;
          Result : Boolean := False ;
       begin
          -- Nouvelles coordonnées selon la direction voulue.
          if Direction = E.Nord then
             Y := Y - 1 ;
          elsif Direction = E.Sud then
             Y := Y + 1 ;
          elsif Direction = E.Est then
             X := X + 1 ;
          else
             X := X - 1 ;
          end if ;

          if E.Scan(X,Y) /= E.Billets and E.Scan(X,Y) /= E.Dehors then
             E.Step(Num, X, Y) ;
             Result := True ;
          end if ;
          return Result ;
       end Safe_Walk ;

       procedure Advance(Num : Integer ; Direction :Integer) is
       begin
          while Safe_Walk(Num, Direction) loop
             null ;
          end loop ;
       end Advance ;

       procedure Test_Advance is
       begin
          Advance(1, E.Est) ;
          Advance(1, E.Sud) ;
          Advance(2, E.Nord) ;
          Advance(2, E.Ouest) ;
          Advance(2, E.Sud) ;
       end Test_Advance ;

       procedure Sauver_Tous_Les_Robots is
       begin
          for Num in 1..E.Nombre_Robots loop
             while not E.Robot_Content(Num) loop
                Advance(Num, E.Sud) ;
                Advance(Num, E.Est) ;
             end loop ;
          end loop ;
       end Sauver_Tous_Les_Robots ;

    begin

       Sauver_Tous_Les_Robots ;

    end Mission1b ;