Section 7: Tic Tac Toe

  Python Bootcamp 0 to Hero

< Section 6
Section 8 >

https://www.udemy.com/complete-python-bootcamp/learn/lecture/9442462#questions

def check_win(mark, board):
    winpattern = mark * 3
    #print(board['7'] + board['8'] + board['9'])
    map=[board['7'] + board['8'] + board['9'],
         board['4'] + board['5'] + board['6'],
         board['1'] + board['2'] + board['3'],
         board['7'] + board['4'] + board['1'],
         board['8'] + board['5'] + board['2'],
         board['9'] + board['6'] + board['3'],
         board['7'] + board['5'] + board['3'],
         board['9'] + board['5'] + board['1']]
    for pattern in map:
        #print(pattern)
        if pattern == winpattern:
            return True
    return False
def show_board(board):
    clear_output()
    print(f"{board['7']}|{board['8']}|{board['9']}")
    print('-+-+-')
    print(f"{board['4']}|{board['5']}|{board['6']}")
    print('-+-+-')
    print(f"{board['1']}|{board['2']}|{board['3']}")
def get_player_name(player_num,players):
    accept_name=False
    while not accept_name:
        players[player_num] = input(f"Player {player_num}, please enter your name :")
        if player_num=='1' or players[player_num]!=players['1']:
            accept_name=True
        else:
            print(f"Name '{players['1']}' has been taken.  Please select another name.")
    print(f"Thank you, {players[player_num]}!")
    return players
def get_play(player, board):
    need_play=True
    while need_play:
        play=input(f"{player['name']}, please enter your play (1 - 9)")
        if play in board and play==board[play]:
            board[play]=player['mark']
            need_play=False
        else:
            print("Play unavailable. Please select another position.")
    return board
from IPython.display import clear_output
debug=True
keep_playing=True
board={}
players=[]
winner=0
if debug:
    players=['',{'name':'Thomas','mark':'X'},
             {'name':'Sofia','mark':'O'}]
else:
    players[0]=0
    players=get_player_name(1, players)
    players=get_player_name(2,players)
while keep_playing:
    #reset board
    for pos in range(1,10):
        i=str(pos)
        board[i]=i
    player=0
    move=0
    while not winner and move<9:
        move+=1
        #change player
        player = 2 if player == 1 else 1
        show_board(board)
        board=get_play(players[player], board)
        winner=check_win(players[player]['mark'],board)
        #winner=False #True
    show_board(board)
    if winner:
        print(f"Congratulations, {players[player]['name']}!  You won!")
    else:
        print("It was a draw!")
    play_again = input("Play again? (Y or N)")
    if play_again.lower()=='n'  or play_again.lower()=='no':
        keep_playing=False
    else:
        winner=False
print("Good bye!")

LEAVE A COMMENT