class Pacman::LevelRenderer
main renderer class
Public Class Methods
field_size()
click to toggle source
# File lib/pacman/level_renderer.rb, line 5 def field_size 50 end
new(window, rel_path = '')
click to toggle source
# File lib/pacman/level_renderer.rb, line 18 def initialize(window, rel_path = '') @ghosts_renderer = GhostsRenderer.new(window, rel_path) # initialize graphics @font = Gosu::Font.new(window, 'Arial', 18) @field_size = 50 @background = Gosu::Image.new(window, rel_path + 'media/bg2_2.jpg', false) @wall = Gosu::Image.new(window, rel_path + 'media/wall.png') @pellet = Gosu::Image.new(window, rel_path + 'media/pellet.png') @power_pellet = Gosu::Image.new(window, rel_path + 'media/power_pellet.png') @player_left = Gosu::Image.load_tiles(window, rel_path + 'media/pacman_left.png', 50, 50, false) @player_right = Gosu::Image.load_tiles(window, rel_path + 'media/pacman_right.png', 50, 50, false) @player_up = Gosu::Image.load_tiles(window, rel_path + 'media/pacman_up.png', 50, 50, false) @player_down = Gosu::Image.load_tiles(window, rel_path + 'media/pacman_down.png', 50, 50, false) @timer = 0 end
x_min()
click to toggle source
# File lib/pacman/level_renderer.rb, line 9 def x_min 50 end
y_min()
click to toggle source
# File lib/pacman/level_renderer.rb, line 13 def y_min 50 end
Public Instance Methods
render(level, state)
click to toggle source
# File lib/pacman/level_renderer.rb, line 42 def render(level, state) @timer += 1 next_frame = @timer % 5 == 0 if next_frame level.player.animation_index = (level.player.animation_index + 1) % @player_down.size end @background.draw(0, 0, 0) render_objects(level, state) # draw player x_pos = LevelRenderer.x_min + level.player.x * LevelRenderer.field_size y_pos = LevelRenderer.y_min + level.player.y * LevelRenderer.field_size @ghosts_renderer.render(level, state, next_frame) case level.player.direction when :left @player_left[level.player.animation_index].draw(x_pos, y_pos, 1) when :right @player_right[level.player.animation_index].draw(x_pos, y_pos, 1) when :up @player_up[level.player.animation_index].draw(x_pos, y_pos, 1) when :down @player_down[level.player.animation_index].draw(x_pos, y_pos, 1) end return unless (state == :win) @font.draw('END', 100, 100, 1.0, 4.0, 4.0) score = level.pellet_count - level.pellets_left @font.draw("Score: #{score} / #{level.pellet_count}", 100, 150, 1.0, 1.5, 1.5) end
Private Instance Methods
render_objects(level, _state)
click to toggle source
# File lib/pacman/level_renderer.rb, line 82 def render_objects(level, _state) level.each_with_position do |x, y, obj| x_pos = LevelRenderer.x_min + x * LevelRenderer.field_size y_pos = LevelRenderer.y_min + y * LevelRenderer.field_size case when obj.class == Wall @wall.draw(x_pos, y_pos, 1) when obj.class == Pellet @pellet.draw(x_pos, y_pos, 1) when obj.class == PowerPellet @power_pellet.draw(x_pos, y_pos, 1) end end return if level.ghosts.empty? end