@@ -21,7 +21,26 @@ interface Printable {
2121struct GuessGame {
2222 target : i32 ,
2323 attempts : i32 ,
24- }
24+ } {
25+ fn play_game (game : & mut GuessGame ): GameError! void {
26+ for _ in 0 .. 5 {
27+ try std . out. print (" Enter your guess: " ) as { e -> GameError . IO { e } }
28+ input : = try std . io. read () as { e -> GameError . IO { e } }
29+ guess : = try input . parse<i32 >() as { e -> GameError . ParseFailed { e } }
30+ match guess {
31+ g if g == game . target => {
32+ try std . out. println (" Correct! You win!" ) as { e -> GameError . IO { e } }
33+ return
34+ }
35+ g if g < game . target => try std . out. println (" Too low!" ) as { e -> GameError . IO { e } },
36+ g if g > game . target => try std . out. println (" Too high!" ) as { e -> GameError . IO { e } },
37+ }
38+ game . attempts += 1
39+ }
40+ try std . out. println (" Out of attempts! Game over." ) as { e -> GameError . IO { e } }
41+ return GameError . Game (" Out of attempts!" );
42+ }
43+ }
2544
2645impl Printable for GuessGame {
2746 fn print (): IOError! void {
@@ -30,32 +49,14 @@ impl Printable for GuessGame {
3049}
3150
3251fn random_number (min : i32 , max : i32 ): RandomNumberError! i32 {
33- return try min + (std . random. int () % (max - min + 1 ))
52+ return min + (try std . random. int () % (max - min + 1 ))
3453}
3554
36- fn play_game (game : & mut GuessGame ): GameError! void {
37- for _ in 0 .. 5 {
38- try std . out. print (" Enter your guess: " ) as { e -> GameError . IO { e } }
39- input : = try std . io. read () as { e -> GameError . IO { e } }
40- guess : = try input . parse<i32 >() as { e -> GameError . ParseFailed { e } }
41- match guess {
42- g if g == game . target => {
43- try std . out. println (" Correct! You win!" ) as { e -> GameError . IO { e } }
44- return
45- }
46- g if g < game . target => try std . out. println (" Too low!" ) as { e -> GameError . IO { e } },
47- g if g > game . target => try std . out. println (" Too high!" ) as { e -> GameError . IO { e } },
48- }
49- game . attempts += 1
50- }
51- try std . out. println (" Out of attempts! Game over." ) as { e -> GameError . IO { e } }
52- return GameError . Game (" Out of attempts!" );
53- }
5455fn main (): GameError! void {
55- let mut game : Box <GuessGame > = try Box . new (GuessGame { target : try random_number (1 , 10 ) as { e -> GameError . RandomFailed { e } }, attempts : 0 }) as { e -> GameError . Alloc { e } }
56+ let mut game : Box <GuessGame > = Box . new (GuessGame { target : try random_number (1 , 10 ) as { e -> GameError . RandomFailed { e } }, attempts : 0 });
5657
5758 try game . print () as { e -> GameError . IO { e } }
58- try play_game (& mut game )
59+ try play_game (& mut * game )
5960
6061 try std . out. println (" Thanks for playing!" ) as { e -> GameError . IO { e } }
6162
0 commit comments