Class: GamesAndRpgParadise::Level_1

Inherits:
Chingu::GameState
  • Object
show all
Defined in:
lib/games_and_rpg_paradise/gui/gosu/chinguroids/levels.rb

Instance Method Summary collapse

Constructor Details

#initializeLevel_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.caption = "Level 1"
end

Instance Method Details

#collision_checkObject



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

#drawObject



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_meteorObject

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_shakeObject



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

#setupObject



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

#updateObject



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