-- number guessing game -- October 22, 2004 -- John Neitzke with Ada.Text_Io; use Ada.Text_Io; with Ada.Integer_Text_Io; use Ada.Integer_Text_Io; with Ada.Numerics.Discrete_Random; procedure Quoom is Lower_Bound : constant Integer := 1; Upper_Bound : constant Integer := 100; -- dialog before each play of the game procedure Dialog is begin Put(Item => "I'm thinking of a number between "); Put ( Item => Lower_Bound, Width => 1); Put(Item => " and "); Put ( Item => Upper_Bound, Width => 1); new_line; end Dialog; -- obtain user's guess procedure Get_Guess ( Guess : out Integer ) is begin Put(Item => "What is your guess? "); Get(Item => Guess); end Get_Guess; -- mechanics of one play of the game procedure Play is subtype Guess_Range is Integer range Lower_Bound .. Upper_Bound; package Random_Number is new Ada.Numerics.Discrete_Random(Result_Subtype => Guess_Range); G : Random_Number.Generator; Hidden_Number : Integer; Players_Guess : Integer; Count : Natural := 0; begin -- play --get the computer's number Random_Number.Reset(G); Hidden_Number := Random_Number.Random(G); loop -- get player's guess Get_Guess(Players_Guess); Count := Count + 1; if Players_Guess = Hidden_Number then Put(Item => "You won!! It took you "); Put( Item => Count, Width => 1); Put (Item => " tries."); exit; elsif Players_Guess < Hidden_Number then Put(Item => "Your guess is too low. "); else -- players_guess >hidden_number Put(Item => "Your guess is too high. "); end if; -- determine the results and do accounting end loop; end Play; -- ask the player if he or she wants to play again procedure Play_Again ( Response : out Boolean ) is Ch: Character; begin loop new_line; Put(Item => "Do you want to play again? Y for yes, N for no. "); Get(Item => Ch); if Ch = 'y' or Ch = 'Y' then Response := True; exit; elsif Ch = 'n' or Ch = 'N' then Response := False; exit; else Put(Item => "I'm sorry, I didn't understand that."); end if; end loop; end Play_Again; -- one iteration of the game procedure Play_Game is Again : Boolean; begin -- dialog Dialog; -- play; Play; --again? Play_Again(Again); end play_game; begin -- quoom Play_Game; end Quoom;