Drew bump
parent
c64ac486d8
commit
0a7c6f3281
@ -1 +1,5 @@
|
|||||||
env/
|
env/
|
||||||
|
|
||||||
|
.idea
|
||||||
|
|
||||||
|
__pycache__/
|
@ -1,210 +1,203 @@
|
|||||||
#----------global variables------------
|
# ----------global variables------------
|
||||||
#https://www.youtube.com/watch?v=BHh654_7Cmw
|
# https://www.youtube.com/watch?v=BHh654_7Cmw
|
||||||
#Create a board
|
# Create a board
|
||||||
import random
|
import random
|
||||||
|
|
||||||
board = ['-','-','-',
|
board = ['-', '-', '-',
|
||||||
'-','-','-',
|
'-', '-', '-',
|
||||||
'-','-','-']
|
'-', '-', '-']
|
||||||
|
|
||||||
#if game is still going
|
# if game is still going
|
||||||
GAME_GOING = True
|
GAME_GOING = True
|
||||||
#who won?
|
# who won?
|
||||||
WINNER = None
|
WINNER = None
|
||||||
#define valid symbols
|
# define valid symbols
|
||||||
SYMBOLS = {'X','O'}
|
SYMBOLS = {'X', 'O'}
|
||||||
#define players
|
# define players
|
||||||
PLAYER1 = ""
|
PLAYER1 = ""
|
||||||
PLAYER2 = ""
|
PLAYER2 = ""
|
||||||
#define how many players
|
# define how many players
|
||||||
SINGLE_PLAYER = True
|
SINGLE_PLAYER = True
|
||||||
|
|
||||||
CURRENT_PLAYER = random.choice(list(SYMBOLS))
|
CURRENT_PLAYER = random.choice(list(SYMBOLS))
|
||||||
|
|
||||||
def main():
|
|
||||||
global CURRENT_PLAYER
|
|
||||||
global SINGLE_PLAYER
|
|
||||||
global PLAYER1
|
|
||||||
global PLAYER2
|
|
||||||
|
|
||||||
|
|
||||||
mode = input("Single player mode y/n: ")
|
|
||||||
if mode not in "yn":
|
|
||||||
print("You did not select a valid option no game for you")
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
if mode == "y":
|
|
||||||
SINGLE_PLAYER = True
|
|
||||||
else:
|
|
||||||
SINGLE_PLAYER = False
|
|
||||||
|
|
||||||
player_1 = input("Choose X or O for Player 1: ")
|
|
||||||
|
|
||||||
if player_1 not in SYMBOLS:
|
|
||||||
print("You did not select a valid option no game for you")
|
|
||||||
exit(1)
|
|
||||||
PLAYER1 = player_1
|
|
||||||
PLAYER2 = (SYMBOLS - {player_1}).pop()
|
|
||||||
|
|
||||||
display_board ()
|
def main():
|
||||||
|
global CURRENT_PLAYER
|
||||||
#while the game is still going
|
global SINGLE_PLAYER
|
||||||
while GAME_GOING:
|
global PLAYER1
|
||||||
#handle a turn
|
global PLAYER2
|
||||||
handle_turn()
|
|
||||||
#check if he game has ended
|
mode = input("Single player mode y/n: ")
|
||||||
check_if_game_over()
|
if mode not in "yn":
|
||||||
# cahnge to the other player
|
print("You did not select a valid option no game for you")
|
||||||
CURRENT_PLAYER = (SYMBOLS - {CURRENT_PLAYER}).pop()
|
exit(1)
|
||||||
|
|
||||||
#the game has ended
|
if mode == "y":
|
||||||
if WINNER == 'X' or WINNER == 'O':
|
SINGLE_PLAYER = True
|
||||||
print (WINNER + "won.")
|
|
||||||
elif WINNER == None:
|
|
||||||
print ("Tie.")
|
|
||||||
|
|
||||||
def display_board ():
|
|
||||||
print(board [0]+ '|'+ board[1]+'|'+ board [2])
|
|
||||||
print(board [3]+ '|'+ board[4]+'|'+ board [5])
|
|
||||||
print(board [6]+ '|'+ board[7]+'|'+ board [8])
|
|
||||||
|
|
||||||
#play game of tic tac toe
|
|
||||||
|
|
||||||
def handle_turn():
|
|
||||||
# import pdb; pdb.set_trace()
|
|
||||||
print("Current Player {}".format(CURRENT_PLAYER))
|
|
||||||
while True:
|
|
||||||
if SINGLE_PLAYER:
|
|
||||||
if CURRENT_PLAYER == PLAYER1:
|
|
||||||
#take player input
|
|
||||||
choice = input('Choose a position from 1 to 9: ')
|
|
||||||
else:
|
|
||||||
choice = random.choice(find_open_spaces())
|
|
||||||
else:
|
|
||||||
#take player input
|
|
||||||
choice = input('Choose a position from 1 to 9: ')
|
|
||||||
if validate_choice(choice):
|
|
||||||
break
|
|
||||||
else:
|
else:
|
||||||
print("Invalid choice")
|
SINGLE_PLAYER = False
|
||||||
|
|
||||||
board[choice] == current_player
|
player_1 = input("Choose X or O for Player 1: ")
|
||||||
|
|
||||||
|
if player_1 not in SYMBOLS:
|
||||||
|
print("You did not select a valid option no game for you")
|
||||||
|
exit(1)
|
||||||
|
PLAYER1 = player_1
|
||||||
|
PLAYER2 = (SYMBOLS - {player_1}).pop()
|
||||||
|
|
||||||
|
# while the game is still going
|
||||||
|
while GAME_GOING:
|
||||||
|
display_board()
|
||||||
|
# handle a turn
|
||||||
|
handle_turn()
|
||||||
|
# import pdb; pdb.set_trace()
|
||||||
|
# check if he game has ended
|
||||||
|
check_if_game_over()
|
||||||
|
# cahnge to the other player
|
||||||
|
CURRENT_PLAYER = (SYMBOLS - {CURRENT_PLAYER}).pop()
|
||||||
|
|
||||||
|
# the game has ended
|
||||||
|
display_board()
|
||||||
|
if WINNER == 'X' or WINNER == 'O':
|
||||||
|
print(WINNER + " won.")
|
||||||
|
elif WINNER == None:
|
||||||
|
print("Tie.")
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
def display_board():
|
||||||
|
print(board[0] + '|' + board[1] + '|' + board[2])
|
||||||
|
print(board[3] + '|' + board[4] + '|' + board[5])
|
||||||
|
print(board[6] + '|' + board[7] + '|' + board[8])
|
||||||
|
|
||||||
|
|
||||||
|
# play game of tic tac toe
|
||||||
|
|
||||||
|
def handle_turn():
|
||||||
|
# import pdb; pdb.set_trace()
|
||||||
|
global board
|
||||||
|
print("Current Player {}".format(CURRENT_PLAYER))
|
||||||
|
while True:
|
||||||
|
if SINGLE_PLAYER:
|
||||||
|
if CURRENT_PLAYER == PLAYER1:
|
||||||
|
# take player input
|
||||||
|
choice = input('Choose a position from 1 to 9: ')
|
||||||
|
else:
|
||||||
|
choice = random.choice(find_open_spaces())
|
||||||
|
else:
|
||||||
|
# take player input
|
||||||
|
choice = input('Choose a position from 1 to 9: ')
|
||||||
|
choice = int(choice) - 1
|
||||||
|
if validate_choice(choice):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Invalid choice")
|
||||||
|
board[choice] = CURRENT_PLAYER
|
||||||
|
|
||||||
|
|
||||||
def validate_choice(choice):
|
def validate_choice(choice):
|
||||||
is_valid = False
|
is_valid = False
|
||||||
try:
|
try:
|
||||||
choice = int(choice)
|
choice = int(choice)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return is_valid
|
return is_valid
|
||||||
import pdb; pdb.set_trace()
|
|
||||||
if choice in list(range(0,9)) and choice in find_open_spaces():
|
|
||||||
valid = True
|
|
||||||
else:
|
|
||||||
brake
|
|
||||||
|
|
||||||
return is_valid
|
if choice in list(range(0, 9)) and choice in find_open_spaces():
|
||||||
|
is_valid = True
|
||||||
|
|
||||||
|
return is_valid
|
||||||
|
|
||||||
|
|
||||||
def check_if_game_over():
|
def check_if_game_over():
|
||||||
check_if_win()
|
check_if_win()
|
||||||
|
|
||||||
check_if_tie()
|
check_if_tie()
|
||||||
|
|
||||||
|
|
||||||
def check_if_win():
|
def check_if_win():
|
||||||
#call global variable
|
# call global variable
|
||||||
global winner
|
global WINNER
|
||||||
#check rows
|
# check rows
|
||||||
row_winner = check_rows()
|
row_winner = check_rows()
|
||||||
#check columns
|
# check columns
|
||||||
column_winner = check_columns()
|
column_winner = check_columns()
|
||||||
#check diagonals
|
# check diagonals
|
||||||
diagonal_winner = check_diagonal()
|
diagonal_winner = check_diagonal()
|
||||||
|
|
||||||
|
if row_winner:
|
||||||
if row_winner:
|
# there is a winner
|
||||||
#there is a winner
|
WINNER = row_winner
|
||||||
winner = row_winner
|
elif column_winner:
|
||||||
elif column_winner:
|
# there is a winner
|
||||||
#there is a winner
|
WINNER = column_winner
|
||||||
winner = column_winner
|
elif diagonal_winner:
|
||||||
elif diagonal_winner:
|
# there is a winner
|
||||||
#there is a winner
|
WINNER = diagonal_winner
|
||||||
winner = diagonal_winner
|
else:
|
||||||
else:
|
WINNER = None
|
||||||
winner = None
|
return
|
||||||
return
|
|
||||||
|
|
||||||
def check_rows():
|
def check_rows():
|
||||||
row_1 = board[0] == board[1] == board[2] != '-'
|
global GAME_GOING
|
||||||
row_2 = board[3] == board[4] == board[5] != '-'
|
row_1 = board[0] == board[1] == board[2] != '-'
|
||||||
row_3 = board[6] == board[7] == board[8] != '-'
|
row_2 = board[3] == board[4] == board[5] != '-'
|
||||||
if row_1 or row_2 or row_3:
|
row_3 = board[6] == board[7] == board[8] != '-'
|
||||||
game_going = False
|
if row_1 or row_2 or row_3:
|
||||||
#display the winner
|
GAME_GOING = False
|
||||||
if row_1:
|
# display the winner
|
||||||
return board[0]
|
if row_1:
|
||||||
if row_2:
|
return board[0]
|
||||||
return board[3]
|
if row_2:
|
||||||
if row_3:
|
return board[3]
|
||||||
return board[6]
|
if row_3:
|
||||||
return
|
return board[6]
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
def check_columns():
|
def check_columns():
|
||||||
column_1 = board[0] == board[3] == board[6] != '-'
|
column_1 = board[0] == board[3] == board[6] != '-'
|
||||||
column_2 = board[1] == board[4] == board[7] != '-'
|
column_2 = board[1] == board[4] == board[7] != '-'
|
||||||
column_3 = board[2] == board[5] == board[8] != '-'
|
column_3 = board[2] == board[5] == board[8] != '-'
|
||||||
#display the winner
|
# display the winner
|
||||||
if column_1:
|
if column_1:
|
||||||
return board[0]
|
return board[0]
|
||||||
if column_2:
|
if column_2:
|
||||||
return board[1]
|
return board[1]
|
||||||
if column_3:
|
if column_3:
|
||||||
return board[2]
|
return board[2]
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def check_diagonal():
|
def check_diagonal():
|
||||||
diagonal_1 = board[0] == board[4] == board[8] != '-'
|
diagonal_1 = board[0] == board[4] == board[8] != '-'
|
||||||
diagonal_2 = board[2] == board[4] == board[6] != '-'
|
diagonal_2 = board[2] == board[4] == board[6] != '-'
|
||||||
#display the winner
|
# display the winner
|
||||||
if diagonal_1:
|
if diagonal_1:
|
||||||
return board[0]
|
return board[0]
|
||||||
if diagonal_2:
|
if diagonal_2:
|
||||||
return board[2]
|
return board[2]
|
||||||
return
|
return
|
||||||
|
|
||||||
#check_if_tie
|
|
||||||
|
# check_if_tie
|
||||||
|
|
||||||
def check_if_tie():
|
def check_if_tie():
|
||||||
global game_going
|
global GAME_GOING
|
||||||
if "-" not in board:
|
if "-" not in board:
|
||||||
game_going = False
|
GAME_GOING = False
|
||||||
return
|
return
|
||||||
|
|
||||||
#change between players
|
|
||||||
def change_player():
|
|
||||||
#call global variable
|
|
||||||
global current_player
|
|
||||||
#if the current player was X we change to O
|
|
||||||
if current_player == 'X':
|
|
||||||
current_player = 'O'
|
|
||||||
#if current player is O, change to X
|
|
||||||
elif current_player == 'O':
|
|
||||||
current_player = 'X'
|
|
||||||
return
|
|
||||||
|
|
||||||
def find_open_spaces():
|
def find_open_spaces():
|
||||||
#find a random space to select
|
# find a random space to select
|
||||||
open_spaces = []
|
open_spaces = []
|
||||||
for i in board:
|
for i in range(0, len(board)):
|
||||||
if i == "-":
|
if board[i] == "-":
|
||||||
open_spaces.append(i)
|
open_spaces.append(i)
|
||||||
|
|
||||||
return open_spaces
|
return open_spaces
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
Loading…
Reference in New Issue