Sprad has asked for the wisdom of the Perl Monks concerning the following question:
It's got several different AI modules that you can play against. Right now, I'm working on a simplistic rules-based AI. All it does is look for particular cases (such as being able to win on its next move), and take the appropriate action.
I'd like to smarten it up a bit, by adding an additional check for potential "traps" (situations where you can win two different ways, thus guaranteeing your victory). I'm wondering if there's an easier way to check for them than just hard-coding in all the possibilities. I'd like to extend this to 3-D Tic Tac Toe later, and that strategy obviously won't scale. Any suggestions on how to go about it?
Incidentally, I do know about the minimax algorithm, and that will be another of the AI subroutines available. But I'd like to get a strong rule-based one set up as well, so I can compare their speed and ability.
Here's my current subroutine for reference, and some explanation as to what's going on in it:
---# rulesAI($x_or_o, @board); # Returns index of chosen move # @board = 9-element array, initialized to ($c,$c,$c,$c,$c,$c,$c,$c,$c +) # $c - character representing unoccupied square # sub legals() - accepts a @board, returns list of unoccupied spaces o +n it # sub check() - accepts a @board, returns "x" or "o" if x or o won, -1 + if tie, 0 otherwise sub rulesAI { my $mv = -1; my $col = shift; my @choices = legals(@_); # priorities: # 1. Win, if possible foreach $m (@choices) { $_[$m] = $col; if (check(@_) =~ /$col/) { $mv = $m; last; } $_[$m] = $c; } unless ($mv == -1) { return $mv; } # 2. Block opponent, if necessary my $opcol = ($col =~ /x/) ? 'o' : 'x'; foreach $m (@choices) { $_[$m] = $opcol; if (check(@_) =~ /$opcol/) { $mv = $m; last; } $_[$m] = $c; } unless ($mv == -1) { return $mv; } # 3. Set up a trap # 4. Choose at random return $choices[(rand$#choices+1) % ($#choices+1)]; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Tic Tac Toe quasi-AI
by knobunc (Pilgrim) on Apr 06, 2001 at 21:14 UTC | |
|
Re: Tic Tac Toe quasi-AI
by stefan k (Curate) on Apr 06, 2001 at 19:17 UTC | |
|
Re: Tic Tac Toe quasi-AI
by suaveant (Parson) on Apr 06, 2001 at 19:01 UTC | |
|
Re: Tic Tac Toe quasi-AI
by Falkkin (Chaplain) on Apr 07, 2001 at 01:21 UTC | |
|
Re: Tic Tac Toe quasi-AI
by jynx (Priest) on Apr 07, 2001 at 01:29 UTC | |
|
Re: Tic Tac Toe quasi-AI
by mbond (Beadle) on Apr 06, 2001 at 23:08 UTC | |
|
Re: Tic Tac Toe quasi-AI
by cei (Monk) on Apr 07, 2001 at 06:20 UTC |