Tic tac toe python oop

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Object Oriented Tic-tac-toe Game in Python Language

License

marcelolarios/oop_tictactoe_python

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Object Oriented Tic-Tac-Toe Game in Python Language

This is part of Object Oriented Tic-Tac-Toe Game Serie Learning OOP Programming by Marcelo Larios.

Episode 1 — Java
Episode 2 — Python
Episode 3 — PHP
Episode 4 — C++

*** Jogo da velha *** 7|8|9 | | | | jogador "x", sua vez 4|5|6 | | | | 1|2|3 | |o| | digite o nr:

About

Object Oriented Tic-tac-toe Game in Python Language

Источник

Tic Tac Toe Python

Tic Tac Toe Python

Tic Tac Toe Python, is what we are going to do in this post. Tic tac toe is a simple game that most if not everyone knows it. You can call it X’s and O’s game too.

How it is played

Two people play the game. They place either an x or an o in a grid of three by three. You win by placing your letter to fill a complete row or column or diagonally across the sudoku field.

Playing against a computer

Playing such a game against a computer involves implementing a sort of AI within the program. The AI makes moves in a manner similar to how a human will and should be simple and reasonable enough. So to sum it up, you shall be playing against a computer AI.

Definitions

Functions are defined in python using the ‘def’ word. We shall use a number of functions in our Tic Tac Toe Python program since a lot of code are reusable and will actually be reused several times to ensure the game runs. The functions are as follows:

Читайте также:  Programming in netbeans java

1. The blank board

This is a variable declaration more than a function. We create a blank board with the spaces for placing the “x’s” and “o’s”. It is mostly a three-by-three board with blank slots.

board = [' ' for x in range(10)]

2. The board printing function

This function will print out to the board each time an ‘x’ or an ‘o’ is placed on the board. The board will look presentable on any shell or idle you run it on.

def printBoard(board): print(" " + board[1] + "| " + board[2] + "| " + board[3]) print("---------") print(" " + board[4] + "| " + board[5] + "| " + board[6]) print("---------") print(" " + board[7] + "| " + board[8] + "| " + board[9])

The board variables are actual values saved in the board array.

3. A function to check if the board is full

We need to constantly need to check if the board is entire to end the game. If the board is full then it’s a tie. The board can lack to be full with no winner declared and hence a move can be made. The function is simple and returns a true or a false. This function will be called every time before a move is made.

def isBoardFull(board): if board.count(" ") > 1: return False else: return True

4. A function to check if there is a winner

If the board isn’t full, we then check if there is a winner. we declare a winner if three “x’s” or three “o’s” occur in one row or in a column or diagonally.

def isWinner(bo, le): return (bo[7] == le and bo[8] == le and bo[9] == le) or (bo[4] == le and bo[5] == le and bo[6] == le) or (bo[1] == le and bo[2] == le and bo[3] == le) or (bo[1] == le and bo[4] == le and bo[7] == le) or (bo[2] == le and bo[5] == le and bo[8] == le) or (bo[3] == le and bo[6] == le and bo[9] == le) or (bo[1] == le and bo[5] == le and bo[9] == le) or (bo[3] == le and bo[5] == le and bo[7] == le) #Note that all this code falls on line. #Do not go to the next line. #"bo" stands for the board. #"le" stands for the letter or symbol we're checking.

5. The insert letter function

We set a bias that the human user will always be the first to start and he will be using ‘x’. The user should then insert a number position on the board in which the ‘x’ will be placed. The number position is similar to the “T9” format and hence you insert a number between one and nine inclusive.

def insertLetter(letter, pos): board[pos] = letter

This a simple function that inserts letters “x” and “o” to a position chosen either by the user or the computer AI

6. A function to check if the position is free

We define a function that checks if the position chosen by the user or the computer AI is free. It is a boolean function and will return true or false depending on the status of the position.

def spaceIsFree(pos): return board[pos] == " "

7. A function for the player to move

This function prompts the user to enter a position on the board in which an x is to be placed. It checks if the user’s input is valid. If the input is valid, the position itself is checked for its status, either occupied or empty. It saves the letter in that position if it checks out with the two cases. If it doesn’t pass one case, then an error is thrown back respectively This means that if it is occupied, the user is alerted and told to pick a different number. If the user inputs a larger number, he/she is prompted to enter a valid number.

def playMove(): run = True while run: move = input("Please select position for 'X'(1-9): ") try: move = int(move) if move > 0 and move < 10 : if spaceIsFree(move): run = False insertLetter("x", move) else: print("Sorry this space is occupied") else: print("Please type the number within the range") except: print("Please type a number. ")

8. The AI function for the computer

This is the function that picks out the option the computer will make. Simply, it will first take a check for the available spaces and store the positions in a variable.

Читайте также:  Binary number representation python

It will then check if it has any possible move that will allow it to win. If so then it will place its letter there.
If not, it will then check if the opponent, which is you, is about to win and if so, it then will counter and place a letter to block you from winning.

