Vous êtes sur la page 1sur 4

from random import randint

import sys
import math
from collections import namedtuple

# ----------- Fonctions Auxiliaires

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}")

# ----------- Constantes et variables

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'
])

# Les coordonnées du coin représentant notre base


ma_base_x, ma_base_y = [int(i) for i in input().split()]
heros_par_joueur = int(input())

# ------------ Boucle du jeu


while True:

# -------- Récupération des données pour ce tour de jeu

ma_vie, mon_mana = [int(j) for j in input().split()]


vie_adv, mana_adv = [int(j) for j in input().split()]
nombre_agents_visibles = int(input()) # Nombres de heros et monstres visibles

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

for monstre in monstres:

if distance(ma_base_x,monstre.x,ma_base_y,monstre.y) < plus_court:


if monstre != cible2 and monstre !=cible3:
cible1 = monstre
plus_court=distance(ma_base_x,monstre.x,ma_base_y,monstre.y)

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

for monstre in monstres:

if distance(ma_base_x,monstre.x,ma_base_y,monstre.y) < plus_court:


if monstre != cible1 and monstre !=cible3:
cible2 = monstre
plus_court=distance(ma_base_x,monstre.x,ma_base_y,monstre.y)

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 distance(ma_base_x,monstre.x,ma_base_y,monstre.y) > 5000:


if monstre != cible1 and monstre !=cible3:
cible3 = monstre

if cible3:
aller_vers_cible(cible3)

else:
aller_a(9400,4000)

Vous aimerez peut-être aussi