gosu-examples 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/gosu-examples +3 -5
  4. data/examples/chipmunk_and_rmagick.rb +17 -19
  5. data/examples/chipmunk_integration.rb +42 -44
  6. data/examples/cptn_ruby.rb +19 -21
  7. data/examples/opengl_integration.rb +59 -59
  8. data/examples/rmagick_integration.rb +74 -74
  9. data/examples/text_input.rb +26 -27
  10. data/examples/tutorial.rb +21 -23
  11. data/examples/welcome.rb +17 -19
  12. data/lib/gosu-examples/example.rb +18 -18
  13. data/lib/gosu-examples/sidebar.rb +14 -14
  14. metadata +9 -36
  15. data/examples/media/BrokenPNG.png +0 -0
  16. data/examples/media/Cursor.png +0 -0
  17. data/examples/media/JingleBells.mp3 +0 -0
  18. data/examples/media/JingleBells.ogg +0 -0
  19. data/examples/media/Loop.wav +0 -0
  20. data/examples/media/Sample.wav +0 -0
  21. data/examples/media/SquareTexture.png +0 -0
  22. data/examples/media/Wallpaper.png +0 -0
  23. data/examples/media/WallpaperXXL.png +0 -0
  24. data/examples/media/WhiteAlpha.png +0 -0
  25. data/examples/media/audio_formats/aiff_32bit_float.aiff +0 -0
  26. data/examples/media/audio_formats/au_16bit_pcm.au +0 -0
  27. data/examples/media/audio_formats/caf_be_16bit_44khz.caf +0 -0
  28. data/examples/media/audio_formats/caf_le_16bit_44khz.caf +0 -0
  29. data/examples/media/audio_formats/caf_le_8bit_44khz.caf +0 -0
  30. data/examples/media/audio_formats/general_midi.mid +0 -0
  31. data/examples/media/audio_formats/impulse_tracker.it +0 -0
  32. data/examples/media/audio_formats/mp3_128k_stereo.mp3 +0 -0
  33. data/examples/media/audio_formats/mp3_avg_96kbit_jointstereo.mp3 +0 -0
  34. data/examples/media/audio_formats/ogg_vorbis.ogg +0 -0
  35. data/examples/media/audio_formats/wav_16bit_pcm.wav +0 -0
  36. data/examples/media/audio_formats/wav_32bit_pcm.wav +0 -0
  37. data/examples/media/audio_formats/wav_4bit_ms_adpcm.wav +0 -0
  38. data/examples/media/image_formats/test.jpg +0 -0
  39. data/examples/media/image_formats/test.psd +0 -0
  40. data/examples/media/vera.ttf +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb2816210de706b627f2c8120ee44874cd16035676c20f6b18d14ac52b3c3b09
4
- data.tar.gz: 58c289986480228d033a32ba8c3e934d6166ff6b458fa2897fdafa09f90ddc9b
3
+ metadata.gz: 35dec2483af7a950e86155f3fb389c6e475ed0f00c0b15aa73cb58d14ec20003
4
+ data.tar.gz: 781bce8991c9191bae8eb976fb5bf3c072e5171b610d5b5a689b2dcf91beb99f
5
5
  SHA512:
6
- metadata.gz: 59bb842a0be571014dbdf4e4257840f383360de3c79a7fecccc981ca384e6b27938da9e3544a843268ae6d8c5125e099154f4f6afc690796fe534fb10a644969
7
- data.tar.gz: 32c948f2eeed4ac34d5168f7dea387c3c8d8fcbbea758088ca68fcfa95e0aa37f5ff46c925eaa410c450651966907c8d744118507c01191afb80b7550b612b02
6
+ metadata.gz: ef736babe72e026806ce9a113b3d425f4bf637de7afcfed5ea3634f8abb46e8240288382ab0d031fcf4ea555f46e867d3d1336395476c50c69508f467a392be5
7
+ data.tar.gz: 83912efaf8d40af9f559f96d3b6e9481e970c1a16f9c4c4cf14d02f627bba285c066d26055ce0fa87a9b32f0ba7c1aa498b0b993ab539964c02dc7d9ccc4a773
data/README.md CHANGED
@@ -26,5 +26,5 @@ Some examples require the following additional libraries:
26
26
  ```bash
27
27
  gem install chipmunk
28
28
  gem install rmagick
29
- gem install opengl
29
+ gem install opengl-bindings
30
30
  ```
