Ejemplo n.º 1
0
	def execute(soldier):
		# Stop attacking
		if soldier.worker:
			if Pos.getDistance(soldier.getPosition(), soldier.worker.getPosition()) > Soldier.guardRange:
				soldier.changeState(LifeGuarding)
		elif Pos.getDistance(soldier.getPosition(), BuildingManager.getCastle()) > Soldier.guardRange:
			soldier.changeState(Guarding)
Ejemplo n.º 2
0
    def enter(unit):
        pos = Pos(
            random.randint(unit.target.x - Charge.enemyRadius,
                           unit.target.x + Charge.enemyRadius),
            random.randint(unit.target.z - Charge.enemyRadius,
                           unit.target.z + Charge.enemyRadius))

        unit.setTarget(pos)
Ejemplo n.º 3
0
    def detectAttacks():
        return False
        soldiers = 0
        castlePos = BuildingManager.getCastle()

        for id in EntityManager.enemySoldiers:
            if Pos.getDistance(castlePos, EntityManager.enemySoldiers[id].
                               getPosition()) < StrategyManager.defendRadius:
                soldiers += 1

        return soldiers >= StrategyManager.defendCount
Ejemplo n.º 4
0
    def getNearestSoldier(pos, radius=None):
        if radius:
            for id in EntityManager.enemySoldiers:
                enemySoldier = EntityManager.enemySoldiers[id]

                if Pos.getDistance(pos, enemySoldier.getPosition()) < radius:
                    return enemySoldier
        else:
            best = None
            bestDistance = 1000

            for id in EntityManager.enemySoldiers:
                enemySoldier = EntityManager.enemySoldiers[id]

                if Pos.getDistance(pos,
                                   enemySoldier.getPosition()) < bestDistance:
                    best = enemySoldier
                    bestDistance = Pos.getDistance(pos,
                                                   enemySoldier.getPosition())

            return best
Ejemplo n.º 5
0
    def getExplorePosition(explorer):
        # Make sure explorers are not exploring the same area
        # Try to explore enemy base as fast as possible to avoid being killed
        # Avoid enemy base when they have soldiers

        explorer.x -= EntityManager.deltaExploreX
        explorer.z -= EntityManager.deltaExploreZ

        if EntityManager.deltaExploreX > 0:
            if explorer.x < -1:
                explorer.x += EntityManager.deltaExploreX

                if EntityManager.setExploreArea(explorer):
                    return EntityManager.getExplorePosition(explorer)

            if explorer.x < 3:
                explorer.x = 3
        else:
            if explorer.x > EntityManager.mapSize + 1:
                explorer.x += EntityManager.deltaExploreX

                if EntityManager.setExploreArea(explorer):
                    return EntityManager.getExplorePosition(explorer)

            if explorer.x > EntityManager.mapSize - 3:
                explorer.x = EntityManager.mapSize - 3

        if EntityManager.deltaExploreZ > 0:
            if explorer.z < -1:
                explorer.z += EntityManager.deltaExploreZ

                if EntityManager.setExploreArea(explorer):
                    return EntityManager.getExplorePosition(explorer)

            if explorer.z < 3:
                explorer.z = 3
        else:
            if explorer.z > EntityManager.mapSize + 1:
                explorer.z += EntityManager.deltaExploreZ

                if EntityManager.setExploreArea(explorer):
                    return EntityManager.getExplorePosition(explorer)

            if explorer.z > EntityManager.mapSize - 3:
                explorer.z = EntityManager.mapSize - 3

        return Pos(explorer.x, explorer.z)
Ejemplo n.º 6
0
    def attackIntruders():
        return
        castlePos = BuildingManager.getCastle()

        # Attack with guarding soldiers when enemy soldiers near base
        for id in EntityManager.enemySoldiers:
            enemySoldier = EntityManager.enemySoldiers[id]

            if Pos.getDistance(
                    castlePos,
                    enemySoldier.getPosition()) < Soldier.guardRange:
                for soldierId in EntityManager.soldiers:
                    soldier = EntityManager.soldiers[soldierID]

                    if soldier.state == Guarding:
                        soldier.enemy = enemySoldier
                        soldier.changeState(Attack)
Ejemplo n.º 7
0
	def findOre(pos = None):
		# Resource distance priority
			# Close faster
			# Far away safer early
			
		if len(ResourceManager.ironOre):
			if pos == None:
				pos = BuildingManager2.BuildingManager.getCastle()
		
			bestOre = None
			bestDistance = 1000
			
			for ore in ResourceManager.ironOre:
				if not ore.worker:
					d = Pos.getDistance(ore.pos, pos)
					
					if d < bestDistance:
						bestDistance = d
						bestOre = ore
					
			return bestOre
Ejemplo n.º 8
0
	def findTree(pos = None):
		# Resource distance priority
			# Close faster
			# Far away safer early
			
		if len(ResourceManager.trees):
			if pos == None:
				pos = BuildingManager2.BuildingManager.getCastle()
		
			bestTree = None
			bestDistance = 1000
			
			for tree in ResourceManager.trees:
				if not tree.worker:
					d = Pos.getDistance(tree.pos, pos)
					
					if d < bestDistance:
						bestDistance = d
						bestTree = tree
					
			return bestTree
Ejemplo n.º 9
0
    def execute():
        building = BuildingManager.buildingNeeded()

        if building:
            castlePos = BuildingManager.getCastle()

            if castlePos:
                if building == BuildingType.camp:
                    if castlePos.x < 50:
                        dx = 1
                    else:
                        dx = -1

                    if castlePos.z < 50:
                        dz = 1
                    else:
                        dz = -1

                    if dx < 0:
                        x = random.randint(-BuildingManager.buildRange, 0)
                    else:
                        x = random.randint(0, BuildingManager.buildRange)

                    if dz < 0:
                        z = random.randint(-BuildingManager.buildRange, 0)
                    else:
                        z = random.randint(0, BuildingManager.buildRange)

                    BuildingManager.createWorksite(
                        building, Pos(castlePos.x + x, castlePos.z + z))
                elif len(BuildingManager.camps) == 0:
                    if castlePos.x > 50:
                        dx = 1
                    else:
                        dx = -1

                    if castlePos.z > 50:
                        dz = 1
                    else:
                        dz = -1

                    if dx < 0:
                        x = random.randint(-BuildingManager.buildRange, 0)
                    else:
                        x = random.randint(0, BuildingManager.buildRange)

                    if dz < 0:
                        z = random.randint(-BuildingManager.buildRange, 0)
                    else:
                        z = random.randint(0, BuildingManager.buildRange)

                    BuildingManager.createWorksite(
                        building, Pos(castlePos.x + x, castlePos.z + z))
                else:
                    BuildingManager.createWorksite(
                        building,
                        Pos(
                            random.randint(
                                castlePos.x - BuildingManager.buildRange,
                                castlePos.x + BuildingManager.buildRange),
                            random.randint(
                                castlePos.z - BuildingManager.buildRange,
                                castlePos.z + BuildingManager.buildRange)))
Ejemplo n.º 10
0
 def getPosition(self):
     return Pos.tilePos(self.pos)