コード例 #1
0
    def __init__(self):
        pg.init()

        self.display_width = 1200
        self.display_height = 600

        self.game_display = pg.display.set_mode(
            (self.display_width, self.display_height))
        pg.display.set_caption('Yeah Toast!')

        self.clock = pg.time.Clock()

        self.screen_surf = pg.display.get_surface()
        self.x_mid = self.screen_surf.get_rect().centerx
        self.y_mid = self.screen_surf.get_rect().centery

        self.HappyBread = NewtonianItem(game_handle=self,
                                        sprite='resources/HappyBread_wT.png',
                                        coordinates=(self.x_mid, self.y_mid))
        self.Toaster = Item(game_handle=self,
                            sprite='resources/Toaster.png',
                            coordinates=(256, 288))
        self.fleet = Fleet([self.Toaster, self.HappyBread])

        self.mode = {'move': 'accelerate', 'sticky_rotate': False}
コード例 #2
0
ファイル: Simulation.py プロジェクト: jdthorne/spacegame2d
   def __init__(self, seed, fleets):
      App.world.setSeed(seed)

      for fleet in fleets:
         fleet = Fleet.load(fleet)
         team = CombatTeam.CombatTeam(fleet)

         App.world.addCombatTeam(team)
コード例 #3
0
ファイル: MbtaApi.py プロジェクト: idreyn/new-train-tracker
async def vehicle_data_for_routes(route_ids, test_mode=False):
    """Use getv3 to request real-time vehicle data for a given route set"""
    route_ids = normalize_custom_route_ids(route_ids)
    vehicles = await getV3(
        "vehicles",
        {
            "filter[route]": ",".join(route_ids),
            "include": "stop"
        },
    )
    # Iterate vehicles, only send new ones to the browser
    vehicles_to_display = []
    for vehicle in vehicles:
        try:
            is_new = Fleet.car_array_is_new(vehicle["route"]["id"],
                                            vehicle["label"].split("-"),
                                            test_mode)
            if not is_new:
                continue
            vehicles_to_display.append({
                "label":
                vehicle["label"],
                "route":
                derive_custom_route_name(vehicle),
                "direction":
                vehicle["direction_id"],
                "latitude":
                vehicle["latitude"],
                "longitude":
                vehicle["longitude"],
                "currentStatus":
                vehicle["current_status"],
                "stationId":
                vehicle["stop"]["parent_station"]["id"],
                "isNewTrain":
                is_new,
            })
        except (KeyError, TypeError):
            continue
    return vehicles_to_display
