I'm making a Simple Tic Tac Toe game and I've run into a problem where in doesn't print what I want it to. I want it to print an "X" in place of the first underscore in the board variable but I don't get why it isn't because when I write the same code for "O" it works flawlessly. If you have any better way of doing it that doesn't have hitches like this please help me it would be a good learning experience.
def X():
global nex
global noh
global bd
print('|What place is X? |')
print('|1-9 |')
ex = input()
iex == int(ex)
if iex != nex[-1]:
nex = nex, iex
if iex == 1:
indexes = [4]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 2:
indexes = [6]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 3:
indexes = [8]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 4:
indexes = [14]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 5:
indexes = [16]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 6:
indexes = [18]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 7:
indexes = [24]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 8:
indexes = [26]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex == 9:
indexes = [28]
nc = 'X'
for i in indexes:
bd = bd[:i] nc bd[i 1:]
elif iex >= 10:
print('Invalid Input\n')
print(bd)
return bd
Output:
| TIC TAC TOE |
|What place is X? |
|1-9 |
>>>1
_|_|_
_|_|_
| |
CodePudding user response:
this code doesnt even work for me.
ex = int(input())
does a type conversion from str to intiex == int(ex)
toiex = int(ex)
- "nex" gets called before it gets assigned
CodePudding user response:
check here there is a description how to program a tic tac toe with python
The complete code looks like:
# Function to print Tic Tac Toe
def print_tic_tac_toe(values):
print("\n")
print("\t | |")
print("\t {} | {} | {}".format(values[0], values[1], values[2]))
print('\t_____|_____|_____')
print("\t | |")
print("\t {} | {} | {}".format(values[3], values[4], values[5]))
print('\t_____|_____|_____')
print("\t | |")
print("\t {} | {} | {}".format(values[6], values[7], values[8]))
print("\t | |")
print("\n")
# Function to print the score-board
def print_scoreboard(score_board):
print("\t--------------------------------")
print("\t SCOREBOARD ")
print("\t--------------------------------")
players = list(score_board.keys())
print("\t ", players[0], "\t ", score_board[players[0]])
print("\t ", players[1], "\t ", score_board[players[1]])
print("\t--------------------------------\n")
# Function to check if any player has won
def check_win(player_pos, cur_player):
# All possible winning combinations
soln = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 4, 7], [2, 5, 8], [3, 6, 9], [1, 5, 9], [3, 5, 7]]
# Loop to check if any winning combination is satisfied
for x in soln:
if all(y in player_pos[cur_player] for y in x):
# Return True if any winning combination satisfies
return True
# Return False if no combination is satisfied
return False
# Function to check if the game is drawn
def check_draw(player_pos):
if len(player_pos['X']) len(player_pos['O']) == 9:
return True
return False
# Function for a single game of Tic Tac Toe
def single_game(cur_player):
# Represents the Tic Tac Toe
values = [' ' for x in range(9)]
# Stores the positions occupied by X and O
player_pos = {'X':[], 'O':[]}
# Game Loop for a single game of Tic Tac Toe
while True:
print_tic_tac_toe(values)
# Try exception block for MOVE input
try:
print("Player ", cur_player, " turn. Which box? : ", end="")
move = int(input())
except ValueError:
print("Wrong Input!!! Try Again")
continue
# Sanity check for MOVE inout
if move < 1 or move > 9:
print("Wrong Input!!! Try Again")
continue
# Check if the box is not occupied already
if values[move-1] != ' ':
print("Place already filled. Try again!!")
continue
# Update game information
# Updating grid status
values[move-1] = cur_player
# Updating player positions
player_pos[cur_player].append(move)
# Function call for checking win
if check_win(player_pos, cur_player):
print_tic_tac_toe(values)
print("Player ", cur_player, " has won the game!!")
print("\n")
return cur_player
# Function call for checking draw game
if check_draw(player_pos):
print_tic_tac_toe(values)
print("Game Drawn")
print("\n")
return 'D'
# Switch player moves
if cur_player == 'X':
cur_player = 'O'
else:
cur_player = 'X'
if __name__ == "__main__":
print("Player 1")
player1 = input("Enter the name : ")
print("\n")
print("Player 2")
player2 = input("Enter the name : ")
print("\n")
# Stores the player who chooses X and O
cur_player = player1
# Stores the choice of players
player_choice = {'X' : "", 'O' : ""}
# Stores the options
options = ['X', 'O']
# Stores the scoreboard
score_board = {player1: 0, player2: 0}
print_scoreboard(score_board)
# Game Loop for a series of Tic Tac Toe
# The loop runs until the players quit
while True:
# Player choice Menu
print("Turn to choose for", cur_player)
print("Enter 1 for X")
print("Enter 2 for O")
print("Enter 3 to Quit")
# Try exception for CHOICE input
try:
choice = int(input())
except ValueError:
print("Wrong Input!!! Try Again\n")
continue
# Conditions for player choice
if choice == 1:
player_choice['X'] = cur_player
if cur_player == player1:
player_choice['O'] = player2
else:
player_choice['O'] = player1
elif choice == 2:
player_choice['O'] = cur_player
if cur_player == player1:
player_choice['X'] = player2
else:
player_choice['X'] = player1
elif choice == 3:
print("Final Scores")
print_scoreboard(score_board)
break
else:
print("Wrong Choice!!!! Try Again\n")
# Stores the winner in a single game of Tic Tac Toe
winner = single_game(options[choice-1])
# Edits the scoreboard according to the winner
if winner != 'D' :
player_won = player_choice[winner]
score_board[player_won] = score_board[player_won] 1
print_scoreboard(score_board)
# Switch player who chooses X or O
if cur_player == player1:
cur_player = player2
else:
cur_player = player1