ジャンケンゲーム2

コンピュータ同士の対戦だけでなく、自分も対戦に参加したくなったので前章の Janker クラスから、Ore クラスを派生させてみました。コンピュータ同士の対戦とはプログラムの行動が随分変わるのではないかと思いましたが、意外に簡単に実現できてしまいました。変更も Ore クラスを作るだけです。出来上がったソフトを色々と変更するときはオブジェクト指向プログラムは便利なものだなと思いました。次のソースを Ore.pm というファイル名で作成します。

package Ore;
use Janker;
@ISA = qw( Janker );

sub new {
    my($param) = shift;
    my($class) = ref($param) || $param;
    my($self) = $class->SUPER::new();
    bless( $self, $class );
    print "Please input your name: ";
    $name = <STDIN>;
    chomp $name;
    $self->{NAME} = $name;
    return $self;
}

%hash = (1, goo, 2, choki, 3, pah);

sub pon {
    print "\nPlease select the number(1 goo  2 choki  3 pah): ";
    $number = <STDIN>;
    chomp $number;
    return $hash{ $number };
}
1;

変更点の主なものは、オブジェクトを new で作成するときに、名前の入力をできるようにすることと、メソッド pon の時に手動で入力することができるようにすることです。

メインプログラムの match2.pl は次のようになります。前章の match.pl をコピーして、Yamada クラスを Ore クラスに入れ換えただけです。

#!/usr/bin/perl
use Referee;
use Ore;
use Tanaka;

$ore = new Ore;
$tanaka = new Tanaka;
$refery = new Referee;

$refery->round(5);
$refery->match( $ore, $tanaka );
print "\n";
$ore->debug;
$tanaka->debug;

それでは perl match2.pl で実行してみましょう。

$ perl match2.pl
Please input your name: Oyaji

Please select the number(1 goo  2 choki  3 pah): 1
round1)         Oyaji: goo      Tanaka: goo     Aiko

Please select the number(1 goo  2 choki  3 pah): 1
round2)         Oyaji: goo      Tanaka: pah     Tanaka won!

Please select the number(1 goo  2 choki  3 pah): 2
round3)         Oyaji: choki    Tanaka: choki   Aiko

Please select the number(1 goo  2 choki  3 pah): 3
round4)         Oyaji: pah      Tanaka: choki   Tanaka won!

Please select the number(1 goo  2 choki  3 pah): 1
round5)         Oyaji: goo      Tanaka: goo     Aiko

Oyaji: 0        Tanaka: 2       Aiko: 3
Tanaka is the WINNER!

NAME: Oyaji
JIBUN: goo pah choki goo goo
AITE: goo choki choki pah goo
NAME: Tanaka
JIBUN: goo choki choki pah goo
AITE: goo pah choki goo goo

相手が機械とは言え、負けると悔しいものがあります。