def handleEvent(self, event): # Handle home screen events: if globals.home_lock == True: if event.type == sdl2.SDL_QUIT: globals.home_lock = False globals.running = False if event.type == sdl2.SDL_KEYDOWN: if event.key.keysym.sym == sdl2.SDLK_p: globals.home_lock = False self.render_play() # Render game play screen elif globals.game_over_lock == True: if event.type == sdl2.SDL_QUIT: globals.game_over_lock = False globals.running = False if event.type == sdl2.SDL_KEYDOWN: if event.key.keysym.sym == sdl2.SDLK_p: globals.game_over_lock = False # Handle game play events: else: if event.type == sdl2.SDL_QUIT: globals.running = False if event.type == sdl2.SDL_KEYDOWN: if event.key.keysym.sym == sdl2.SDLK_LEFT: self.salmon.velocity.vx = -6 elif event.key.keysym.sym == sdl2.SDLK_RIGHT: self.salmon.velocity.vx = 6 elif event.key.keysym.sym == sdl2.SDLK_UP: self.salmon.velocity.vy = -3 elif event.key.keysym.sym == sdl2.SDLK_DOWN: self.salmon.velocity.vy = 6 elif event.key.keysym.sym == sdl2.SDLK_ESCAPE: globals.running = False elif event.key.keysym.sym == sdl2.SDLK_SPACE: if globals.pause == False: globals.pause = True self.sp_pauseL = self.factory.from_color( (255, 255, 255, 0), (50, 100)) self.pause_barL = sprite_classes.Inert( self.world, self.sp_pauseL, 300, 300) self.pause_barL.setDepth(5) self.sp_pauseR = self.factory.from_color( (255, 255, 255, 0), (50, 100)) self.pause_barR = sprite_classes.Inert( self.world, self.sp_pauseR, 370, 300) self.pause_barR.setDepth(5) elif globals.pause == True: globals.pause = False elif event.type == sdl2.SDL_KEYUP: if event.key.keysym.sym in (sdl2.SDLK_LEFT, sdl2.SDLK_RIGHT, sdl2.SDLK_UP, sdl2.SDLK_DOWN): self.salmon.velocity.vx -= 1 self.salmon.velocity.vy -= 1
def render_score(self): self.sp_score = self.factory.from_text( str(self.score), fontmanager=fonts.make_font('Score')) self.score_obj = sprite_classes.Inert(self.world, self.sp_score, 84, 18) self.score_obj.setDepth(5) self.score += 1
def __init__(self, name, winx, winy): super(SalmonRun, self).__init__(name, winx, winy) # Init sprites: self.sp_blank = self.factory.from_image( RESOURCES.get_path('blank.bmp')) self.sp_dashboard = self.factory.from_image( RESOURCES.get_path('dashboard.bmp')) # Init HUD sprites: self.sp_energy = self.factory.from_color((0, 255, 0, 0), (155, 30)) self.energy = sprite_classes.Inert(self.world, self.sp_energy, 625, 10) self.energy.setDepth(5) # Init sprite class instances: (except for the special salmon...) self.blank = sprite_classes.Inert(self.world, self.sp_blank, 0, 0) self.dashboard = sprite_classes.Inert(self.world, self.sp_dashboard, 0, 0) # Init enemy sizes array: self.esizes = [x for x in range(0, 15)]
def init_energy_bar(self): self.render_energy(155) self.sp_energybar_border = self.factory.from_image( RESOURCES.get_path('energy_bar_border.bmp')) self.energybar_border = sprite_classes.Inert(self.world, self.sp_energybar_border, 623, 8) self.energybar_border.setDepth(5)
def render_meals(self): self.sp_skull = self.factory.from_image( RESOURCES.get_path('skull.bmp')) self.skulls = [sprite_classes.Inert(self.world, self.sp_skull) ] * self.salmon.meals.meals x = 340 y = 15 for skull in self.skulls: skull.setPos(x, y) skull.setDepth(5) x += 30
def add_image_sprite(self, filename, s_type, x, y, depth): self.sp_new_sprite = self.factory.from_image( RESOURCES.get_path(filename)) if s_type == 'inert': self.new_sprite = sprite_classes.Inert(self.world, self.sp_new_sprite, x, y) elif s_type == 'player': self.new_sprite = sprite_classes.Player(self.world, self.sp_new_sprite, x, y) elif s_type == 'enemy': self.new_sprite = sprite_classes.Enemy(self.world, self.sp_new_sprite, x, y) self.new_sprite.setDepth(depth)
def render_energy(self, w): if self.salmon.energy.energy > 103: color = (0, 255, 0, 0) elif self.salmon.energy.energy > 51: color = (237, 239, 0, 0) else: color = (255, 0, 0, 0) if w > 155: w = 155 self.salmon.energy.energy = 155 self.sp_energy = self.factory.from_color(color, (w, 30)) self.energy_bar = sprite_classes.Inert(self.world, self.sp_energy, 625, 10) self.energy_bar.setDepth(5)
def render_home(self): music.play_sample('Bubbles.wav', True) self.sp_title = self.factory.from_text( 'SALMON RUN', fontmanager=fonts.make_font('Title')) self.title = sprite_classes.Inert(self.world, self.sp_title, 66, 110) self.title.setDepth(7) self.sp_play = self.factory.from_text( 'PRESS "P" TO PLAY', fontmanager=fonts.make_font('Play')) self.play = sprite_classes.Inert(self.world, self.sp_play, 150, 330) self.play.setDepth(7) self.blank.setDepth(6) # Display size guide: x = 110 y = 450 size_guide_sprites = [] for i in range(15): self.add_image_sprite('enemy' + str(i) + '.bmp', 'inert', x, y, 7) size_guide_sprites.append(self.new_sprite) if i < 5: x += 30 elif i < 10: x += 40 else: x += 50 # Wait for user-input: while globals.home_lock == True: events = sdl2.ext.get_events() for event in events: self.handleEvent(event) self.world.process() # Clean up: self.blank.setDepth(0) for sprite in size_guide_sprites: self.delete(sprite) self.delete(self.title) self.delete(self.play)
def render_play(self): music.play_music('Chiptune.wav', -1) # Play background music music.play_sample('Bubbles.wav', True) self.init_salmon(450, 550) self.init_energy_bar() # Init river & riverbanks then bring up the HUD: self.sp_river = self.factory.from_image( RESOURCES.get_path('river.bmp')) self.river = sprite_classes.Inert(self.world, self.sp_river, 0, 50) self.river.setDepth(1) self.sp_river_top = self.factory.from_image( RESOURCES.get_path('top.bmp')) self.sp_river_bottom = self.factory.from_image( RESOURCES.get_path('bottom.bmp')) self.river_top = sprite_classes.Enemy(self.world, self.sp_river_top, (0, 1), 0, -550, False) self.river_bottom = sprite_classes.Enemy(self.world, self.sp_river_bottom, (0, 1), 0, 50, False) self.river_top.setDepth(2) self.river_bottom.setDepth(2) self.dashboard.setDepth(4) self.world.process()
def add_text_sprite(self, text, font_type, x, y, depth): self.sp_new_text = self.factory.from_text( text, fontmanager=fonts.make_font(font_type)) self.new_text = sprite_classes.Inert(self.world, self.sp_new_text, x, y) self.new_text.setDepth(depth)