Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Python - TicTacToe Game
#!/usr/bin/python3
# Simple TicTacToe game in Python - EAO
import random
import sys
board=[i for i in range(0,9)]
player, computer = '',''
# Corners, Center and Others, respectively
moves=((1,7,3,9),(5,),(2,4,6,8))
# Winner combinations
winners=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
# Table
tab=range(1,10)
def print_board():
x=1
for i in board:
end = ' | '
if x%3 == 0:
end = ' \n'
if i != 1: end+='---------\n';
char=' '
if i in ('X','O'): char=i;
x+=1
print(char,end=end)
def select_char():
chars=('X','O')
if random.randint(0,1) == 0:
return chars[::-1]
return chars
def can_move(brd, player, move):
if move in tab and brd[move-1] == move-1:
return True
return False
def can_win(brd, player, move):
places=[]
x=0
for i in brd:
if i == player: places.append(x);
x+=1
win=True
for tup in winners:
win=True
for ix in tup:
if brd[ix] != player:
win=False
break
if win == True:
break
return win
def make_move(brd, player, move, undo=False):
if can_move(brd, player, move):
brd[move-1] = player
win=can_win(brd, player, move)
if undo:
brd[move-1] = move-1
return (True, win)
return (False, False)
# AI goes here
def computer_move():
move=-1
# If I can win, others don't matter.
for i in range(1,10):
if make_move(board, computer, i, True)[1]:
move=i
break
if move == -1:
# If player can win, block him.
for i in range(1,10):
if make_move(board, player, i, True)[1]:
move=i
break
if move == -1:
# Otherwise, try to take one of desired places.
for tup in moves:
for mv in tup:
if move == -1 and can_move(board, computer, mv):
move=mv
break
return make_move(board, computer, move)
def space_exist():
return board.count('X') + board.count('O') != 9
player, computer = select_char()
print('Player is [%s] and computer is [%s]' % (player, computer))
result='%%% Deuce ! %%%'
while space_exist():
print_board()
print('# Make your move ! [1-9] : ', end='')
move = int(input())
moved, won = make_move(board, player, move)
if not moved:
print(' >> Invalid number ! Try again !')
continue
#
if won:
result='*** Congratulations ! You won ! ***'
break
elif computer_move()[1]:
result='=== You lose ! =='
break;
print_board()
print(result)
@rithvikgujjula
Copy link

rithvikgujjula commented Feb 3, 2019

hi where to download the software to program this.

thank you

@komalipriyaa
Copy link

komalipriyaa commented Sep 14, 2019

hi where to download the software to program this.

thank you

For gaming in Python, According to my view, PyCharm is comfortable.
Here is the link to download it.
https://www.jetbrains.com/pycharm/

@LoekVV
Copy link

LoekVV commented Oct 31, 2019

Hey, how can I make the program print an error message and then ask for an input again if the user inputs a letter or a character that isn't a number?

@88amit77
Copy link

88amit77 commented Nov 15, 2019

osm logic.

@tamaa019
Copy link

tamaa019 commented Jan 22, 2020

Nice program!

@Calm-Mango
Copy link

Calm-Mango commented Jan 28, 2020

amazing content to learn from for beginners like me.

@Avishekp6460
Copy link

Avishekp6460 commented Apr 10, 2020

its showing error in move = int(input())
when ever we put any char value its shows error

@pd2399
Copy link

pd2399 commented Apr 12, 2020

Can you please help me with my code for tic-tac-toe (2 player). The output gets printed three times.
Here is the link to the code.
https://gist.github.com/pd2399/1d01dc31f87bd92ea8b674ad60e2430b

@PandaTobi
Copy link

PandaTobi commented Apr 24, 2020

@Avishekp6460 why are you inputting char values? if you wish to fix that (even there's no reason to), just implement a try-except statement.

@CaylusYT
Copy link

CaylusYT commented Aug 8, 2020

well this was useful!

@hariramn
Copy link

hariramn commented Sep 7, 2020

Hey can someone give me a logic walkthrough? or some resources that can be refered to?

@westernlabz
Copy link

westernlabz commented Oct 21, 2020

Very helpful, thanks

@muneerbrohi
Copy link

muneerbrohi commented Jun 14, 2021

can you use in this program that works restart the program use the if else condition or Y/N

@ErikVillarreal-bit
Copy link

ErikVillarreal-bit commented Nov 12, 2021

Thanks 😎

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment