コンピュータ同士の対戦だけでなく、自分も対戦に参加したくなったので前章の 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
相手が機械とは言え、負けると悔しいものがあります。