def new(self): # start a new game self.all_sprites = pg.sprite.Group() self.tilesize = TILESIZE # the offset moves the camera over the board self.offset = BOARD_CENTER self.tilemap = Tilemap(self) self.camera = Camera(self) for building in self.tilemap.players[ self.tilemap.current_player]["buildings"]: self.camera.apply_camera(self, building.pos) # self.last_time = 0 self.mx0, self.my0, self.mx1, self.my1 = 0, 0, 0, 0 self.mouse_pos = [] self.enable_ui = True self.show_path = False self.tooltips = True self.camera_counter = 0 # self.offset[0] = self.tilemap.unit.pos[1] * 64 - 8*64-32 # self.offset[1] = self.tilemap.unit.pos[0] * 64 - 6*64-32 # self.camera = Camera(self, self.tilemap.unit.pos) # self.offset[0] = self.camera.camera_x # self.offset[1] = self.camera.camera_y self.clicked = False self.right_click = False self.run()
def run_game(): """Main entry point for Py-Climber""" # Startup pygame object pygame.init() random.seed() # Load our settings object and image resources, disk I/O that can be done in advance settings = Settings() image_res = ImageResources(settings) # Create the main screen to render to based on settings screen = pygame.display.set_mode((settings.screen_width, settings.screen_height)) pygame.display.set_caption(settings.caption) # Create a 2D tilemap - this takes a list of indices and an image list to produce a tiled surface tile_map = Tilemap(settings, screen, settings.map_indicies, image_res.tile_images, image_res.block_image) # Overwrite default indices with generated map tile_map.generate_basic_map(settings.map_number_floors , settings.map_number_subfloors) # Create player player = Player(settings, screen, image_res.player_sprite_images, tile_map) # Create an enemies list enemies = [] # Reset the game gf.reset_game(settings, image_res, screen, player, tile_map, enemies) # Use pygame's simple loop management for a fixed 30 FPS clock = pygame.time.Clock() new_enemy_counter = 0 while True: # Should make sure each frame spends at least 1/30 seconds in this loop # downside is wasted sleep on fast hardware and slow hardware will lag # but slow hardware will always lag and implementing a time-delta based # loop for this simple game is IMHO overkill. clock.tick(30) # Process system events (key-presses, joystick, etc) gf.check_events(settings, screen, image_res, player, tile_map, enemies) # Update the game (this will update all sub-object and render them to the screen) gf.update_screen(settings, screen, image_res, tile_map, player, enemies) if player.reset_game: gf.reset_game(settings, image_res, screen, player, tile_map, enemies) new_enemy_counter += 1 if new_enemy_counter >= settings.enemy_generation_rate: new_enemy_counter = 0 gf.generate_new_random_blob(settings, screen, image_res.enemy_blob_images, tile_map, enemies)
def __init__(self, room_map, tileset, objects=[], camera=None, connections=[None, None, None, None]): # type: (list, str, list, Camera, list) -> None self.tilemap = Tilemap.Tilemap(tileset, map_size=(len(room_map), len(room_map[0]))) self.room_map = room_map self.size = [len(room_map), len(room_map[0])] self.objects = objects # Objects in the room self.camera = camera # Camera (we have to draw relative to it) self.connections = connections # Connections (used when the player changes the screen he is in) self.light_map = None self.temp_light_map = None self.display_surface = None self.collisions = []
def __init__(self, display): super(PlayScene, self).__init__(display) display.clear() self.log_messages = [] self.tilemap = Tilemap() self.draw_frame(display) self.camera = Camera(35, 15, self.tilemap.width, self.tilemap.height) self.draw_view(display) self.player = Player(self.camera.half_width, self.camera.half_height) self.player_id = 0 self.entities = self.tilemap.entities self.entities.append(self.player) rod = FishingRod() (rod.x, rod.y) = (10, 15) axe = Axe() (axe.x, axe.y) = (28, 5) self.entities.insert(0, rod) self.entities.insert(0, axe) self.draw_entities(display) self.draw_inventory(display) display.flush()