Template: Click this link, fork, and invite mrcodeswildride:
new project

Technique

Use a recursive technique called minimax. For two-player games, minimax
is an algorithm that attempts to choose the best possible move for any
given game state. It does this by assigning a score to every possible
move, and choosing the move with the highest score.

If the move results in an endgame, the score can be computed directly.
This is the base case.

If the move doesn't result in an endgame, the score must be computed by
looking ahead. This is the recursive case. Minimax assumes that each
player will choose the best possible move, so if the opponent is choosing
a move, they will choose a move that minimizes the computer's score. If
the computer is choosing a move, it will choose a move that maximizes its
score.

Illustration

Pseudocode

function move():
highestScore = -Infinity
for each possible next move:
score = getScore(nextMove, true)
if score > highestScore:
bestMove = nextMove
function getScore(move, computerTurn):
if game is over:
return score of game state
else:
if computerTurn:
strongestScore = Infinity
for each possible next move:
score = getScore(nextMove, false)
strongestScore = min(score, strongestScore)
return strongestScore
else:
strongestScore = -Infinity
for each possible next move:
score = getScore(nextMove, true)
strongestScore = max(score, strongestScore)
return strongestScore