예제 #1
0
    def Tick(self):
        # fire weapon

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        # if a component is in the smart zone but not the chassis, wait to find chassis before firing weapons
        if self.compinzone == 1 and self.botinzone == 0:
            self.comptimer += 1

        if self.botinzone == 1:
            self.comptimer = 0

        if self.weapons and (self.botinzone == 1 or (self.comptimer >= self.NoChassisTime and self.compinzone == 1)):
            if not self.IsUpsideDown():
                if self.GetMotorAngle(self.servo) <= self.servostopangle:
                    self.Input("Servo", 0, 100)
                else:
                    self.Input("Servo", 0, 0)


        if self.botinzone == 0 and (self.comptimer < self.NoChassisTime or self.compinzone == 0):
            #retract servo arm when not in use
                if self.GetMotorAngle(self.servo) >= self.servostopangle or self.GetMotorAngle(self.servo) =< -math.pi*0.5:
                    self.Input("Servo", 0, 100)
                if 0 > self.GetMotorAngle(self.servo) >= -math.pi*0.2 or 0 < self.GetMotorAngle(self.servo) =< self.servostopangle:
                    self.Input("Servo", 0, -100)
예제 #2
0
    def Tick(self):
        #self.tauntbox.get("taunt1").setText("Nose: " + str(self.fNoseOffset))
        # this doesn't seem to do anything, but what the heck, it's not doing any harm either.
        #if plus.getTimeElapsed() > 3 and self.fNoseOffset == self.originose:
        if not self.weapons and self.fNoseOffset == self.originose:
            plus.AI.__setattr__fNoseOffset__(self, (self.originose + math.pi))
        # fire weapon
        if self.weapons:

            # spin up depending on enemy's range
            enemy, range = self.GetNearestEnemy()

            if enemy is not None and range < self.spin_range:
                self.Input("Spin", 0, 1)
            elif self.GetInputStatus("Spin", 0) != 0:
                self.Input("Spin", 0, 0)

            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #3
0
파일: Tank.py 프로젝트: Trovaner/RA2_AI
    def Tick(self):
        if AI.SuperAI.debugging:
            speed = self.GetSpeed()
            self.DebugString(4, "Speed = " + str(speed))

            turning_speed = self.GetTurning()
            self.DebugString(5, "TSpeed = " + str(turning_speed))

        for trigger in self.secondary:
            self.Input(trigger, 0, 0)
        for trigger in self.triggers:
            self.Input(trigger, 0, 0)
        Target, range = self.GetNearestEnemy()
        if Target != None:
            Winkel = (self.GetHeadingToID(Target, False) + self.GetMotorAngle(self.Motor) * self.DSL)
            self.DebugString(6, str(self.GetHeadingToID(Target, False)))
            self.DebugString(7, str(-self.GetMotorAngle(self.Motor)))
            self.DebugString(8, str(Winkel))
            if self.AimTowards(Winkel):
                for trigger in self.triggers:
                    self.Input(trigger, 0, 1)
        if self.weapons:
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
            and not plus.isDefeated(x.robot)]

        if len(targets) > 0:
                for trigger in self.secondary:
                    self.Input(trigger, 0, 100)

        return AI.SuperAI.Tick(self)
예제 #4
0
    def Tick(self):
        # Don't try to self right if any part of the srimech breaks.
        if not self.weapons or not self.sweapons or not self.tweapons or not self.qweapons:
            self.bInvertible = True

        # fire weapon
        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        # if a component is in the smart zone but not the chassis, wait to find chassis before firing weapons
        if self.compinzone == 1 and self.botinzone == 0:
            self.comptimer += 1

        if self.botinzone == 1:
            self.comptimer = 0

        if self.botinzone == 1 or (self.comptimer >= self.NoChassisTime
                                   and self.compinzone == 1):
            if self.weapons or self.sweapons:
                for trigger in self.triggers1:
                    self.Input(trigger, 0, 1)
            else:
                for trigger in self.triggers2:
                    self.Input(trigger, 0, 1)

        # Hit bots underneath
        if self.botinzone2 == 1:
            for trigger in self.triggers4:
                self.Input(trigger, 0, 1)

        bReturn = AI.SuperAI.Tick(self)

        return bReturn