コード例 #4
0
class Game:
    def __init__(self):
        pg.init()

        self.display_width = 1200
        self.display_height = 600

        self.game_display = pg.display.set_mode(
            (self.display_width, self.display_height))
        pg.display.set_caption('Yeah Toast!')

        self.clock = pg.time.Clock()

        self.screen_surf = pg.display.get_surface()
        self.x_mid = self.screen_surf.get_rect().centerx
        self.y_mid = self.screen_surf.get_rect().centery

        self.HappyBread = NewtonianItem(game_handle=self,
                                        sprite='resources/HappyBread_wT.png',
                                        coordinates=(self.x_mid, self.y_mid))
        self.Toaster = Item(game_handle=self,
                            sprite='resources/Toaster.png',
                            coordinates=(256, 288))
        self.fleet = Fleet([self.Toaster, self.HappyBread])

        self.mode = {'move': 'accelerate', 'sticky_rotate': False}

        # self.events = []

    #   -----------------------------------------------------------------------

    def game_loop(self):

        closed = False

        print('Debug output:')

        while not closed:

            events = pg.event.get()
            for event in events:
                if event.type == pg.QUIT:
                    closed = True

            key = pg.key.get_pressed()

            # special controls
            # ----------------
            # modes:
            if key[pg.K_1]:
                self.mode['move'] = "accelerate"
            if key[pg.K_2]:
                self.mode['move'] = "translate"
                self.HappyBread.reset_velocity()
            # freeze and reset
            if key[pg.K_f]:
                self.HappyBread.freeze()
            if key[pg.K_r]:
                self.HappyBread.reset_position(self.x_mid, self.y_mid)

            # Standard player controls:
            if self.mode['move'] == "translate":
                self.translate_control(self.HappyBread, key)
            elif self.mode['move'] == "accelerate":
                self.accelerate_control(self.HappyBread, key)

            # should add bouncing off of objects/walls

            # collision detection:
            if self.Toaster.collides_with(self.HappyBread):
                print("collision at " + self.HappyBread.center_to_string())
                self.HappyBread.apply_force(6, 0)

            self.fleet.update()

            self.game_display.fill(black)
            self.show_all_items()

            pg.display.update()
            self.clock.tick(48)  # Hobbit framerate

    #   -----------------------------------------------------------------------

    @staticmethod
    def show(item):
        item.show()

    def show_all_items(self):
        for item in self.fleet.items:
            item.show()

    #   -----------------------------------------------------------------------

    @staticmethod
    def translate_control(item,
                          key,
                          translation_sensitivity=10,
                          rotation_sensitivity=6.4):
        # these controls give the bread (or any item) up/down and tumble left/right motion
        # ground_axis = self.display_height - item.sprite.get_rect().height / 2
        if key[pg.K_w]:
            item.translate(0, -translation_sensitivity)
        if key[pg.K_a]:
            item.rotate(rotation_sensitivity)
            item.translate(-translation_sensitivity, 0)
        if key[pg.K_s]:
            # if item.center[1] < ground_axis:
            item.translate(0, translation_sensitivity)
        if key[pg.K_d]:
            item.rotate(-rotation_sensitivity)
            item.translate(translation_sensitivity, 0)
        if key[pg.K_UP]:
            item.translate_forward(translation_sensitivity)
        if key[pg.K_LEFT]:
            item.rotate(rotation_sensitivity)
        if key[pg.K_DOWN]:
            item.translate_forward(-translation_sensitivity)
        if key[pg.K_RIGHT]:
            item.rotate(-rotation_sensitivity)

        # mouse controls
        if pg.mouse.get_pressed()[0]:
            spot = pg.mouse.get_pos()
            print(spot)
            item.teleport(spot[0], spot[1])
            item.rotate(item.omega)
            # silly rotation, press freeze to stop it

    def accelerate_control(self,
                           item,
                           key,
                           accelerate_sensitivity=0.38,
                           rotational_accelerate_sensitivity=0.5,
                           target_rotation=8):
        # these controls give the item smooth wasd acceleration controls and left/right rotational acceleration

        # keyboard controls
        # -----------------
        # non-relative up, down, left, right:
        if key[pg.K_w]:
            item.accelerate(0, -accelerate_sensitivity)
        if key[pg.K_a]:
            item.accelerate(-accelerate_sensitivity, 0)
        if key[pg.K_s]:
            item.accelerate(0, accelerate_sensitivity)
        if key[pg.K_d]:
            item.accelerate(accelerate_sensitivity, 0)
        # angular acceleration:
        if key[pg.K_q] or key[pg.K_u]:
            item.accelerate(0, 0, rotational_accelerate_sensitivity)
            self.mode['sticky_rotate'] = False
        if key[pg.K_e] or key[pg.K_o]:
            item.accelerate(0, 0, -rotational_accelerate_sensitivity)
            self.mode['sticky_rotate'] = False
        # relative forward, backward:
        if key[pg.K_i] or key[pg.K_UP]:
            item.accelerate_forward(accelerate_sensitivity)
        if key[pg.K_k] or key[pg.K_DOWN]:
            item.accelerate_forward(-accelerate_sensitivity)
        # sticky (non-accelerating) rotation:
        if key[pg.K_LEFT] or key[pg.K_j]:
            item.smooth_rotate(target_rotation, sensitivity=16)
            self.mode['sticky_rotate'] = True
        if key[pg.K_RIGHT] or key[pg.K_l]:
            item.smooth_rotate(-target_rotation, sensitivity=16)
            self.mode['sticky_rotate'] = True
        # reset rotation smoothly back to zero:
        if self.mode['sticky_rotate']:
            if not (key[pg.K_LEFT] or key[pg.K_j] or key[pg.K_RIGHT]
                    or key[pg.K_l]):
                item.smooth_rotate(0, sensitivity=30)

        # mouse controls
        if pg.mouse.get_pressed()[0]:
            spot = pg.mouse.get_pos()
            item.smooth_translate(spot[0], spot[1])