Name: Anonymous 2008-04-27 1:15
...with perl. I am so proud.
#!/usr/bin/env perl
use strict;
use warnings;
use Carp;
use List::Util qw[first shuffle];
use File::Slurp;
use feature 'say';
my @files = ( $ARGV[1], 'words.list', '/usr/share/dict/words' );
my $dict = first { $_ && -e $_ } @files;
croak "Couldn't find a dict file" unless defined $dict;
my @words = map { lc } read_file $dict;
@words = shuffle @words;
say "Fucking hangman!";
thegame: foreach my $word (@words) {
chomp $word;
my $guesses = 8;
my $fails = 0;
my @underscores = (q[_]) x ( length $word );
while ($guesses) {
print join q[ ], @underscores;
say q[ ] . q[|] x $fails;
my $guess = lc <STDIN>;
if ( $guess eq $word ) {
say "Winnar!";
next thegame;
}
$guess = substr $guess, 0, 1;
say $guess;
redo if $guess !~ /[a-z]/;
my $found = 0;
for my $i ( 0 .. $#underscores ) {
if ( substr( $word, $i, 1 ) eq $guess ) {
$underscores[$i] = $guess;
$found = 1;
}
}
$fails++ unless $found;
if ( join( q[], @underscores ) eq $word ) {
say "Winrar!\n$word";
next thegame;
}
last if $fails == $guesses;
}
say "Fail\n$word";
}