jezv 11 月之前
父节点
当前提交
cc679aed23
共有 1 个文件被更改,包括 44 次插入34 次删除
  1. 44 34
      trex/main.py

+ 44 - 34
trex/main.py

@@ -123,18 +123,21 @@ if __name__ == '__main__':
         dino_max_x = dino_pos[1].max()
         dino_max_x = dino_pos[1].max()
         dino_min_y = dino_pos[0].max()
         dino_min_y = dino_pos[0].max()
         dino_max_y = dino_pos[0].min()
         dino_max_y = dino_pos[0].min()
+        dino_min_x = dino_pos[1].min()
 
 
-        coef = 1
-        trigger_second = (int(dino_pos[0].mean()), int(dino_max_x + int(coef*10)*pw))
-        trigger_feather = (dino_max_y, int(dino_max_x + int(coef*12)*pw))
-        jumping = False
-        taking = False
-        laing = False
-
-        print(ph, pw)
+        coef = 4
+        trigger_time = (int(dino_pos[0].mean()), dino_max_x + 18*pw)
+        trigger_jump = (int(dino_pos[0].mean()), dino_max_x + 7*pw)
+        trigger_feather = (dino_max_y-5*ph, dino_max_x + 11*pw)
+        
+        enter_time = None
+        jump_time = None
 
 
         start = time()
         start = time()
-        start2= time()
+        start2 = time()
+
+        last_screen = None
+        speed = 0
                                 
                                 
         if DEBUG: cv2.imshow('View', rgbScreen) 
         if DEBUG: cv2.imshow('View', rgbScreen) 
         while True:
         while True:
@@ -142,41 +145,48 @@ if __name__ == '__main__':
             binScreen = to_bbox(binScreen)
             binScreen = to_bbox(binScreen)
             labels, labeledScreen = cv2.connectedComponents(binScreen.astype('uint8'))
             labels, labeledScreen = cv2.connectedComponents(binScreen.astype('uint8'))
 
 
-            if not jumping and binScreen[trigger_second] != 0 or binScreen[trigger_feather] != 0: 
-                print('jumping')
-                gui.keyDown('space')
-                jumping = True
-
-            elif jumping and binScreen[trigger_second[0], trigger_second[1]+(int(coef-1.2)*pw)] == 0 and binScreen[trigger_feather[0], trigger_feather[1]+(int(coef-1.2)*pw)] == 0:
-                print('taking')
-                gui.keyUp('space')
-                gui.keyDown('down')
-                jumping = False
-                taking = True
+            if last_screen is not None:
+                xor_screen = np.logical_xor(binScreen, last_screen)
+                xor_labels, xor_labeledScreen = cv2.connectedComponents(binScreen.astype('uint8'))
+                x, y = np.where(xor_labeledScreen == xor_labels-1)
+                speed = x.max() - x.min()
+
+            if not enter_time and binScreen[trigger_time] != 0:
+                enter_time = time()
+
+            elif enter_time and binScreen[trigger_time] == 0:
+                jump_time = (time() - enter_time) / coef
+                enter_time = None
+
+            if binScreen[trigger_jump] != 0 or binScreen[trigger_feather]:
+                gui.press('space')
+                if jump_time:
+                    sleep(jump_time)
+                    gui.press('down') 
+                    jump_time = None
             
             
-            if taking and binScreen[dino_max_y-ph, dino_max_x] != 0:
-                print('take off')
-                gui.keyUp('down')
-                taking = False
-
-            if time() - start2 > 15/coef:
-                print(coef)
-                print('speeded')
-                coef += 0.2
-                start2 = time()
-
-            if time() - start > 15:
+            if (time() - start)*coef > 26*4 and (time() - start) > 8:
                 print(time() - start)
                 print(time() - start)
-                trigger_second = (trigger_second[0], trigger_second[1]+pw)
+                trigger_jump = (trigger_jump[0], trigger_jump[1]+pw)
+                trigger_time = (trigger_time[0], trigger_time[1]+pw)
                 trigger_feather = (trigger_feather[0], trigger_feather[1]+pw)
                 trigger_feather = (trigger_feather[0], trigger_feather[1]+pw)
                 start = time()
                 start = time()
 
 
+            if (time() - start2)*coef > 9*4 and (time() - start2) > 3.6:
+                print(time() - start2)
+                coef += 0.2
+                start2 = time()
+
             if DEBUG: 
             if DEBUG: 
                 rgbScreen = binary_to_RGB(binScreen)
                 rgbScreen = binary_to_RGB(binScreen)
                 cv2.circle(rgbScreen, trigger_feather[::-1], radius=2, color=(255, 0, 0), thickness=2)
                 cv2.circle(rgbScreen, trigger_feather[::-1], radius=2, color=(255, 0, 0), thickness=2)
-                cv2.circle(rgbScreen, trigger_second[::-1], radius=2, color=(0, 255, 0), thickness=2)
+                cv2.circle(rgbScreen, trigger_jump[::-1], radius=2, color=(0, 255, 0), thickness=2)
+                cv2.circle(rgbScreen, trigger_time[::-1], radius=2, color=(0, 0, 255), thickness=2)
                 cv2.imshow('View', rgbScreen)
                 cv2.imshow('View', rgbScreen)
                 if cv2.waitKey(1) == ord('q'): break
                 if cv2.waitKey(1) == ord('q'): break
+
+            # print(speed)
+            # last_screen = binScreen.copy()