第66回 Perlでじゃんけんゲーム

Perlでじゃんけんゲームをつくりました。
勝敗を決めるアルゴリズムが違う2パターン作りました。

じゃんけんプログラム その1

使い方

プログラムの引数に、

グー,
チョキ,
パー

のいずれかの文字を与えて起動

勝負の判定方法

勝負の全パターンを書いて場合わけ

ソース 1

use strict;

###################################
# 入力チェック
###################################
if( 1 != int @ARGV ){
  die '引数の数が正しくありません';
}

if( !( ( $ARGV[0] eq 'グー' )  ||
       ( $ARGV[0] eq 'チョキ') ||
       ( $ARGV[0] eq 'パー')
    )
){
  die q{引数は、'グー', 'チョキ', 'パー'でなければいけません};
}



###################################
# $battle->{人}->{COM} の形で使う
###################################
my $battle = {};

$battle->{'グー'}->{'グー'}      = 'ひきわけ';
$battle->{'グー'}->{'チョキ'}    = '勝ち';
$battle->{'グー'}->{'パー'}      = '負け';

$battle->{'チョキ'}->{'グー'}    = '負け';
$battle->{'チョキ'}->{'チョキ'}  = 'ひきわけ';
$battle->{'チョキ'}->{'パー'}    = '勝ち';

$battle->{'パー'}->{'グー'}      = '勝ち';
$battle->{'パー'}->{'チョキ'}    = '負け';
$battle->{'パー'}->{'パー'}      = 'ひきわけ';

####################################
# 人の手を入手
####################################
my $human = {};

$human->{'num'}  = {'グー'=>0, 'チョキ'=>1, 'パー'=>2}->{$ARGV[0]};
$human->{'hand'} = $ARGV[0];

####################################
# COMの手を生成
####################################
my $com = {};

$com->{'num'}  = int rand(3);
$com->{'hand'} = {'0'=>'グー', '1'=>'チョキ', '2'=>'パー'}->{$com->{'num'}};

####################################
# 勝負
####################################
print '人 : ' . $human->{'hand'}, "\n";
print 'COM: ' . $com->{'hand'},   "\n";

print 'あなたの ' . $battle->{$human->{'hand'}}->{$com->{'hand'}} . ' です', "\n";

じゃんけんプログラム その2

使い方

プログラムの引数に、

グー,
チョキ,
パー

のいずれかの文字を与えて起動
※ その1と同じ

勝負の判定方法

グー, チョキ, パー を
0, 1, 2  とみなし、
勝負の結果は、
3x+0, 3x+1, 3x+2
のどれかのパターンになることから導きだす。

ソース 2

use strict;

###################################
# 入力チェック
###################################
if( 1 != int @ARGV ){
  die '引数の数が正しくありません';
}

if( !( ( $ARGV[0] eq 'グー' )  ||
       ( $ARGV[0] eq 'チョキ') ||
       ( $ARGV[0] eq 'パー')
    )
){
  die q{引数は、'グー', 'チョキ', 'パー'でなければいけません};
}

####################################
# 人の手を入手
####################################
my $human = {};

$human->{'num'}  = {'グー'=>0, 'チョキ'=>1, 'パー'=>2}->{$ARGV[0]};
$human->{'hand'} = $ARGV[0];

####################################
# COMの手を生成
####################################
my $com = {};

$com->{'num'}  = int rand(3);
$com->{'hand'} = {'0'=>'グー', '1'=>'チョキ', '2'=>'パー'}->{$com->{'num'}};

####################################
# 勝負
####################################
print '人 : ' . $human->{'hand'}, "\n";
print 'COM: ' . $com->{'hand'},   "\n";

my $message = { '0' => 'ひきわけ',
                '1' => '勝ち',
                '2' => '負け'
              }->{ ($com->{'num'} - $human->{'num'}) % 3 };

print 'あなたの ' . $message . ' です', "\n";

一応参考までに

ビンゴ中西のほげほげじゃんけんの問題がやっとわかった
(たんなる覚え書きです)