data/bin/gosu-examples CHANGED
@@ -4,10 +4,8 @@ require "gosu"
4
4
 
5
5
  Dir.chdir "#{File.dirname __FILE__}/../examples"
6
6
 
7
- $LOAD_PATH << "#{File.dirname __FILE__}/../lib/gosu-examples"
8
-
9
- require "example"
10
- require "sidebar"
7
+ require_relative "../lib/gosu-examples/example"
8
+ require_relative "../lib/gosu-examples/sidebar"
11
9
 
12
10
  Example.load_examples "*.rb"
13
11
 
@@ -89,7 +87,7 @@ class ExampleBox < Gosu::Window
89
87
  elsif RUBY_PLATFORM =~ /mingw[0-9]*$/
90
88
  `explorer "#{filename.gsub('/', '\\')}"`
91
89
  else
92
- `xdg-open '#{filename}'`
90
+ fork { exec "xdg-open '#{filename}'" }
93
91
  end
94
92
  end
95
93
  end
@@ -1,5 +1,3 @@
1
- # Encoding: UTF-8
2
-
3
1
  # Based on the C Demo3 demonstration distributed with Chipmunk.
4
2
  # Also with some help from the chipmunk_integration.rb program.
5
3
  #
@@ -17,7 +15,7 @@ end
17
15
 
18
16
  WIDTH = 640
19
17
  HEIGHT = 480
20
- TICK = 1.0/60.0
18
+ TICK = 1.0 / 60.0
21
19
  NUM_POLYGONS = 80
22
20
  NUM_SIDES = 4
23
21
  EDGE_SIZE = 15
@@ -26,16 +24,16 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
26
24
  def radians_to_vec2(radians)
27
25
  CP::Vec2.new(Math::cos(radians), Math::sin(radians))
28
26
  end
29
-
27
+
30
28
  def initialize
31
29
  super WIDTH, HEIGHT
32
-
30
+
33
31
  self.caption = "Chipmunk, RMagick and Gosu"
34
-
32
+
35
33
  @space = CP::Space.new
36
34
  @space.iterations = 5
37
35
  @space.gravity = CP::Vec2.new(0, 100)
38
-
36
+
39
37
  # you can replace the background with any image with this line
40
38
  # background = Magick::ImageList.new("media/space.png")
41
39
  fill = Magick::TextureFill.new(Magick::ImageList.new("granite:"))
@@ -44,7 +42,7 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
44
42
  @background_image = Gosu::Image.new(background, tileable: true) # turn the image into a Gosu one
45
43
  @boxes = create_boxes(NUM_POLYGONS)
46
44
  end
47
-
45
+
48
46
  # Create all of the static triangles.
49
47
  # Adds them to the space and the background image.
50
48
  def setup_triangles(background)
@@ -56,7 +54,7 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
56
54
  body = CP::Body.new(Float::MAX, Float::MAX)
57
55
  base = 15
58
56
  height = 10
59
- shape_vertices = [CP::Vec2.new(-base, base), CP::Vec2.new(base, base), CP::Vec2.new(0, -height)]
57
+ shape_vertices = [CP::Vec2.new(-base, base), CP::Vec2.new(base, base), CP::Vec2.new(0, -height)]
60
58
  # make shapes and images
61
59
  8.times do |i|
62
60
  8.times do |j|
@@ -67,7 +65,7 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
67
65
  shape.e = 1
68
66
  shape.u = 1
69
67
  @space.add_static_shape(shape)
70
- gc.polygon(x - base + 1, y + base - 1, x + base - 1, y + base - 1, x, y - height + 1)
68
+ gc.polygon(x - base + 1, y + base - 1, x + base - 1, y + base - 1, x, y - height + 1)
71
69
  end
