def __test_trace(): drawing.init() craft = aircraft(7) craft.x, craft.y, craft.d, craft.v = 400, 300, 0, 1 craft.sx, craft.sy, craft.sd, craft.sv = 500, 300, 0, 3 time_delay = 1000 / 50 time_slap = timenow() + time_delay frame = 0 while drawing.wait() != -1: current = timenow() if current < time_slap: continue time_slap += time_delay frame += 1 # 逻辑贞 if frame > 0: sdir = drawing.keyboard_dir() craft.sd = sdir # 显示贞 craft.shadow_move(1) if drawing.keyon(' ') == 0: craft.trace(1) drawing.clean() drawing.__update_stars() craft.draw_shadow() craft.draw_craft() drawing.update() drawing.close()
def main(): key_bindings = keyboard_input.init_keyboard(GAME_STATE) drawing.init(key_bindings) num_frames = 0 last_time = time.perf_counter() fps = 0 while True: run() # FPS stuff new_time = time.perf_counter() if new_time - last_time >= 1: last_time = new_time fps = num_frames num_frames = 0 if True: drawing.print_fps(fps) num_frames += 1 drawing.main_loop_update()
def process(self): if self.state == 1: self.client.process() if self.client.status() == 2: print 'ok' data = events.cs_login().marshal() self.client.send(data) self.state = 2 if self.client.status() == 0: print 'faild' self.state = -1 if self.state == 2: self.client.process() if self.client.status() != 2: print 'disconnected' self.state = -1 data = self.client.recv() if len(data) > 0: sc_confirm = events.sc_confirm() if 1: cmd = struct.unpack('=H', data[:2])[0] sc_confirm.unmarshal(data) self.myself = sc_confirm.entity self.state = 3 self.timebase = timenow() self.timesvr = sc_confirm.timebase self.frame = self.__current() / FRAME_DELAY self.frameslap = (self.frame + 1) * FRAME_DELAY self.recvmsg = [] print 'login as P%d tb=%d' % (self.myself + 1, sc_confirm.timebase) else: print 'login failed' self.client.close() self.state = -1 if self.state == 3: self.craft = self.crafts[self.myself] self.craft.initpos() self.craft.mode = 1 drawing.init() drawing.caption('P%d' % (self.myself + 1)) self.state = 4 self.pingtime = self.__current() + 5000 if self.state == 4: self.client.process() for i in xrange(10): drawing.win.process() exitflag = 0 if drawing.keyon(drawing.VK_ESCAPE): self.client.close() if drawing.win.beclosing() or self.client.status() != 2: drawing.close() self.client.close() self.state = -1 self.current = self.__current() current = self.current if current >= self.pingtime: self.pingtime = current + 1000 ping = events.cs_ping(current) self.client.send(ping.marshal()) while 1: data = self.client.recv() if data == '': break if len(data) < 2: continue cmd = struct.unpack('=H', data[:2])[0] if cmd != events.SC_PING: self.recvmsg.append(data) else: ping = events.sc_ping() try: ping.unmarshal(data) delta = current - ping.current drawing.record_ping(delta) except: pass while current >= self.frameslap: self.frame += 1 self.frameslap += FRAME_DELAY self.ontimer()
def main(): pygame.init() drawing.init() screen_data = drawing.ScreenData( pygame.display.set_mode(config.SCREEN_RES, pygame.RESIZABLE), (0, 0)) input_data = InputData() path_data = pathing.PathData() selection = None lots = [] city = generation.generate() city_labels = [] for road in city.roads: city_labels.append((str(road.global_id), road.point_at(0.5))) prev_time = pygame.time.get_ticks() running = True while running: if pygame.time.get_ticks() - prev_time < 16: continue input_data.pos = pygame.mouse.get_pos() input_data.pressed = pygame.mouse.get_pressed() prev_time = pygame.time.get_ticks() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.VIDEORESIZE: screen_data.screen = pygame.display.set_mode( event.dict["size"], pygame.RESIZABLE) config.SCREEN_RES = event.dict["size"] elif event.type == pygame.KEYDOWN: if event.key == pygame.K_g: debug.SHOW_ROAD_ORDER = False city_labels = [] selection = None path_data = pathing.PathData() city = generation.generate() for road in city.roads: city_labels.append( (str(road.global_id), road.point_at(0.5))) if event.key == pygame.K_b: lots = build_gen.gen_lots(city) # Pathing elif event.key == pygame.K_z: path_data.start = road_near_point(input_data.pos, screen_data, city) elif event.key == pygame.K_x: path_data.end = road_near_point(input_data.pos, screen_data, city) elif event.key == pygame.K_c: pathing.astar(path_data, city.roads) elif event.key == pygame.K_v: pathing.dijkstra(path_data, city.roads) # Debug Views else: handle_keys_debug(event.key) elif event.type == pygame.MOUSEBUTTONDOWN: # Zooming if event.button == 4: screen_data.zoom_in(input_data.pos) elif event.button == 5: screen_data.zoom_out(input_data.pos) # Dragging & Selection if input_data.prev_pressed[0]: if input_data.pressed[0]: # Continue drag screen_data.pan = vectors.add( screen_data.pan, vectors.sub(input_data.pos, input_data.drag_prev_pos)) input_data.drag_prev_pos = input_data.pos else: if input_data.pos == input_data.drag_start: # Select road selection = selection_from_road( road_near_point(input_data.drag_start, screen_data, city)) # Clear out drag information input_data.drag_start = None input_data.drag_prev_pos = (0, 0) else: if input_data.pressed[0]: # Drag started input_data.drag_start = input_data.pos input_data.drag_prev_pos = input_data.pos # Drawing screen_data.screen.fill((0, 0, 0)) if debug.SHOW_HEATMAP: drawing.draw_heatmap(50, city, screen_data) if debug.SHOW_SECTORS: drawing.draw_sectors(screen_data) color = (125, 255, 50) for poly in lots: temp = [] for point in poly: temp.append( drawing.world_to_screen(point, screen_data.pan, screen_data.zoom)) pygame.draw.polygon(screen_data.screen, color, temp) color = (color[0], color[1] - 11, color[2] + 7) if color[1] < 0: color = (color[0], 255, color[2]) if color[2] > 255: color = (color[0], color[1], 0) # Draw roads if debug.SHOW_ISOLATE_SECTOR and selection is not None: for sector in sectors.from_seg(selection.road): drawing.draw_all_roads(city.sectors[sector], screen_data) elif debug.SHOW_MOUSE_SECTOR: mouse_sec = sectors.containing_sector( drawing.screen_to_world(input_data.pos, screen_data.pan, screen_data.zoom)) if mouse_sec in city.sectors: drawing.draw_all_roads(city.sectors[mouse_sec], screen_data) else: tl_sect = sectors.containing_sector( drawing.screen_to_world((0, 0), screen_data.pan, screen_data.zoom)) br_sect = sectors.containing_sector( drawing.screen_to_world(config.SCREEN_RES, screen_data.pan, screen_data.zoom)) for x in range(tl_sect[0], br_sect[0] + 1): for y in range(tl_sect[1], br_sect[1] + 1): if (x, y) in city.sectors: drawing.draw_all_roads(city.sectors[(x, y)], screen_data) drawing.draw_roads_selected(selection, screen_data) drawing.draw_roads_path(path_data, screen_data) if debug.SHOW_INFO: debug_labels = debug.labels(screen_data, input_data, path_data, selection, city) for x in range(len(debug_labels[0])): label_pos = (10, 10 + x * 15) drawing.draw_label_screen((debug_labels[0][x], label_pos), screen_data, 1) for x in range(len(debug_labels[1])): label_pos = (config.SCREEN_RES[0] - 10, 10 + x * 15) drawing.draw_label_screen((debug_labels[1][x], label_pos), screen_data, -1) if debug.SHOW_ROAD_ORDER: for label in city_labels: drawing.draw_label_world(label, screen_data, 1) pygame.display.flip()
pass def read_files(file_names): """ Try to open every file in file_names, parse inputs line by line. Note: This in effect concatenates the files. Echoes file name when opening. Writes an error message if the file could not be opened. """ # Go over each file, parse line by line. for fn in file_names: try: with open(fn, 'r') as fd: drawing.text_out(f"Reading file: '{fn}'") for ln, line in enumerate(fd, start=1): command(line, ln) except FileNotFoundError: drawing.error_out(f"No such file '{fn}'") if __name__ == "__main__": # Qt takes over when GUI is started; this line makes sure Ctrl-C can be # used to interrupt in shells which supports it. signal.signal(signal.SIGINT, signal.SIG_DFL) # Set up GUI drawing.init() # Assume any parameters are command files. read_files(sys.argv[1:]) # Start GUI main loop drawing.start()