opython tic tac toe code example

Example 1: tic tac toe python

def slant_check(matrix,P1,P2):
    empty_lst1 = []
    empty_lst2= []
    lst1 = []
    lst2 = []
    x = len(matrix)
    v = len(matrix) - 1
    t = 0 
    g = 0
    n = True
    while n:
        for i in range(x):
            if matrix[i][i] == P1 or matrix[t][i] == P1:
                empty_lst1.append(matrix[i][i])
            if matrix[i][i] == P2 or matrix[t][i] == P2:
                empty_lst2.append(matrix[i][i])
        while v >= g:
            if matrix[g][v] == P1:
                lst1.append(matrix[g][v]) 
            if matrix[g][v] == P2:
                lst2.append(matrix[g][v])
            t -= 1
            v -= 1
            g += 1
        if len(empty_lst1) == x:
            return True
        if len(empty_lst2) == x:
            return True
        if len(lst1) == x:
            return True
        if len(lst2) == x:
            return True
        return False
def vertical_check(lst,P1,P2):
    for i in range(len(lst) - 2):
        for j in range(len(lst)):
            if lst[i][j] == P1 and lst[i + 1][j] == P1 and lst[i + 2][j] == P1:
                return True
            if lst[i][j] == P2 and lst[i + 1][j] == P2 and lst[i + 2][j] == P2:
                return True
            
    return False
def horizontal_check(lst,P1,P2):
    for i in range(len(lst)):
        for j in range(len(lst) - 2):
            if lst[i][j]== P1 and lst[i][j + 1]== P1 and lst[i][j + 2]== P1 :
                return True
            if lst[i][j]== P2 and lst[i][j + 1]== P2 and lst[i][j + 2]== P2 :
                return True
    return False
def find_grid2(place,lst):
    for i in range(len(lst)):
        for j in range(len(lst[i])):
            if place == lst[i][j]:
                return lst.index(lst[i])

def find_grid1(place,lst):
    for i in range(len(lst)):
        for j in range(len(lst[i])):
            if place == lst[i][j]:
                return lst[i].index(place)
            
def print_lst(lst):
    for i in range(len(lst)):
        for j in range(len(lst[i]) - 2):
            print(lst[i][j],'|', lst[i][j + 1],'|', lst[i][j + 2])
            print('----------')
def tic_tac_toe():
    lst = [[1,2,3],
           [4,5,6],
           [7,8,9]]
    P1 = 0
    P2 = 0
    counter_loop = 0
    _ = 0 
    new_lst = [1,2]
    while True:
        P1 = input('Player1 select "x" or "o" ? (Type in x or o):\n').lower()
        if P1 == 'x':
            print('Player2 is now "o"!\n')
            P2 = 'o'
            break
        if P1 == 'o':
            print('Player2 is now "x"!\n')
            P2 = 'x'
            break
        else:
            print('Try Again\n')
    print_lst(lst)
    while _ < len(lst): 
        for i in range(len(lst[_])):
            if counter_loop == 9:
                print("Tie!")
                break
            place_grid1 = input('Where would Player 1 like to place? : ')
            if int(place_grid1) >= 10 or int(place_grid1) <= 0:
                print('Try Again')
                place_grid1 = input('Where would Player 1 like to place? : ')
                break
            place_grid = int(place_grid1)
            counter_loop += 1
            inner_index1 = find_grid1(place_grid,lst)
            outer_index1 = find_grid2(place_grid,lst)
            lst[outer_index1][inner_index1] = P1
            print_lst(lst)
            if horizontal_check(lst,P1,P2) == True:
                print("Player 1 wins!!")
                counter_loop = 9 
                break
            if vertical_check(lst,P1,P2) == True:
                print("Player 1 wins!!")
                counter_loop = 9 
                break
            if slant_check(lst,P1,P2) == True:
                print("Player 1 wins!!")
                counter_loop = 9 
                break
            if counter_loop == 9:
                print("Tie!")
                break
            place_grid2 = input('Where would Player 2 like to place? : ')
            if int(place_grid2) >= 10 or int(place_grid2) <=0:
                print('Try Again')
                place_grid2 = input('Where would Player 2 like to place? : ')
                break
            place_gridy = int(place_grid2)
            counter_loop += 1
            inner_index2 = find_grid1(place_gridy,lst)
            outer_index2 = find_grid2(place_gridy,lst)
            lst[outer_index2][inner_index2] = P2
            print_lst(lst)
            if horizontal_check(lst,P1,P2) == True:
                print("Player 2 wins!!")
                counter_loop = 9 
                break
            if vertical_check(lst,P1,P2) == True:
                print("Player 2 wins!!")
                counter_loop = 9 
                break
            if slant_check(lst,P1,P2) == True:
                print("Player 2 wins!!")
                counter_loop = 9 
                break
            if counter_loop == 9:
                print("Tie!")
                break        
        if counter_loop == 9:
            break
        
        _ += 1

    