72
70
  end
73
71
  # do the drawing
@@ -83,10 +81,10 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
83
81
  end
84
82
  return vertices
85
83
  end
86
-
84
+
87
85
  # Produces the image of a polygon.
88
86
  def polygon_image(vertices)
89
- box_image = Magick::Image.new(EDGE_SIZE * 2, EDGE_SIZE * 2) { self.background_color = "transparent" }
87
+ box_image = Magick::Image.new(EDGE_SIZE * 2, EDGE_SIZE * 2) { self.background_color = "transparent" }
90
88
  gc = Magick::Draw.new
91
89
  gc.stroke("red")
92
90
  gc.fill("plum")
@@ -95,12 +93,12 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
95
93
  gc.draw(box_image)
96
94
  return Gosu::Image.new(box_image)
97
95
  end
98
-
96
+
99
97
  # Produces the polygon objects and adds them to the space.
100
98
  def create_boxes(num)
101
99
  box_vertices = polygon_vertices(NUM_SIDES, EDGE_SIZE)
102
100
  box_image = polygon_image(box_vertices)
103
- boxes = []
101
+ boxes = []
104
102
  num.times do
105
103
  body = CP::Body.new(1, CP::moment_for_poly(1.0, box_vertices, CP::Vec2.new(0, 0))) # mass, moment of inertia
106
104
  body.p = CP::Vec2.new(rand(WIDTH), rand(40) - 50)
@@ -109,17 +107,17 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
109
107
  shape.u = 0.4
110
108
  boxes << Box.new(box_image, body)
111
109
  @space.add_body(body)
112
- @space.add_shape(shape)
110
+ @space.add_shape(shape)
113
111
  end
114
112
  return boxes
115
113
  end
116
-
114
+
117
115
  # All the simulation is done here.
118
116
  def update
119
117
  @space.step(TICK)
120
118
  @boxes.each { |box| box.check_off_screen }
121
119
  end
122
-
120
+
123
121
  # All the updating of the screen is done here.
124
122
  def draw
125
123
  @background_image.draw(0, 0, ZOrder::BACKGROUND)
@@ -134,7 +132,7 @@ class Box
134
132
  @image = image
135
133
  @body = body
136
134
  end
137
-
135
+
138
136
  # If it goes offscreen we put it back to the top.
139
137
  def check_off_screen
140
138
  pos = @body.p
@@ -142,7 +140,7 @@ class Box
142
140
  @body.p = CP::Vec2.new(rand * WIDTH, 0)
143
141
  end
144
142
  end
145
-
143
+
146
144
  def draw
147
145
  @image.draw_rot(@body.p.x, @body.p.y, ZOrder::BOX, @body.a.radians_to_gosu)
148
146
  end
@@ -1,5 +1,3 @@
1
- # Encoding: UTF-8
2
-
3
1
  ## File: ChipmunkIntegration.rb
4
2
  ## Author: Dirk Johnson
5
3
  ## Version: 1.0.0
@@ -34,32 +32,32 @@ class Player
34
32
  @shape = shape
35
33
  @shape.body.p = CP::Vec2.new(0.0, 0.0) # position
36
34
  @shape.body.v = CP::Vec2.new(0.0, 0.0) # velocity
37
-
35
+
38
36
  # Keep in mind that down the screen is positive y, which means that PI/2 radians,
39
37
  # which you might consider the top in the traditional Trig unit circle sense is actually
40
38
  # the bottom; thus 3PI/2 is the top
41
- @shape.body.a = (3*Math::PI/2.0) # angle in radians; faces towards top of screen
39
+ @shape.body.a = (3 * Math::PI / 2.0) # angle in radians; faces towards top of screen
42
40
  end
43
-
41
+
44
42
  # Directly set the position of our Player
45
43
  def warp(vect)
46
44
  @shape.body.p = vect
47
45
  end
48
-
46
+
49
47
  # Apply negative Torque; Chipmunk will do the rest
50
48
  # SUBSTEPS is used as a divisor to keep turning rate constant
