def draw_line(width, edge, filling):
	print(filling.join([edge] * (width + 1)))

def draw_board(width, height):
	draw_line(width, " ", "__")
	for i in range(height):
		draw_line(width, "|", "__")
	print("\n")

def display_winner(player):
	if player == 0:
		print("Tie")
	else:
		print("Player " + str(player) + " wins!")

def check_row_winner(row):
	"""
	Return the player number that wins for that row.
	If there is no winner, return 0.
	"""
	if row[0] == row[1] and row[1] == row[2]:
		return row[0]
	return 0

def get_col(game, col_number):
	return [game[x][col_number] for x in range(3)]

def get_row(game, row_number):
	return game[row_number]

def check_winner(game):
	game_slices = []
	for index in range(3):
		game_slices.append(get_row(game, index))
		game_slices.append(get_col(game, index))

	# check diagonals
	down_diagonal = [game[x][x] for x in range(3)]
	up_diagonal = [game[0][2], game[1][1], game[2][0]]
	game_slices.append(down_diagonal)
	game_slices.append(up_diagonal)

	for game_slice in game_slices:
		winner = check_row_winner(game_slice)
		if winner != 0:
			display_winner(winner)
			return winner

	display_winner(winner)
	return winner

def start_game():
	return [[0, 0, 0] for x in range(3)]

def display_game(game):
	d = {2: "O", 1: "X", 0: " "}
	game_string = []
	for row_num in range(3):
		new_row = []
		for col_num in range(3):
			new_row.append(d[game[row_num][col_num]])
		game_string.append(new_row)
	print(game_string)


def add_piece(game, player, row, column):
	"""
	game: game state
	player: player number
	row: 0-index row
	column: 0-index column
	"""
	game[row][column] = player
	return game

def convert_input_to_coordinate(user_input):
	return user_input - 1

def switch_player(player):
	if player == 1:
		return 2
	else:
		return 1


if __name__ == '__main__':
	game = start_game()
	display_game(game)
	player = 1

	# go on forever
	while True:
		print("Currently player: " + str(player))
		row = convert_input_to_coordinate(int(input("Which row? (start with 1) ")))
		column = convert_input_to_coordinate(int(input("Which column? (start with 1) ")))
		game = add_piece(game, player, row, column)
		display_game(game)
		player = switch_player(player)