minigl 2.2.2 → 2.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +19 -19
- data/README.md +35 -36
- data/Rakefile +11 -11
- data/lib/minigl.rb +4 -4
- data/lib/minigl/forms.rb +1485 -1485
- data/lib/minigl/game_object.rb +379 -379
- data/lib/minigl/global.rb +729 -729
- data/lib/minigl/map.rb +256 -256
- data/lib/minigl/movement.rb +585 -585
- data/lib/minigl/text.rb +190 -188
- data/test/data/img/barbg.svg +73 -73
- data/test/data/img/barfg.svg +106 -106
- data/test/data/img/square.svg +66 -66
- data/test/data/img/square2.svg +66 -66
- data/test/data/img/square3.svg +76 -76
- data/test/data/img/tile1.svg +66 -66
- data/test/data/img/tile2.svg +66 -66
- data/test/game.rb +150 -150
- data/test/game_object_tests.rb +108 -108
- data/test/iso_game.rb +39 -39
- data/test/map_tests.rb +57 -57
- data/test/mov_game.rb +76 -76
- data/test/movement_tests.rb +86 -86
- data/test/res_tests.rb +45 -45
- data/test/vector_tests.rb +55 -55
- metadata +24 -24
data/test/game_object_tests.rb
CHANGED
@@ -1,108 +1,108 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative '../lib/minigl'
|
3
|
-
include MiniGL
|
4
|
-
|
5
|
-
class SpriteTest < Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
@window = GameWindow.new 800, 600, false
|
8
|
-
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_sprite_position
|
12
|
-
s = Sprite.new 10, 20, :image
|
13
|
-
assert_equal 10, s.x
|
14
|
-
assert_equal 20, s.y
|
15
|
-
s = Sprite.new -100, 200, :image
|
16
|
-
assert_equal -100, s.x
|
17
|
-
assert_equal 200, s.y
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_sprite_animation
|
21
|
-
s = Sprite.new 10, 20, :image, 3, 1
|
22
|
-
indices = [0, 1, 2]
|
23
|
-
interval = 1
|
24
|
-
3.times { s.animate indices, interval }
|
25
|
-
assert_equal 0, s.img_index
|
26
|
-
5.times { s.animate indices, interval }
|
27
|
-
assert_equal 2, s.img_index
|
28
|
-
|
29
|
-
10.times { s.animate_once indices, interval }
|
30
|
-
assert_equal 2, s.img_index
|
31
|
-
s.animate_once indices, interval
|
32
|
-
assert_equal 2, s.img_index
|
33
|
-
|
34
|
-
indices2 = [0, 1, 2, 3]
|
35
|
-
s.animate_once indices2, 1
|
36
|
-
assert_equal 0, s.img_index
|
37
|
-
10.times { s.animate_once indices2, interval }
|
38
|
-
assert_equal 3, s.img_index
|
39
|
-
|
40
|
-
s.set_animation 0
|
41
|
-
2.times { s.animate_once indices2, 1 }
|
42
|
-
assert_equal 1, s.img_index
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_sprite_visibility
|
46
|
-
# m = Map.new(1, 1, 800, 600)
|
47
|
-
s = Sprite.new 10, 20, :image, 3, 1 # the sprite will be 1 x 1 pixel
|
48
|
-
assert s.visible?
|
49
|
-
s.x = 800
|
50
|
-
assert(!(s.visible?))
|
51
|
-
s.x = -1
|
52
|
-
assert(!(s.visible?))
|
53
|
-
s.x = 0
|
54
|
-
assert s.visible?
|
55
|
-
s.y = 600
|
56
|
-
assert(!(s.visible?))
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class GameObjectTest < Test::Unit::TestCase
|
61
|
-
def setup
|
62
|
-
@window = GameWindow.new 800, 600, false
|
63
|
-
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_game_object_attributes
|
67
|
-
o = GameObject.new 10, 20, 3, 1, :image
|
68
|
-
assert_equal 10, o.x
|
69
|
-
assert_equal 20, o.y
|
70
|
-
assert_equal 3, o.w
|
71
|
-
assert_equal 1, o.h
|
72
|
-
assert_equal 0, o.speed.x
|
73
|
-
assert_equal 0, o.speed.y
|
74
|
-
assert_equal 0, o.stored_forces.x
|
75
|
-
assert_equal 0, o.stored_forces.y
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_game_object_animation
|
79
|
-
o = GameObject.new 10, 20, 3, 1, :image, nil, 3, 1
|
80
|
-
indices = [0, 1, 2]
|
81
|
-
interval = 10
|
82
|
-
5.times { o.animate indices, interval }
|
83
|
-
assert_equal 0, o.img_index
|
84
|
-
o.set_animation 0
|
85
|
-
5.times { o.animate indices, interval }
|
86
|
-
assert_equal 0, o.img_index
|
87
|
-
5.times { o.animate indices, interval }
|
88
|
-
assert_equal 1, o.img_index
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_game_object_visibility
|
92
|
-
# m = Map.new(1, 1, 800, 600)
|
93
|
-
o = GameObject.new 10, 20, 30, 30, :square, Vector.new(-10, -10)
|
94
|
-
assert o.visible?
|
95
|
-
o.x = 800
|
96
|
-
assert o.visible?
|
97
|
-
o.x = 810
|
98
|
-
assert(!(o.visible?))
|
99
|
-
o.x = -30
|
100
|
-
assert o.visible?
|
101
|
-
o.y = -50
|
102
|
-
assert(!(o.visible?))
|
103
|
-
o.x = 0; o.y = -30
|
104
|
-
assert o.visible?
|
105
|
-
o.y = 610
|
106
|
-
assert(!(o.visible?))
|
107
|
-
end
|
108
|
-
end
|
1
|
+
require 'test/unit'
|
2
|
+
require_relative '../lib/minigl'
|
3
|
+
include MiniGL
|
4
|
+
|
5
|
+
class SpriteTest < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@window = GameWindow.new 800, 600, false
|
8
|
+
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_sprite_position
|
12
|
+
s = Sprite.new 10, 20, :image
|
13
|
+
assert_equal 10, s.x
|
14
|
+
assert_equal 20, s.y
|
15
|
+
s = Sprite.new -100, 200, :image
|
16
|
+
assert_equal -100, s.x
|
17
|
+
assert_equal 200, s.y
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_sprite_animation
|
21
|
+
s = Sprite.new 10, 20, :image, 3, 1
|
22
|
+
indices = [0, 1, 2]
|
23
|
+
interval = 1
|
24
|
+
3.times { s.animate indices, interval }
|
25
|
+
assert_equal 0, s.img_index
|
26
|
+
5.times { s.animate indices, interval }
|
27
|
+
assert_equal 2, s.img_index
|
28
|
+
|
29
|
+
10.times { s.animate_once indices, interval }
|
30
|
+
assert_equal 2, s.img_index
|
31
|
+
s.animate_once indices, interval
|
32
|
+
assert_equal 2, s.img_index
|
33
|
+
|
34
|
+
indices2 = [0, 1, 2, 3]
|
35
|
+
s.animate_once indices2, 1
|
36
|
+
assert_equal 0, s.img_index
|
37
|
+
10.times { s.animate_once indices2, interval }
|
38
|
+
assert_equal 3, s.img_index
|
39
|
+
|
40
|
+
s.set_animation 0
|
41
|
+
2.times { s.animate_once indices2, 1 }
|
42
|
+
assert_equal 1, s.img_index
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_sprite_visibility
|
46
|
+
# m = Map.new(1, 1, 800, 600)
|
47
|
+
s = Sprite.new 10, 20, :image, 3, 1 # the sprite will be 1 x 1 pixel
|
48
|
+
assert s.visible?
|
49
|
+
s.x = 800
|
50
|
+
assert(!(s.visible?))
|
51
|
+
s.x = -1
|
52
|
+
assert(!(s.visible?))
|
53
|
+
s.x = 0
|
54
|
+
assert s.visible?
|
55
|
+
s.y = 600
|
56
|
+
assert(!(s.visible?))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class GameObjectTest < Test::Unit::TestCase
|
61
|
+
def setup
|
62
|
+
@window = GameWindow.new 800, 600, false
|
63
|
+
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_game_object_attributes
|
67
|
+
o = GameObject.new 10, 20, 3, 1, :image
|
68
|
+
assert_equal 10, o.x
|
69
|
+
assert_equal 20, o.y
|
70
|
+
assert_equal 3, o.w
|
71
|
+
assert_equal 1, o.h
|
72
|
+
assert_equal 0, o.speed.x
|
73
|
+
assert_equal 0, o.speed.y
|
74
|
+
assert_equal 0, o.stored_forces.x
|
75
|
+
assert_equal 0, o.stored_forces.y
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_game_object_animation
|
79
|
+
o = GameObject.new 10, 20, 3, 1, :image, nil, 3, 1
|
80
|
+
indices = [0, 1, 2]
|
81
|
+
interval = 10
|
82
|
+
5.times { o.animate indices, interval }
|
83
|
+
assert_equal 0, o.img_index
|
84
|
+
o.set_animation 0
|
85
|
+
5.times { o.animate indices, interval }
|
86
|
+
assert_equal 0, o.img_index
|
87
|
+
5.times { o.animate indices, interval }
|
88
|
+
assert_equal 1, o.img_index
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_game_object_visibility
|
92
|
+
# m = Map.new(1, 1, 800, 600)
|
93
|
+
o = GameObject.new 10, 20, 30, 30, :square, Vector.new(-10, -10)
|
94
|
+
assert o.visible?
|
95
|
+
o.x = 800
|
96
|
+
assert o.visible?
|
97
|
+
o.x = 810
|
98
|
+
assert(!(o.visible?))
|
99
|
+
o.x = -30
|
100
|
+
assert o.visible?
|
101
|
+
o.y = -50
|
102
|
+
assert(!(o.visible?))
|
103
|
+
o.x = 0; o.y = -30
|
104
|
+
assert o.visible?
|
105
|
+
o.y = 610
|
106
|
+
assert(!(o.visible?))
|
107
|
+
end
|
108
|
+
end
|
data/test/iso_game.rb
CHANGED
@@ -1,39 +1,39 @@
|
|
1
|
-
require_relative '../lib/minigl'
|
2
|
-
include MiniGL
|
3
|
-
|
4
|
-
class MyGame < GameWindow
|
5
|
-
def initialize
|
6
|
-
super 800, 600, false
|
7
|
-
|
8
|
-
@tile1 = Res.img :tile2
|
9
|
-
@tile2 = Res.img :tile2b
|
10
|
-
@map = Map.new 25, 17, 200, 200, 800, 600, true
|
11
|
-
@p = Vector.new -1, -1
|
12
|
-
end
|
13
|
-
|
14
|
-
def needs_cursor?
|
15
|
-
true
|
16
|
-
end
|
17
|
-
|
18
|
-
def update
|
19
|
-
KB.update
|
20
|
-
Mouse.update
|
21
|
-
p = @map.get_map_pos Mouse.x, Mouse.y
|
22
|
-
@p = p if @map.is_in_map p
|
23
|
-
|
24
|
-
@map.move_camera 0, -4.5 if KB.key_down? Gosu::KbUp
|
25
|
-
@map.move_camera 4.5, 0 if KB.key_down? Gosu::KbRight
|
26
|
-
@map.move_camera 0, 4.5 if KB.key_down? Gosu::KbDown
|
27
|
-
@map.move_camera -4.5, 0 if KB.key_down? Gosu::KbLeft
|
28
|
-
@map.set_camera 0, 0 if KB.key_down? Gosu::KbReturn
|
29
|
-
end
|
30
|
-
|
31
|
-
def draw
|
32
|
-
@map.foreach do |i, j, x, y|
|
33
|
-
if (i - @p.x).abs <= 1 and (j - @p.y).abs <= 1; @tile2.draw x, y, 0
|
34
|
-
else; @tile1.draw x, y, 0; end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
MyGame.new.show
|
1
|
+
require_relative '../lib/minigl'
|
2
|
+
include MiniGL
|
3
|
+
|
4
|
+
class MyGame < GameWindow
|
5
|
+
def initialize
|
6
|
+
super 800, 600, false
|
7
|
+
|
8
|
+
@tile1 = Res.img :tile2
|
9
|
+
@tile2 = Res.img :tile2b
|
10
|
+
@map = Map.new 25, 17, 200, 200, 800, 600, true
|
11
|
+
@p = Vector.new -1, -1
|
12
|
+
end
|
13
|
+
|
14
|
+
def needs_cursor?
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
18
|
+
def update
|
19
|
+
KB.update
|
20
|
+
Mouse.update
|
21
|
+
p = @map.get_map_pos Mouse.x, Mouse.y
|
22
|
+
@p = p if @map.is_in_map p
|
23
|
+
|
24
|
+
@map.move_camera 0, -4.5 if KB.key_down? Gosu::KbUp
|
25
|
+
@map.move_camera 4.5, 0 if KB.key_down? Gosu::KbRight
|
26
|
+
@map.move_camera 0, 4.5 if KB.key_down? Gosu::KbDown
|
27
|
+
@map.move_camera -4.5, 0 if KB.key_down? Gosu::KbLeft
|
28
|
+
@map.set_camera 0, 0 if KB.key_down? Gosu::KbReturn
|
29
|
+
end
|
30
|
+
|
31
|
+
def draw
|
32
|
+
@map.foreach do |i, j, x, y|
|
33
|
+
if (i - @p.x).abs <= 1 and (j - @p.y).abs <= 1; @tile2.draw x, y, 0
|
34
|
+
else; @tile1.draw x, y, 0; end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
MyGame.new.show
|
data/test/map_tests.rb
CHANGED
@@ -1,57 +1,57 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative '../lib/minigl'
|
3
|
-
include MiniGL
|
4
|
-
|
5
|
-
class MapTest < Test::Unit::TestCase
|
6
|
-
def test_map_attributes
|
7
|
-
m = Map.new 16, 16, 300, 200
|
8
|
-
assert_equal 16, m.tile_size.x
|
9
|
-
assert_equal 16, m.tile_size.y
|
10
|
-
assert_equal 300, m.size.x
|
11
|
-
assert_equal 200, m.size.y
|
12
|
-
assert_equal 0, m.cam.x
|
13
|
-
assert_equal 0, m.cam.y
|
14
|
-
m = Map.new 25, 17, 49, 133
|
15
|
-
assert_equal 25, m.tile_size.x
|
16
|
-
assert_equal 17, m.tile_size.y
|
17
|
-
assert_equal 49, m.size.x
|
18
|
-
assert_equal 133, m.size.y
|
19
|
-
assert_equal 0, m.cam.x
|
20
|
-
assert_equal 0, m.cam.y
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_absolute_size
|
24
|
-
m = Map.new 16, 16, 300, 200
|
25
|
-
v = m.get_absolute_size
|
26
|
-
assert_equal 300 * 16, v.x
|
27
|
-
assert_equal 200 * 16, v.y
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_center
|
31
|
-
m = Map.new 16, 16, 300, 200
|
32
|
-
v = m.get_center
|
33
|
-
assert_equal 300 * 16 / 2, v.x
|
34
|
-
assert_equal 200 * 16 / 2, v.y
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_screen_pos
|
38
|
-
m = Map.new 16, 16, 300, 200
|
39
|
-
v = m.get_screen_pos 8, 5
|
40
|
-
assert_equal 8 * 16, v.x
|
41
|
-
assert_equal 5 * 16, v.y
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_map_pos
|
45
|
-
m = Map.new 16, 16, 300, 200
|
46
|
-
v = m.get_map_pos 410, 300
|
47
|
-
assert_equal 25, v.x
|
48
|
-
assert_equal 18, v.y
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_in_map
|
52
|
-
m = Map.new 16, 16, 300, 200
|
53
|
-
assert m.is_in_map(Vector.new 30, 20)
|
54
|
-
assert m.is_in_map(Vector.new 299, 199)
|
55
|
-
assert !m.is_in_map(Vector.new 300, 200)
|
56
|
-
end
|
57
|
-
end
|
1
|
+
require 'test/unit'
|
2
|
+
require_relative '../lib/minigl'
|
3
|
+
include MiniGL
|
4
|
+
|
5
|
+
class MapTest < Test::Unit::TestCase
|
6
|
+
def test_map_attributes
|
7
|
+
m = Map.new 16, 16, 300, 200
|
8
|
+
assert_equal 16, m.tile_size.x
|
9
|
+
assert_equal 16, m.tile_size.y
|
10
|
+
assert_equal 300, m.size.x
|
11
|
+
assert_equal 200, m.size.y
|
12
|
+
assert_equal 0, m.cam.x
|
13
|
+
assert_equal 0, m.cam.y
|
14
|
+
m = Map.new 25, 17, 49, 133
|
15
|
+
assert_equal 25, m.tile_size.x
|
16
|
+
assert_equal 17, m.tile_size.y
|
17
|
+
assert_equal 49, m.size.x
|
18
|
+
assert_equal 133, m.size.y
|
19
|
+
assert_equal 0, m.cam.x
|
20
|
+
assert_equal 0, m.cam.y
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_absolute_size
|
24
|
+
m = Map.new 16, 16, 300, 200
|
25
|
+
v = m.get_absolute_size
|
26
|
+
assert_equal 300 * 16, v.x
|
27
|
+
assert_equal 200 * 16, v.y
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_center
|
31
|
+
m = Map.new 16, 16, 300, 200
|
32
|
+
v = m.get_center
|
33
|
+
assert_equal 300 * 16 / 2, v.x
|
34
|
+
assert_equal 200 * 16 / 2, v.y
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_screen_pos
|
38
|
+
m = Map.new 16, 16, 300, 200
|
39
|
+
v = m.get_screen_pos 8, 5
|
40
|
+
assert_equal 8 * 16, v.x
|
41
|
+
assert_equal 5 * 16, v.y
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_map_pos
|
45
|
+
m = Map.new 16, 16, 300, 200
|
46
|
+
v = m.get_map_pos 410, 300
|
47
|
+
assert_equal 25, v.x
|
48
|
+
assert_equal 18, v.y
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_in_map
|
52
|
+
m = Map.new 16, 16, 300, 200
|
53
|
+
assert m.is_in_map(Vector.new 30, 20)
|
54
|
+
assert m.is_in_map(Vector.new 299, 199)
|
55
|
+
assert !m.is_in_map(Vector.new 300, 200)
|
56
|
+
end
|
57
|
+
end
|
data/test/mov_game.rb
CHANGED
@@ -1,77 +1,77 @@
|
|
1
|
-
require 'gosu'
|
2
|
-
require_relative '../lib/minigl'
|
3
|
-
include MiniGL
|
4
|
-
|
5
|
-
class MyGame < GameWindow
|
6
|
-
def initialize
|
7
|
-
super 800, 600, false
|
8
|
-
|
9
|
-
@obj = GameObject.new(0, 0, 50, 50, :square)
|
10
|
-
@obj2 = GameObject.new(100, 0, 50, 50, :square2)
|
11
|
-
|
12
|
-
@obsts = [
|
13
|
-
Block.new(0, 600, 800, 1, false),
|
14
|
-
Block.new(-1, 0, 1, 600, false),
|
15
|
-
Block.new(800, 0, 1, 600, false),
|
16
|
-
Block.new(300, 430, 50, 50),
|
17
|
-
# Block.new(375, 550, 50, 50, true),
|
18
|
-
# Block.new(150, 200, 20, 300, false),
|
19
|
-
# Block.new(220, 300, 100, 20, true),
|
20
|
-
# Block.new(485, 490, 127, 10, false),
|
21
|
-
]
|
22
|
-
@ramps = [
|
23
|
-
Ramp.new(200, 550, 200, 50, true),
|
24
|
-
Ramp.new(0, 200, 150, 300, false),
|
25
|
-
Ramp.new(150, 500, 150, 100, false),
|
26
|
-
Ramp.new(500, 500, 150, 100, true),
|
27
|
-
Ramp.new(650, 300, 150, 200, true),
|
28
|
-
Ramp.new(650, 500, 150, 100, true),
|
29
|
-
]
|
30
|
-
|
31
|
-
# @cycle = [Vector.new(100, 530), Vector.new(650, 500)]
|
32
|
-
# @cyc_obj = GameObject.new(@cycle[0].x, @cycle[0].y, 50, 50, :square)
|
33
|
-
# @cyc_obj.instance_eval('@passable = true')
|
34
|
-
# @obsts.push @cyc_obj
|
35
|
-
end
|
36
|
-
|
37
|
-
def update
|
38
|
-
KB.update
|
39
|
-
|
40
|
-
forces = Vector.new(0, 0)
|
41
|
-
if @obj.bottom
|
42
|
-
forces.y -= 15 if KB.key_pressed?(Gosu::KbSpace)
|
43
|
-
forces.x -= 0.5 if KB.key_down?(Gosu::KbLeft)
|
44
|
-
forces.x += 0.5 if KB.key_down?(Gosu::KbRight)
|
45
|
-
forces.x -= @obj.speed.x * 0.1
|
46
|
-
else
|
47
|
-
forces.x -= 0.2 if KB.key_down?(Gosu::KbLeft)
|
48
|
-
forces.x += 0.2 if KB.key_down?(Gosu::KbRight)
|
49
|
-
end
|
50
|
-
@obj.move(forces, @obsts, @ramps)
|
51
|
-
|
52
|
-
speed = Vector.new(0, 0)
|
53
|
-
speed.y -= 3 if KB.key_down? Gosu::KbW
|
54
|
-
speed.y += 3 if KB.key_down? Gosu::KbS
|
55
|
-
speed.x -= 3 if KB.key_down? Gosu::KbA
|
56
|
-
speed.x += 3 if KB.key_down? Gosu::KbD
|
57
|
-
@obj2.move(speed, @obsts, @ramps, true)
|
58
|
-
end
|
59
|
-
|
60
|
-
def draw
|
61
|
-
@obj.draw
|
62
|
-
@obj2.draw
|
63
|
-
@obsts.each do |o|
|
64
|
-
draw_quad o.x, o.y, 0xffffffff,
|
65
|
-
o.x + o.w, o.y, 0xffffffff,
|
66
|
-
o.x + o.w, o.y + o.h, 0xffffffff,
|
67
|
-
o.x, o.y + o.h, 0xffffffff, 0
|
68
|
-
end
|
69
|
-
@ramps.each do |r|
|
70
|
-
draw_triangle r.left ? r.x + r.w : r.x, r.y, 0xffffffff,
|
71
|
-
r.x + r.w, r.y + r.h, 0xffffffff,
|
72
|
-
r.x, r.y + r.h, 0xffffffff, 0
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
1
|
+
require 'gosu'
|
2
|
+
require_relative '../lib/minigl'
|
3
|
+
include MiniGL
|
4
|
+
|
5
|
+
class MyGame < GameWindow
|
6
|
+
def initialize
|
7
|
+
super 800, 600, false
|
8
|
+
|
9
|
+
@obj = GameObject.new(0, 0, 50, 50, :square)
|
10
|
+
@obj2 = GameObject.new(100, 0, 50, 50, :square2)
|
11
|
+
|
12
|
+
@obsts = [
|
13
|
+
Block.new(0, 600, 800, 1, false),
|
14
|
+
Block.new(-1, 0, 1, 600, false),
|
15
|
+
Block.new(800, 0, 1, 600, false),
|
16
|
+
Block.new(300, 430, 50, 50),
|
17
|
+
# Block.new(375, 550, 50, 50, true),
|
18
|
+
# Block.new(150, 200, 20, 300, false),
|
19
|
+
# Block.new(220, 300, 100, 20, true),
|
20
|
+
# Block.new(485, 490, 127, 10, false),
|
21
|
+
]
|
22
|
+
@ramps = [
|
23
|
+
Ramp.new(200, 550, 200, 50, true),
|
24
|
+
Ramp.new(0, 200, 150, 300, false),
|
25
|
+
Ramp.new(150, 500, 150, 100, false),
|
26
|
+
Ramp.new(500, 500, 150, 100, true),
|
27
|
+
Ramp.new(650, 300, 150, 200, true),
|
28
|
+
Ramp.new(650, 500, 150, 100, true),
|
29
|
+
]
|
30
|
+
|
31
|
+
# @cycle = [Vector.new(100, 530), Vector.new(650, 500)]
|
32
|
+
# @cyc_obj = GameObject.new(@cycle[0].x, @cycle[0].y, 50, 50, :square)
|
33
|
+
# @cyc_obj.instance_eval('@passable = true')
|
34
|
+
# @obsts.push @cyc_obj
|
35
|
+
end
|
36
|
+
|
37
|
+
def update
|
38
|
+
KB.update
|
39
|
+
|
40
|
+
forces = Vector.new(0, 0)
|
41
|
+
if @obj.bottom
|
42
|
+
forces.y -= 15 if KB.key_pressed?(Gosu::KbSpace)
|
43
|
+
forces.x -= 0.5 if KB.key_down?(Gosu::KbLeft)
|
44
|
+
forces.x += 0.5 if KB.key_down?(Gosu::KbRight)
|
45
|
+
forces.x -= @obj.speed.x * 0.1
|
46
|
+
else
|
47
|
+
forces.x -= 0.2 if KB.key_down?(Gosu::KbLeft)
|
48
|
+
forces.x += 0.2 if KB.key_down?(Gosu::KbRight)
|
49
|
+
end
|
50
|
+
@obj.move(forces, @obsts, @ramps)
|
51
|
+
|
52
|
+
speed = Vector.new(0, 0)
|
53
|
+
speed.y -= 3 if KB.key_down? Gosu::KbW
|
54
|
+
speed.y += 3 if KB.key_down? Gosu::KbS
|
55
|
+
speed.x -= 3 if KB.key_down? Gosu::KbA
|
56
|
+
speed.x += 3 if KB.key_down? Gosu::KbD
|
57
|
+
@obj2.move(speed, @obsts, @ramps, true)
|
58
|
+
end
|
59
|
+
|
60
|
+
def draw
|
61
|
+
@obj.draw
|
62
|
+
@obj2.draw
|
63
|
+
@obsts.each do |o|
|
64
|
+
draw_quad o.x, o.y, 0xffffffff,
|
65
|
+
o.x + o.w, o.y, 0xffffffff,
|
66
|
+
o.x + o.w, o.y + o.h, 0xffffffff,
|
67
|
+
o.x, o.y + o.h, 0xffffffff, 0
|
68
|
+
end
|
69
|
+
@ramps.each do |r|
|
70
|
+
draw_triangle r.left ? r.x + r.w : r.x, r.y, 0xffffffff,
|
71
|
+
r.x + r.w, r.y + r.h, 0xffffffff,
|
72
|
+
r.x, r.y + r.h, 0xffffffff, 0
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
77
|
MyGame.new.show
|