예제 #5
0
파일: Popup.py 프로젝트: apanx/RA2_AI
    def Tick(self):
        # Drive inverted if srimech breaks and srimech ID's have been set in sweapons
        if not self.sweapons and self.maybInvertible == 1:
            self.bInvertible = True

        # fire srimech if we're stuck on our rear
        if list(plus.getDirection(self.GetID(), 0))[1] > 0.9:
            for trigger in self.trigger2:
                self.Input(trigger, 0, 1)

        # Upside-down srimech
        if self.RunUpsideDown == 1 and not self.IsUpsideDown():
            self.InverterTime -= 1
            if self.InverterTime <= 0:
                for trigger in self.trigger2:
                    self.Input(trigger, 0, 1)
                self.InverterTime = 4
        # fire weapon
        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        # if a component is in the smart zone but not the chassis, wait to find chassis before firing weapons
        if self.compinzone == 1 and self.botinzone == 0:
            self.comptimer += 1

        if self.botinzone == 1:
            self.comptimer = 0

        if self.weapons and (self.botinzone == 1 or
                             (self.comptimer >= self.NoChassisTime
                              and self.compinzone == 1)):
            for trigger in self.triggers:
                self.Input(trigger, 0, 1)

        return AI.SuperAI.Tick(self)
예제 #6
0
    def Tick(self):
        # fire weapon

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        # if a component is in the smart zone but not the chassis, wait to find chassis before firing weapons
        if self.compinzone == 1 and self.botinzone == 0:
            self.comptimer += 1

        if self.botinzone == 1:
            self.comptimer = 0

        if self.weapons and (self.botinzone == 1 or
                             (self.comptimer >= self.NoChassisTime
                              and self.compinzone == 1)):
            for trigger in self.triggers1:
                self.Input(trigger, 0, 1)

        if not self.weapons and self.sweapons and (
                self.botinzone == 1 or
            (self.comptimer >= self.NoChassisTime and self.compinzone == 1)):
            for trigger in self.triggers3:
                self.Input(trigger, 0, 1)

        bReturn = AI.SuperAI.Tick(self)

        return bReturn
예제 #7
0
    def Tick(self):
        if AI.SuperAI.debugging:
            speed = self.GetSpeed()
            self.DebugString(4, "Speed = " + str(speed))

            turning_speed = self.GetTurning()
            self.DebugString(5, "TSpeed = " + str(turning_speed))
            # fire weapon
        if self.weapons:
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #8
0
파일: PokerPlus.py 프로젝트: apanx/RA2_AI
    def Tick(self):
        # fire weapon if being counted out, attempting to unstuck
        if self.bImmobile and self.GetSpeed < 0.5:
            self.Input("Fire", 0, 1)
        # fire weapon when stuck on rear end...totally not ripped off FB's Seism 13
        if list(plus.getDirection(self.GetID(), 0))[1] > 0.9:
            self.Input("Fire", 0, 1)
        # fire weapon
        if self.weapons:
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #9
0
파일: CoreBlow.py 프로젝트: apanx/RA2_AI
    def Tick(self):
        self.DebugString(4, "self.botinzone: "+  str(self.botinzone))
        self.DebugString(5, "self.notMoving: "+  str(self.notMoving))
        #drive inverted
        if not self.sweapons:
            self.bInvertible = True

        #keep track of when we're not moving
        if abs(self.GetSpeed()) < 1:
            self.notMoving = 1
        else:
            self.notMoving = 0

        # spin up depending on enemy's range
        enemy, range = self.GetNearestEnemy()

        if enemy is not None and range < self.spin_range:
            self.Input("Spin", 0, 1)
        elif self.GetInputStatus("Spin", 0) != 0:
            self.Input("Spin", 0, 0)

        # fire weapon

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        if self.sweapons and self.botinzone == 1 and self.notMoving == 1 and self.weapons:
            for trigger in self.triggers1: self.Input(trigger, 0, 1)

        if self.sweapons and self.botinzone == 1 and not self.weapons:
            for trigger in self.triggers1: self.Input(trigger, 0, 1)

        bReturn = AI.SuperAI.Tick(self)

        return bReturn
