Untitled
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...