Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
        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()