예제 #10
0
    def Tick(self):

        enemy, range = self.GetNearestEnemy()
        # if  spinner in range :  do spin :
        if enemy is not None and range < self.spin_range:
            self.Input("Spin", 0, 1)
        elif self.GetInputStatus("Spin", 0) != 0:
            self.Input("Spin", 0, 0)

        self.flipflop = True #: not used indeed

        if  self.flipflop :
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
            and not plus.isDefeated(x.robot)]
            if len(targets) > 0 : self.Input("Fire", 0, 1)


        if self.ShiftConditionOk() and self.flipflop : #Time to shift ?
            # new angle to reach :
            self.servoAimAngle = self.servoAimAngle + (math.pi * 2 / self.servoNumberOfPosition)
            if (self.servoAimAngle > math.pi) :  self.servoAimAngle =  self.servoAimAngle - (2 * math.pi)
            self.wellPositionned = False

        if  not self.wellPositionned  :
            # go to servoAimAngle :
            selfangle = self.GetMotorAngle(self.Motor)
            Winkel = selfangle - self.servoAimAngle
            self.wellPositionned = self.AimTowards(Winkel)

        return AI.SuperAI.Tick(self)
예제 #11
0
    def Tick(self):
        # fire weapon
        if self.weapons:

            # spin up depending on enemy's range
            enemy, range = self.GetNearestEnemy()

            if enemy is not None and range < self.spin_range:
                self.Input("Spin", 0, 1)
            elif self.GetInputStatus("Spin", 0) != 0:
                self.Input("Spin", 0, 0)

            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #12
0
    def Tick(self):
        # fire weapon
        if self.weapons:
            # spin up if enemy is in smartzone.
            if self.botinzone1 == 1:
                self.Input("Spin", 0, 100)
            else:
                self.Input("Spin", 0, 0)


            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #13
0
    def Tick(self):

        enemy, range = self.GetNearestEnemy()
        # if  spinner in range :  do spin :
        if enemy is not None and range < self.spin_range:
            self.Input("Spin", 0, 1)
        elif self.GetInputStatus("Spin", 0) != 0:
            self.Input("Spin", 0, 0)

        self.counterRecheck -= 1  #we check if we need to open/close arms only from time to time
        if self.counterRecheck == 0:
            self.haveToOpenArms = True  # force to open arms

        targets = [x for x in self.sensors.itervalues() if x.contacts >  0    \
        and not plus.isDefeated(x.robot)]
        if len(targets) > 0:
            self.Input("Fire", 0, 1)
            if self.counterRecheck == 0:
                self.haveToOpenArms = False  # recheck if must close

        if self.counterRecheck <= 0: self.counterRecheck = 3

        if self.haveToOpenArms:
            if self.debug: self.DebugString(8, "must OPEN  ARMS")
            self.isOpenArms1 = self.openArms(self.MotorOne, "Servo1", 1)
            self.isOpenArms2 = self.openArms(self.MotorTwo, "Servo2", -1)
        else:
            if self.debug: self.DebugString(8, "must CLOSE ARMS")
            self.isCloseArms1 = self.closeArms(self.MotorOne, "Servo1", 1)
            self.isCloseArms2 = self.closeArms(self.MotorTwo, "Servo2", -1)
            if self.isCloseArms1: self.Input("ServoFire1", 0, 1)
            if self.isCloseArms2: self.Input("ServoFire2", 0, 1)
        return AI.SuperAI.Tick(self)
예제 #14
0
    def Tick(self):
        # fire weapon
        if self.weapons:
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]
            if len(targets) > 0:
                for trigger in self.triggers:
                    self.Input(trigger, 0, 1)

        return AI.SuperAI.Tick(self)
