Solution: Improve the Number Guessing game
examples/perlarrays/number_guessing.pl
#!/usr/bin/perl use strict; use warnings; my $N = 200; my $debug; my $moving; my $scores = 'scores.txt'; my ($min, $max); if (open my $in, '<', $scores) { ($min, $max) = <$in>; chomp ($min, $max); } print <<'END_TXT'; x - exit q - quit n - next game s - show target d - toggle debug mode m - toggle - allow object to move or not END_TXT GAME: while (1) { my $hidden = 1 + int rand $N; my $count = 0; while (1) { print "Please guess between 1 and $N :"; if ($debug) { print " ($hidden) "; } print "\n"; my $guess = <STDIN>; $count++; chomp $guess; if ($guess eq 'x' or $guess eq 'q') { last GAME; } if ($guess eq 'n') { last; } if ($guess eq 'd') { $debug = $debug ? 0 : 1; next; } if ($guess eq 'm') { $moving = $moving ? 0 : 1; next; } if ($guess eq "s") { print "The hidden value is $hidden\n"; next; # is it fair to let the player keep playing after seeing the result? # if not replace the next by last } if ($guess < 1 or $guess > $N) { warn "You shot ($guess) in the outer space.\n"; } if ($guess < $hidden) { print "$guess is too small\n"; } if ($guess > $hidden) { print "$guess is too big\n"; } if ($guess == $hidden) { print "Heureka!\n"; last; } if ($moving) { $hidden += int(rand 5)-2; # move target by -2 .. +2 # don't wander off the space if ($hidden > $N) { $hidden = $N; } if ($hidden < 1) { $hidden = 1; } } } if (not defined $min) { $min = $count; } if (not defined $max) { $max = $count; } $min = $count < $min ? $count : $min; $max = $count > $max ? $count : $max; } if (defined $min) { open my $out, '>', $scores or die; print $out "$min\n"; print $out "$max\n"; }