WITH Spider; WITH Ada.Numerics.Discrete_Random; PROCEDURE Drunken_Spider IS ------------------------------------------------------------------------ --| Spider tries to tour its room but has drunk too much, so --| takes a random number of steps and may hit the wall. If the --| spider hits the wall, it turns around and keeps going. --| Author: Michael B. Feldman, The George Washington University --| Last Modified: July 1995 ------------------------------------------------------------------------ SUBTYPE RandomSteps IS Positive RANGE 1..20; PACKAGE Random_20 IS NEW Ada.Numerics.Discrete_Random (Result_Subtype => RandomSteps); G: Random_20.Generator; -- funny variable; we must keep passing it -- to Random, but can't use it. HowMany: RandomSteps; BEGIN -- Drunken_Spider Spider.Start; LOOP -- keep going forever HowMany := Random_20.Random(Gen => G); -- Spider will count steps correctly but might change direction FOR Count IN 1..HowMany LOOP BEGIN -- to handle exception Spider.Step; EXCEPTION WHEN Spider.Hit_the_Wall => -- turn around 180 degrees Spider.Right; Spider.Right; END; END LOOP; Spider.Right; END LOOP; END Drunken_Spider;