RSokoban 0.74 → 0.76
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.
- data/NEWS +33 -1
- data/README.rdoc +21 -14
- data/TODO +6 -12
- data/VERSION +1 -1
- data/bin/rsokoban +40 -3
- data/data/big.xsb +35 -0
- data/lib/rsokoban/config.rb +34 -0
- data/lib/rsokoban/crate.rb +4 -5
- data/lib/rsokoban/exception.rb +2 -0
- data/lib/rsokoban/game/game.rb +153 -0
- data/lib/rsokoban/game/game_curses.rb +11 -0
- data/lib/rsokoban/game/game_factory.rb +23 -0
- data/lib/rsokoban/game/game_gui.rb +27 -0
- data/lib/rsokoban/game/game_portable.rb +10 -0
- data/lib/rsokoban/game/game_tk.rb +11 -0
- data/lib/rsokoban/game/game_ui.rb +81 -0
- data/lib/rsokoban/game.rb +7 -238
- data/lib/rsokoban/install.rb +22 -0
- data/lib/rsokoban/layered_map.rb +139 -0
- data/lib/rsokoban/level.rb +112 -166
- data/lib/rsokoban/level_set.rb +4 -4
- data/lib/rsokoban/man.rb +3 -4
- data/lib/rsokoban/map.rb +91 -15
- data/lib/rsokoban/move_result.rb +2 -2
- data/lib/rsokoban/option.rb +4 -4
- data/lib/rsokoban/position.rb +1 -1
- data/lib/rsokoban/raw_level.rb +11 -2
- data/lib/rsokoban/record.rb +51 -0
- data/lib/rsokoban/set_loader.rb +108 -0
- data/lib/rsokoban/ui/base_ui.rb +1 -0
- data/lib/rsokoban/ui/console.rb +56 -25
- data/lib/rsokoban/ui/curses_console.rb +59 -33
- data/lib/rsokoban/ui/player_action.rb +13 -7
- data/lib/rsokoban/ui/skin.rb +105 -0
- data/lib/rsokoban/ui/tk_dialogs.rb +104 -18
- data/lib/rsokoban/ui/tk_ui.rb +410 -233
- data/lib/rsokoban/ui.rb +1 -0
- data/lib/rsokoban.rb +14 -2
- data/skins/AntiqueDesk/crate.bmp +0 -0
- data/skins/AntiqueDesk/crate_store.bmp +0 -0
- data/skins/AntiqueDesk/floor.bmp +0 -0
- data/skins/AntiqueDesk/man_down.bmp +0 -0
- data/skins/AntiqueDesk/man_left.bmp +0 -0
- data/skins/AntiqueDesk/man_right.bmp +0 -0
- data/skins/AntiqueDesk/man_store_down.bmp +0 -0
- data/skins/AntiqueDesk/man_store_left.bmp +0 -0
- data/skins/AntiqueDesk/man_store_right.bmp +0 -0
- data/skins/AntiqueDesk/man_store_up.bmp +0 -0
- data/skins/AntiqueDesk/man_up.bmp +0 -0
- data/skins/AntiqueDesk/outside.bmp +0 -0
- data/skins/AntiqueDesk/skin.conf +3 -0
- data/skins/AntiqueDesk/store.bmp +0 -0
- data/skins/AntiqueDesk/wall.bmp +0 -0
- data/skins/BlueGranite/outside.bmp +0 -0
- data/skins/BlueGranite/skin.conf +3 -0
- data/skins/HeavyMetal/crate.bmp +0 -0
- data/skins/HeavyMetal/crate_store.bmp +0 -0
- data/skins/HeavyMetal/floor.bmp +0 -0
- data/skins/HeavyMetal/man.bmp +0 -0
- data/skins/HeavyMetal/man_store.bmp +0 -0
- data/skins/HeavyMetal/outside.bmp +0 -0
- data/skins/HeavyMetal/skin.conf +3 -0
- data/skins/HeavyMetal/store.bmp +0 -0
- data/skins/HeavyMetal/wall.bmp +0 -0
- data/skins/HeavyMetal/wall_d.bmp +0 -0
- data/skins/HeavyMetal/wall_dl.bmp +0 -0
- data/skins/HeavyMetal/wall_dlr.bmp +0 -0
- data/skins/HeavyMetal/wall_dr.bmp +0 -0
- data/skins/HeavyMetal/wall_l.bmp +0 -0
- data/skins/HeavyMetal/wall_lr.bmp +0 -0
- data/skins/HeavyMetal/wall_r.bmp +0 -0
- data/skins/HeavyMetal/wall_u.bmp +0 -0
- data/skins/HeavyMetal/wall_ud.bmp +0 -0
- data/skins/HeavyMetal/wall_udl.bmp +0 -0
- data/skins/HeavyMetal/wall_udlr.bmp +0 -0
- data/skins/HeavyMetal/wall_udr.bmp +0 -0
- data/skins/HeavyMetal/wall_ul.bmp +0 -0
- data/skins/HeavyMetal/wall_ulr.bmp +0 -0
- data/skins/HeavyMetal/wall_ur.bmp +0 -0
- data/test/record/original.yaml +2 -0
- data/test/tc_game.rb +24 -15
- data/test/tc_game_factory.rb +40 -0
- data/test/tc_game_gui.rb +26 -0
- data/test/tc_game_ui.rb +153 -0
- data/test/tc_install.rb +12 -0
- data/test/tc_layered_map.rb +105 -0
- data/test/tc_level.rb +109 -107
- data/test/tc_level_set.rb +4 -4
- data/test/tc_map.rb +46 -10
- data/test/tc_record.rb +100 -0
- data/test/{tc_level_loader.rb → tc_set_loader.rb} +25 -24
- data/test/test.rb +9 -2
- data/test/ui/tc_skin.rb +71 -0
- metadata +89 -26
- data/lib/rsokoban/level_loader.rb +0 -81
- data/lib/rsokoban/ui/tk_box.rb +0 -21
- data/skins/default/outside.bmp +0 -0
- data/skins/default/readme +0 -1
- /data/skins/{default → BlueGranite}/crate.bmp +0 -0
- /data/skins/{default → BlueGranite}/crate_store.bmp +0 -0
- /data/skins/{default → BlueGranite}/floor.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_down.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_left.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_right.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_store_down.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_store_left.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_store_right.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_store_up.bmp +0 -0
- /data/skins/{default → BlueGranite}/man_up.bmp +0 -0
- /data/skins/{default → BlueGranite}/store.bmp +0 -0
- /data/skins/{default → BlueGranite}/wall.bmp +0 -0
data/lib/rsokoban/ui.rb
CHANGED
data/lib/rsokoban.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
require "rsokoban/extensions"
|
2
2
|
require "rsokoban/level"
|
3
|
-
require "rsokoban/
|
3
|
+
require "rsokoban/set_loader"
|
4
4
|
require "rsokoban/exception"
|
5
5
|
require "rsokoban/position"
|
6
6
|
require "rsokoban/man"
|
7
7
|
require "rsokoban/crate"
|
8
8
|
require "rsokoban/storage"
|
9
|
-
require "rsokoban/game"
|
10
9
|
require "rsokoban/option"
|
11
10
|
require "rsokoban/level_set"
|
12
11
|
require "rsokoban/raw_level"
|
@@ -14,6 +13,11 @@ require "rsokoban/ui"
|
|
14
13
|
require "rsokoban/move_recorder"
|
15
14
|
require "rsokoban/map"
|
16
15
|
require "rsokoban/move_result"
|
16
|
+
require "rsokoban/game"
|
17
|
+
require "rsokoban/layered_map"
|
18
|
+
require "rsokoban/record"
|
19
|
+
require "rsokoban/install"
|
20
|
+
require "rsokoban/config"
|
17
21
|
|
18
22
|
# I am the main module of the game.
|
19
23
|
module RSokoban
|
@@ -26,5 +30,13 @@ module RSokoban
|
|
26
30
|
WALL = '#'
|
27
31
|
MAN_ON_STORAGE = '+'
|
28
32
|
CRATE_ON_STORAGE = '*'
|
33
|
+
OUTSIDE = 'o'
|
34
|
+
|
35
|
+
# config files will go in this folder
|
36
|
+
CONFIG_FOLDER = File.expand_path "~/.rsokoban"
|
37
|
+
# primary config file
|
38
|
+
CONFIG_FILE = 'config'
|
29
39
|
|
40
|
+
# Record files will go in this folder
|
41
|
+
RECORD_FOLDER = File.expand_path "~/.rsokoban/record"
|
30
42
|
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/tc_game.rb
CHANGED
@@ -1,28 +1,37 @@
|
|
1
1
|
class TC_Game < Test::Unit::TestCase
|
2
|
-
|
2
|
+
include RSokoban
|
3
|
+
|
4
|
+
class GameFake
|
5
|
+
include RSokoban::Game
|
6
|
+
end
|
7
|
+
|
3
8
|
def setup
|
4
9
|
$RSOKOBAN_DATA_PATH = File.expand_path(File.dirname(__FILE__))
|
5
|
-
@
|
6
|
-
|
7
|
-
@game.instance_variable_set(:@ui, nil)
|
8
|
-
# Load the first level, without starting ui (see previous line)
|
9
|
-
@game.start_level
|
10
|
+
@level_set_name = 'original.xsb'
|
11
|
+
@game = GameFake.new('Fake UI', @level_set_name)
|
10
12
|
end
|
11
13
|
|
12
|
-
def
|
13
|
-
|
14
|
+
def test_game_is_not_instanciable
|
15
|
+
assert_raise(NoMethodError) do
|
16
|
+
ins = Game.new
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
|
-
def
|
17
|
-
|
20
|
+
def test_run_method_must_failed
|
21
|
+
assert_raise(NotImplementedError) do
|
22
|
+
@game.run
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
|
-
def
|
21
|
-
|
26
|
+
def test_start_level_method_must_failed
|
27
|
+
assert_raise(NotImplementedError) do
|
28
|
+
@game.start_level
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
|
-
|
25
|
-
|
26
|
-
|
32
|
+
# must create a fake config file to test this
|
33
|
+
#~ def test_level_number_is_initialized_to_1
|
34
|
+
#~ assert_equal 1, @game.level_number
|
35
|
+
#~ end
|
27
36
|
|
28
37
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class TC_GameFactory < Test::Unit::TestCase
|
2
|
+
include RSokoban
|
3
|
+
|
4
|
+
def setup
|
5
|
+
$RSOKOBAN_DATA_PATH = File.expand_path(File.dirname(__FILE__))
|
6
|
+
@level_set_name = 'original.xsb'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_create_with_wrong_argument
|
10
|
+
assert_raise(ArgumentError) do
|
11
|
+
game = GameFactory.create String
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_method_new_is_not_allowed
|
16
|
+
assert_raise(NoMethodError) do
|
17
|
+
gf = GameFactory.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_create_a_game_with_portable_ui
|
22
|
+
game = GameFactory.create(GamePortable, 'Fake UI', @level_set_name)
|
23
|
+
assert_equal GamePortable, game.class
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_create_a_game_with_curses_ui
|
27
|
+
game = GameFactory.create(GameCurses, 'Fake UI', @level_set_name)
|
28
|
+
assert_equal GameCurses, game.class
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_create_a_game_with_tk_gui
|
32
|
+
# tk is normally requiered from the bin/rsokoban program.
|
33
|
+
require 'tk'
|
34
|
+
game = GameFactory.create(GameTk, 'Fake UI', @level_set_name)
|
35
|
+
assert_equal GameTk, game.class
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
end
|
data/test/tc_game_gui.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
class TC_GameGUI < Test::Unit::TestCase
|
2
|
+
include RSokoban
|
3
|
+
|
4
|
+
class GameFake
|
5
|
+
include RSokoban::GameGUI
|
6
|
+
end
|
7
|
+
|
8
|
+
class UIFake
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup
|
12
|
+
$RSOKOBAN_DATA_PATH = File.expand_path(File.dirname(__FILE__))
|
13
|
+
@level_set_name = 'original.xsb'
|
14
|
+
@ui = UIFake.new
|
15
|
+
# initialize a game
|
16
|
+
@game = GameFake.new(@ui, @level_set_name)
|
17
|
+
@game.start_level
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_game_ui_is_not_instanciable
|
21
|
+
assert_raise(NoMethodError) do
|
22
|
+
ins = GameGUI.new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/test/tc_game_ui.rb
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
# @todo find something to test the run method
|
2
|
+
class TC_GameUI < Test::Unit::TestCase
|
3
|
+
include RSokoban
|
4
|
+
|
5
|
+
class GameFake
|
6
|
+
include RSokoban::GameUI
|
7
|
+
end
|
8
|
+
|
9
|
+
class UIFake
|
10
|
+
def get_action(hash)
|
11
|
+
RSokoban::UI::PlayerAction.new :quit
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup
|
16
|
+
$RSOKOBAN_DATA_PATH = File.expand_path(File.dirname(__FILE__))
|
17
|
+
@level_set_name = 'original.xsb'
|
18
|
+
@ui = UIFake.new
|
19
|
+
# initialize a game
|
20
|
+
@game = GameFake.new(@ui, @level_set_name)
|
21
|
+
@game.start_level
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_game_ui_is_not_instanciable
|
25
|
+
assert_raise(NoMethodError) do
|
26
|
+
ins = GameUI.new
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_start_level_must_return_an_action
|
31
|
+
game = GameFake.new(@ui, @level_set_name)
|
32
|
+
assert_equal UI::PlayerAction, game.start_level.class
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_run_method_must_respond_to_the_quit_command
|
36
|
+
game = GameFake.new(@ui, @level_set_name)
|
37
|
+
game.start_level
|
38
|
+
assert_equal true, game.run
|
39
|
+
end
|
40
|
+
|
41
|
+
### Test module Game trough module GameUI ####################################
|
42
|
+
|
43
|
+
# must create a fake config file to test this
|
44
|
+
#~ def test_level_width
|
45
|
+
#~ assert_equal 19, @game.level_width
|
46
|
+
#~ end
|
47
|
+
|
48
|
+
# must create a fake config file to test this
|
49
|
+
#~ def test_level_height
|
50
|
+
#~ assert_equal 11, @game.level_height
|
51
|
+
#~ end
|
52
|
+
|
53
|
+
# must create a fake config file to test this
|
54
|
+
#~ def test_level_title
|
55
|
+
#~ assert_equal '1', @game.level_title
|
56
|
+
#~ end
|
57
|
+
|
58
|
+
def test_map_as_array_must_return_an_array
|
59
|
+
assert_equal Array, @game.map_as_array.class
|
60
|
+
end
|
61
|
+
|
62
|
+
# must create a fake config file to test this
|
63
|
+
#~ def test_man_x
|
64
|
+
#~ assert_equal 11, @game.man_x
|
65
|
+
#~ end
|
66
|
+
|
67
|
+
# must create a fake config file to test this
|
68
|
+
#~ def test_man_y
|
69
|
+
#~ assert_equal 8, @game.man_y
|
70
|
+
#~ end
|
71
|
+
|
72
|
+
def test_move_must_return_move_result
|
73
|
+
game = GameFake.new(@ui, @level_set_name)
|
74
|
+
game.start_level
|
75
|
+
assert_equal MoveResult, game.move(:up).class
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_initial_move_number_must_be_zero
|
79
|
+
assert_equal 0, @game.move_number
|
80
|
+
end
|
81
|
+
|
82
|
+
# must create a fake config file to test this
|
83
|
+
#~ def test_move_number
|
84
|
+
#~ game = GameFake.new(@ui, @level_set_name)
|
85
|
+
#~ game.start_level
|
86
|
+
#~ game.move(:up)
|
87
|
+
#~ assert_equal 1, game.move_number
|
88
|
+
#~ end
|
89
|
+
|
90
|
+
def test_undo_must_return_move_result
|
91
|
+
game = GameFake.new(@ui, @level_set_name)
|
92
|
+
game.start_level
|
93
|
+
assert_equal MoveResult, game.undo.class
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_redo_must_return_move_result
|
97
|
+
game = GameFake.new(@ui, @level_set_name)
|
98
|
+
game.start_level
|
99
|
+
assert_equal MoveResult, game.undo.class
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_title_of_the_set
|
103
|
+
assert_equal 'Original & Extra', @game.set_title
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_size_of_the_set
|
107
|
+
assert_equal 90, @game.set_size
|
108
|
+
end
|
109
|
+
|
110
|
+
# must create a fake config file to test this
|
111
|
+
#~ def test_next_level
|
112
|
+
#~ game = GameFake.new(@ui, @level_set_name)
|
113
|
+
#~ game.start_level
|
114
|
+
#~ game.next_level
|
115
|
+
#~ assert_equal 2, game.level_number
|
116
|
+
#~ end
|
117
|
+
|
118
|
+
def test_load_level
|
119
|
+
game = GameFake.new(@ui, @level_set_name)
|
120
|
+
game.start_level
|
121
|
+
game.load_level 3
|
122
|
+
assert_equal 3, game.level_number
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_restart_set
|
126
|
+
game = GameFake.new(@ui, @level_set_name)
|
127
|
+
game.start_level
|
128
|
+
game.load_level 3
|
129
|
+
game.restart_set
|
130
|
+
assert_equal 1, game.level_number
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_load_a_set_that_doesnt_exist
|
134
|
+
game = GameFake.new(@ui, @level_set_name)
|
135
|
+
game.start_level
|
136
|
+
game.load_a_new_set 'doesnt_exist.xsb'
|
137
|
+
# assert nothing has changed
|
138
|
+
|
139
|
+
# must create a fake config file to test this
|
140
|
+
#~ assert_equal 1, game.level_number
|
141
|
+
|
142
|
+
assert_equal 'Original & Extra', game.set_title
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_load_a_set_of_levels
|
146
|
+
game = GameFake.new(@ui, @level_set_name)
|
147
|
+
game.start_level
|
148
|
+
game.load_a_new_set 'test_file2.xsb'
|
149
|
+
assert_equal 1, game.level_number
|
150
|
+
assert_equal 'another test file', game.set_title
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
data/test/tc_install.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class TC_Install< Test::Unit::TestCase
|
2
|
+
include RSokoban
|
3
|
+
|
4
|
+
def test_create_folder
|
5
|
+
Install.create_folder 'temp/record'
|
6
|
+
assert File.exist? 'temp/record'
|
7
|
+
assert File.directory? 'temp/record'
|
8
|
+
ensure
|
9
|
+
FileUtils.remove_dir('temp') if File.exist?('temp')
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
class TC_LayeredMap < Test::Unit::TestCase
|
2
|
+
include RSokoban
|
3
|
+
|
4
|
+
MAP_1 = [ '####',
|
5
|
+
'#..#',
|
6
|
+
'#$$#',
|
7
|
+
'#@ #',
|
8
|
+
'####']
|
9
|
+
|
10
|
+
MAP_2 = [ '####',
|
11
|
+
'#*.#',
|
12
|
+
'# $#',
|
13
|
+
'#@ #',
|
14
|
+
'####']
|
15
|
+
|
16
|
+
FLOOR_1 = [ '####',
|
17
|
+
'# #',
|
18
|
+
'# #',
|
19
|
+
'# #',
|
20
|
+
'####']
|
21
|
+
def setup
|
22
|
+
map = Map.new MAP_1
|
23
|
+
@lay_map = LayeredMap.new(map)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_must_be_initialized_from_map_or_array_of_string
|
27
|
+
assert_raise(ArgumentError) do
|
28
|
+
@lay_map = LayeredMap.new('a string')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_floor
|
33
|
+
assert_equal FLOOR_1, @lay_map.floor
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_man_position
|
37
|
+
man = @lay_map.man
|
38
|
+
assert_equal 1, man.x
|
39
|
+
assert_equal 3, man.y
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_storages_positions
|
43
|
+
store = Storage.new(1, 1)
|
44
|
+
assert_equal true, @lay_map.storages.include?(store)
|
45
|
+
|
46
|
+
store = Storage.new(2, 1)
|
47
|
+
assert_equal true, @lay_map.storages.include?(store)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_crates_position
|
51
|
+
crate = Crate.new(1, 2)
|
52
|
+
assert_equal true, @lay_map.crates.include?(crate)
|
53
|
+
|
54
|
+
crate = Crate.new(2, 2)
|
55
|
+
assert_equal true, @lay_map.crates.include?(crate)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_map_as_array
|
59
|
+
assert_equal MAP_1, @lay_map.map_as_array
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_expected_wall
|
63
|
+
assert_equal WALL, @lay_map.what_is_on(0, 0)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_expected_floor
|
67
|
+
assert_equal FLOOR, @lay_map.what_is_on(2, 3)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_expected_crate
|
71
|
+
assert_equal CRATE, @lay_map.what_is_on(1, 2)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_expected_storage
|
75
|
+
assert_equal STORAGE, @lay_map.what_is_on(1, 1)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_expected_crate_on_storage
|
79
|
+
lay_map = LayeredMap.new(Map.new(MAP_2))
|
80
|
+
assert_equal CRATE_ON_STORAGE, lay_map.what_is_on(1, 1)
|
81
|
+
end
|
82
|
+
|
83
|
+
### BUGS #################################################
|
84
|
+
|
85
|
+
MAP_BUG_9 = [
|
86
|
+
'####',
|
87
|
+
'#$+#',
|
88
|
+
'# #',
|
89
|
+
'####']
|
90
|
+
|
91
|
+
# Some levels crashes (like microban.xsb #101) because they contain man on storage in its map.
|
92
|
+
def test_bug_9_man_on_storage
|
93
|
+
map = Map.new MAP_BUG_9
|
94
|
+
lay_map = LayeredMap.new(map)
|
95
|
+
|
96
|
+
man = lay_map.man
|
97
|
+
assert_equal 2, man.x
|
98
|
+
assert_equal 1, man.y
|
99
|
+
|
100
|
+
assert_equal STORAGE, lay_map.what_is_on(2, 1)
|
101
|
+
|
102
|
+
assert_equal CRATE, lay_map.what_is_on(1, 1)
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|