-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
104 lines (68 loc) · 2.44 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import io
import os
import uuid
import numpy as np
from flask import Flask, jsonify, make_response, render_template, request
from game import Game
app = Flask(__name__)
if os.getenv("ENV") == "prod":
from model_lite import ModelLite # For Prod
app.model = ModelLite("model-40-iters.tflite") # For Prod
else:
from model import Model # For dev
app.model = Model("m6by7-dense-cont-v-new-q-v-itself-40-iters.model") # For dev
app.debug = False
app._static_folder = os.path.abspath("templates/static/")
app.config["SEND_FILE_MAX_AGE_DEFAULT"] = 0
@app.route("/", methods=["GET"])
def index():
title = "Let's play connect 4 :D"
resp = make_response(render_template("layouts/index.html", title=title))
resp.set_cookie("cookie", str(uuid.uuid1()))
return resp
@app.route("/postmethod/restart", methods=["POST"])
def restart():
cookie = request.cookies.get("cookie")
del_game_file(cookie)
return {}
@app.route("/postmethod", methods=["POST"])
def post_move():
cookie = request.cookies.get("cookie")
move = int(request.form["move"])
game = Game(verbose=False)
previous_moves = read_game_file(cookie)
for m in previous_moves:
game.move(m)
winner, board = game.move(move)
if winner is not None:
del_game_file(cookie)
return encode(winner, board, board)
previous_moves.append(move)
opponent_move = get_opponent_move(board)
winner, new_board = game.move(opponent_move)
if winner is not None:
del_game_file(cookie)
return encode(winner, board, new_board)
previous_moves.append(opponent_move)
write_game_file(previous_moves, cookie)
return encode(winner, board, new_board)
def get_opponent_move(board):
return app.model.move(board, as_player=1, valid_moves_only=True)
def encode(winner, board, new_board):
return jsonify({"board": board, "new_board": new_board, "winner": winner})
def read_game_file(cookie):
try:
with open(f"gamefiles/gamefile_{cookie}", "r") as file:
return [int(x) for x in file.read()]
except:
return []
def write_game_file(moves, cookie):
with open(f"gamefiles/gamefile_{cookie}", "w") as file:
file.write("".join([str(x) for x in moves]))
def del_game_file(cookie):
try:
os.remove(f"gamefiles/gamefile_{cookie}")
except FileNotFoundError as e:
print(f"gamefile already deleted\n {e}")
if __name__ == "__main__":
app.run(port=5000)