51
49
  # even if the number of steps per update are adjusted
52
50
  def turn_left
53
- @shape.body.t -= 400.0/SUBSTEPS
51
+ @shape.body.t -= 400.0 / SUBSTEPS
54
52
  end
55
-
53
+
56
54
  # Apply positive Torque; Chipmunk will do the rest
57
55
  # SUBSTEPS is used as a divisor to keep turning rate constant
58
56
  # even if the number of steps per update are adjusted
59
57
  def turn_right
60
- @shape.body.t += 400.0/SUBSTEPS
58
+ @shape.body.t += 400.0 / SUBSTEPS
61
59
  end
62
-
60
+
63
61
  # Apply forward force; Chipmunk will do the rest
64
62
  # SUBSTEPS is used as a divisor to keep acceleration rate constant
65
63
  # even if the number of steps per update are adjusted
@@ -67,27 +65,27 @@ class Player
67
65
  # forward momentum by creating a vector in the direction of the facing
68
66
  # and with a magnitude representing the force we want to apply
69
67
  def accelerate
70
- @shape.body.apply_force(@shape.body.rot * (3000.0/SUBSTEPS), CP::Vec2.new(0.0, 0.0))
68
+ @shape.body.apply_force(@shape.body.rot * (3000.0 / SUBSTEPS), CP::Vec2.new(0.0, 0.0))
71
69
  end
72
-
70
+
73
71
  # Apply even more forward force
74
72
  # See accelerate for more details
75
73
  def boost
76
74
  @shape.body.apply_force(@shape.body.rot * (3000.0), CP::Vec2.new(0.0, 0.0))
77
75
  end
78
-
76
+
79
77
  # Apply reverse force
80
78
  # See accelerate for more details
81
79
  def reverse
82
- @shape.body.apply_force(-@shape.body.rot * (1000.0/SUBSTEPS), CP::Vec2.new(0.0, 0.0))
80
+ @shape.body.apply_force(-@shape.body.rot * (1000.0 / SUBSTEPS), CP::Vec2.new(0.0, 0.0))
83
81
  end
84
-
82
+
85
83
  # Wrap to the other side of the screen when we fly off the edge
86
84
  def validate_position
87
85
  l_position = CP::Vec2.new(@shape.body.p.x % WIDTH, @shape.body.p.y % HEIGHT)
88
86
  @shape.body.p = l_position
89
87
  end
90
-
88
+
91
89
  def draw
92
90
  @image.draw_rot(@shape.body.p.x, @shape.body.p.y, ZOrder::Player, @shape.body.a.radians_to_gosu)
93
91
  end
@@ -97,7 +95,7 @@ end
97
95
  # Of course... it just sits around and looks good...
98
96
  class Star
99
97
  attr_reader :shape
100
-
98
+
101
99
  def initialize(animation, shape)
102
100
  @animation = animation
103
101
  @color = Gosu::Color.new(0xff_000000)
@@ -110,8 +108,8 @@ class Star
110
108
  @shape.body.a = 0.gosu_to_radians # faces towards top of screen
111
109
  end
112
110
 
113
- def draw
114
- img = @animation[Gosu.milliseconds / 100 % @animation.size];
111
+ def draw
112
+ img = @animation[Gosu.milliseconds / 100 % @animation.size]
115
113
  img.draw(@shape.body.p.x - img.width / 2.0, @shape.body.p.y - img.height / 2.0, ZOrder::Stars, 1, 1, @color, :add)
116
114
  end
117
115
  end
@@ -121,52 +119,52 @@ end
121
119
  class ChipmunkIntegration < (Example rescue Gosu::Window)
122
120
  def initialize
123
121
  super WIDTH, HEIGHT
124
-
122
+
125
123
  self.caption = "Gosu & Chipmunk Integration Demo"
126
-
124
+
127
125
  @background_image = Gosu::Image.new("media/space.png", tileable: true)
128
126
 
129
127
  # Put the beep here, as it is the environment now that determines collision