예제 #15
0
파일: WhipperPlus.py 프로젝트: apanx/RA2_AI
    def Tick(self):
        # fire weapon
        targets = []

        if self.weapons:
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]


        bReturn = AI.SuperAI.Tick(self)
        # call this now so it takes place after other driving commands
        if self.whipFunction and self.ThisAI_bImmobile == 0: self.whipFunction(len(targets) > 0)

        if self.ThisAI_bImmobile == 1: # If Immobility is on:  -------------------------------------
            self.ImmobileCounter += 1  # Then start counting....

            if self.ImmobileCounter >= self.ReMobilizeRoutineTime*0.2:   # go backward for a designated time.
                self.Throttle(100)
                self.Input("LeftRight", 0, 0)
                self.Input("Forward", 0, -100)

            if self.ImmobileCounter >= self.ReMobilizeRoutineTime*0.6:  # go forward for a designated time.
                self.Input("LeftRight", 0, 0)
                self.Throttle(100)
                self.Input("Forward", 0, 100)

            if self.ImmobileCounter >= self.ReMobilizeRoutineTime:  # Reset everything:
                self.ThisAI_bImmobile = 0 # default Reset (if timer goes too long).
                self.ImmobileCounter = 1
        else:
            self.ThisAI_bImmobile = 0
            self.ImmobileCounter = 0



        # BackUp Immobile routine (continually running).... calculate difference of position between 2 calls
        self.BU_ImmobileTimer_A +=1
        if self.BU_ImmobileTimer_A >= 1:
            self.ThisAIBot_XFactorA =  plus.getLocation(self.GetID())[0] #
            self.ThisAIBot_ZFactorA =  plus.getLocation(self.GetID())[2]
        if self.BU_ImmobileTimer_A == 16:
            self.ThisAIBot_XFactorB =  plus.getLocation(self.GetID())[0]
            self.ThisAIBot_ZFactorB =  plus.getLocation(self.GetID())[2]
            self.BU_ImmobileTimer_A = 0 # Reset.

        if   self.ThisAIBot_XFactorA > self.ThisAIBot_XFactorB - .07 and   self.ThisAIBot_XFactorA < self.ThisAIBot_XFactorB + .07 and    self.ThisAIBot_ZFactorA > self.ThisAIBot_ZFactorB - .07 and   self.ThisAIBot_ZFactorA < self.ThisAIBot_ZFactorB + .07:
            self.BU_ImmobileTimer_B +=1
            if self.BU_ImmobileTimer_B ==50:
                self.ThisAI_bImmobile = 1
                self.BU_ImmobileTimer_B = 0
        else:
            self.BU_ImmobileTimer_B = 0 # Reset

        return bReturn
예제 #16
0
파일: EcoOmni.py 프로젝트: Trovaner/RA2_AI
    def Tick(self):
        #self.DebugString(4, str(self.zone2))
        # spin weapons briefly at start because for some dumb reason we can't move otherwise.
        if plus.getTimeElapsed() <= self.spinup:
            self.Input("Spin", 0, 100)

        # spin up depending on enemy's range
        enemy, range = self.GetNearestEnemy()
        if enemy is not None:
            heading = self.GetHeadingToID(enemy, False)

        # spin weapons only when necessary, and don't waste battery on them when we're being counted out!
        if enemy is not None and self.weapons and range < self.spin_range and not self.bImmobile and (
                self.botinzone2 == 1 or self.usespinzone == 0):
            if self.pulsetime > 0 and range > self.pulse_range:
                # Pulse spinner
                self.pulse -= 1
                if self.pulsetime2 < self.pulse < self.pulsetime:
                    self.Input("Spin", 0, 100)
                if 0 < self.pulse < self.pulsetime2:
                    self.Input("Spin", 0, 0)
                if self.pulse <= 0:
                    self.pulse = self.pulsetime
            else:
                self.Input("Spin", 0, 100)
        else:
            if plus.getTimeElapsed() > self.spinup:
                self.Input("Spin", 0, 0)

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
            and not plus.isDefeated(x.robot)]

        # slight delay between firing
        if self.reloadTime > 0: self.reloadTime -= 1

        if self.botinzone1 == 1 and self.reloadTime <= 0:
            try:
                trigger = self.triggerIterator.next()
            except StopIteration:
                self.triggerIterator = iter(self.triggers)
                trigger = self.triggerIterator.next()

            self.Input(trigger, 0, 1)
            self.reloadTime = self.reloadDelay

        if self.botinzone3 == 1:
            self.Input("Fire2", 0, 1)

        bReturn = AI.SuperAI.Tick(self)

        # call this now so it takes place after other driving commands
        if self.goodFunction: self.goodFunction(len(targets) > 0)

        return bReturn
