def __init__(self, config, configDir, imageDir): """Initialize object to show frog lifes. Args: config: Configuration found in game.conf section [LifeIndicator]. ConfigParser object. configDir: Game settings directory. String. imageDir: Image directory. String. """ self.configDir = configDir self.imageDir = imageDir font = pygame.font.Font(None, 27) self.text = font.render('Lifes:', True, pygame.Color('white')) pos = config.get('textPosition').split(',') self.textPosition = (int(pos[0]), int(pos[1])) self.all = [] for i in range(1, MAX_LIFES + 1): position = config.get('pos' + str(i)) if position: position = position.split(',') posX = int(position[0]) posY = int(position[1]) self.all.append( AnimatedSprite('life_crystal.conf', self.configDir, self.imageDir, (posX, posY), isActive=True)) self.crystalGroup = pygame.sprite.Group(self.all)
def main(): global images global player_images global player global all_player_sprites global asteroid global asteroid_images global all_asteroid_sprites player_images = load_spritesheet_from_image( "./demo7images/bluebird-3-Sheet.gif", 64, 64, 4, 21) player = AnimatedSprite(position=(100, 100), images=player_images) asteroid_images = load_spritesheet_from_image( "./demo7images/asteroid1-Sheet.gif", 64, 64, 25, 26) asteroid = AnimatedSprite(position=(300, 100), images=asteroid_images) all_player_sprites = pygame.sprite.Group(player) all_asteroid_sprites = pygame.sprite.Group(asteroid) while True: # main game loop dt = clock.tick(FPS) / 1000 # Amount of seconds between each loop. for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: pressed = pygame.key.get_pressed() handle_keypress(pressed) draw_screen() all_asteroid_sprites.update(dt) all_asteroid_sprites.draw(display_surface) all_player_sprites.update(dt) all_player_sprites.draw(display_surface) pygame.display.update()
global window_width, window_height debug_panel_text = font.render(f"abcd", True, Color.white, Color.black) text_rect = debug_panel_text.get_rect() text_rect.center = (window_width // 8, window_height // 8) display_surface.blit(debug_panel_text, text_rect) def draw_screen(): global display_surface display_surface.fill(Color.black) #draw_debug_panel() pygame.display.update() images = load_images() player = AnimatedSprite(position=(100, 100), images=images) all_sprites = pygame.sprite.Group(player) player_velocity = 1 # init starfield stars = [] num_stars = 1000 total_window_widths = 10 width_max = window_width * total_window_widths for i in range(num_stars): rx = randint(0, width_max) ry = randint(0, window_height) stars.append([rx, ry]) def draw_stars():
def __init__(self, startX, startY, screenWidth, screenHeight, configDir, imageDir): """Initialize main character object. Args: startX: X coordinate of the initial frog position. Integer. startY: Y coordinate of the initial frog position. Integer. screenWidth: Game screen width. Integer screenHeight: Game screen heigh. Integer. frameRate: Frame rate for animations. configDir: Game settings directory. String. imageDir: Image directory. String. """ self.configDir = configDir self.imageDir = imageDir self.screenWidth = screenWidth self.screenHeight = screenHeight self.pressedUp = False self.pressedDown = False self.pressedLeft = False self.pressedRight = False # Initial frog position. self.position = (startX, startY) self.startPosition = self.position # Frog animation to jump up. self.jumpUpAnim = AnimatedSprite('animation_frog_up.conf', self.configDir, self.imageDir, self.position) # Frog animation to move left when facing up. self.jumpUpLeftAnim = AnimatedSprite('animation_frog_left.conf', self.configDir, self.imageDir, self.position) # Frog animation to move right when facing up. self.jumpUpRightAnim = AnimatedSprite('animation_frog_right.conf', self.configDir, self.imageDir, self.position) # Frog animation to jump down. #self.jumpDownAnim = AnimatedSprite('animation_frog_up.conf', self.jumpDownAnim = AnimatedSprite('animation_frog_down.conf', self.configDir, self.imageDir, self.position) # Frog animation to move left when facing down. self.jumpDownLeftAnim = AnimatedSprite('animation_frog_down_left.conf', self.configDir, self.imageDir, self.position) # Frog animation to move rigt when facing down. self.jumpDownRightAnim = AnimatedSprite( 'animation_frog_down_right.conf', self.configDir, self.imageDir, self.position) # Initial frog position. self.anim = self.jumpUpAnim # All sprites to animate at the same time for the frog. self.all = pygame.sprite.Group(self.jumpUpAnim) # Every sprite can only be moved in 4 directions in 2D space. This # attribute tells us, which animation is currently running: 'up', # 'down', 'left', 'right' and None. self.activeAnimation = 'up' # Is frog facing up? Required to know which animation to show when # animating stepping sideways. self.isFacingUp = True self.collisionRect = self.anim.collisionRect # Image to show frog after being run over by a car. self.deadFrog = AnimatedSprite('animation_dead.conf', self.configDir, self.imageDir, self.position) # Image to show when frog drawned in the river. self.drownedFrog = AnimatedSprite('animation_drowning.conf', self.configDir, self.imageDir, self.position) self.drownedFrog.cycles = 1 # Was frog run over by a car? self.isDead = False # Has frog drowned? self.isDrowned = False # Frog is not dead, but should not move. Used to wait until user # presses <enter> to load next level. self.isLocked = False # Amount of lifes frog has. self.lifesLeft = 3 # Boolean to mark that ran over frog image is being shown. self.showingDeadFrog = False # Boolean to mark that drowned frog image is being shown. self.showingDrownedFrog = False self.runningDrowningAnim = False # Debug option. self.drawCollisionRects = False