$running = true; $gameover = false; $wallet = 0; @cards = (0,0,0); sub askQuestion { ($prompt) = @_; while(true) { print "$prompt? "; $ans = uc <>; chomp($ans); if($ans ne "") { return $ans; } print "PLEASE ANSWER THE QUESTION.\n" } } sub getIntInput { ($prompt) = @_; while(true) { print "$prompt "; $ans = <>; chomp($ans); if(isAnInt($ans) eq true) { return int($ans); } print "YOU DID NOT ENTER AN INTEGER.\n" } } sub isAnInt { ($input) = @_; if($input =~ /^[-*\d]+$/) { return true; } } sub askForBet { while(true) { $bet = getIntInput("WHAT IS YOU BET?"); if($bet < 0) { print "PLEASE BET A NON-NEGATIVE AMOUNT\n."; } elsif($bet > $wallet) { print "SORRY MY FRIEND, BUT YOU BET TOO MUCH.\n"; print "YOU HAVE ONLY $Wallet DOLLARS TO BET.\n"; } else { return $bet; } } } sub askToPlayAgain { while(true) { $ans = askQuestion("DO YOU WANT TO PLAY AGAIN"); if($ans eq "YES" or $ans eq "Y") { return true; } if($ans eq "NO" or $ans eq "N") { return false; } print "PLEASE ANSWER \"YES\" OR \"NO\"\n"; } } sub askToSeeTheRules { while(true) { $ans = askQuestion("DO YOU WANT TO SEE THE RULES"); if($ans eq "YES" or $ans eq "Y") { return true; } if($ans eq "NO" or $ans eq "N") { return false; } print "PLEASE ANSWER \"YES\" OR \"NO\"\n"; } } sub displayCard { ($card) = @_; if($card eq 11) { print "JACK\n"; } elsif($card eq 12) { print "QUEEN\n"; } elsif($card eq 13) { print "KING\n"; } elsif($card eq 14) { print "ACE\n"; } else { print "$card\n"; } } sub displayRules { print "ACEY DUCEY IS PLAYED IN THE FOLLOWING MANNER:\n"; print "THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP\n"; print "YOU HAVE THE OPTION TO BET OR NOT BET DEPENDING\n"; print "ON WHETHER OR NOT YOU FEEL THE NEXT CARD WILL\n"; print "HAVE A VALUE BETWEEN THE FIRST TWO.\n"; print "\n"; print "IF YOU DO NOT WANT TO BET, INPUT A 0 (ZERO).\n"; } sub generateRandomNumber { ($minimum) = @_[0]; ($maximum) = @_[1]; ($show) = @_[2]; $value = rand($maximum) + $minimum; if($show eq true) { print "$value\n"; } return int($value); } sub selectCard { while(true) { $card = generateRandomNumber(2,13,false); if($card ne $cards[0] and $card ne $cards[1] and $card ne $cards[2]) { displayCard($card); return $card; } } } print "*** ACEY DUCEY : PERL ***\n"; if(askToSeeTheRules() eq true) { displayRules(); } while($running eq true) { $wallet = 100; $gameover = false; while($gameover eq false) { print "YOU NOW HAVE $wallet DOLLARS.\n"; $cards[0] = selectCard(); $cards[1] = selectCard(); $bet = askForBet(); if($bet gt 0) { $cards[2] = selectCard(); if(($cards[2] gt $cards[0] and $cards[2] lt $cards[1]) or ($cards[2] gt $cards[1] and $cards[2] lt $cards[0])) { print "YOU WIN!!!\n"; $wallet += $bet; } else { print "SORRY, YOU LOSE.\n"; $wallet -= $bet; } if($wallet < 1) { print "SORRY FRIEND, YOU ARE BROKE.\n"; $gameover = true; } } else { $gameover = true; } } print "*** GAME OVER ***\n"; $running = askToPlayAgain(); } print "OK, HOPE YOU HAD FUN.\n"; print "THANKS FOR PLAYING!\n";