generated from UnBParadigmas2023-2/RepositorioTemplate
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathserver.py
137 lines (126 loc) · 3.85 KB
/
server.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
from model import NavalBattleModel
from src.Affiliation import Affiliation
import mesa
from src.boat import BoatAgent
from src.Cruzador import Cruzador
from src.Torpedeiro import Torpedeiro
from src.ContraMorteiro import ContraMorteiro
from src.Morteiro import Morteiro
from src.ContraTorpedeiro import ContraTorpedeiro
model_params = {
"num_cruzador_fla": mesa.visualization.Slider(
name="Número de cruzadores do Flamengo",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_torpedeiro_fla": mesa.visualization.Slider(
name="Número de torpedeiros do Flamengo",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_morteiro_fla": mesa.visualization.Slider(
name="Número de morteiros do Flamengo",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_contra_torpedeiro_fla": mesa.visualization.Slider(
name="Número de contra torpedeiros do Flamengo",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_contra_morteiro_fla": mesa.visualization.Slider(
name="Número de contra morteiros do Flamengo",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_cruzador_flu": mesa.visualization.Slider(
name="Número de cruzadores do Fluminense",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_torpedeiro_flu":mesa.visualization.Slider(
name="Número de torpedeiros do Fluminense",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_morteiro_flu": mesa.visualization.Slider(
name="Número de morteiros do Fluminense",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_contra_torpedeiro_flu": mesa.visualization.Slider(
name="Número de contra torpedeiros do Fluminense",
min_value=0,
max_value=10,
step=1,
value=1,
),
"num_contra_morteiro_flu": mesa.visualization.Slider(
name="Número de contra morteiros do Fluminense",
min_value=0,
max_value=10,
step=1,
value=1,
),
"width": 15,
"height": 15
}
def render():
return
def enemy_ally_quantity(model):
fla = [r for r in model.schedule.agents if Affiliation.FLAMENGO == r._affiliation]
flu = [p for p in model.schedule.agents if Affiliation.FLUMINENSE == p._affiliation]
return f"Flamengo: {len(fla)}<br>Fluminense: {len(flu)}"
def design_model(agent):
if agent is None:
return
portrayal = {
"Filled": "true",
"Layer": 0,
"text_color": "White",
}
time = "flamengo" if agent._affiliation == Affiliation.FLAMENGO else "fluminense"
if type(agent) is Torpedeiro:
portrayal["Shape"] = f"./src/assets/{time}/torpedeiro_{time}.png"
elif type(agent) is ContraTorpedeiro:
portrayal["Shape"] = f"./src/assets/{time}/contratorpedeiro_{time}.png"
elif type(agent) is Cruzador:
portrayal["Shape"] = f"./src/assets/{time}/navio_{time}.png"
elif type(agent) is ContraMorteiro:
portrayal["Shape"] = f"./src/assets/{time}/contramorteiro_{time}.png"
elif type(agent) is Morteiro:
portrayal["Shape"] = f"./src/assets/{time}/morteiro_{time}.png"
# make subtitle in canvas_elements
portrayal["life"] = (
f"{agent._health_points:.2f}" if hasattr(agent, "_health_points") else "∞"
)
return portrayal
canvas_elements = mesa.visualization.CanvasGrid(design_model, 15, 15, 1000, 1000)
server = mesa.visualization.ModularServer(
NavalBattleModel,
[
canvas_elements,
enemy_ally_quantity,
],
"Batalha Naval",
model_params,
)
server.description = (
"Modelo de simulação de uma batalha naval entre os times Flamengo e Fluminense."
)