ことを利用する。
# 勝敗チェックサブルーチン
sub check_winner {
my @b=@_;
my $i;
for ( $i=0; $i<3; $i++ ) { # 横チェック
if ( $b[$i*3+0]+$b[$i*3+1]+$b[$i*3+2]==3 ) {
print "○の勝ち!\n";
} elsif ( $b[$i*3+0]+$b[$i*3+1]+$b[$i*3+2]==-3 ) {
print "×の勝ち!\n";
}
}
for ( $i=0; $i<3; $i++ ) { # 縦チェック
if ( $b[0+$i]+$b[3+$i]+$b[6+$i]==3 ) {
print "○の勝ち!\n";
} elsif ( $b[0+$i]+$b[3+$i]+$b[6+$i]==-3 ) {
print "×の勝ち!\n";
}
}
if ( $b[0]+$b[4]+$b[8]==3 ) { # 斜めチェック1
print "○の勝ち!\n";
} elsif ( $b[0]+$b[4]+$b[8]==-3 ) {
print "×の勝ち!\n";
}
if ( $b[2]+$b[4]+$b[6]==3 ) { # 斜めチェック2
print "○の勝ち!\n";
} elsif ( $b[2]+$b[4]+$b[6]==-3 ) {
print "×の勝ち!\n";
}
}
# 勝敗チェックサブルーチン
sub check_winner {
my @b=@_;
my $i;
for ( $i=0; $i<3; $i++ ) {
if ( $b[$i*3+0]+$b[$i*3+1]+$b[$i*3+2]==3 ) {
return 1;
} elsif ( $b[$i*3+0]+$b[$i*3+1]+$b[$i*3+2]==-3 ) {
return -1;
}
}
for ( $i=0; $i<3; $i++ ) {
if ( $b[0+$i]+$b[3+$i]+$b[6+$i]==3 ) {
return 1;
} elsif ( $b[0+$i]+$b[3+$i]+$b[6+$i]==-3 ) {
return -1;
}
}
if ( $b[0]+$b[4]+$b[8]==3 ) {
return 1;
} elsif ( $b[0]+$b[4]+$b[8]==-3 ) {
return -1;
}
if ( $b[2]+$b[4]+$b[6]==3 ) {
return 1;
} elsif ( $b[2]+$b[4]+$b[6]==-3 ) {
return -1;
}
return 0;
}
呼び出し側(メインルーチン)
if (&check_winner(@b)==1) {
print "○の勝ち!\n";
} elsif (&check_winner(@b)==-1) {
print "×の勝ち!\n";
} else {
print "引き分け!\n";
}