# looks at all 8 in-a-rows. # +10 for all xs # -10 for all os # +2 for 2 xs, no os # -2 for 2 os, no xs # +1 for 1 xs, no os # -1 for 1 os, no xs # print "in blocker file\n"; sub eval { local($board) = @_; # print "blocker: >$board<\n"; local($score) = 0; $score += docount($board, 0,1,2); $score += docount($board, 3,4,5); $score += docount($board, 6,7,8); $score += docount($board, 0,3,6); $score += docount($board, 1,4,7); $score += docount($board, 2,5,8); $score += docount($board, 0,4,8); $score += docount($board, 2,4,6); return($score); } sub docount { local($board, $a,$b,$c) = @_; local(@counts); @counts{"x"} = 0; @counts{"o"} = 0; @counts{" "} = 0; @counts{substr($board,$a,1)}++; @counts{substr($board,$b,1)}++; @counts{substr($board,$c,1)}++; # printf "$board, $a, $b, $c\n"; # printf "%d %d\n", @counts{"x"}, @counts{"o"}; if (@counts{"x"} == 3) { return 10; } if (@counts{"o"} == 3) { return -10; } if ((@counts{"x"} > 0)&&(@counts{"o"}>0)) { return 0; } if ((@counts{"x"} == 2)) { return 2; } if ((@counts{"0"} == 2)) { return -2; } if ((@counts{"x"} == 1)) { return 1; } if ((@counts{"0"} == 1)) { return -1; } return 0; }