tic_tac_toe()

Example 2: tic tac toe in python

import time
import sys

TITLES = "    A   B   C\n"
INIT_BOARD = "| / | / | / |\n"
A, B, C = 4, 8, 12
# creates the game board
board = [f"{x} {INIT_BOARD}" for x in range(3)]
user_turn = ""
taken = True
winner = False
turn_number = 0
# keeps the score and determines what symbols will be used
SYMBOLS = ["x", "o"]
winner_save = [list(x * 3) for x in SYMBOLS]
score = {symbol: 0 for symbol in SYMBOLS}

# does all the logic to the game
class logic:
    def __init__(self, ctx, turn, win_template):
        self.ctx = ctx
        self.turn = turn
        self.template = win_template

    # check if 3 of the same symbols are in a line
    def winner_check(self):
        # initializes the list containing the rows. rows 0, 1, and 2 are created
        win_check = [
            [board[c][x] for x in range(4, len(board[c])) if x % 4 == 0]
            for c in range(3)
        ]
        # adds the values for every possible row to the list
        for x in range(3):
            win_check.append([win_check[c][x] for c in range(3)])
        win_check.append([win_check[x][x] for x in range(3)])
        win_check.append([win_check[x][c] for x, c in zip(range(3)[::-1], range(3))])
        # determines if someone has won
        for x in win_check:
            if x in self.template:
                print(f"{self.turn} wins!")
                keep = True
                break
            keep = False
        return keep

    # updates the spot value of the given input. ex: input = A1, spot A1 will be occupied by the player
    def take_spot(self):
        append_board = board[int(user[1])]
        append_board = "".join(
            [
                append_board[x] if x != eval(user[0]) else self.turn
                for x in range(len(append_board))
            ]
        )
        return append_board

    # checks to see if a spot on the board is already occupied
    def spot_taken(self):
        board_ctx = board[int(self.ctx[1])][eval(self.ctx[0])]
        check_spot = True if board_ctx in ["o", "x"] else False
        if check_spot == True:
            print("spot already taken :/ try again")
        return check_spot


# takes the location input and checks if it exists
def input_check():
    slow_print("location- \n")
    ctx = input().upper()
    all_input = [x + str(c) for x in ["A", "B", "C"] for c in range(3)]
    if ctx in all_input:
        pass
    else:
        while ctx not in all_input:
            slow_print("invalid location, try again\n")
            slow_print("location- \n")
            ctx = input().upper()
    return list(ctx)


# takes an input and prints it smoothly to the console
def slow_print(inpt):
    for x in inpt:
        sys.stdout.write(x)
        time.sleep(0.01)


slow_print(TITLES + "".join(board))

# determines what symbol will go first
while True:
    slow_print(f"{SYMBOLS[0]}'s or {SYMBOLS[1]}'s?- \n")
    user_turn = input()
    if user_turn in [SYMBOLS[0], SYMBOLS[1]]:
        slow_print(f"{user_turn}'s first!\n")
        break
    else:
        slow_print("incorrent input try again!")

# brings all the functions and logic together
while True:
    outcome = "None"
    while winner == False:
        # keeps track of the amount of turns to determine if the outcome is a tie
        turn_number += 1
        if turn_number == 10:
            slow_print("Tie!\n")
            outcome = None
            break
        # takes spot input and brings the spot_taken logic together to determines==
        # whether a spot is already occupied
        while taken == True:
            user = input_check()
            init = logic(user, user_turn, winner_save)
            taken = init.spot_taken()
        ctx_board = init.take_spot()
        board[int(user[1])] = ctx_board
        slow_print(TITLES + "".join(board))
        user_turn = SYMBOLS[0] if user_turn != SYMBOLS[0] else SYMBOLS[1]
        taken = True
        winner = init.winner_check()
    # makes sure the point is given to the winner by inverting the current user_turn
    if outcome == None:
        pass
    else:
        score[SYMBOLS[0] if user_turn == SYMBOLS[1] else SYMBOLS[1]] += 1
    slow_print(
        f"Scores: {SYMBOLS[0]}-{score[SYMBOLS[0]]}, {SYMBOLS[1]}-{score[SYMBOLS[1]]}\n"
    )
    slow_print("Would you like to play another (Y/N)?- \n")
    repeat = input().upper()
    if repeat == "Y":
        winner = False
        board = [f"{x} {INIT_BOARD}" for x in range(3)]
        turn_number = 0
        continue
    else:
        break