-
-
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) |
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
Nice program!