def construir_edificio_2(simul, edificio): obreros_ya_construyendo = [] for aldeano in simul.aldeanos_construyendo_2: if distancia(aldeano, edificio) <= 5: obreros_ya_construyendo.append(aldeano) else: mover(aldeano, edificio) for aldeano in obreros_ya_construyendo: empieza_construir(aldeano, edificio, simul.aldeanos_ociosos_2) obreros_necesarios = edificio.unidades_para_construir - len( simul.aldeanos_construyendo_2) obreros_desocupados = simul.aldeanos_ociosos_2 + \ simul.aldeanos_recolectando_2 + \ simul.aldeanos_trayendo_2 if len(obreros_desocupados) > obreros_necesarios: for i in range(obreros_necesarios): trabajador = obreros_desocupados[i] simul.aldeanos_construyendo_2.append(trabajador) if trabajador in simul.aldeanos_recolectando_2: simul.aldeanos_recolectando_2.remove(trabajador) if trabajador in simul.aldeanos_ociosos_2: simul.aldeanos_ociosos_2.remove(trabajador) if trabajador in simul.aldeanos_trayendo_2: simul.aldeanos_trayendo_2.remove(trabajador)
def ataque_torreta(torreta, enemigo): dist = distancia(torreta, enemigo) rango = torreta.rango if dist <= rango: enemigo.puntos_vida -= torreta.puntos_daño * torreta.velocidad_ataque enemigo.gui.health -= torreta.puntos_daño * torreta.velocidad_ataque
def ataque_cristian_2(unidad_1, unidad_2, simul): if unidad_2.__class__.__name__ == "Hero": atacar(unidad_1, unidad_2) else: dist = distancia(unidad_1, unidad_2) rango_maximo = unidad_1.rango if dist > rango_maximo: mover(unidad_1, unidad_2) else: simul.ticks_cristianizacion += 1 if simul.ticks_cristianizacion == 80: if unidad_2.__class__.__name__ == "Guerrero": simul.lista_guerreros_1.remove(unidad_2) simul.lista_guerreros_2.append(unidad_2) if unidad_2.__class__.__name__ == "Arquero": simul.lista_arqueros_1.remove(unidad_2) simul.lista_arqueros_2.append(unidad_2) if unidad_2.__class__.__name__ == "Mascota": simul.lista_mascotas_1.remove(unidad_2) simul.lista_mascotas_2.append(unidad_2) simul.ticks_cristianizacion = 0
def atacar(unidad_1, unidad_2): dist = distancia(unidad_1, unidad_2) rango_maximo = unidad_1.rango if unidad_1.__class__.__name__ == "Arquero" \ else 5 if dist > rango_maximo: mover(unidad_1, unidad_2) else: unidad_2.puntos_vida -= unidad_1.puntos_daño unidad_2.gui.health -= unidad_1.puntos_daño
def mas_cercano(unidad, lista_enemigos): nemesis = None distancia_nemesis = 100000 if lista_enemigos: nemesis = lista_enemigos[0] for enemigo in lista_enemigos: if enemigo: distancia_analizada = distancia(unidad, enemigo) if distancia_analizada < distancia_nemesis: nemesis = enemigo distancia_nemesis = distancia_analizada return nemesis
def test_distancia(self): self.assertEqual(distancia(self.arquero, self.guerrero), 1)