When neither is true, then it is free to place a letter anywhere in the available slots. However, to make it have some logic, it will set a letter randomly at the corners, if the corners themselves are empty. If not then it will proceed to pick the middle slot if opens.
When none of the cases above are true then it will randomly pick an empty edge slot and place its letter there.

def compMove(): possibleMoves = [x for x, letter in enumerate(board) if letter == ' ' and x != 0] #The above line justs checks for empty slots in the board move = 0 for let in ['o','x']: for i in possibleMoves: boardCopy = board[:] boardCopy[i] = let if isWinner(boardCopy, let): move = i return move #This checks if one of the players has a wining move cornersOpen = [] for i in possibleMoves: if i in [1,3,7,9]: cornersOpen.append(i) #This checks for open corners if len(cornersOpen) > 0: move = selectRandom(cornersOpen) return move if 5 in possibleMoves: move = 5 return move This checks for open middle slot. edgesOpen = [] for i in possibleMoves: if i in [2,4,6,8]: edgesOpen.append(i) if len(edgesOpen) > 0: move = selectRandom(edgesOpen) return move

9. Select a random function

This function just simply selects a random position on the board for the computer to place its letter. This makes the AI unpredictable in some sense.
It is implemented in the AI function defined earlier. To produce a random number, we will use the random module.

def selectRandom(li): #li is the list of open spots. import random ln = len(li) r = random.randrange(0, ln) return li[r]

10. The main function

The main function calls all the other functions in order. It is the backbone of the game and forms a chronological syntax of functions and other selected cases.

def main(): print("welcome tic tac toe") printBoard(board) #prints out the board while not(isBoardFull(board)): #This runs when the board isn't full if not(isWinner(board, "o")): playMove() printBoard(board) else: print("Sorry, O's won this time! ") break #This checks if the computer has won if not(isWinner(board, "x")): move = compMove() #The computer checks if it can make a move if move == 0: print("Tie game") else: insertLetter("o", move) print("Comp placed an 'o' in position", move, ":") printBoard(board) else: print("X's won this time! Good job") break #This checks if the user has won #if the board is the board is full then it is tie if isBoardFull(board): print("Tie game")

The main function is a little complicated and requires you to go through it thoroughly line by line block by block. All we need to do now is to call our main function to run the game.

Читайте также:  Php server requested url

Complete code for Tic Tac Toe Python

Let us now see the full code of the game combined into one .py file.
Remember that you can store the functions in different files but you will have to import them in the main function. However, to make the game simple and readable, we store all the code in one file

board = [' ' for x in range(10)] def insertLetter(letter, pos): board[pos] = letter def spaceIsFree(pos): return board[pos] == " " def printBoard(board): print(" " + board[1] + "| " + board[2] + "| " + board[3]) print("---------") print(" " + board[4] + "| " + board[5] + "| " + board[6]) print("---------") print(" " + board[7] + "| " + board[8] + "| " + board[9]) def isWinner(bo, le): return ((bo[7] == le and bo[8] == le and bo[9] == le) or (bo[4] == le and bo[5] == le and bo[6] == le) or (bo[1] == le and bo[2] == le and bo[3] == le) or (bo[1] == le and bo[4] == le and bo[7] == le) or (bo[2] == le and bo[5] == le and bo[8] == le) or (bo[3] == le and bo[6] == le and bo[9] == le) or (bo[1] == le and bo[5] == le and bo[9] == le) or (bo[3] == le and bo[5] == le and bo[7] == le)) def playMove(): run = True while run: move = input("Please select a position to place an 'X' (1-9): ") try: move = int(move) if move > 0 and move < 10 : if spaceIsFree(move): run = False insertLetter("x", move) else: print("Sorry this space is occupied") else: print("Please type the number within the range") except: print("Please type a number. ") def compMove(): possibleMoves = [x for x, letter in enumerate(board) if letter == ' ' and x != 0] move = 0 for let in ['o','x']: for i in possibleMoves: boardCopy = board[:] boardCopy[i] = let if isWinner(boardCopy, let): move = i return move cornersOpen = [] for i in possibleMoves: if i in [1,3,7,9]: cornersOpen.append(i) if len(cornersOpen) >0: move = selectRandom(cornersOpen) return move if 5 in possibleMoves: move = 5 return move edgesOpen = [] for i in possibleMoves: if i in [2,4,6,8]: edgesOpen.append(i) if len(edgesOpen) > 0: move = selectRandom(edgesOpen) return move def selectRandom(li): import random ln = len(li) r = random.randrange(0, ln) return li[r] def isBoardFull(board): if board.count(" ") > 1: return False else: return True def main(): print("welcome tic tac toe") printBoard(board) while not(isBoardFull(board)): if not(isWinner(board, "o")): playMove() printBoard(board) else: print("Sorry, O's won this time! ") break if not(isWinner(board, "x")): move = compMove() if move == 0: print("Tie game") else: insertLetter("o", move) print("Computer placed an 'o' in position", move, ":") printBoard(board) else: print("X's won this time! Good job") break if isBoardFull(board): print("Tie game") main()

To get an in-depth understanding of how to create a tic-tac-toe game in python, watch the videos below.

Источник

Оцените статью