130
128
  @beep = Gosu::Sample.new("media/beep.wav")
131
-
129
+
132
130
  # Put the score here, as it is the environment that tracks this now
133
131
  @score = 0
134
132
  @font = Gosu::Font.new(20)
135
-
133
+
136
134
  # Time increment over which to apply a physics "step" ("delta t")
137
- @dt = (1.0/60.0)
138
-
135
+ @dt = (1.0 / 60.0)
136
+
139
137
  # Create our Space and set its damping
140
138
  # A damping of 0.8 causes the ship bleed off its force and torque over time
141
139
  # This is not realistic behavior in a vacuum of space, but it gives the game
142
140
  # the feel I'd like in this situation
143
141
  @space = CP::Space.new
144
- @space.damping = 0.8
145
-
142
+ @space.damping = 0.8
143
+
146
144
  # Create the Body for the Player
147
145
  body = CP::Body.new(10.0, 150.0)
148
-
146
+
149
147
  # In order to create a shape, we must first define it
150
148
  # Chipmunk defines 3 types of Shapes: Segments, Circles and Polys
151
149
  # We'll use s simple, 4 sided Poly for our Player (ship)
152
150
  # You need to define the vectors so that the "top" of the Shape is towards 0 radians (the right)
153
151
  shape_array = [CP::Vec2.new(-25.0, -25.0), CP::Vec2.new(-25.0, 25.0), CP::Vec2.new(25.0, 1.0), CP::Vec2.new(25.0, -1.0)]
154
- shape = CP::Shape::Poly.new(body, shape_array, CP::Vec2.new(0,0))
155
-
152
+ shape = CP::Shape::Poly.new(body, shape_array, CP::Vec2.new(0, 0))
153
+
156
154
  # The collision_type of a shape allows us to set up special collision behavior
157
155
  # based on these types. The actual value for the collision_type is arbitrary
158
156
  # and, as long as it is consistent, will work for us; of course, it helps to have it make sense
159
157
  shape.collision_type = :ship
160
-
158
+
161
159
  @space.add_body(body)
162
160
  @space.add_shape(shape)
163
161
 
164
162
  @player = Player.new(shape)
165
163
  @player.warp(CP::Vec2.new(320, 240)) # move to the center of the window
166
-
164
+
167
165
  @star_anim = Gosu::Image.load_tiles("media/star.png", 25, 25)
168
166
  @stars = Array.new
169
-
167
+
170
168
  # Here we define what is supposed to happen when a Player (ship) collides with a Star
171
169
  # I create a @remove_shapes array because we cannot remove either Shapes or Bodies
172
170
  # from Space within a collision closure, rather, we have to wait till the closure
@@ -181,7 +179,7 @@ class ChipmunkIntegration < (Example rescue Gosu::Window)
181
179
  @beep.play
182
180
  @remove_shapes << star_shape
183
181
  end
184
-
182
+
185
183
  # Here we tell Space that we don't want one star bumping into another
186
184
  # The reason we need to do this is because when the Player hits a Star,
187
185
  # the Star will travel until it is removed in the update cycle below
@@ -207,16 +205,16 @@ class ChipmunkIntegration < (Example rescue Gosu::Window)
207
205
  @space.remove_shape(shape)
208
206
  end
209
207
  @remove_shapes.clear # clear out the shapes for next pass
210
-
208
+
211
209
  # When a force or torque is set on a Body, it is cumulative
212
210
  # This means that the force you applied last SUBSTEP will compound with the
213
211
  # force applied this SUBSTEP; which is probably not the behavior you want
214
212
  # We reset the forces on the Player each SUBSTEP for this reason
215
213
  @player.shape.body.reset_forces
216
-
214
+
217
215
  # Wrap around the screen to the other side
218
216
  @player.validate_position
219
-
217
+
220
218
  # Check keyboard
221
219
  if Gosu.button_down? Gosu::KB_LEFT
222
220
  @player.turn_left
@@ -224,7 +222,7 @@ class ChipmunkIntegration < (Example rescue Gosu::Window)
224
222
  if Gosu.button_down? Gosu::KB_RIGHT
