Class: GamesAndRpgParadise::Level_1
- Inherits:
-
Chingu::GameState
- Object
- Chingu::GameState
- GamesAndRpgParadise::Level_1
- Defined in:
- lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb
Instance Method Summary collapse
- #collision_check ⇒ Object
- #draw ⇒ Object
-
#initialize ⇒ Level_1
constructor
A new instance of Level_1.
-
#new_meteor ⇒ Object
creates 3 meteors and 3 stars (from objects.rb).
- #screen_shake ⇒ Object
- #setup ⇒ Object
- #update ⇒ Object
Constructor Details
#initialize ⇒ Level_1
Returns a new instance of Level_1.
8 9 10 11 12 13 14 15 16 |
# File 'lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb', line 8 def initialize super $health = 6 # starting health is 6 These constants are updated throughout the game. $score = 0 # starting score is 0 $stars = 0 # starting stars is 0 $weapon = 1 # starting weapon is 1 self.input = { :return => Level_2, :p => Pause, :r => lambda{ current_game_state.setup } } $window. = "Level 1" end |
Instance Method Details
#collision_check ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb', line 61 def collision_check Player.each_collision(Star) do |player, star| # Collide player with stars star.destroy # pick up star $score += 300 # increase score $stars += 1 # add star in star meter (gui.rb) if $stars != 3 # not 3 stars yet? $star_grab.play(0.6) # play normal power-up sound else # 3 stars? $power_up.play(0.6) # play mighty power-up sound $stars = 0 # reset star meter $weapon += 1 # Upgrade Weapon (see Player.fire in objects.rb) end end Bullet.each_collision(Meteor1) do |bullet, meteor| # Collide bullets with meteors Explosion.create(:x => meteor.x, :y => meteor.y) # create explosion Meteor2.create(:x => meteor.x, :y => meteor.y) # create two smaller meteors Meteor2.create(:x => meteor.x, :y => meteor.y) meteor.destroy bullet.destroy $score += 100 # increase score Sound["media/audio/explosion.ogg"].play(0.2) break # makes it so that meteors only split once when hit (thanks to Spooner) end Bullet.each_collision(Meteor2) do |bullet, meteor| # Collide bullets with meteors Explosion.create(:x => meteor.x, :y => meteor.y) # create explosion Meteor3.create(:x => meteor.x, :y => meteor.y) # create two smaller meteors Meteor3.create(:x => meteor.x, :y => meteor.y) meteor.destroy bullet.destroy $score += 100 Sound["media/audio/asplode.ogg"].play(0.2) break # meteors split only once when hit end Bullet.each_collision(Meteor3) do |bullet, meteor| # Collide bullets with meteors Explosion.create(:x => meteor.x, :y => meteor.y) meteor.destroy bullet.destroy $score += 100 Sound["media/audio/asplode.ogg"].play(0.2) break # meteors split only once when hit end Player.each_collision(Meteor1) do |starship, meteor| # Collide player with meteors @player.damage # calls Player.damage (objects.rb); no damage when blinking screen_shake # do screen_shake method (see below) end Player.each_collision(Meteor2) do |starship, meteor| # Collide player with meteors @player.damage screen_shake end Player.each_collision(Meteor3) do |starship, meteor| # Collide player with meteors @player.damage screen_shake end end |
#draw ⇒ Object
134 135 136 137 |
# File 'lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb', line 134 def draw Image["../media/assets/background.png"].draw(0, 0, 0) # Background Image super end |
#new_meteor ⇒ Object
creates 3 meteors and 3 stars (from objects.rb)
52 53 54 55 56 57 58 59 |
# File 'lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb', line 52 def new_meteor # creates 3 meteors and 3 stars (from objects.rb) Meteor1.create(:x => rand * 800, :y => rand * 600) Meteor2.create(:x => rand * 800, :y => rand * 600) Meteor3.create(:x => rand * 800, :y => rand * 600) Star.create Star.create Star.create end |
#screen_shake ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb', line 117 def screen_shake if @shaking == false # if screen shake is cooled down game_objects.each do |object| # move each object right, down, left, up, right, down, left, up object.x += 10 after(30) {object.y += 10} # 30 ms tick time delay between each movement after(60) {object.x -= 10} after(90) {object.y -= 10} after(120) {object.x += 10} after(150) {object.y += 10} after(180) {object.x -= 10} after(210) {object.y -= 10} end @shaking = true # screen_shake won't occur again until this becomes false after(1000) {@shaking = false} # after 1000 ms, screen can shake again end end |
#setup ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb', line 18 def setup super Bullet.destroy_all # destroy lingering GameObjects Player.destroy_all Star.destroy_all Meteor.destroy_all Meteor1.destroy_all Meteor2.destroy_all Meteor3.destroy_all Explosion.destroy_all if @player != nil; @player.destroy; end # if @player exists, destroy it # Player class is defined in objects.rb @player = Player.create(:x => 400, :y => 450, :zorder => Zorder::Main_Character)#(:x => $player_x, :y => $player_y, :angle => $player_angle, :zorder => Zorder::Main_Character) @player.input = {:holding_left => :turn_left, :holding_right => :turn_right, :holding_up => :accelerate, :holding_down => :brake, :space => :fire} @gui = GUI.create(@player) # create GUI @shaking = true # screen_shake cooldown after(1000) {@shaking = false} $music = Song["media/audio/music/stageoids.ogg"] # switch music track to Stageoids theme by ExplodingCookie Sound["media/audio/asplode.ogg"] # cache sound Sound["media/audio/exploded.ogg"] # cache sound @player.cool_down # player cannot be damaged when blinking (Player.cool_down from objects.rb) 1.times { new_meteor } # creates meteors after(500) { # plays game music by ExplodingCookie after brief pause $music.play(true) $music.volume = 1.5 after(4000) {$music.volume = 0.85 after(300) {$music.volume = 0.65 after(300) {$music.volume = 0.35} } } } end |
#update ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb', line 139 def update super collision_check # do collision_check method (see above) $player_x, $player_y = @player.x, @player.y # save player's position, angle and velocity for next level $player_angle, $player_x_vel, $player_y_vel = @player.angle, @player.velocity_x, @player.velocity_y if Meteor1.size + Meteor2.size + Meteor3.size == 0 # if there are no meteors after(1000) { push_game_state(Level_2) } # push Level_2 gamestate end if $health == 0 # if $health is zero, explode player and push GameOver gamestate Explosion.create(:x => @player.x, :y => @player.y) @player.destroy $music.stop after(1000) { push_game_state(Chingu::GameStates::FadeTo.new(GameOver.new, :speed => 10)) } end end |