Untitled

 avatar
unknown
python
4 years ago
4.0 kB
5
Indexable
import sys
import math

class Unite:
    def __init__(self, entity_id  , entity_type,x,y,vx, vy  ,state):
        self.id = entity_id
        self.type = entity_type
        self.x = x
        self.y = y
        self.vx = vx
        self.vy = vy
        self.state = state

def distance(objet1,objet2):
    x1=objet1.x
    y1=objet1.y
    x2=objet2.x
    y2=objet2.y
    d=((x2-x1)**2+(y2-y1)**2)**0.5
    return d

def distancei(objet1,objet2):
    x1=objet1.x+objet1.vx
    y1=objet1.y+objet1.vy
    x2=objet2.x+objet2.vx
    y2=objet2.y+objet2.vy

    d=((x2-x1)**2+(y2-y1)**2)**0.5
    return d

def proche(objet,liste_objet):
    objet0=liste_objet[0]
    d0=distancei(objet,objet0)
    for objet2 in liste_objet:
        d=distancei(objet,objet2)
        if d<d0:
            d0=d
            objet0=objet2
    return objet0

def scalaire(objet1,objet2,but):
    x1=objet1.x
    y1=objet1.y
    x2=objet2.x
    y2=objet2.y
    xbut=but.x
    ybut=but.y
    p= (x2-x1)*(xbut-x2)+(y2-y1)*(ybut-y2)
    return p

def aligne(objet1,objet2,but):
    if abs(distance(objet1,objet2)*distance(objet2,but)-scalaire(objet1,objet2,but))<100:
        return True
    else:
        return False

def ordoneebut(objet1,objet2):
    x1=objet1.x
    y1=objet1.y
    x2=objet2.x
    y2=objet2.y
    if x2-x1!=0:
        ybord=(y2-y1)/(x2-x1)*(xbut-x1)+y2
    else:
        ybord=0
    return ybord

def flip(objet,liste_objet):
    for objet2 in liste_objet:
        y=ordoneebut(objet,objet2)
        if 2150<y<5350 and (objet2.x-objet.x)*(-1)**my_team_id>0 and distance(objet,objet2)>700:
            return objet2
        else:
            return False

#def petrificus(objet):
    #for objet2 in

#def butadvere()

# Grab Snaffles and try to throw them through the opponent's goal!
# Move towards a Snaffle and use your team id to determine where you need to throw it.

my_team_id = int(input())  # if 0 you need to score on the right of the map, if 1 you need to score on the left
xbut=16000*(1-my_team_id)
ybut=3750
# game loop
while True:
    mywizards=[]
    balls=[]
    my_score, my_magic = [int(i) for i in input().split()]
    opponent_score, opponent_magic = [int(i) for i in input().split()]
    entities = int(input())  # number of entities still in game
    for i in range(entities):
        inputs = input().split()
        entity_id = int(inputs[0])  # entity identifier
        entity_type = inputs[1]  # "WIZARD", "OPPONENT_WIZARD" or "SNAFFLE" (or "BLUDGER" after first league)
        x = int(inputs[2])  # position
        y = int(inputs[3])  # position
        vx = int(inputs[4])  # velocity
        vy = int(inputs[5])  # velocity
        state = int(inputs[6])  # 1 if the wizard is holding a Snaffle, 0 otherwise
        objet = Unite(entity_id  , entity_type,x,y,vx, vy  ,state)
        if entity_type == "WIZARD":
            mywizards.append(objet)
        elif entity_type == "SNAFFLE":
            balls.append(objet)

    for i in range(2):
        sorcier=mywizards[i]

        # Write an action using print



        # To debug: print("Debug messages...", file=sys.stderr, flush=True)


        # Edit this line to indicate the action for each wizard (0 ≤ thrust ≤ 150, 0 ≤ power ≤ 500)
        # i.e.: "MOVE x y thrust" or "THROW x y power"
        ballonp=proche(sorcier, balls)
        ballon=flip(sorcier,balls)
        if sorcier.state!=0:
            print("THROW {} {} 500 tire".format(xbut,ybut))


        elif ballon and my_magic>=20:
            print("FLIPENDO {} flip".format(ballon.id))
            my_magic-=20

        elif (ballonp.x-sorcier.x)*(-1)**my_team_id<0 and my_magic>=15 :
            print("ACCIO {} accio".format(ballonp.id))
            my_magic-=15

        else:
            ballonp=proche(sorcier, balls)
            print("MOVE {} {} 150 go".format(ballonp.x,ballonp.y))

Editor is loading...