def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) self.addSettingsArgs(edges.StackableSettings) self.buildArgParser(x=100, y=300) self.argparser.add_argument("--canheight", action="store", type=int, default=50, help="Height of the paintcans") self.argparser.add_argument("--candiameter", action="store", type=int, default=30, help="Diameter of the paintcans") self.argparser.add_argument("--minspace", action="store", type=int, default=10, help="Minimum space between the paintcans") self.argparser.add_argument( "--hexpattern", action="store", type=boolarg, default=False, help="Use hexagonal arrangement for the holes instead of orthogonal" )
def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings, space=3, finger=3, surroundingspaces=1) self.buildArgParser(sx="25*3", sy="60*4", sh="5:25:10", bottom_edge="h") self.argparser.add_argument( "--holes", action="store", type=int, default=3, help="Number of holes for each size", ) self.argparser.add_argument( "--firsthole", action="store", type=float, default=1.0, help="Smallest hole", ) self.argparser.add_argument( "--holeincrement", action="store", type=float, default=.5, help="increment between holes", )
def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) self.buildArgParser(sx="25*3", sy="60*4", h=60) self.argparser.add_argument( "--holes", action="store", type=int, default=3, help="Number of holes for each size", ) self.argparser.add_argument( "--firsthole", action="store", type=float, default=1.0, help="Smallest hole", ) self.argparser.add_argument( "--holeincrement", action="store", type=float, default=.5, help="increment between holes", )
def __init__(self): Boxes.__init__(self) self.buildArgParser("x", "y", "h") self.argparser.add_argument( "--design", action="store", type=str, default="automatic", choices=("automatic", "widebox", "tuckbox"), help="different design for paper consumption optimization. The tuckbox also has locking cut for its lid.", ) self.argparser.add_argument( "--lid_heigth", type=float, default=15, help="Height of the lid (part which goes inside the box)", ) self.argparser.add_argument( "--lid_radius", type=float, default=7, help="Angle, in radius, of the round corner of the lid", ) self.argparser.add_argument( "--lid_sides", type=float, default=20, help="Width of the two sides upon which goes the lid", ) self.argparser.add_argument( "--margin", type=float, default=0, help="Margin for the glued sides", ) self.argparser.add_argument( "--mark_length", type=float, default=1.5, help="Length of the folding outside mark", ) self.argparser.add_argument( "--tab_angle_rad", type=float, default=math.atan(2 / 25), help="Angle (in radian) of the sides which are to be glued inside the box", ) self.argparser.add_argument( "--finger_hole_diameter", type=float, default=15, help="Diameter of the hole to help catch the lid", )
def __init__(self, database_dir='database', selected_box_color=(225, 0, 0), unselected_box_color=(0, 255, 0), rate=2): Boxes.__init__(self, rate) self.selected_box = 0 self.set_select_box = 0 self.selected_box_color = selected_box_color self.unselected_box_color = unselected_box_color self.database_dir = database_dir self.set_image(None)
def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) self.buildArgParser(h=30) self.argparser.add_argument( "--cardwidth", action="store", type=float, default=65, help="Width of the cards") self.argparser.add_argument( "--cardheight", action="store", type=float, default=90, help="Height of the cards") self.argparser.add_argument( "--num", action="store", type=int, default=2, help="number of compartments")
def __init__(self): Boxes.__init__(self) self.argparser.add_argument( "--phone_height", type=float, default=142, help="Height of the phone.", ) self.argparser.add_argument( "--phone_width", type=float, default=73, help="Width of the phone.", ) self.argparser.add_argument( "--phone_depth", type=float, default=11, help=("Depth of the phone. Used by the bottom support holding the " "phone, and the side tabs depth as well. Should be at least " "your material thickness for assembly reasons."), ) self.argparser.add_argument( "--angle", type=float, default=25, help="angle at which the phone stands, in degrees. 0° is vertical.", ) self.argparser.add_argument( "--bottom_margin", type=float, default=30, help="Height of the support below the phone", ) self.argparser.add_argument( "--tab_size", type=float, default=76, help="Length of the tabs holding the phone", ) self.argparser.add_argument( "--bottom_support_spacing", type=float, default=16, help=( "Spacing between the two bottom support. Choose a value big " "enough for the charging cable, without getting in the way of " "other ports."), ) self.addSettingsArgs(edges.FingerJointSettings)
def __init__(self): Boxes.__init__(self) self.buildArgParser(x=250, y=154, h=120) self.argparser.add_argument( "--cornerradius", action="store", type=int, default=30, help="Radius of the corners") self.argparser.add_argument( "--handleheight", action="store", type=int, default=150, help="Height of the handle") self.argparser.add_argument( "--handlewidth", action="store", type=int, default=120, help="Width of the handle")
def __init__(self): Boxes.__init__(self) self.buildArgParser("x", "y", "h") self.argparser.add_argument( "--lid_heigth", type=float, default=15, help="Height of the lid (part which goes inside the box)", ) self.argparser.add_argument( "--lid_radius", type=float, default=7, help="Angle, in radius, of the round corner of the lid", ) self.argparser.add_argument( "--lid_sides", type=float, default=20, help="Width of the two sides upon which goes the lid", ) self.argparser.add_argument( "--margin", type=float, default=0.5, help="Space between the two folded sides to glue", ) self.argparser.add_argument( "--mark_length", type=float, default=1.5, help="Length of the folding outside mark", ) self.argparser.add_argument( "--tab_angle_rad", type=float, default=math.atan(2 / 25), help= "Angle (in radian) of the sides which are to be glued inside the box", ) self.argparser.add_argument( "--finger_hole_diameter", type=float, default=15, help="Diameter of the hole to help catch the lid", )
def __init__(self): Boxes.__init__(self) self.buildArgParser(x=250, y=154, h=120) self.argparser.add_argument("--cornerradius", action="store", type=int, default=30, help="Radius of the corners") self.argparser.add_argument("--handleheight", action="store", type=int, default=150, help="Height of the handle") self.argparser.add_argument("--handlewidth", action="store", type=int, default=120, help="Width of the handle")
def __init__(self): Boxes.__init__(self) self.argparser.add_argument( "--columns", type=int, default=4, help="Number of columns of capsules.", ) self.argparser.add_argument( "--rows", type=int, default=5, help="Number of capsules by columns.", ) self.argparser.add_argument( "--backplate", type=boolarg, default=True, help="True if a backplate should be generated.", )
def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) self.addSettingsArgs(edges.StackableSettings) self.buildArgParser(x=100, y=300) self.argparser.add_argument( "--canheight", action="store", type=int, default=50, help="Height of the paintcans") self.argparser.add_argument( "--candiameter", action="store", type=int, default=30, help="Diameter of the paintcans") self.argparser.add_argument( "--minspace", action="store", type=int, default=10, help="Minimum space between the paintcans") self.argparser.add_argument( "--hexpattern", action="store", type=boolarg, default=False, help="Use hexagonal arrangement for the holes instead of orthogonal")
def createBoxes(): for player in playerL: boxes = Boxes(player) bs.append(boxes)
def create_box_game(self): boxes = Boxes() boxes.run()
def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) self.addSettingsArgs(edges.StackableSettings) self.buildArgParser(x=56, y=85) # count self.argparser.add_argument( "--sbcs", action="store", type=int, default=5, help="how many slots for sbcs", ) # spaces self.argparser.add_argument( "--clearance-x", action="store", type=int, default=3, help="clearance for the board in the box (x) in mm" ) self.argparser.add_argument( "--clearance-y", action="store", type=int, default=3, help="clearance for the board in the box (y) in mm" ) self.argparser.add_argument( "--clearance-z", action="store", type=int, default=28, help="SBC Clearance in mm", ) # mounting holes self.argparser.add_argument( "--hole-dist-edge", action="store", type=decimal.Decimal, default=3.5, help="hole distance from edge in mm" ) self.argparser.add_argument( "--hole-grid-dimension-x", action="store", type=int, default=58, help="width of x hole area" ) self.argparser.add_argument( "--hole-grid-dimension-y", action="store", type=int, default=49, help="width of y hole area" ) self.argparser.add_argument( "--hole-diameter", action="store", type=decimal.Decimal, default=2.75, help="hole diameters" ) # i/o holes self.argparser.add_argument( "--netusb-z", action="store", type=int, default=18, help="height of the net/usb hole mm" ) self.argparser.add_argument( "--netusb-x", action="store", type=int, default=53, help="width of the net/usb hole in mm" ) # features self.argparser.add_argument( "--stable", action='store', type=boolarg, default=False, help="draw some holes to put a 1/4\" dowel through at the base and top" ) self.argparser.add_argument( "--switch", action='store', type=boolarg, default=False, help="adds an additional vertical segment to hold the switch in place, works best w/ --stable" ) # TODO flesh this idea out better self.argparser.add_argument( "--fan", action='store', type=int, required=False, help="ensure that the x width is at least this much and as well, draw a snug holder for a fan someplace" )
type='prod', roles=['my_network'], site=SITE) conf.add_network_conf(network)\ .add_machine(roles=['collector', 'front', 'working'], cluster=CLUSTER, nodes=1, primary_network=network)\ .finalize() SEED = 6 NB_QUERY = 1500 NB_CRASHES = 3 EXPORT_TRACES_FILE = Path(f'../../results/result_failures_3_s{SEED}.json') boxes = Boxes(depth=3, arity=2, kind=BoxesType.WORST) boxes.print() longestTimeOfLongest = boxes.getMaxTime() logging.debug(f"Longest possible task takes {longestTimeOfLongest}ms.") seed(SEED) provider = G5k(conf) roles, networks = provider.init() roles = discover_networks(roles, networks) priors = [__python3__, __default_python3__, __docker__] with play_on(pattern_hosts='all', roles=roles, priors=priors) as p: p.pip(display_name='Installing python-docker…', name='docker') ## #A deploy jaeger, for now, we set up with all in one
def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings, surroundingspaces=1.0)
site=SITE) conf.add_network_conf(network)\ .add_machine(roles=['collector', 'front', 'working'], cluster=CLUSTER, nodes=1, primary_network=network)\ .finalize() SEED = 5 NB_QUERY = 1500 FAIRNESS = 0.2 EXPORT_TRACES_FILE = Path(f'../../results/result_fairness_1b_s{SEED}.json') boxes = Boxes(depth=3, arity=2, kind=BoxesType.WORST) boxes.print() longestTimeOfLongest = boxes.getMaxTime() logging.debug(f"Longest possible task takes {longestTimeOfLongest}ms.") seed(SEED) provider = G5k(conf) roles, networks = provider.init() roles = discover_networks(roles, networks) priors = [__python3__, __default_python3__, __docker__]
def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) self.addSettingsArgs(edges.StackableSettings) self.buildArgParser(x=56, y=85) # count self.argparser.add_argument( "--sbcs", action="store", type=int, default=5, help="how many slots for sbcs", ) # spaces self.argparser.add_argument( "--clearance_x", action="store", type=int, default=3, help="clearance for the board in the box (x) in mm") self.argparser.add_argument( "--clearance_y", action="store", type=int, default=3, help="clearance for the board in the box (y) in mm") self.argparser.add_argument( "--clearance_z", action="store", type=int, default=28, help="SBC Clearance in mm", ) # mounting holes self.argparser.add_argument("--hole_dist_edge", action="store", type=float, default=3.5, help="hole distance from edge in mm") self.argparser.add_argument("--hole_grid_dimension_x", action="store", type=int, default=58, help="width of x hole area") self.argparser.add_argument("--hole_grid_dimension_y", action="store", type=int, default=49, help="width of y hole area") self.argparser.add_argument("--hole_diameter", action="store", type=float, default=2.75, help="hole diameters") # i/o holes self.argparser.add_argument("--netusb_z", action="store", type=int, default=18, help="height of the net/usb hole mm") self.argparser.add_argument("--netusb_x", action="store", type=int, default=53, help="width of the net/usb hole in mm") # features self.argparser.add_argument( "--stable", action='store', type=boolarg, default=False, help= "draw some holes to put a 1/4\" dowel through at the base and top") self.argparser.add_argument( "--switch", action='store', type=boolarg, default=False, help= "adds an additional vertical segment to hold the switch in place, works best w/ --stable" )
def __init__(self): Boxes.__init__(self) self.buildArgParser("sx", "sy", "h", "outside") self.argparser.add_argument("--slot_depth", type=float, default=20, help="depth of the slot in mm") self.argparser.add_argument( "--slot_angle", type=float, default=0, help= "angle at which slots are generated, in degrees. 0° is vertical.", ) self.argparser.add_argument( "--slot_radius", type=float, default=2, help="radius of the slot entrance in mm", ) self.argparser.add_argument( "--slot_extra_slack", type=float, default=0.2, help= "extra slack (in addition to thickness and kerf) for slot width to help insert dividers", ) self.argparser.add_argument( "--divider_bottom_margin", type=float, default=0, help="margin between box's bottom and divider's", ) self.argparser.add_argument( "--divider_upper_notch_radius", type=float, default=1, help="divider's notch's upper radius", ) self.argparser.add_argument( "--divider_lower_notch_radius", type=float, default=8, help="divider's notch's lower radius", ) self.argparser.add_argument( "--divider_notch_depth", type=float, default=15, help="divider's notch's depth", ) self.argparser.add_argument( "--left_wall", type=boolarg, default=True, help="generate wall on the left side", ) self.argparser.add_argument( "--right_wall", type=boolarg, default=True, help="generate wall on the right side", )
def process(q, cmd_thread): # 初始化 pygame.init() updated_frame = False # update a frame settings = Settings("data\program_settings.json") screen = pygame.display.set_mode( (32 * settings.screen_scale + 2 * settings.screen_offset, 28 * settings.screen_scale + 2 * settings.screen_offset)) sbd = ScoreBoard("data\hiscore.csv") passwd = Password(settings, screen) tfunc.print_welcome() team_flights = Group() enemy_flights = Group() team1 = TeamFlight([0.8, 0.8], [3.5, 0.5], [1.5, 1.5], [1.5, 26], settings, screen) team1.print_info() team_flights.add(team1) team2 = TeamFlight([0.8, 0.8], [5.5, 0.5], [5.5, 1.5], [5.5, 26], settings, screen) team2.print_info() team_flights.add(team2) team3 = TeamFlight([0.8, 0.8], [9.5, 0.5], [9.5, 1.5], [9.5, 26], settings, screen) team3.print_info() team_flights.add(team3) team4 = TeamFlight([0.8, 0.8], [11.5, 0.5], [13.5, 1.5], [13.5, 26], settings, screen) team4.print_info() team_flights.add(team4) enemy1 = EnemyFlight([0.8, 0.8], [2, 10], settings, screen, rotate_angle=math.pi / 100) enemy1.set_velocity([0, -0.11]) enemy1.print_info() enemy_flights.add(enemy1) enemy2 = EnemyFlight([0.8, 0.8], [13, 10], settings, screen, rotate_angle=math.pi / 100) enemy2.set_velocity([0, 0.11]) enemy2.print_info() enemy_flights.add(enemy2) enemy3 = EnemyFlight([0.8, 0.8], [2, 18], settings, screen, rotate_angle=math.pi / 100) enemy3.set_velocity([0, -0.11]) enemy3.print_info() enemy_flights.add(enemy3) enemy4 = EnemyFlight([0.8, 0.8], [13, 18], settings, screen, rotate_angle=math.pi / 100) enemy4.set_velocity([0, 0.11]) enemy4.print_info() enemy_flights.add(enemy4) person = Person([0.8, 0.8], [7.5, 0.9], settings, screen) boxes = Boxes(settings, screen) pygame.display.set_caption("Explore Reactor Room") tfunc.update_screen(settings, screen, team_flights, enemy_flights, person, boxes, passwd, sbd) follow_status = False while True: start_time = time.time() period_timeout = True if settings.reset_request: # game reset settings.reset_request = False settings.paused = False settings.init_game_args() if settings.game_mode != 0: # set enemy mode according to game mode settings.enemy_status = settings.game_mode + 3 person.reinit([0.8, 0.8], [7.5, 0.9]) boxes.reinit() team1.reinit([0.8, 0.8], [3.5, 0.5], [1.5, 1.5], [1.5, 26]) team2.reinit([0.8, 0.8], [5.5, 0.5], [5.5, 1.5], [5.5, 26]) team3.reinit([0.8, 0.8], [9.5, 0.5], [9.5, 1.5], [9.5, 26]) team4.reinit([0.8, 0.8], [11.5, 0.5], [13.5, 1.5], [13.5, 26]) enemy1.reinit([0.8, 0.8], [2, 10], rotate_angle=math.pi / 100) enemy1.set_velocity([0, -0.11]) enemy2.reinit([0.8, 0.8], [13, 10], rotate_angle=math.pi / 100) enemy2.set_velocity([0, 0.11]) enemy3.reinit([0.8, 0.8], [2, 18], rotate_angle=math.pi / 100) enemy3.set_velocity([0, -0.11]) enemy4.reinit([0.8, 0.8], [13, 18], rotate_angle=math.pi / 100) enemy4.set_velocity([0, 0.11]) settings.enemy_status_changed = True passwd.generate_passwd() if settings.run_active and not settings.paused: # 帧开始,执行每一帧的预处理 settings.timer = settings.timer + settings.time_period # 计算时间 if settings.clock_1 > 0: # 计算clock1时间 settings.clock_1 -= 1 else: settings.clock_1 = 30 settings.change_font_color() n_flights = len(team_flights.sprites()) + len( enemy_flights.sprites()) #包含自己一共的飞机数 p_all = [[0, 0] for i in range(n_flights)] p_all_direction = [0 for i in range(n_flights)] index = 0 for team in team_flights.sprites(): p_all[index] = team.get_info()[0] p_all_direction[index] = 0 index = index + 1 for enemy in enemy_flights.sprites(): p_all[index] = enemy.get_info()[0] p_all_direction[index] = enemy.get_direction() index = index + 1 # 更新其它状态 person.move() boxes.update_info(settings, person) settings.all_open = boxes.all_open() if settings.all_open and person.get_info( )[0][1] <= 0.5 and not settings.failed: settings.complete = True elif (settings.timer > 480 or person.get_hp_info()[0] <= 0 or settings.out_times * settings.time_period >= 10.0 ) and not settings.complete: settings.failed = True if settings.complete and settings.game_mode != 0 and not settings.hiscore_recorded: settings.hiscore_recorded = True sbd.set_new_hiscore(settings.game_mode - 1, settings.complete_time) # set hiscore sbd.write_hiscore() # 敌方无人机行动 if settings.enemy_status == 0: # 敌方无人机悬停 for enemy in enemy_flights.sprites(): enemy.set_velocity([0, 0]) enemy.move() if settings.enemy_status_changed: enemy.set_attack_args(2.4, 5.0) enemy.attack(person, boxes) elif settings.enemy_status == 1: # 敌方无人机直线运动 for enemy in enemy_flights.sprites(): enemy.move() if settings.enemy_status_changed: enemy.set_attack_args(2.4, 5.0) enemy.attack(person, boxes) elif settings.enemy_status == 2: # 敌方无人机圆周运动 for enemy in enemy_flights.sprites(): enemy.move_circle() if settings.enemy_status_changed: enemy.set_attack_args(2.4, 5.0) enemy.attack(person, boxes) elif settings.enemy_status == 3: # 敌方无人机逼近己方无人机 for enemy, team in zip(enemy_flights.sprites(), team_flights.sprites()): team_p_flight = team.get_info()[0] enemy_p_flight = enemy.get_info()[0] team_p_flight = [ team_p_flight[0] + random.random() * 4 - 2, team_p_flight[1] + 1.5 + random.random() * 4 - 2 ] [vx, vy] = apf.compute_next_step(settings, enemy_p_flight, team_p_flight, [], 0, [], is_team=False) enemy.set_max_v( settings.enemy_mission_args[1][3]) # medium velocity enemy.set_velocity([vx / 1.5, vy / 1.5]) enemy.move() if settings.enemy_status_changed: enemy.set_attack_args(2.4, 5.0) enemy.attack(person, boxes) elif settings.enemy_status >= 4 and settings.enemy_status <= 6: # 执行任务状态 difficulty = settings.enemy_status - 4 # 0:简单 1:中等 2:困难 enemy_mission_args = settings.enemy_mission_args[difficulty] is_first = True flight_index = 0 p_offset = [[0, enemy_mission_args[6]], [enemy_mission_args[6], 0], [-enemy_mission_args[6], 0], [0, -enemy_mission_args[6]]] if boxes.is_in_protect_box( person.get_info()[0]): # 在保护区域内,一架逼近人,三架逼近己方无人机 for enemy, team in zip(enemy_flights.sprites(), team_flights.sprites()): if is_first: is_first = False person_p_flight = person.get_info()[0] enemy_p_flight = enemy.get_info()[0] person_p_flight = [ person_p_flight[0] + random.random() * 4 - 2, person_p_flight[1] + 2 + random.random() * 2 * enemy_mission_args[1] - enemy_mission_args[1] ] [vx, vy] = apf.compute_next_step(settings, enemy_p_flight, person_p_flight, [], 0, [], is_team=False) else: team_p_flight = team.get_info()[0] enemy_p_flight = enemy.get_info()[0] team_p_flight = [ team_p_flight[0] + random.random() * 4 - 2, team_p_flight[1] + 1.5 + random.random() * 2 * enemy_mission_args[1] - enemy_mission_args[1] ] [vx, vy] = apf.compute_next_step(settings, enemy_p_flight, team_p_flight, [], 0, [], is_team=False) enemy.set_max_v(enemy_mission_args[3]) enemy.set_velocity([ vx * enemy_mission_args[0], vy * enemy_mission_args[0] ]) enemy.move() if settings.enemy_status_changed: enemy.set_attack_args(enemy_mission_args[4], enemy_mission_args[5]) enemy.attack(person, boxes) else: # 在保护区域外,四架逼近人 for enemy, team in zip(enemy_flights.sprites(), team_flights.sprites()): person_p_flight = person.get_info()[0] enemy_p_flight = enemy.get_info()[0] person_p_flight = [ person_p_flight[0] + p_offset[flight_index][0] + random.random() * 2 * enemy_mission_args[2] - enemy_mission_args[2], person_p_flight[1] + p_offset[flight_index][1] + random.random() * 2 * enemy_mission_args[2] - enemy_mission_args[2] ] flight_index = flight_index + 1 [vx, vy] = apf.compute_next_step(settings, enemy_p_flight, person_p_flight, [], 0, [], is_team=False) enemy.set_max_v(enemy_mission_args[3]) enemy.set_velocity([ vx * enemy_mission_args[0], vy * enemy_mission_args[0] ]) enemy.move() if settings.enemy_status_changed: enemy.set_attack_args(enemy_mission_args[4], enemy_mission_args[5]) enemy.attack(person, boxes) settings.enemy_status_changed = False # 己方无人机行动 all_reach_final_goal = True # 假定都达到了密码箱位置(final pos) if follow_status: # 跟随主飞机模式 is_first = True index = 0 for team in team_flights.sprites(): if not team.reach_final_goal(): all_reach_final_goal = False if is_first: is_first = False p_flight = team.get_info()[0] if p_flight[1] >= 26.1: #达成目标,恢复原队形 follow_status = False p_goal = [1.5, 26] team.set_goal(p_goal) continue p_leader = p_flight p_goal = [tcmd_temp_line, 27.1] team.set_goal(p_goal) else: if not follow_status: #恢复现场 p_goal[0] = p_goal[0] + 4 team.set_goal(p_goal) continue p_flight = team.get_info()[0] team.set_goal([p_leader[0], p_leader[1] - index]) index = index + tcmd_follow_length p_goal = team.get_goal() [vx, vy] = apf.compute_next_step(settings, p_flight, p_goal, p_all, n_flights, p_all_direction, is_team=True) [vx, vy] = [ vx + random.random() * 0.02 - 0.01, vy + random.random() * 0.01 - 0.005 ] # 速度扰动 team.set_velocity([vx, vy]) team.move() team.heal(person, boxes) else: # 独立模式 for team in team_flights.sprites(): if not team.reach_final_goal(): all_reach_final_goal = False p_flight = team.get_info()[0] p_goal = team.get_goal() [vx, vy] = apf.compute_next_step(settings, p_flight, p_goal, p_all, n_flights, p_all_direction, is_team=True) [vx, vy] = [ vx + random.random() * 0.02 - 0.01, vy + random.random() * 0.01 - 0.005 ] # 速度扰动 team.set_velocity([vx, vy]) team.move() team.heal(person, boxes) if not settings.crack_qrcode: boxes.crack(all_reach_final_goal) # 全部到达目的地,破译密码 # 获取终端指令 if not q.empty(): try: [cmd_content, cmd_args] = q.get().split(' ', 1) if cmd_content == "thenextcontentisthepassword": # 玩家输入密码 try: tcmd_passwd = cmd_args if passwd.check_passwd(tcmd_passwd): print("[Boxes] Password correct.") settings.get_key = True else: print("[Boxes] Password error, try again.") except: print("[Boxes] Password input error.") elif cmd_content == "y": # 更改己方飞机目标点(Y轴平齐)策略 try: [cmd_arg_1, cmd_arg_2] = cmd_args.split(' ') new_goal = float(cmd_arg_1) interval = float(cmd_arg_2) except: new_goal = float(cmd_args) interval = 4.0 x_offset = 7.5 - interval * 1.5 print( "[Team] Move team flights to Y-line %.3f m with interval %.3f m ." % (new_goal, interval)) for team in team_flights.sprites(): team.set_goal([x_offset, new_goal]) x_offset += interval elif cmd_content == "f": # 跟随主飞机运动策略 [cmd_arg_1, cmd_arg_2] = cmd_args.split(' ') tcmd_temp_line = float(cmd_arg_1) tcmd_follow_length = float(cmd_arg_2) print( "[Team] Follow the leader team flight with X-line %.3f m and interval %.3f m ." % (tcmd_temp_line, tcmd_follow_length)) follow_status = True elif cmd_content == "s": # 即刻在前方悬停策略 follow_status = False ahead_length = float(cmd_args) print("[Team] Hover at %.3f m ahead ." % (ahead_length)) for team in team_flights.sprites(): temp_goal = team.get_info()[0] team.set_goal( [temp_goal[0], temp_goal[1] + ahead_length]) else: print("[Team] Unknown command.") except: print("[Team] Command error.") if settings.crack_qrcode and not settings.get_key: cmd_thread.input_passwd_request() # input the password in tcmd tfunc.update_screen(settings, screen, team_flights, enemy_flights, person, boxes, passwd, sbd) # Watch update frame time (for test) #if updated_frame: # updated_frame = False # print("Update time: %.3fs" % (time.time() - start_time)) # 等待更新时间 while period_timeout: tfunc.check_events(settings, screen, cmd_thread, team_flights, enemy_flights, person, sbd) if time.time() - start_time >= 0.04: period_timeout = False updated_frame = True