示例#1
0
def right():
    PressKey(W)
    PressKey(D)
    ReleaseKey(A)
    time.sleep(t_time)
    ReleaseKey(D)
示例#2
0
def straight():
    PressKey(W)
    ReleaseKey(A)
    ReleaseKey(D)
    ReleaseKey(S)
示例#3
0
def forward_left():
    PressKey(W)
    PressKey(A)
    ReleaseKey(D)
    ReleaseKey(S)
示例#4
0
 def go_right(self, full_speed):
     ReleaseKey(A)
     if full_speed:
         PressKey(W)
     PressKey(D)
示例#5
0
 def go_left(self, full_speed):
     ReleaseKey(D)
     if full_speed:
         PressKey(W)
     PressKey(A)
示例#6
0
def reverse_left():
    PressKey(S)
    PressKey(A)
    ReleaseKey(W)
    ReleaseKey(D)
示例#7
0
def left():
    PressKey(A)
    ReleaseKey(W)
    ReleaseKey(D)
    ReleaseKey(A)
示例#8
0
def right():
    PressKey(right_pressed)
    ReleaseKey(left_pressed)
    time.sleep(0.5)
示例#9
0
time.sleep(3)
# 1700 stamina
# 6000 hp num
while True:
    while run[0]:
        image = ImageGrab.grab(bbox=(145, 40, 455, 95))
        image.save('image.png')
        image_np = np.array(image.getdata(), dtype='uint8').reshape(image.size[1], image.size[0], 3)
        stamina = select_color(hsv_stamina_min, hsv_stamina_max, image_np)
        hp = select_color(hsv_hp_min, hsv_hp_max, image_np)
        cv2.imwrite('hp.png', hp)
        cv2.imwrite('stam.png', stamina)
        staminaNum = cv2.countNonZero(stamina)
        hpNum = cv2.countNonZero(hp)

        if hpNum < 5200:
            PressKey(HEALTH)
            time.sleep(.1)
            ReleaseKey(HEALTH)
        if staminaNum <= 1700:
            PressKey(STAMINA)
            time.sleep(.1)
            ReleaseKey(STAMINA)
        time.sleep(.5)
    if run[0] is False:
        time.sleep(4)



示例#10
0
def RightTurn():
    PressKey(D)
    ReleaseKey(A)
    time.sleep(t_time)
    ReleaseKey(D)
示例#11
0
def forward():
    PressKey(0x11)
    ReleaseKey(left_pressed)
    ReleaseKey(right_pressed)
    time.sleep(0.5)
示例#12
0
def LeftTurn():
    PressKey(A)
    ReleaseKey(D)
    time.sleep(t_time)
    ReleaseKey(A)
示例#13
0
def Forward():
    PressKey(W)
    ReleaseKey(A)
    ReleaseKey(D)
    time.sleep(t_time)
    ReleaseKey(W)
示例#14
0
文件: main.py 项目: iamnives/sonicAI
def breky():
    ReleaseKey(W)
    ReleaseKey(A)
    PressKey(S)
    ReleaseKey(D)
示例#15
0
def pressI():
  PressKey(I)
  time.sleep(.1)
  ReleaseKey(I)
示例#16
0
def pressLctrl():
  PressKey(Lctrl)
  time.s;eep(.1)
  ReleaseKey(Lctrl)