예제 #17
0
    def Tick(self):
        # fire weapon (but only if the target is not upside down already)
        if self.weapons:
            targets = [x.robot for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            fire = False
            for bot in targets:
                if not plus.isUpsideDown(bot) or self.CanDriveUpsideDown(bot):
                    fire = True

            if fire: self.Input(self.trigger, 0, 1)

        return AI.SuperAI.Tick(self)
예제 #18
0
파일: Topknot.py 프로젝트: apanx/RA2_AI
    def Tick(self):
        # fire weapon
        targets = []

        if self.weapons:
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        bReturn = AI.SuperAI.Tick(self)

        # call this now so it takes place after other driving commands
        if self.whipFunction: self.whipFunction(len(targets) > 0)

        return bReturn
예제 #19
0
    def Tick(self):
        bReturn = Popup.Tick(self)
        if self.weapons:

            enemy, range = self.GetNearestEnemy()

            if enemy is not None and range < self.spin_range:
                self.Input("Spin", 0, 1)
            elif self.GetInputStatus("Spin", 0) != 0:
                self.Input("Spin", 0, 0)

            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        return AI.SuperAI.Tick(self)
예제 #20
0
    def Tick(self):
        # drive inverted
        if not self.sweapons:
            self.bInvertible = True

        # fire weapon
        if self.weapons:

            # spin up depending on enemy's range
            enemy, range = self.GetNearestEnemy()

            if enemy is not None and range < self.spin_range and self.weapons and not self.IsUpsideDown(
            ):
                self.Input("Spin", 0, 100)
            elif self.GetInputStatus("Spin", 0) != 0:
                self.Input("Spin", 0, 0)

            #Self right
            if self.IsUpsideDown():
                self.cycle += 1
                if self.cycle <= self.cycletime / 2:
                    self.Input("Spin", 0, 100)
                if self.cycle > self.cycletime / 2:
                    self.Input("Spin", 0, -100)
                if self.cycle >= self.cycletime:
                    self.cycle = 0

            if not self.IsUpsideDown():
                self.cycle = 0

            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #21
0
    def CheckSensors(self):
        if self.zone:
            self.sensors = {}
            results = self.GetZoneContents(self.zone)
            #print results
            for reading in results:
                self.SmartZoneEvent(1, 1, reading[0], reading[1])
        if self.zone1:
            result = self.GetZoneContents(self.zone1)
            for readings in result:
                if readings[0]> 0: b = readings[0] - 1

                if self.reloadTime2 > 0: self.reloadTime2 -= 1

                if not plus.isDefeated(b) and self.reloadTime2 <= 0:
                   self.Input("Fire2", 0, 1)
                   self.reloadTime2 = self.reloadDelay2
예제 #22
0
    def Tick(self):
        #self.DebugString(4, "getContacts: "+  str(len(plus.getContacts(self.GetID()))))
        #self.DebugString(5, "self.contact: "+  str(self.contact))
        # drive inverted
        if not self.sweapons:
            self.bInvertible = True

        # monitor when our wheels leave the ground
        if not 1 in plus.getContacts(self.GetID()):
            self.contact += 1
        else:
            self.contact = 0

        # fire weapon
        if self.weapons:

            # spin up depending on enemy's range
            enemy, range = self.GetNearestEnemy()

            if enemy is not None and range < self.spin_range and self.weapons and self.contact < 20:
                self.Input("Spin", 0, 100)
                self.Input("Spin2", 0, 0)
            elif self.GetInputStatus("Spin", 0) != 0:
                self.Input("Spin", 0, 0)

            if self.contact >= 20:
                self.Input("Spin", 0, 0)
                self.Input("Spin2", 0, 100)

            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #23
0
    def Tick(self):
        # spin up depending on enemy's range
        enemy, range = self.GetNearestEnemy()
            
        if enemy is not None and range < self.spin_range:
            self.Input("Spin", 0, 1)
        elif self.GetInputStatus("Spin", 0) != 0:
            self.Input("Spin", 0, 0)

        # fire weapon

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]
                       
        bReturn = AI.SuperAI.Tick(self)
        
        return bReturn
