-
-
Save eaorak/3966315 to your computer and use it in GitHub Desktop.
#!/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) |
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?
osm logic.
Nice program!
amazing content to learn from for beginners like me.
its showing error in move = int(input())
when ever we put any char value its shows error
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
@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.
well this was useful!
Hey can someone give me a logic walkthrough? or some resources that can be refered to?
Very helpful, thanks
can you use in this program that works restart the program use the if else condition or Y/N
Thanks 😎✌
you know what, you can beat this AI with 4, 2, 5, 8. again and again
For gaming in Python, According to my view, PyCharm is comfortable.
Here is the link to download it.
https://www.jetbrains.com/pycharm/