ことを利用する。
# 勝敗チェックサブルーチン 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"; }