Skip to content

Minimax algorithm for finding optimal strategy in the classic children's game

Notifications You must be signed in to change notification settings

aherriot/dots-game

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI for the dots, lines, and squares game.

There is a classic children's game for people who are extremely bored. You first draw a grid of dots and then take turns drawing a single line between adjacent dots. If you enclose a square with your line, you score a point and get another turn. See Wikipedia article.

This computer program finds the optimal playing strategy by using the minimax algorithm with alpha-beta pruning. It searches through every possible variation of play to the end of the game until we find the best strategy.

Here is a sample output (with added commentary):

Legend:
# or ## represents the most recent turn played
AA represents a square completed by player A
BB represents a square completed by player B

Starting configuration after random play
*--*  *--*  *
|     |     |
*  *--*  *--*
|     |
*--*  *--*--*

Player A turn
*--*##*--*  *
|     |     |
*  *--*  *--*
|     |
*--*  *--*--*

Player B turn
*--*--*--*  *
|  #BB|     |
*  *--*  *--*
|     |
*--*  *--*--*

Player B turn again
*--*--*--*  *
|BB|BB|     |
*##*--*  *--*
|     |
*--*  *--*--*

Player B turn again.
# Notice how player B can complete another square,
# but chooses not to. Instead B allows A to get two points,
# but this forces A to give away 4 points at the end.
# This is the optimal way to play this game and the minimax
# algorithm has successfully found the winning strategy.
*--*--*--*  *
|BB|BB|     |
*--*--*  *--*
|     |
*--*##*--*--*

Player A turn
*--*--*--*  *
|BB|BB|     |
*--*--*  *--*
|AA#AA|
*--*--*--*--*

Player A turn again
*--*--*--*##*
|BB|BB|     |
*--*--*  *--*
|AA|AA|
*--*--*--*--*

Player B turn
*--*--*--*--*
|BB|BB|  #BB|
*--*--*  *--*
|AA|AA|
*--*--*--*--*

Player B turn again
*--*--*--*--*
|BB|BB|BB|BB|
*--*--*##*--*
|AA|AA|
*--*--*--*--*

Player B turn again
*--*--*--*--*
|BB|BB|BB|BB|
*--*--*--*--*
|AA|AA|BB#
*--*--*--*--*

Player B turn again
*--*--*--*--*
|BB|BB|BB|BB|
*--*--*--*--*
|AA|AA|BB|BB#
*--*--*--*--*

Player B wins by 6 points to 2.
Even though Player A went first,
there was no way to prevent this outcome.

About

Minimax algorithm for finding optimal strategy in the classic children's game

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published