예제 #24
0
    def Tick(self):
        #self righteous- fire weapons if balanced on rear end
        if list(plus.getDirection(self.GetID(), 0))[1] > 0.9:
            self.Input("Fire", 0, 1)
        #self.memory = eval(open("adaptiveAI.txt").read())
        # fire weapon

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        if self.weapons and self.botinzone == 1:
            self.Input("Fire", 0, 1)

        #if poo:
        #a= str([blah])
        #output1 = file("adaptiveAI.txt", "w")
        #output1.write(a)
        #output1.close

        #decide how to shift wedges- wide or narrow
        if self.randcheck == 0:
            if self.memory[0] == 0:
                a = 1 - self.memory[1]
                if self.undered == 0:
                    self.memory[1] = a
                    self.memory[0] = 1
                    file("adaptiveAI.txt", "w").write(str(self.memory))
            else:
                a = self.memory[1]
            self.worn = a * 14
            #self.worn = random.randint(0, 31)
            self.snowcount = 0
            self.randcheck = 1
        if self.snowcount >= 6:
            self.Input("Shift", 0, 0)
            self.Input("Shift", 1, 0)
        if self.snowcount < 6:
            if self.worn < 13:
                self.Input("Shift", 0, -100)
                self.snowcount += 1
            if self.worn >= 13:
                self.Input("Shift", 1, 100)
                self.snowcount += 1

        return AI.SuperAI.Tick(self)
예제 #25
0
    def Tick(self):
        # spin weapons briefly at start because for some dumb reason we can't move otherwise.
        if plus.getTimeElapsed() <= self.spinup:
            self.Input("Spin1", 0, 100)

        # spin up depending on enemy's range
        enemy, range = self.GetNearestEnemy()

        # spin weapons only when necessary, and don't waste battery on them when we're being counted out!
        if self.weapons:
            if enemy is not None and range < self.spin_range and not self.bImmobile:
                self.Input("Spin1", 0, 100)
            else:
                if plus.getTimeElapsed() > self.spinup:
                    self.Input("Spin1", 0, 0)

        if not self.weapons:
            self.Input("Spin1", 0, 0)
            if enemy is not None and range < self.spin_range and not self.bImmobile:
                self.Input("Spin2", 0, 100)
            else:
                self.Input("Spin2", 0, 0)

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
            and not plus.isDefeated(x.robot)]

        # slight delay between firing
        if self.reloadTime > 0: self.reloadTime -= 1

        if len(targets) > 0 and self.reloadTime <= 0:
            try:
                trigger = self.triggerIterator.next()
            except StopIteration:
                self.triggerIterator = iter(self.triggers)
                trigger = self.triggerIterator.next()

            self.Input(trigger, 0, 1)
            self.reloadTime = self.reloadDelay

        bReturn = AI.SuperAI.Tick(self)

        # call this now so it takes place after other driving commands
        if self.goodFunction: self.goodFunction()

        return bReturn
예제 #26
0
    def Tick(self):
        #drive inverted
        if not self.weapons:
            self.bInvertible = True

        #detect when bot is not moving
        if abs(self.GetSpeed()) < 0.5:
            self.notMoving = 1
        else:
            self.notMoving = 0

        #drive backwards when upside down
        if self.weapons and self.IsUpsideDown() and self.notMoving == 0:
            self.Input("DriveBack", 0, 100)

        if self.weapons and self.IsUpsideDown() and self.notMoving == 1:
            self.Input("DriveBack", 0, -100)

        if not self.IsUpsideDown():
            self.Input("DriveBack", 0, 0)

        # fire weapon

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        # if a component is in the smart zone but not the chassis, wait to find chassis before firing weapons
        if self.compinzone == 1 and self.botinzone == 0:
            self.comptimer += 1

        if self.botinzone == 1:
            self.comptimer = 0

        if self.weapons and (self.botinzone == 1 or
                             (self.comptimer >= self.NoChassisTime
                              and self.compinzone == 1)):
            for trigger in self.triggers1:
                self.Input(trigger, 0, 1)

        bReturn = AI.SuperAI.Tick(self)

        return bReturn
