Acme-GuessNumber

 view release on metacpan or  search on metacpan

Build.PL  view on Meta::CPAN

#! /usr/bin/perl -w
require 5.008;
use strict;
use warnings FATAL => 'all';
use Module::Build;

my $build = Module::Build->new(
    dist_name       => "Acme-GuessNumber",
    dist_version    => "0.05",
    dist_abstract   => "Automatic number guessing game robot",
    dist_author     => "imacat <imacat\@mail.imacat.idv.tw>",
    license         => "perl",
    sign            => 1,

    build_requires		=> {
        "Module::Signature"	=> 0,
        "Test::Pod"		=> 0,
    },

    meta_merge  => {

META.json  view on Meta::CPAN

{
   "abstract" : "Automatic number guessing game robot",
   "author" : [
      "imacat <imacat@mail.imacat.idv.tw>"
   ],
   "dynamic_config" : 1,
   "generated_by" : "Module::Build version 0.4224",
   "license" : [
      "perl_5"
   ],
   "meta-spec" : {
      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",

META.yml  view on Meta::CPAN

---
abstract: 'Automatic number guessing game robot'
author:
  - 'imacat <imacat@mail.imacat.idv.tw>'
build_requires:
  Module::Signature: '0'
  Test::Pod: '0'
configure_requires:
  Module::Build: '0.42'
dynamic_config: 1
generated_by: 'Module::Build version 0.4224, CPAN::Meta::Converter version 2.150010'
license: perl

Makefile.PL  view on Meta::CPAN

#! /usr/bin/perl -w
require 5.008;
use strict;
use warnings FATAL => 'all';
use ExtUtils::MakeMaker;

WriteMakefile(
    NAME        => "Acme::GuessNumber",
    VERSION     => "0.05",
    ABSTRACT    => "Automatic number guessing game robot",
    AUTHOR      => "imacat <imacat\@mail.imacat.idv.tw>",
    PREREQ_PM   => { },
    PL_FILES    => { },
    LICENSE     => "perl",
    SIGN        => 1,

    dist        => {
        COMPRESS    => "gzip -9",
        SUFFIX      => ".gz",
    },

README.md  view on Meta::CPAN

Acme-GuessNumber - Automatic number guessing game robot
=======================================================

Many people have this experience:  You sit before a gambling table.
You keep placing the bet.  You know the Goddess will finally smile at
you.  You just don't know when.  You have only to wait.  As the time
goes by, the bets in your hand become fewer and fewer.  You feel the
time goes slower and slower.  This lengthy waiting process become
painfully long, like a train running straightforwardly into hell.  You
start feeling your whole life is a failure, as the jackpot never
comes...

lib/Acme/GuessNumber.pm  view on Meta::CPAN

# Acme::GuessNumber - Number guessing game robot

# Copyright (c) 2007-2021 imacat. All rights reserved. This program is free
# software; you can redistribute it and/or modify it under the same terms
# as Perl itself.
# First written: 2007/5/19

package Acme::GuessNumber;
use strict;
use warnings;
use base qw(Exporter);
our ($VERSION, @EXPORT, @EXPORT_OK);
$VERSION = 0.05;
@EXPORT = qw(guess_number HURRY_UP);
@EXPORT_OK = @EXPORT;
# Prototype declaration
sub guess_number($;$);

our (@GUESS_MSGS, @RESULT_MSGS);
@GUESS_MSGS = split /\n/, << "EOT";
%d?
Is it %d?
It must be %d!
EOT
@RESULT_MSGS = split /\n/, << "EOT";
Any cigarette?
I'm feeling lucky tonight
I'm getting a little tired
It's killing me
I'm gonna faint
EOT

# HURRY_UP: Speed up the game
use constant HURRY_UP => 1;

# guess_number: Play the game
sub guess_number($;$) {
    local ($_, %_);
    my ($max, $hurry, $to_rest);
    ($max, $hurry) = @_;
    $hurry = 0 if @_ < 2;
    
    # Play the game
    $to_rest = 5 + int rand 7 unless $hurry;
    while (1) {
        my ($num, $guess);
        # Generate the number
        $num = 1 + int rand $max;
        # Generate the guess
        $guess = 1 + int rand $max;
        # Output our guess
        $_ = sprintf $GUESS_MSGS[int rand scalar @GUESS_MSGS], $guess;
        printf "%-40s", "<Player>: $_";
        # Hit?
        if ($guess == $num) {
            print "<Banker>: Jackpot!\n";
            last;
        }
        print "<Banker>: Sorry, it's $num.\n";
        # We are in a hurry
        next if $hurry;
        # Take a little rest
        if (--$to_rest == 0) {
            my ($flush, $rest);
            $flush = $|;

lib/Acme/GuessNumber.pm  view on Meta::CPAN

    
    return;
}

return 1;

__END__

=head1 NAME

Acme::GuessNumber - An automatic number guessing game robot

=head1 SYNOPSIS

  use Acme::GuessNumber;
  guess_number(25);
  # If you are in a hurry
  guess_number(25, HURRY_UP);

=head1 DESCRIPTION

Many people have this experience:  You sit before a gambling table.
You keep placing the bet.  You know the Goddess will finally smile at
you.  You just don't know when.  You have only to wait.  As the time
goes by, the bets in your hand become fewer and fewer.  You feel the
time goes slower and slower.  This lengthy waiting process become
painfully long, like a train running straightforwardly into hell.  You
start feeling your whole life is a failure, as the jackpot never

lib/Acme/GuessNumber.pm  view on Meta::CPAN

determinedly runs the probability until the jackpot.  As you know,
the anxiety and depression is the enemy of the games, while a
simple, faithful and determined mind is the only path to the jackpot.
This makes computer a perfect candidate as a gambler than an ordinary
human being.

=head1 FUNCTIONS

=over

=item guess_number($max, $hurry)

Start playing.  Give it a maximum range of the numbers, and the program
will play the number guessing game for you.  If you are in a hurry, you
can also speed it up by setting $hurry = 1, or use the exported symbol
HURRY_UP.

=back

=head1 NOTES

=head2 It's so funny!  May I join the game?

No.  That's the whole point of acme.  Human beings are never acme.  Only
machines are acme.  So, in order for everything to be acme, no human
being is allowed.  This ensures that when guessing, the player
is never bothered by all kinds of feelings: anxiety, depression,
anything.  It just guesses, precisely.  Nothing more.

=head1 BUGS

No.  This can't possibly be wrong.  This is brute-force.  It will try
until it succeeds.  Nothing can stop it from success.  You always win!
You will always win!  The Goddess of fortune will always smile at you!

=head1 SEE ALSO

None.

t/01-basic.t  view on Meta::CPAN

use strict;
use warnings;
use Test;

BEGIN { plan tests => 1 }

our $r;

$r = eval {
    use Acme::GuessNumber;
    guess_number(25, HURRY_UP);
    return 1;
};
# 1
ok($r, 1);



( run in 0.500 second using v1.01-cache-2.11-cpan-702932259ff )