示例#17
0
    def step(self,input_actions):
        terminal=False
        reward=0.0

        self.unpause_wrapper()
        #Check if able to take not responding lock
        
        self.check_responding_lock()

        self.ensure_framerate()
        stateDict = self.readState()
        #Check if we died
        if(stateDict[charHpKey]=="0" or stateDict[areaKey]==BONFIREAREA or stateDict[areaKey]=="??"):
            #Unpause game and wait for hp>0
            self.releaseAll()
            PressAndRelease(U)
            terminal=True
            reward=-1
        #Check if we killed the boss or missing boss into
        elif stateDict[bossHpKey]=="0" or stateDict[bossHpKey]=="??":
            self.releaseAll()
            if stateDict[bossHpKey]=="0":
                terminal=True
                print("killed boss")
                PressAndRelease(G)
                PressAndRelease(E)
                time.sleep(5)
                reward=1
            PressAndRelease(U)
            PressAndRelease(F3)
            
        #Check if lost target on boss
        elif stateDict["targetLock"]=="0":
            print("Lost target, retargeting until i die")
            while stateDict["targetLock"]=="0" and stateDict[charHpKey]!="0":
                self.releaseAll()
                PressAndFastRelease(Q)
                stateDict=self.readState()
        

        self.releaseAllExcept(input_actions)
        #Input action

        if input_actions[0] == 1:
            PressKey(W)
        if input_actions[0] == 2:
            PressKey(A)
        if input_actions[0] == 3:
            PressKey(S)
        if input_actions[0] == 4:
            PressKey(D)
        if input_actions[1] == 1:
            PressKey(SPACE)
        if input_actions[1] == 2:
            self.timesincecharacterattack=0
            PressKey(NUM1)
        else:
            self.timesincecharacterattack+=1
        if input_actions[1] == 3:
            PressKey(NUM2)
        if input_actions[1] == 4:
            PressKey(NUM4)
        if input_actions[1] == 5:
            PressKey(R)

        
        if stateDict[bossHpKey]!="??" and self.bossHpLastFrame>int(stateDict[bossHpKey]):
            hpdiff=self.bossHpLastFrame-int(stateDict[bossHpKey])
            reward+=(hpdiff/LUDEX_BASE_HP)*HEALTH_REWARD_MULTIPLIER

        #If our hp is different from last frame, can result in reward if char got healed
        if stateDict[charHpKey]!="??" and int(stateDict[charHpKey])!=int(self.charHpLastFrame):
            hpdiff=int(self.charHpLastFrame)-int(stateDict[charHpKey])
            reward-=hpdiff/HERO_BASE_HP
        
        #Charsp can be negative?
        #if stateDict[charSpKey]!="??" and int(stateDict[charSpKey])<=0:
        #    reward-=0.01

        if self.bossAnimationLastFrame!=parryAnimationName and stateDict['targetAnimationName']==parryAnimationName:
            reward+=0.1
            print("Got reward for parrying")

        #Keep hero close to boss and incentivise being alive
        if self.calc_dist(stateDict) < 5:
            reward+=0.001
        else:
            reward-=0.001

        #penalize using estus to prevent spam
        numEstus=self.parseStateDictValue(stateDict,"numEstus")
        if (self.numEstusLastFrame>numEstus):
            reward-=0.1
        self.numEstusLastFrame=numEstus

        if stateDict[bossHpKey]!="??":
            self.bossHpLastFrame=int(stateDict[bossHpKey])
        if stateDict[charHpKey]!="??":
            self.charHpLastFrame=int(stateDict[charHpKey])
        
        if self.bossAnimationLastFrame == stateDict['targetAnimationName']:
            self.bossAnimationFrameCount+=1
        else:
            self.bossAnimationLastFrame=stateDict['targetAnimationName']
            try:
                self.prev_boss_animations.append(bossAnimationNames.index(stateDict['targetAnimationName']))
            except ValueError:
                print(stateDict["targetAnimationName"],"did no exist in bossAnimationList")
            
            self.bossAnimationFrameCount=0
        
        if self.charAnimationLastFrame == stateDict['heroAnimationName']:
            self.charAnimationFrameCount+=1
        else:
            self.charAnimationLastFrame=stateDict['heroAnimationName']
            try:
                self.prev_char_animations.append(charAnimationNames.index(stateDict['heroAnimationName']))
            except ValueError:
                print(stateDict['heroAnimationName'],"did no exist in bossAnimationList")
            self.charAnimationFrameCount=0

        if "Attack" in stateDict['targetAnimationName']:
            self.timesincebossattack=0
        else:
            self.timesincebossattack+=1
        stateDict["reward"]=reward
        self.add_state(input_actions,stateDict)
        self.episode_len+=1
        self.episode_rew+=reward
        if terminal:
            self.info={'episode':{'r':self.episode_rew,'l':self.episode_len,'kill':stateDict[bossHpKey]=="0",'bosshp':self.bossHpLastFrame}}
            #Save shadowplay recording
            
            if(self.episode_rew>self.best_so_far and SAVE_PROGRESS_SHADOWPLAY):
                print("Saving shadowplay because of best ep rew>best so far")
                print("Episode rew:",self.episode_rew)
                print("Best episode rew:",self.best_so_far)
                PressAndFastRelease(F11)
                self.best_so_far=self.episode_rew
            if(stateDict[bossHpKey]=="0" and SAVE_KILLS_SHADOWPLAY):
                print("Saving shadowplay as boss was killed")
                PressAndFastRelease(F11)
            self.episode_rew=0
            self.episode_len=0
            self.fill_frame_buffer=True #Fill buffer next time, if we died
            PressAndRelease(I) #speed up when dead
        
        return np.hstack(self.prev_state), reward, terminal, self.info
示例#18
0
def pressSpace():
  PressKey(Space)
  time.sleep(.1)
  ReleaseKey(Space)