예제 #27
0
파일: VertSpinner.py 프로젝트: apanx/RA2_AI
    def Tick(self):
        #self.tauntbox.get("taunt1").setText(str(list(plus.getDirection(self.GetID(),0))[1]))
        # drive inverted
        if not self.sweapons:
            self.bInvertible = True
        else:
            if self.IsUpsideDown():
                self.Input("Sriturn", 0, 100)
            else:
                self.Input("Sriturn", 0, 0)

        # spin up depending on enemy's range
        enemy, range = self.GetNearestEnemy()

        if enemy is not None and range < self.spin_range and self.weapons and abs(list(plus.getDirection(self.GetID(),0))[1]) < self.troll and not self.IsUpsideDown():
            self.Input("Spin", 0, 100)
        else:
            self.Input("Spin", 0, 0)

        # fire weapon
        if self.weapons:

            if self.IsUpsideDown() or abs(list(plus.getDirection(self.GetID(),0))[1]) > self.troll:
                self.Input("Spin", 0, -100)

            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #28
0
파일: BiDirRam.py 프로젝트: apanx/RA2_AI
    def Tick(self):
        #self.tauntbox.get("taunt1").setText("Nose: " + str(self.fNoseOffset))
        # Turn around if there are more weapons on the back
        if len(self.weapons) < len(self.sweapons) and self.currentTactic == 0:
            tactic = [x for x in self.tactics if x.name == "Ram"]
            if len(tactic) > 0:
                self.tactics.remove(tactic[0])
                self.tactics.append(Tactics.ReverseRam(self))
                self.currentTactic = 1
        # Turn around again if there are more weapons in the front
        if len(self.sweapons) < len(self.weapons) and self.currentTactic == 1:
            tactic = [x for x in self.tactics if x.name == "ReverseRam"]
            if len(tactic) > 0:
                self.tactics.remove(tactic[0])
                self.tactics.append(Tactics.Ram(self))
                self.currentTactic = 0

        # spin up depending on enemy's range
        enemy, range = self.GetNearestEnemy()

        if enemy is not None and range < self.spin_range:
            self.Input("Spin", 0, 1)
        elif self.GetInputStatus("Spin", 0) != 0:
            self.Input("Spin", 0, 0)

        targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
            and not plus.isDefeated(x.robot)]

        # slight delay between firing
        if self.reloadTime > 0: self.reloadTime -= 1

        if len(targets) > 0 and self.reloadTime <= 0:
            try:
                trigger = self.triggerIterator.next()
            except StopIteration:
                self.triggerIterator = iter(self.triggers)
                trigger = self.triggerIterator.next()

            self.Input(trigger, 0, 1)
            self.reloadTime = self.reloadDelay

        return AI.SuperAI.Tick(self)
예제 #29
0
    def Tick(self):
        # fire weapon
        if self.weapons:
            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]
            # spin up depending on enemy's range
            enemy, range = self.GetNearestEnemy()

            if enemy is not None and range < self.spin_range and not self.IsUpsideDown(
            ):
                self.Input("Spin", 0, 100)
            elif self.GetInputStatus("Spin", 0) != 0:
                self.Input("Spin", 0, 0)

            if self.IsUpsideDown():
                self.Input("Spin", 0, -100)

            # slight delay between firing
            if self.reloadTime > 0: self.reloadTime -= 1

            if len(targets) > 0 and self.reloadTime <= 0:
                try:
                    trigger = self.triggerIterator.next()
                except StopIteration:
                    self.triggerIterator = iter(self.triggers)
                    trigger = self.triggerIterator.next()

                self.Input(trigger, 0, 1)
                self.reloadTime = self.reloadDelay

        bReturn = AI.SuperAI.Tick(self)

        # call this now so it takes place after other driving commands

        # back up if a bot gets under us
        if self.botinzone1 == 1:
            self.Throttle(0)
            self.Input("Fire1", 0, 100)
        else:
            self.Input("Fire1", 0, 0)

        return bReturn
예제 #30
0
    def Tick(self):

        # fire weapon
        if self.weapons:

            # spin up depending on enemy's range
            enemy, range = self.GetNearestEnemy()

            if enemy is not None and range < self.spin_range and self.weapons and not self.IsUpsideDown():
                self.Input("Spin", 0, 100)
            elif self.GetInputStatus("Spin", 0) != 0:
                self.Input("Spin", 0, 0)

            if self.IsUpsideDown():
                self.Input("Spin", 0, -100)

            targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
                and not plus.isDefeated(x.robot)]

        return AI.SuperAI.Tick(self)