def right(): PressKey(W) PressKey(D) ReleaseKey(A) time.sleep(t_time) ReleaseKey(D)
def straight(): PressKey(W) ReleaseKey(A) ReleaseKey(D) ReleaseKey(S)
def forward_left(): PressKey(W) PressKey(A) ReleaseKey(D) ReleaseKey(S)
def go_right(self, full_speed): ReleaseKey(A) if full_speed: PressKey(W) PressKey(D)
def go_left(self, full_speed): ReleaseKey(D) if full_speed: PressKey(W) PressKey(A)
def reverse_left(): PressKey(S) PressKey(A) ReleaseKey(W) ReleaseKey(D)
def left(): PressKey(A) ReleaseKey(W) ReleaseKey(D) ReleaseKey(A)
def right(): PressKey(right_pressed) ReleaseKey(left_pressed) time.sleep(0.5)
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)
def RightTurn(): PressKey(D) ReleaseKey(A) time.sleep(t_time) ReleaseKey(D)
def forward(): PressKey(0x11) ReleaseKey(left_pressed) ReleaseKey(right_pressed) time.sleep(0.5)
def LeftTurn(): PressKey(A) ReleaseKey(D) time.sleep(t_time) ReleaseKey(A)
def Forward(): PressKey(W) ReleaseKey(A) ReleaseKey(D) time.sleep(t_time) ReleaseKey(W)
def breky(): ReleaseKey(W) ReleaseKey(A) PressKey(S) ReleaseKey(D)
def pressI(): PressKey(I) time.sleep(.1) ReleaseKey(I)
def pressLctrl(): PressKey(Lctrl) time.s;eep(.1) ReleaseKey(Lctrl)
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
def pressSpace(): PressKey(Space) time.sleep(.1) ReleaseKey(Space)
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()
def pressW(): PressKey(W) time.sleep(.1) ReleaseKey(W)
def right(): PressKey(D) ReleaseKey(A) ReleaseKey(W) ReleaseKey(D)
def pressA(): PressKey(A) time.sleep(.1) ReleaseKey(A)
def go_straight(self, full_speed): ReleaseKey(A) ReleaseKey(D) if full_speed: PressKey(W)
def pressS(): PressKey(S) time.sleep(.1) ReleaseKey(S)
def reverse_right(): PressKey(S) PressKey(D) ReleaseKey(W) ReleaseKey(A)
def pressD(): PressKey(D) time.sleep(.1) ReleaseKey(D)
def reverse(): PressKey(S) ReleaseKey(A) ReleaseKey(W) ReleaseKey(D)
def pressR(): PressKey(R) time.sleep(.1) ReleaseKey(R)
def forward_right(): PressKey(W) PressKey(D) ReleaseKey(A) ReleaseKey(S)
def left(): PressKey(W) PressKey(A) ReleaseKey(D) time.sleep(t_time) ReleaseKey(A)