Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recursively Generate Every Tic-Tac-Toe game in Python

I am working on a project where I generate every possible tic-tac-toe array. As a proof of concept, I am working on code to fill an array with 9 subarrays. Each subarray will have two values, the first one being 0 or 1 (for x and o respectively), and the second one being from 1 to 9 (representing when it was placed). An example of an array I would like to get out would look like:

[[0, 0], [1, 1], [0, 2], [1, 3], [0, 4], [1, 5], [0, 6], [1, 7], [0, 8]]

I have already written code, using 9 for loops, each one nested in the one above, which gives me the desired results (every possible array, and each one unique). But I am trying to write code, using recursion, and avoiding writing tons of nested loops.

When I run the code below, it is only able to generate the array above, and cannot create other combinations. My code is below:

print("running...")

allGames = []
checkCurrentGame = [5, 5, 5, 5, 5, 5, 5, 5, 5]
stepsDown = 0

def cleanGame(move, currentGame):
    for j in range(9):
        if (currentGame[j][1] >= move):
            currentGame[j] = [5, 0]

def completeMove(moveNumber, currentGame):
    global stepsDown
    stepsDown = stepsDown + 1
    for i in range(9):
        cleanGame(moveNumber, currentGame)
        if (currentGame[i][0] == 5):
            currentGame[i][0] = i % 2
            currentGame[i][1] = moveNumber
            allGames.append(currentGame)
            break
    if (stepsDown < 9):
        generateGame(currentGame)

def generateGame(currentGame):
    for i in range(9):
        completeMove(i, currentGame)

generateGame([[5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0], [5, 0]])

for x in range(len(allGames)):
    print(allGames[x])
like image 926
Luke Schultz Avatar asked Nov 22 '18 20:11

Luke Schultz


People also ask

How to make a tic tac toe game in Python?

Tic-tac-toe using Python Step 1: Tic-tac-toe Design. We will be playing Tic-tac-toe on the command line, therefore, the first thing we have to do... Step 2: Store information using data structures. The core of any game is the game mechanics behind it. Since this is a... Step 3: Game Loop. Every ...

What is tic tic tac toe?

Tic-tac-toe (American English), noughts and crosses (British English), or Xs and Os is a paper-and-pencil game for two players, X and O, who take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three of their marks in a horizontal, vertical, or diagonal row is the winner. tkinter Python library is used to create the GUI.

How do I play tic-tac-toe?

Your tic-tac-toe game will have an interface that reproduces the classic three-by-three game board. The players will take turns making their moves on a shared device. The game display at the top of the window will show the name of the player who gets to go next.

How to use check_win() function in tic tac toe?

The check_win () function checks the Tic Tac Toe board to see all the marks of ‘X’ and ‘O’. It calculates whether a player has won the game or not. They can either win when the player has marked 3 consecutive marks in a row, column or diagonally. This function is called every time when we draw a mark ‘X’ or ‘O’ on the board.


1 Answers

If I understand your question correctly this should do, however this is not recursion -

import itertools
[zip(p, range(0, 9)) for p in itertools.product([0, 1], repeat=9)]

The code first generates a board (9 0's or 1's) -

itertools.product([0, 1], repeat=9)

and then add the index data to it.

I recommend having a look in itertools

like image 137
Tom Ron Avatar answered Oct 14 '22 03:10

Tom Ron