html-tictactoe/generator/__main__.py
2024-10-25 18:12:25 +02:00

65 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from jinja2 import Environment, select_autoescape, FileSystemLoader
from generator.model import Board, NOT_DETERMINED, WIN
from generator.tictactoe import calculate_best_move
import random
env = Environment(
loader=FileSystemLoader(["./generator"]),
autoescape=select_autoescape()
)
template = env.get_template("template.html")
taunts = [
"Looks like youre just one step away from defeat! Better luck next time!",
"You might want to start practicing your congratulations speech for me!",
"I hope youre ready to accept your fate—because its coming fast!",
"You can almost hear the victory music playing for me, cant you?",
"Youre about to witness a masterclass in losing—starring you!",
"Youre on the express train to defeat, and Im the conductor!"
]
random.seed(1337)
def get_taunt(board, outcome):
if outcome == WIN and board.winner() == NOT_DETERMINED:
return random.choice(taunts)
else:
return ""
def render_board(initial_prefix, prefix, board, outcome):
with open("output/" + prefix + ".html", "w") as file:
file.write(
template.render(
board=board,
prefix=prefix,
reset=initial_prefix + ".html",
msg=get_taunt(board, outcome)
)
)
def generate_options(initial_prefix, prefix, board, outcome):
render_board(initial_prefix, prefix, board, outcome)
if board.winner() == NOT_DETERMINED:
for move in board.moves():
future = board.apply(move)
response, outcome = calculate_best_move(future)
print(prefix, move, response)
generate_options(
initial_prefix,
prefix + str(move),
future.apply(response) if response else future,
outcome
)
if __name__ == "__main__":
board = Board()
generate_options("index", "index", board, NOT_DETERMINED)