commit 9b72c9eb5e788b325e84ac9dfb3e5b90026a758f
parent 1fce673292908a7774a721bc7dc4b642e8a7d5ab
Author: Samir Parikh <noreply@samirparikh.com>
Date: Fri, 25 Feb 2022 02:19:09 +0000
complete second version of hangman that stores state within a
cookie rather than in hidden fields within the form
Diffstat:
M | hangman2.cgi | | | 56 | +++++++++++++++++++++++++++++++++++++++----------------- |
1 file changed, 39 insertions(+), 17 deletions(-)
diff --git a/hangman2.cgi b/hangman2.cgi
@@ -5,14 +5,17 @@
use IO::File();
use CGI qw( :standard );
+use CGI::Cookie ();
use warnings;
use strict;
use constant WORDS => '/usr/share/dict/hangman_words';
use constant TRIES => 6;
+use constant COOKIE_NAME => 'Hangman';
# retrieve the state
-my $state = get_state(); # $state is a hash reference
+#my $state = get_state(); # $state is a hash reference
+my $state = get_state() unless param('clear');
# reinitialize if we need to
$state = initialize($state) if !$state or param('restart');
@@ -21,7 +24,9 @@ $state = initialize($state) if !$state or param('restart');
my ($message, $status) = process_guess(param('guess') || '', $state);
# generate the HTML page
-print header(-charset => 'utf-8'),
+print header(-charset => 'utf-8',
+ -cookie => save_state($state)
+ ),
start_html( -Title => 'Hangman 1',
-bgcolor => 'white',
-onLoad => 'if (document.gf) document.gf.guess.focus()'),
@@ -56,22 +61,37 @@ sub initialize {
return $state;
}
+#sub save_state {
+# my $state = shift;
+# foreach (qw(WORD GAMENO GUESSES_LEFT WON TOTAL GUESSED)) {
+# print hidden(
+# -name => $_, -value=> $state->{$_}, -override => 1
+# );
+# }
+#}
+
sub save_state {
my $state = shift;
- foreach (qw(WORD GAMENO GUESSES_LEFT WON TOTAL GUESSED)) {
- print hidden(
- -name => $_, -value=> $state->{$_}, -override => 1
- );
- }
+ return CGI::Cookie->new (
+ -name => COOKIE_NAME,
+ -value => $state,
+ -expires => '+1M'
+ );
}
+#sub get_state {
+# return undef unless param();
+# my $state = {};
+# foreach (qw(WORD GAMENO GUESSES_LEFT WON TOTAL GUESSED)) {
+# $state->{$_} = param($_);
+# }
+# return $state;
+#}
+
sub get_state {
- return undef unless param();
- my $state = {};
- foreach (qw(WORD GAMENO GUESSES_LEFT WON TOTAL GUESSED)) {
- $state->{$_} = param($_);
- }
- return $state;
+ my %cookie = cookie( COOKIE_NAME );
+ return undef unless %cookie;
+ return \%cookie;
}
sub show_guess_form {
@@ -80,7 +100,7 @@ sub show_guess_form {
"Your guess: ",
textfield(-name => 'guess', -value => '', -override => 1),
submit(-value => 'Guess');
- save_state($state);
+ #save_state($state);
print end_form;
}
@@ -88,9 +108,11 @@ sub show_restart_form {
my $state = shift;
print start_form,
"Do you want to play again?",
- submit(-name => 'restart', -value => 'Another game');
- #delete $state->{WORD};
- save_state($state);
+ submit(-name => 'restart',
+ -value => 'Another game'),
+ checkbox(-name => 'clear', -label => 'Clear history');
+ delete $state->{WORD};
+ #save_state($state);
print end_form;
}