-
-
Save horstjens/4adc56d3de6c2392f440 to your computer and use it in GitHub Desktop.
"""tictactoe game for 2 players | |
from blogpost: http://thebillington.co.uk/blog/posts/writing-a-tic-tac-toe-game-in-python by BILLY REBECCHI, | |
slightly improved by Horst JENS""" | |
from __future__ import print_function | |
choices = [] | |
for x in range (0, 9) : | |
choices.append(str(x + 1)) | |
playerOneTurn = True | |
winner = False | |
def printBoard() : | |
print( '\n -----') | |
print( '|' + choices[0] + '|' + choices[1] + '|' + choices[2] + '|') | |
print( ' -----') | |
print( '|' + choices[3] + '|' + choices[4] + '|' + choices[5] + '|') | |
print( ' -----') | |
print( '|' + choices[6] + '|' + choices[7] + '|' + choices[8] + '|') | |
print( ' -----\n') | |
while not winner : | |
printBoard() | |
if playerOneTurn : | |
print( "Player 1:") | |
else : | |
print( "Player 2:") | |
try: | |
choice = int(input(">> ")) | |
except: | |
print("please enter a valid field") | |
continue | |
if choices[choice - 1] == 'X' or choices [choice-1] == 'O': | |
print("illegal move, plase try again") | |
continue | |
if playerOneTurn : | |
choices[choice - 1] = 'X' | |
else : | |
choices[choice - 1] = 'O' | |
playerOneTurn = not playerOneTurn | |
for x in range (0, 3) : | |
y = x * 3 | |
if (choices[y] == choices[(y + 1)] and choices[y] == choices[(y + 2)]) : | |
winner = True | |
printBoard() | |
if (choices[x] == choices[(x + 3)] and choices[x] == choices[(x + 6)]) : | |
winner = True | |
printBoard() | |
if((choices[0] == choices[4] and choices[0] == choices[8]) or | |
(choices[2] == choices[4] and choices[4] == choices[6])) : | |
winner = True | |
printBoard() | |
print ("Player " + str(int(playerOneTurn + 1)) + " wins!\n") |
Thanks a lot for writing this code mate.It would be nice if you had an explanation for this.
yeah its awesome...i want to know if anyone can help me
i want to make it so that people can play it on a network or via hotspot
You might want to define the numbers that draw the game. Also might be nice to ask if players want to play again
For the following cases, printBoard is called twice -
X X X
X O O
X O O
X O O
X X O
X O X
The conditions on lines 52 and 56 should include (not winner) and
A very efficient way to create Tic Tac Toe game in python.
tic_tic_toe.py
same code with "Lost" condition
from future import print_function
choices = []
checkturns = []
for x in range(0, 9):
choices.append(str(x + 1))
playerOneTurn = True
winner = False
def printBoard():
print('\n -----')
print('|' + choices[0] + '|' + choices[1] + '|' + choices[2] + '|')
print(' -----')
print('|' + choices[3] + '|' + choices[4] + '|' + choices[5] + '|')
print(' -----')
print('|' + choices[6] + '|' + choices[7] + '|' + choices[8] + '|')
print(' -----\n')
while not winner:
printBoard()
if (len(checkturns) == 9 and winner == False):
print("Both lost")
break
if playerOneTurn:
print("Player 1:")
else:
print("Player 2:")
try:
choice = int(input(">> "))
checkturns.append(choice)
except:
print("please enter a valid field")
continue
if choices[choice - 1] == 'X' or choices[choice-1] == 'O':
print("illegal move, plase try again")
continue
if playerOneTurn:
choices[choice - 1] = 'X'
else:
choices[choice - 1] = 'O'
playerOneTurn = not playerOneTurn
for x in range(0, 3):
y = x * 3
if (choices[y] == choices[(y + 1)] and choices[y] == choices[(y + 2)]):
winner = True
printBoard()
if (choices[x] == choices[(x + 3)] and choices[x] == choices[(x + 6)]):
winner = True
printBoard()
if((choices[0] == choices[4] and choices[0] == choices[8]) or
(choices[2] == choices[4] and choices[4] == choices[6])):
winner = True
printBoard()
if winner == True:
print("Player " + str(int(playerOneTurn + 1)) + " wins!\n")
tnx............. bro
Amazing code but it doesn't have a way to show the game is draw
I kinda changed the code to solve that
link: https://gist.github.com/vivek1339/a35edf19740bc5c58bb729b1bbf690ca/eac36b2e6f90139c33332b04e7f5c26c5de2198b
Doesn't stop when game draws...
Hey Horst, thanks so much for doing a write up of the code!