-
Notifications
You must be signed in to change notification settings - Fork 7
/
base_from_html.py
65 lines (49 loc) · 2.09 KB
/
base_from_html.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
from bs4 import BeautifulSoup
import board
from constants import *
def get_html(html_file = board.GameBoard.HTML_FILE):
with open(html_file, "r") as f:
return f.read()
def html_to_game_board(html_file="bases/base1.html", viz=True):
html_doc = get_html(html_file)
soup = BeautifulSoup(html_doc, 'html.parser')
buildings = soup.find_all("div", class_=["coc-b", "wall"])
building_infos = []
for b in buildings:
try:
# get level and class
if b["class"][0] == "wall":
class_str = "wall"
level = int(b["class"][1][3:])
else:
class_str = b["class"][1].split('-')[1]
level = int(b["class"][2][3:])
# get position
pos = b["style"].split("px")[:2]
pos = tuple([int(coord.split(" ")[-1]) // 20 for coord in pos])
pos = (pos[1], pos[0])
# create object from said parameters
if class_str in board.BUILDINGS_MAP_NAME.keys():
building_infos.append((class_str, level, pos))
except Exception as e:
print(e)
# set all positions to align to (0, 0)
min_x = min(building_infos, key=lambda x: x[2][0])[2][0]
min_y = min(building_infos, key=lambda x: x[2][1])[2][1]
max_x = max(building_infos, key=lambda x: x[2][1])[2][0]
max_y = max(building_infos, key=lambda x: x[2][1])[2][1]
board_length = max(max_x - min_x, max_y - min_y) + 1
to_center = max(0, (BOARD_SIZE - board_length) // 2)
building_infos = [(c, l, (p[0] - min_x, p[1] - min_y)) for c, l, p in building_infos]
building_infos = [(c, l, (p[0] + to_center, p[1] + to_center)) for c, l, p in building_infos]
# create objects
building_objs = []
for class_str, level, pos in building_infos:
building_objs.append(board.create_obj_from_name(class_str)(level=level, pos=pos))
# visualize if necessary
if viz:
gb = board.GameBoard(building_objs)
gb.update_viz()
return building_objs
if __name__ == "__main__":
html_to_game_board(html_file="bases/base_th4_5.html")