Share your repls and programming experiences

← Back to all posts
tic tac toe with bots
kamalhasan (5)

import random
print('this has almost 200 lines of code')
def drawBoard(board):

print('   |   |')
print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
print('   |   |')
print('   |   |')
print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
print('   |   |')
print('-----------')
print('   |   |')
print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
print('   |   |')

def inputPlayerLetter():

letter = ''
while not (letter == 'X' or letter == 'O'):
    print('Do you want to be X or O?')
    letter = input().upper()


if letter == 'X':
    return ['X', 'O']
else:
    return ['O', 'X']

def whoGoesFirst():

if random.randint(0, 1) == 0:
    return 'computer'
else:
    return 'player'

def playAgain():

print('Do you want to play again? (yes or no)')
return input().lower().startswith('y')

def makeMove(board, letter, move):
board[move] = letter

def isWinner(bo, le):

return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top
(bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle
(bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom
(bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side
(bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle
(bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side
(bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal
(bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal

def getBoardCopy(board):

dupeBoard = []

for i in board:
    dupeBoard.append(i)

return dupeBoard

def isSpaceFree(board, move):

return board[move] == ' '

def getPlayerMove(board):

move = ' '
while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board, int(move)):
    print('What is your next move? (1-9)')
    move = input()
return int(move)

def chooseRandomMoveFromList(board, movesList):

possibleMoves = []
for i in movesList:
    if isSpaceFree(board, i):
        possibleMoves.append(i)

if len(possibleMoves) != 0:
    return random.choice(possibleMoves)
else:
    return None

def getComputerMove(board, computerLetter):

if computerLetter == 'X':
    playerLetter = 'O'
else:
    playerLetter = 'X'

for i in range(1, 10):
    copy = getBoardCopy(board)
    if isSpaceFree(copy, i):
        makeMove(copy, computerLetter, i)
        if isWinner(copy, computerLetter):
            return i

for i in range(1, 10):
    copy = getBoardCopy(board)
    if isSpaceFree(copy, i):
        makeMove(copy, playerLetter, i)
        if isWinner(copy, playerLetter):
            return i


move = chooseRandomMoveFromList(board, [1, 3, 7, 9])
if move != None:
    return move


if isSpaceFree(board, 5):
    return 5


return chooseRandomMoveFromList(board, [2, 4, 6, 8])

def isBoardFull(board):

for i in range(1, 10):
    if isSpaceFree(board, i):
        return False
return True

print('Welcome to Tic Tac Toe!')

while True:

theBoard = [' '] * 10
playerLetter, computerLetter = inputPlayerLetter()
turn = whoGoesFirst()
print('The ' + turn + ' will go first.')
gameIsPlaying = True

while gameIsPlaying:
    if turn == 'player':

        drawBoard(theBoard)
        move = getPlayerMove(theBoard)
        makeMove(theBoard, playerLetter, move)

        if isWinner(theBoard, playerLetter):
            drawBoard(theBoard)
            print('Hooray! You have won the game!')
            gameIsPlaying = False
        else:
            if isBoardFull(theBoard):
                drawBoard(theBoard)
                print('The game is a tie!')
                break
            else:
                turn = 'computer'

    else:
        # Computer's turn.
        move = getComputerMove(theBoard, computerLetter)
        makeMove(theBoard, computerLetter, move)

        if isWinner(theBoard, computerLetter):
            drawBoard(theBoard)
            print('The computer has beaten you! You lose.')
            gameIsPlaying = False
        else:
            if isBoardFull(theBoard):
                drawBoard(theBoard)
                print('The game is a tie!')
                break
            else:
                turn = 'player'

if not playAgain():
  
    break
    try to beat this code
Commentshotnewtop
idrawhorsechamp (5)

How would someone who doesn't understand this type of code play?

kamalhasan (5)

@idrawhorsechamp
it says that you write python.
if you mean everybody sorry but you have to learn it

python_richmond (1)

@idrawhorsechamp You don't need to understand code to play tic tac toe