225
223
  @player.turn_right
226
224
  end
227
-
225
+
228
226
  if Gosu.button_down? Gosu::KB_UP
229
227
  if Gosu.button_down?(Gosu::KB_RIGHT_SHIFT) or Gosu.button_down?(Gosu::KB_LEFT_SHIFT)
230
228
  @player.boost
@@ -234,21 +232,21 @@ class ChipmunkIntegration < (Example rescue Gosu::Window)
234
232
  elsif Gosu.button_down? Gosu::KB_DOWN
235
233
  @player.reverse
236
234
  end
237
-
235
+
238
236
  # Perform the step over @dt period of time
239
237
  # For best performance @dt should remain consistent for the game
240
238
  @space.step(@dt)
241
239
  end
242
-
240
+
243
241
  # Each update (not SUBSTEP) we see if we need to add more Stars
244
242
  if rand(100) < 4 and @stars.size < 25
245
243
  body = CP::Body.new(0.0001, 0.0001)
246
- shape = CP::Shape::Circle.new(body, 25/2, CP::Vec2.new(0.0, 0.0))
244
+ shape = CP::Shape::Circle.new(body, 25 / 2, CP::Vec2.new(0.0, 0.0))
247
245
  shape.collision_type = :star
248
-
246
+
249
247
  @space.add_body(body)
250
248
  @space.add_shape(shape)
251
-
249
+
252
250
  @stars.push(Star.new(@star_anim, shape))
253
251
  end
254
252
  end
@@ -257,7 +255,7 @@ class ChipmunkIntegration < (Example rescue Gosu::Window)
257
255
  @background_image.draw(0, 0, ZOrder::Background)
258
256
  @player.draw
259
257
  @stars.each { |star| star.draw }
