Académique Documents
Professionnel Documents
Culture Documents
import sys
import math
from collections import namedtuple
def log(*x):
"""
Permet d'afficher des données utiles comme un message d'erreur (et donc qui ne
sera pas considéré comme une réponse)
Ex : log(a,b,c) affichera les valeurs de a, b et c
"""
print(*x, file=sys.stderr, flush = True)
def distance(x1,x2,y1,y2):
return math.sqrt((x1-x2)**2+(y1-y2)**2)
def attendre():
"""
Pour donner l'instruction d'attendre
"""
print("WAIT")
def aller_a(x,y):
"""
Pour donner l'instruction de se déplacer vers le point de coordonnées (x,y)
"""
print(f"MOVE {x} {y}")
def aller_vers_cible(cible):
"""
Pour donner l'instruction de se déplacer vers l'Agent cible (qui peut être un
monstre ou un héros)
"""
print(f"MOVE {cible.x} {cible.y}")
def lancer_bouclier(cible):
"""
Pour donner l'instruction de lancer le sort SHIELD sur l'Agent cible (qui doit
être un monstre ou un héros)
"""
print(f"SPELL SHIELD {cible.id}")
def lancer_vent(direction_x,direction_y):
"""
Pour donner l'instruction de lancer le sort WIND dans la direction du point de
coordonnées (x,y)
"""
print(f"SPELL WIND {direction_x} {direction_y}")
def lancer_controle(cible,x,y):
"""
Pour donner l'instruction de lancer le sort CONTROL sur l'Agent cible et lui
indiquer de se diriger vers le point de coordonnées (x,y)
"""
print(f"SPELL CONTROL {cible.id} {x} {y}")
TYPE_MONSTRE = 0
TYPE_MON_HEROS = 1
TYPE_ADV_HEROS = 2
Agent = namedtuple('Agent', [
'id', 'type', 'x', 'y', 'duree_bouclier', 'sous_controle', 'vie', 'vx', 'vy',
'proche_base', 'menace_pour'
])
monstres = []
mes_heros = []
adv_heros = []
for i in range(nombre_agents_visibles):
_id, _type, x, y, duree_bouclier, sous_controle, vie, vx, vy, proche_base,
menace_pour = [int(j) for j in input().split()]
entity = Agent(
_id, # _id: Identifiant unique
_type, # _type: 0 = monstre, 1 = mon heros, 2 = heros adverse
x, y, # x,y: Position de l'agent
duree_bouclier, # duree_bouclier: Inutile pour la première ligue.
Nombre de tours avant que le bouclier disparaisse
sous_controle, # sous_controle: Inutile pour la première ligue. Vaut 1
quand cet agent est sous controle d'un sort
vie, # vie: Vie restante de l'agent
vx, vy, # vx,vy: Coordonnées du vecteur vitesse de l'agent
proche_base, # proche_base: 0 = Le monstre n'a pas de cible, 1 = Le
monstre cible une base
menace_pour # menace_pour : Etant donné la trajectoire du monstre,
le monstre est une menace pour 1 = votre base, 2 = la base adverse, 0 = personne
)
if _type == TYPE_MONSTRE:
monstres.append(entity)
elif _type == TYPE_MON_HEROS:
mes_heros.append(entity)
elif _type == TYPE_ADV_HEROS:
adv_heros.append(entity)
# ------------------------------------------
# ------------- Logique du jeu -------------
# ------------------------------------------
#hero1
cible1 = None
if monstres:
plus_court=100000
if cible1:
if distance(ma_base_x, cible1.x, ma_base_y, cible1.y) < 1500:
lancer_controle(cible1,mes_heros[0].x,mes_heros[0].y)
else:
aller_vers_cible(cible1)
else:
aller_a(2500,5500)
#hero2
cible2 = None
if monstres:
plus_court=100000
if cible2:
if distance(ma_base_x, cible2.x, ma_base_y, cible2.y) < 1500:
lancer_controle(cible2,mes_heros[1].x,mes_heros[1].y)
else:
aller_vers_cible(cible2)
else:
aller_a(5000,2000)
#hero3
cible3 = None
if monstres:
for monstre in monstres:
if cible3:
aller_vers_cible(cible3)
else:
aller_a(9400,4000)