Category: | Fun Stuff |
Author/Contact Info | |
Description: | A simple puzzle game. |
#!/usr/bin/perl -w srand; $a1 = 1; $a2 = 2; $a3 = 3; $b1 = 4; $b2 = 5; $b3 = 6; $c1 = 7; $c2 = 8; $c3 = ""; $win = 0; print "\n" x 100; draw(); print "Your goal is to match this pattern.\n"; print "You may move any square that is next to the blank spot.\n"; print "Press enter when ready. "; $pause = <STDIN>; randomize(); { %squares = ("a1", $a1, "a2", $a2, "a3", $a3, "b1", $b1, "b2", $b2, "b3 +", $b3, "c1", $c1, "c2", $c2, "c3", $c3); draw(); win(); (exit) if ($win eq 1); { $bad_move = 0; print "Which square will you move? "; chomp ($response = <STDIN>); $move = $squares{$response}; check_move(); (redo) if ($bad_move eq 1); } fill_blank(); #$squares{$response} = ""; make_blank(); redo; } #checks to make sure a proper piece is selected sub check_move() { foreach $i (keys %squares) { if ($squares{$i} eq "") { if ($response eq 'a1') { if ($i ne 'a2' && $i ne 'b1') { ($bad_move = 1); } } elsif ($response eq 'a2') { if ($i ne 'a1' && $i ne 'a3' && $i ne 'b2') { ($bad_move = 1); } } elsif ($response eq 'a3') { if ($i ne 'a2' && $i ne 'b3') { ($bad_move = 1); } } elsif ($response eq 'b1') { if ($i ne 'b2' && $i ne 'a1' && $i ne 'c1') { ($bad_move = 1); } } elsif ($response eq 'b2') { if ($i ne 'b1' && $i ne 'b3' && $i ne 'a2' && $i ne 'c2') { ($bad_move = 1); } } elsif ($response eq 'b3') { if ($i ne 'b2' && $i ne 'a3' && $i ne 'c3') { ($bad_move = 1); } } elsif ($response eq 'c1') { if ($i ne 'c2' && $i ne 'b1') { ($bad_move = 1); } } elsif ($response eq 'c2') { if ($i ne 'c1' && $i ne 'c3' && $i ne 'b2') { ($bad_move = 1); } } elsif ($response eq 'c3') { if ($i ne 'c2' && $i ne 'b3') { ($bad_move = 1); } } } } } # makes the moved piece blank sub make_blank() { $i = $response; ($a1 = "") if ($i eq 'a1'); ($a2 = "") if ($i eq 'a2'); ($a3 = "") if ($i eq 'a3'); ($b1 = "") if ($i eq 'b1'); ($b2 = "") if ($i eq 'b2'); ($b3 = "") if ($i eq 'b3'); ($c1 = "") if ($i eq 'c1'); ($c2 = "") if ($i eq 'c2'); ($c3 = "") if ($i eq 'c3'); } # randomizes order of pieces for initial game play sub randomize() { $b2 = ""; @numbers = qw(1 2 3 4 5 6 7 8); $new = rand($#numbers); $a1 = $numbers[$new]; splice(@numbers, $new, 1); $new = rand($#numbers); $a2 = $numbers[$new]; splice(@numbers, $new, 1); $new = rand($#numbers); $a3 = $numbers[$new]; splice(@numbers, $new, 1); $new = rand($#numbers); $b1 = $numbers[$new]; splice(@numbers, $new, 1); $new = rand($#numbers); $b3 = $numbers[$new]; splice(@numbers, $new, 1); $new = rand($#numbers); $c1 = $numbers[$new]; splice(@numbers, $new, 1); $new = rand($#numbers); $c2 = $numbers[$new]; splice(@numbers, $new, 1); $new = rand($#numbers); $c3 = $numbers[$new]; splice(@numbers, $new, 1); } # sets number to blank position sub fill_blank() { foreach $i (keys %squares) { if ($squares{$i} eq "") { ($a1 = $move) if ($i eq 'a1'); ($a2 = $move) if ($i eq 'a2'); ($a3 = $move) if ($i eq 'a3'); ($b1 = $move) if ($i eq 'b1'); ($b2 = $move) if ($i eq 'b2'); ($b3 = $move) if ($i eq 'b3'); ($c1 = $move) if ($i eq 'c1'); ($c2 = $move) if ($i eq 'c2'); ($c3 = $move) if ($i eq 'c3'); # #delete $squares{$i}; # $squares{$i} = $move; # print $move; } } } # checks for winning sequence sub win() { if ($a1 eq 1 && $a2 eq 2 && $a3 eq 3 && $b1 eq 4 && $b2 eq 5 && $b3 +eq 6 && $c1 eq 7 && $c2 eq 8) { print "YOU WIN!\n"; $win = 1; } } # draws board sub draw() { print "\n" x 100; printf " 1 2 3\n"; printf " -------------\n"; printf " a | %1s | %1s | %1s |\n", $a +1, $a2, $a3; printf " -------------\n"; printf " b | %1s | %1s | %1s |\n", $b +1, $b2, $b3; printf " -------------\n"; printf " c | %1s | %1s | %1s |\n", $c +1, $c2, $c3; printf " -------------\n"; print "\n" x13; } edit by thelenm: added code tags |
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Puzzle
by davido (Cardinal) on Sep 18, 2003 at 08:13 UTC | |
by Anonymous Monk on Sep 18, 2003 at 11:51 UTC | |
Re: Puzzle (rewrite of posted code)
by dragonchild (Archbishop) on Sep 18, 2003 at 14:44 UTC |