260
- @font.draw("Score: #{@score}", 10, 10, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
258
+ @font.draw_text("Score: #{@score}", 10, 10, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
261
259
  end
262
260
 
263
261
  def button_down(id)
@@ -1,5 +1,3 @@
1
- # Encoding: UTF-8
2
-
3
1
  # A simple jump-and-run/platformer game with a tile-based map.
4
2
 
5
3
  # Shows how to
@@ -17,7 +15,7 @@
17
15
  # 4) similarly, add sound effects for various events
18
16
  # Exploring this game's code and Gosu:
19
17
  # 5) make the player wider, so he doesn't fall off edges as easily
20
- # 6) add background music (check if playing in Window#update to implement
18
+ # 6) add background music (check if playing in Window#update to implement
21
19
  # looping)
22
20
  # 7) implement parallax scrolling for the star background!
23
21
  # Getting tricky:
@@ -43,7 +41,7 @@ class CollectibleGem
43
41
  @image = image
44
42
  @x, @y = x, y
45
43
  end
46
-
44
+
47
45
  def draw
48
46
  # Draw, slowly rotating
49
47
  @image.draw_rot(@x, @y, 0, 25 * Math.sin(Gosu.milliseconds / 133.7))
@@ -63,9 +61,9 @@ class Player
63
61
  @standing, @walk1, @walk2, @jump = *Gosu::Image.load_tiles("media/cptn_ruby.png", 50, 50)
64
62
  # This always points to the frame that is currently drawn.
65
63
  # This is set in update, and used in draw.
66
- @cur_image = @standing
64
+ @cur_image = @standing
67
65
  end
68
-
66
+
69
67
  def draw
70
68
  # Flip vertically when facing to the left.
71
69
  if @dir == :left
@@ -77,14 +75,14 @@ class Player
77
75
  end
78
76
  @cur_image.draw(@x + offs_x, @y - 49, 0, factor, 1.0)
79
77
  end
80
-
78
+
81
79
  # Could the object be placed at x + offs_x/y + offs_y without being stuck?
82
80
  def would_fit(offs_x, offs_y)
83
81
  # Check at the center/top and center/bottom for map collisions
84
82
  not @map.solid?(@x + offs_x, @y + offs_y) and
85
83
  not @map.solid?(@x + offs_x, @y + offs_y - 45)
86
84
  end
87
-
85
+
88
86
  def update(move_x)
89
87
  # Select image depending on action
90
88
  if (move_x == 0)
@@ -95,7 +93,7 @@ class Player
95
93
  if (@vy < 0)
96
94
  @cur_image = @jump
97
95
  end
98
-
96
+
99
97
  # Directional walking, horizontal movement
100
98
  if move_x > 0
101
99
  @dir = :right
@@ -118,13 +116,13 @@ class Player
118
116
  (-@vy).times { if would_fit(0, -1) then @y -= 1 else @vy = 0 end }
119
117
  end
120
118
  end
121
-
119
+
122
120
  def try_to_jump
123
121
  if @map.solid?(@x, @y + 1)
124
122
  @vy = -20
125
123
  end
126
124
  end
127
-
125
+
128
126
  def collect_gems(gems)
129
127
  # Same as in the tutorial game.
130
128
  gems.reject! do |c|
@@ -136,7 +134,7 @@ end
136
134
  # Map class holds and draws tiles and gems.
137
135
  class Map
138
136
  attr_reader :width, :height, :gems
139
-
137
+
140
138
  def initialize(filename)
141
139
  # Load 60x60 tiles, 5px overlap in all four directions.
142
140
  @tileset = Gosu::Image.load_tiles("media/tileset.png", 60, 60, tileable: true)
@@ -152,9 +150,9 @@ class Map
152
150
  case lines[y][x, 1]
153
151
  when '"'
154
152
  Tiles::Grass
155
- when '#'
153
+ when "#"
156
154
  Tiles::Earth
157
- when 'x'
155
+ when "x"
158
156
  @gems.push(CollectibleGem.new(gem_img, x * 50 + 25, y * 50 + 25))
159
157
  nil
160
158
  else
@@ -163,7 +161,7 @@ class Map
163
161
  end
164
162
  end
165
163
  end
166
-
164
+
167
165
  def draw
168
166
  # Very primitive drawing function:
169
167
  # Draws all the tiles, some off-screen, some on-screen.
@@ -179,7 +177,7 @@ class Map
179
177
  end
180
178
  @gems.each { |c| c.draw }
181
179
  end
182
-
180
+
183
181
  # Solid at a given pixel position?
184
182
  def solid?(x, y)
185
183
  y < 0 || @tiles[x / 50][y / 50]
@@ -189,16 +187,16 @@ end
189
187
  class CptnRuby < (Example rescue Gosu::Window)
190
188
  def initialize
191
189
  super WIDTH, HEIGHT
192
-
190
+
193
191
  self.caption = "Cptn. Ruby"
194
-
192
+
195
193
  @sky = Gosu::Image.new("media/space.png", tileable: true)
196
194
  @map = Map.new("media/cptn_ruby_map.txt")
197
195
  @cptn = Player.new(@map, 400, 100)
198
196
  # The scrolling position is stored as top left corner of the screen.
199
197
  @camera_x = @camera_y = 0
200
198
  end
201
-
199
+
202
200
  def update
203
201
  move_x = 0
204
202
  move_x -= 5 if Gosu.button_down? Gosu::KB_LEFT
@@ -209,7 +207,7 @@ class CptnRuby < (Example rescue Gosu::Window)
209
207
  @camera_x = [[@cptn.x - WIDTH / 2, 0].max, @map.width * 50 - WIDTH].min
210
208
  @camera_y = [[@cptn.y - HEIGHT / 2, 0].max, @map.height * 50 - HEIGHT].min
211
209
  end
212
-
210
+
213
211
  def draw
214
212
  @sky.draw 0, 0, 0
215
213
  Gosu.translate(-@camera_x, -@camera_y) do
@@ -217,7 +215,7 @@ class CptnRuby < (Example rescue Gosu::Window)
217
215
  @cptn.draw
218
216
  end
219
217
  end
220
-
218
+
221
219
  def button_down(id)
222
220
  case id
223
221
  when Gosu::KB_UP