mission3a.adb

with KakoRobot, Gada.Text_IO ;

procedure Mission3a is

   package K renames KakoRobot ;
   package Txt renames GAda.Text_IO ;

   -- Fait avancer le robot jusqu'à sa cible
   procedure Sauvez_Willy (Num : Integer) is
   begin
      -- Tant que le robot n'est pas content, il avance.
      while K.Etat(Num) /= 2 loop
         K.Deplacer (Num, K.Nord) ;
      end loop ;
   end Sauvez_Willy ;

   -- Trouve le robot d'énergie minimale.
   function Trouver_Min return Integer is

      -- On part d'une valeur atrocement grande
      --   Integer'Last aurait été plus rigoureux
      Energie_Min : Integer := 1E9 ;
      Numero_Min : Integer := 1 ;
   begin
      for I in 1..K.Nombre_Robots loop
         -- Les robots contents ne sont pas pris en compte
         if K.Energie(I) < Energie_Min and K.Etat(I) /= 2 then
            Energie_Min := K.Energie(I) ;
            Numero_Min := I ;
         end if ;
      end loop ;

      return Numero_Min ;
   end Trouver_Min ;

begin

   -- Afficher l'énergie de chaque robot
   for I in 1..K.Nombre_Robots loop
      Txt.Put_Line ("L'énergie du robot numéro " & Integer'Image(I) &
                    " est " & Integer'Image(K.Energie(I)) ) ;
   end loop ;

   -- Il y a Nombre_Robots à sauver
   for I in 1..K.Nombre_Robots loop
      Sauvez_Willy (Trouver_Min) ;
   end loop ;

end Mission3a ;