示例#19
0
def main():

    cc = cv2.VideoCapture(0)
    fram = np.zeros((300, 300), 'float')
    while True:
        retval, frame = cc.read()
        if retval:
            fram = frame[0:300, 0:300]
            gr = cv2.cvtColor(fram, cv2.COLOR_BGR2GRAY)
            hsv = cv2.cvtColor(fram, cv2.COLOR_BGR2HSV)
            hsv = cv2.medianBlur(hsv, 11)
            low = np.array([0, 48, 80])
            hi = np.array([25, 255, 255])
            mask = cv2.inRange(hsv, low, hi)
            blur = cv2.medianBlur(mask, 5)
            _, cts, hie = cv2.findContours(blur, cv2.RETR_TREE,
                                           cv2.CHAIN_APPROX_SIMPLE)
            if len(cts) != 0:
                areas = [cv2.contourArea(i) for i in cts]
                maxcnt = cts[np.argmax(areas)]
                hull = cv2.convexHull(maxcnt, returnPoints=False)
                defecti = cv2.convexityDefects(maxcnt, hull)
                M = cv2.moments(maxcnt)
                if (max(areas) < 4500):
                    ReleaseKey(A)
                    ReleaseKey(D)
                    PressKey(W)
                    cv2.putText(frame, 'STRAIGHT', (10, 50),
                                cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 2,
                                cv2.LINE_AA)

                else:
                    ReleaseKey(W)
                    #ReleaseKey(S)
                    try:
                        cx = int(M['m10'] / M['m00'])
                        cy = int(M['m01'] / M['m00'])
                        left = 0
                        right = 0
                        for z in range(defecti.shape[0]):
                            s, e, f, d = defecti[z, 0]
                            start = tuple(maxcnt[s][0])
                            end = tuple(maxcnt[e][0])
                            far = tuple(maxcnt[f][0])
                            cv2.line(frame, start, end, (0, 255, 0), 2)
                            if end[1] < cy:
                                if end[0] < cx:
                                    left += 1
                                elif end[0] > cx:
                                    right += 1
                                #cv2.line(frame,end,(cx,cy),(0,0,255),3)
                        if left > right:
                            ReleaseKey(A)
                            PressKey(D)
                        elif right > left:
                            ReleaseKey(D)
                            PressKey(A)

                        cv2.putText(frame, 'RIGHT' if left > right else 'LEFT',
                                    (40, 50), cv2.FONT_HERSHEY_SIMPLEX, 3,
                                    (255, 0, 0), 2, cv2.LINE_AA)
                        #cv2.putText(fram,str(cv2.contourArea(maxcnt)),(20,50),cv2.FONT_HERSHEY_SIMPLEX,2,(0,0,255),2,cv2.LINE_AA)
                        cv2.circle(fram, (cx, cy), 3, (0, 255, 0), -1)
                    except (ZeroDivisionError and TypeError):
                        pass

            cv2.imshow('image', fram)
            cv2.imshow('blur', blur)
            if cv2.waitKey(2) & 0xFF == ord('q'):
                break
    cc.release()
    cv2.destroyAllWindows()
示例#20
0
def pressW():
  PressKey(W)
  time.sleep(.1)
  ReleaseKey(W)
示例#21
0
def right():
    PressKey(D)
    ReleaseKey(A)
    ReleaseKey(W)
    ReleaseKey(D)
示例#22
0
def pressA():
  PressKey(A)
  time.sleep(.1)
  ReleaseKey(A)
示例#23
0
 def go_straight(self, full_speed):
     ReleaseKey(A)
     ReleaseKey(D)
     if full_speed:
         PressKey(W)
示例#24
0
def pressS():
  PressKey(S)
  time.sleep(.1)
  ReleaseKey(S)
示例#25
0
def reverse_right():
    PressKey(S)
    PressKey(D)
    ReleaseKey(W)
    ReleaseKey(A)
示例#26
0
def pressD():
  PressKey(D)
  time.sleep(.1)
  ReleaseKey(D)
示例#27
0
def reverse():
    PressKey(S)
    ReleaseKey(A)
    ReleaseKey(W)
    ReleaseKey(D)
示例#28
0
def pressR():
  PressKey(R)
  time.sleep(.1)
  ReleaseKey(R)
示例#29
0
def forward_right():
    PressKey(W)
    PressKey(D)
    ReleaseKey(A)
    ReleaseKey(S)
示例#30
0
def left():
    PressKey(W)
    PressKey(A)
    ReleaseKey(D)
    time.sleep(t_time)
    ReleaseKey(A)