def __init__(self,dimension = [0,0]):#requiere dimension del campo rx = dimension[0]*random()#inicializamos posicion x ry = dimension[1]*random()#inicializamos posicion y self.robot = Robot(pos = [rx,ry])#posicion self.robot.setAngle(random()*360)#colocamos un angulo aleatorio px = dimension[0]*random()#posicion x pelota py = dimension[1]*random()#posicion y pelota self.pelota = Pelota(pos = [px,py]) #colocamos la porteria a la derecha por defecto x = dimension[0]#porteria en la derecha yini = dimension[1]/2.0-dimension[1]/6.0#se coloca a un tercio de altura yfin = dimension[1]/2.0+dimension[1]/6.0#que llegue hasta dos tercios self.porteria = Porteria(init=[x,yini],end=[x,yfin])
pared_izquierda = Superficie(0, 0, 1, tamaño_pantalla[1] + 1) grupoSuperficiesHorizontales.add(pared_izquierda) pared_derecha = Superficie(tamaño_pantalla[0] - 1, 0, 1, tamaño_pantalla[1] - 5) grupoSuperficiesHorizontales.add(pared_derecha) grupoArcos = pygame.sprite.Group() arco_izq = Arco(-25, tamaño_pantalla[1] - 180, 'arcoizquierdo.png') arco_der = Arco(tamaño_pantalla[0] - 100, tamaño_pantalla[1] - 180, 'arcoderecho.png') grupoArcos.add(arco_der) grupoArcos.add(arco_izq) pelota = Pelota(tamaño_pantalla[0] / 2, tamaño_pantalla[1] / 2, 'p5.png') while main_loop: reloj.tick(50) for event in pygame.event.get(): if event.type == pygame.QUIT: main_loop = False jugador.actualizar_posicion() pelota.actualizar_posicion() cabesazos = pygame.sprite.spritecollide(pelota, grupoJugadores, False, pygame.sprite.collide_circle) if cabesazos: pelota.colision_circular(jugador)
class Game: robot = None pelota = None porteria = None #inicializamos juego con pelota y def __init__(self,dimension = [0,0]):#requiere dimension del campo rx = dimension[0]*random()#inicializamos posicion x ry = dimension[1]*random()#inicializamos posicion y self.robot = Robot(pos = [rx,ry])#posicion self.robot.setAngle(random()*360)#colocamos un angulo aleatorio px = dimension[0]*random()#posicion x pelota py = dimension[1]*random()#posicion y pelota self.pelota = Pelota(pos = [px,py]) #colocamos la porteria a la derecha por defecto x = dimension[0]#porteria en la derecha yini = dimension[1]/2.0-dimension[1]/6.0#se coloca a un tercio de altura yfin = dimension[1]/2.0+dimension[1]/6.0#que llegue hasta dos tercios self.porteria = Porteria(init=[x,yini],end=[x,yfin]) def action(self): direction = self.robot.getAngle()#direction es angulo en el campo del robot posicion = self.robot.getVel()#hacia donde apunta posicionP = self.pelota.getPos()-self.robot.getPos()#donde se encuentra la pelota relativo al robot # print distance # print direction fr = Front() # print "robot: P."+str(self.robot.getPos())+" V."+str(posicion) # print "pelota:"+str(self.pelota.getPos())+" PR."+str(posicionP) angleb = angle(posicion,[posicionP[0],posicionP[1]])#calculo el angulo entre ellos # print "angulo entre ellos:"+str(angleb) # print "direction:"+str(direction) vectorp = norm(posicionP)*array([cos((direction+angleb)/180.0*pi),-sin((direction+angleb)/180.0*pi)])#supongo que el angulo se mide hacia la izquierda #vuelvo a calcular un vector supuesto que tenga la misma direccion # print "nuevo:"+str(vectorp)+" compar:"+str(posicionP) vectorp = vectorp-posicionP#calculo la diferencia de valores if norm(vectorp)>10: #quiere decir que esta medido a la derecha angleb = -angleb fr.setTR(fr.TR(angleb)) fr.setST(fr.ST(angleb)) fr.setTL(fr.TL(angleb)) # i1 = [] # for i in range(-90,90,5): # i1.append(fr.evalFunc(i)) # # plot([i for i in range(-90,90,5)],i1) # show() # # val = integrate(lambda x:fr.evalFuncUp(x),-45,45) if val!=0: val = val/integrate(lambda x:fr.evalFunc(x),-45,45) print "Cambio de angulo:"+str(val) print "Angulo o:"+str(self.robot.getAngle()) self.robot.addAngle(val) self.robot.move() print "Robot:"+str(self.robot.getPos()) print "Pelota:"+str(self.pelota.getPos()) # time.sleep(1) def play(self): self.action() return self.porteria.revisarAdentro(self.pelota.getPos()) def inContact(self): return self.pelota.inContact(self.robot.getPos()) def shot(self): direction = self.robot.getAngle()#direction es angulo en el campo del robot posicion = self.robot.getVel()#hacia donde apunta posicionP = self.porteria.getMed()-self.robot.getPos()#donde se encuentra la pelota relativo al robot angleb = angle(posicion,[posicionP[0],posicionP[1]])#calculo el angulo entre ellos vectorp = norm(posicionP)*array([cos((direction+angleb)/180.0*pi),-sin((direction+angleb)/180.0*pi)])#supongo que el angulo se mide hacia la izquierda vectorp = vectorp-posicionP#calculo la diferencia de valores if norm(vectorp)>10: #quiere decir que esta medido a la derecha angleb = -angleb self.robot.addAngle(angleb+self.robot.shotError()) self.pelota.setVel(3*self.robot.getVel()) self.pelota.move() def getRobot(self): return self.robot def getPelota(self): return self.pelota def getPorteria(self): return self.porteria