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/test/tc_level_set.rb
CHANGED
@@ -31,19 +31,19 @@ class TC_LevelSet < Test::Unit::TestCase
|
|
31
31
|
def test_raw_levels_list_accessors
|
32
32
|
ins = RSokoban::LevelSet.new
|
33
33
|
list = [].push(RSokoban::RawLevel.new('title', ['###']))
|
34
|
-
ins.
|
35
|
-
assert_equal list, ins.
|
34
|
+
ins.raw_levels = list
|
35
|
+
assert_equal list, ins.raw_levels
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_default_raw_levels_list
|
39
39
|
ins = RSokoban::LevelSet.new
|
40
|
-
assert_equal [], ins.
|
40
|
+
assert_equal [], ins.raw_levels
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_get_size
|
44
44
|
ins = RSokoban::LevelSet.new
|
45
45
|
list = [].push(RSokoban::RawLevel.new('title', ['###']))
|
46
|
-
ins.
|
46
|
+
ins.raw_levels = list
|
47
47
|
assert_equal 1, ins.size
|
48
48
|
end
|
49
49
|
|
data/test/tc_map.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
class TC_Map < Test::Unit::TestCase
|
2
|
-
|
2
|
+
include RSokoban
|
3
|
+
|
3
4
|
def setup
|
4
|
-
@map =
|
5
|
+
@map = Map.new
|
5
6
|
end
|
6
7
|
|
7
8
|
def test_default_picture_is_empy
|
8
|
-
assert_equal [],
|
9
|
+
assert_equal [], Map.new.rows
|
9
10
|
end
|
10
11
|
|
11
12
|
def test_assigning_rows
|
@@ -13,16 +14,52 @@ class TC_Map < Test::Unit::TestCase
|
|
13
14
|
assert_equal ['###', '# #', '###'], @map.rows
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
+
Level_1 = [
|
18
|
+
' #####',
|
19
|
+
' # #',
|
20
|
+
' #$ #',
|
21
|
+
' ### $##',
|
22
|
+
' # $ $ #',
|
23
|
+
'### # ## # ######',
|
24
|
+
'# # ## ##### ..#',
|
25
|
+
'# $ $ ..#',
|
26
|
+
'##### ### #@## ..#',
|
27
|
+
' # #########',
|
28
|
+
' #######']
|
29
|
+
|
30
|
+
Level_1_after_transform = [
|
31
|
+
'oooo#####oooooooooo',
|
32
|
+
'oooo# #oooooooooo',
|
33
|
+
'oooo#$ #oooooooooo',
|
34
|
+
'oo### $##ooooooooo',
|
35
|
+
'oo# $ $ #ooooooooo',
|
36
|
+
'### # ## #ooo######',
|
37
|
+
'# # ## ##### ..#',
|
38
|
+
'# $ $ ..#',
|
39
|
+
'##### ### #@## ..#',
|
40
|
+
'oooo# #########',
|
41
|
+
'oooo#######oooooooo']
|
42
|
+
|
43
|
+
def test_map_should_tranform_the_array
|
44
|
+
map = Map.new(Level_1)
|
45
|
+
assert_equal Level_1_after_transform, map.rows
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_height
|
17
49
|
@map.rows = ['###', '# #', '###']
|
18
50
|
assert_equal 3, @map.height
|
19
51
|
end
|
20
52
|
|
21
|
-
def
|
53
|
+
def test_width
|
22
54
|
@map.rows = ['###', '####', '##']
|
23
55
|
assert_equal 4, @map.width
|
24
56
|
end
|
25
57
|
|
58
|
+
def test_width_at_instanciation
|
59
|
+
map = Map.new ['###', '####', '##']
|
60
|
+
assert_equal 4, map.width
|
61
|
+
end
|
62
|
+
|
26
63
|
def test_get_a_row
|
27
64
|
@map.rows = ['###', '# #', '###']
|
28
65
|
assert_equal '# #', @map[1]
|
@@ -30,11 +67,10 @@ class TC_Map < Test::Unit::TestCase
|
|
30
67
|
|
31
68
|
def test_each_row
|
32
69
|
@map.rows = ['#', '##', '###']
|
33
|
-
|
34
|
-
@map.
|
35
|
-
|
36
|
-
|
37
|
-
}
|
70
|
+
assert_equal '#oo', @map.rows[0]
|
71
|
+
assert_equal '##o', @map.rows[1]
|
72
|
+
assert_equal '###', @map.rows[2]
|
73
|
+
assert_equal nil, @map.rows[3]
|
38
74
|
end
|
39
75
|
|
40
76
|
end
|
data/test/tc_record.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
class TC_Record < Test::Unit::TestCase
|
2
|
+
include RSokoban
|
3
|
+
|
4
|
+
RECORD_ORIGINAL = 'record/original.yaml'
|
5
|
+
RECORD_TEST = 'record/test.yaml'
|
6
|
+
|
7
|
+
def get_original
|
8
|
+
Record.new RECORD_ORIGINAL
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_no_file
|
12
|
+
assert_raise(ArgumentError) do
|
13
|
+
Record.new 'record/truc.yaml'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_load_file_is_a_synonym_of_new
|
18
|
+
record = Record.load_file RECORD_ORIGINAL
|
19
|
+
assert record.respond_to? :record_of_level
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_get_record_of_level_1
|
23
|
+
record = get_original
|
24
|
+
num = record.record_of_level(1)
|
25
|
+
assert_equal 200, num
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_get_record_of_level_22
|
29
|
+
record = get_original
|
30
|
+
num = record.record_of_level(22)
|
31
|
+
assert_equal 321, num
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_get_record_that_doesnt_exist
|
35
|
+
record = get_original
|
36
|
+
num = record.record_of_level(100)
|
37
|
+
assert_equal nil, num
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_create_a_new_record_file
|
41
|
+
begin
|
42
|
+
record = Record.load_file RECORD_TEST
|
43
|
+
rescue ArgumentError => e
|
44
|
+
record = Record.create RECORD_TEST
|
45
|
+
ensure
|
46
|
+
assert File.exist? RECORD_TEST
|
47
|
+
assert record.respond_to? :record_of_level
|
48
|
+
end
|
49
|
+
ensure
|
50
|
+
FileUtils.remove_file(RECORD_TEST) if File.exist?(RECORD_TEST)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_cannot_create_existing_file
|
54
|
+
assert_raise(ArgumentError) do
|
55
|
+
Record.create 'record/original.yaml'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_save_a_new_record
|
60
|
+
record = Record.create RECORD_TEST
|
61
|
+
# level number, number of moves
|
62
|
+
record.add 1, 123
|
63
|
+
num = record.record_of_level(1)
|
64
|
+
assert_equal 123, num
|
65
|
+
ensure
|
66
|
+
FileUtils.remove_file(RECORD_TEST) if File.exist?(RECORD_TEST)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_save_a_new_record_to_file
|
70
|
+
record = Record.create RECORD_TEST
|
71
|
+
record.add 1, 123
|
72
|
+
record = Record.load_file RECORD_TEST
|
73
|
+
num = record.record_of_level(1)
|
74
|
+
assert_equal 123, num
|
75
|
+
ensure
|
76
|
+
FileUtils.remove_file(RECORD_TEST) if File.exist?(RECORD_TEST)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_update_a_record
|
80
|
+
record = Record.create RECORD_TEST
|
81
|
+
record.add 1, 123
|
82
|
+
record.add 1, 456
|
83
|
+
num = record.record_of_level(1)
|
84
|
+
assert_equal 456, num
|
85
|
+
ensure
|
86
|
+
FileUtils.remove_file(RECORD_TEST) if File.exist?(RECORD_TEST)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_updtae_a_record_to_file
|
90
|
+
record = Record.create RECORD_TEST
|
91
|
+
record.add 1, 123
|
92
|
+
record.add 1, 456
|
93
|
+
record = Record.load_file RECORD_TEST
|
94
|
+
num = record.record_of_level(1)
|
95
|
+
assert_equal 456, num
|
96
|
+
ensure
|
97
|
+
FileUtils.remove_file(RECORD_TEST) if File.exist?(RECORD_TEST)
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -1,84 +1,85 @@
|
|
1
1
|
|
2
|
-
class
|
3
|
-
|
2
|
+
class TC_SetLoader < Test::Unit::TestCase
|
3
|
+
include RSokoban
|
4
|
+
|
4
5
|
def setup
|
5
6
|
$RSOKOBAN_DATA_PATH = File.expand_path(File.dirname(__FILE__))
|
6
7
|
end
|
7
8
|
|
8
9
|
def test_instance
|
9
|
-
ins =
|
10
|
-
assert_equal true, ins.instance_of?(
|
10
|
+
ins = SetLoader.new "original.xsb"
|
11
|
+
assert_equal true, ins.instance_of?(SetLoader)
|
11
12
|
end
|
12
13
|
|
13
14
|
def test_NoFileError
|
14
|
-
assert_raise(
|
15
|
-
ins =
|
15
|
+
assert_raise(NoFileError) do
|
16
|
+
ins = SetLoader.new "inexistant"
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
20
|
def test_title_of_set
|
20
|
-
ins =
|
21
|
+
ins = SetLoader.new "test_file1.xsb"
|
21
22
|
assert_equal 'test level', ins.title
|
22
23
|
end
|
23
24
|
|
24
25
|
def test_description_of_set
|
25
|
-
ins =
|
26
|
+
ins = SetLoader.new "test_file1.xsb"
|
26
27
|
assert_equal "one simple level to test\n", ins.file_description
|
27
28
|
end
|
28
29
|
|
29
30
|
def test_level_1
|
30
|
-
ins =
|
31
|
-
level =
|
31
|
+
ins = SetLoader.new "test_file2.xsb"
|
32
|
+
level = Level.new(RawLevel.new('1', Map.new(['#####', '#.$@#', '#####'])))
|
32
33
|
assert_equal level, ins.level(1)
|
33
34
|
end
|
34
35
|
|
35
36
|
def test_level_2
|
36
|
-
ins =
|
37
|
-
level =
|
37
|
+
ins = SetLoader.new "test_file2.xsb"
|
38
|
+
level = Level.new(RawLevel.new('2', ['######', '#. $@#', '######']))
|
38
39
|
assert_equal level, ins.level(2)
|
39
40
|
end
|
40
41
|
|
41
42
|
def test_level_3
|
42
|
-
ins =
|
43
|
-
level =
|
43
|
+
ins = SetLoader.new "test_file2.xsb"
|
44
|
+
level = Level.new(RawLevel.new('3', ['#####', '# #', '#$ #', '#. @#', '#####' ]))
|
44
45
|
assert_equal level, ins.level(3)
|
45
46
|
end
|
46
47
|
|
47
48
|
def test_level_4_title
|
48
|
-
ins =
|
49
|
+
ins = SetLoader.new "test_file2.xsb"
|
49
50
|
assert_equal '4', ins.level(4).title
|
50
51
|
end
|
51
52
|
|
52
53
|
def test_level_5_title
|
53
|
-
ins =
|
54
|
+
ins = SetLoader.new "test_file2.xsb"
|
54
55
|
assert_equal '5', ins.level(5).title
|
55
56
|
end
|
56
57
|
|
57
58
|
def test_level_6_title
|
58
|
-
ins =
|
59
|
+
ins = SetLoader.new "test_file2.xsb"
|
59
60
|
assert_equal '6', ins.level(6).title
|
60
61
|
end
|
61
62
|
|
62
63
|
def test_level_6
|
63
|
-
ins =
|
64
|
-
level =
|
64
|
+
ins = SetLoader.new "test_file2.xsb"
|
65
|
+
level = Level.new(RawLevel.new('6', Map.new(['#####', '#.$@#', '#####'])))
|
65
66
|
assert_equal level, ins.level(6)
|
66
67
|
end
|
67
68
|
|
68
69
|
def test_level_number_that_doesnt_exist
|
69
|
-
ins =
|
70
|
-
assert_raise(
|
70
|
+
ins = SetLoader.new "test_file2.xsb"
|
71
|
+
assert_raise(LevelNumberTooHighError) do
|
71
72
|
assert_equal '99', ins.level(99).title
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
76
|
def test_get_size_of_set
|
76
|
-
ins =
|
77
|
+
ins = SetLoader.new "original.xsb"
|
77
78
|
assert_equal 90, ins.size
|
78
79
|
end
|
79
80
|
|
80
81
|
def test_get_the_description_of_a_set
|
81
|
-
ins =
|
82
|
+
ins = SetLoader.new "original.xsb"
|
82
83
|
desc = "Copyright: a\nE-Mail:\nWeb Site:\n\nThe 50 original levels from Sokoban plus the 40 from Extra.\n"
|
83
84
|
assert_equal desc, ins.file_description
|
84
85
|
end
|
@@ -88,7 +89,7 @@ class TC_LevelLoader < Test::Unit::TestCase
|
|
88
89
|
# There was a bug where size was majored by one when the xsb file
|
89
90
|
# finish by several blank lines.
|
90
91
|
def test_get_size_of_set_buggy
|
91
|
-
ins =
|
92
|
+
ins = SetLoader.new "test_file2.xsb"
|
92
93
|
assert_equal 6, ins.size
|
93
94
|
end
|
94
95
|
|
data/test/test.rb
CHANGED
@@ -6,7 +6,7 @@ require "rsokoban"
|
|
6
6
|
require "test/unit"
|
7
7
|
|
8
8
|
require "../test/tc_level"
|
9
|
-
require "../test/
|
9
|
+
require "../test/tc_set_loader"
|
10
10
|
require "../test/tc_level_set"
|
11
11
|
require "../test/tc_raw_level"
|
12
12
|
require "../test/tc_position"
|
@@ -16,6 +16,13 @@ require "../test/tc_move_recorder"
|
|
16
16
|
require "../test/tc_map"
|
17
17
|
require "../test/ui/tc_console"
|
18
18
|
require "../test/ui/tc_player_action"
|
19
|
+
require "../test/ui/tc_skin"
|
19
20
|
require "../test/tc_extensions"
|
20
|
-
require "../test/tc_game"
|
21
21
|
require "../test/tc_move_result"
|
22
|
+
require "../test/tc_game"
|
23
|
+
require "../test/tc_game_ui"
|
24
|
+
require "../test/tc_game_gui"
|
25
|
+
require "../test/tc_game_factory"
|
26
|
+
require "../test/tc_layered_map"
|
27
|
+
require "../test/tc_record"
|
28
|
+
require "../test/tc_install"
|
data/test/ui/tc_skin.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
class TC_Skin < Test::Unit::TestCase
|
2
|
+
include RSokoban
|
3
|
+
|
4
|
+
$RSOKOBAN_PATH = File.expand_path(File.dirname(__FILE__) + '/../..')
|
5
|
+
|
6
|
+
BLUE_GRANITE_FILENAMES = {
|
7
|
+
:store => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'store.bmp'),
|
8
|
+
:crate => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'crate.bmp'),
|
9
|
+
:floor => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'floor.bmp'),
|
10
|
+
:crate_store => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'crate_store.bmp'),
|
11
|
+
:outside => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'outside.bmp'),
|
12
|
+
:man_up => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_up.bmp'),
|
13
|
+
:man_down => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_down.bmp'),
|
14
|
+
:man_left => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_left.bmp'),
|
15
|
+
:man_right => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_right.bmp'),
|
16
|
+
:man_store_up => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_store_up.bmp'),
|
17
|
+
:man_store_down => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_store_down.bmp'),
|
18
|
+
:man_store_left => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_store_left.bmp'),
|
19
|
+
:man_store_right => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'man_store_right.bmp'),
|
20
|
+
:wall => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
21
|
+
:wall_d => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
22
|
+
:wall_dl => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
23
|
+
:wall_dlr => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
24
|
+
:wall_dr => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
25
|
+
:wall_l => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
26
|
+
:wall_lr => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
27
|
+
:wall_r => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
28
|
+
:wall_u => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
29
|
+
:wall_ud => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
30
|
+
:wall_udl => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
31
|
+
:wall_udlr => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
32
|
+
:wall_udr => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
33
|
+
:wall_ul => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
34
|
+
:wall_ulr => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp'),
|
35
|
+
:wall_ur => File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite', 'wall.bmp')}
|
36
|
+
|
37
|
+
def test_list_all_skins
|
38
|
+
list = UI::Skin.new.list_skins
|
39
|
+
# This is the list of skins provided with the program
|
40
|
+
["Sokodroid", "BlueGranite", "HeavyMetal"].each do |item|
|
41
|
+
assert list.include? item
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_get_path_of_a_skin_dir
|
46
|
+
sk = UI::Skin.new
|
47
|
+
expected = File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite')
|
48
|
+
assert_equal expected, sk.path_of_skin('BlueGranite')
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_get_path_of_an_unexisting_dir
|
52
|
+
sk = UI::Skin.new
|
53
|
+
assert_raise(ArgumentError) do
|
54
|
+
sk.path_of_skin('unknown')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_size_of_a_skin
|
59
|
+
sk = UI::Skin.new
|
60
|
+
full_path_dir = File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite')
|
61
|
+
assert_equal 30, sk.size_of(full_path_dir)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_list_of_filename
|
65
|
+
sk = UI::Skin.new
|
66
|
+
full_path_dir = File.join($RSOKOBAN_PATH, 'skins', 'BlueGranite')
|
67
|
+
filenames = sk.filenames full_path_dir
|
68
|
+
assert_equal BLUE_GRANITE_FILENAMES, filenames
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RSokoban
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.76"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xavier Nayrac
|
@@ -9,11 +9,15 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-02-27 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
16
|
+
description: |-
|
17
|
+
RSokoban is a clone of the famous Sokoban game.
|
18
|
+
I wrote this program just to improve my skills in Ruby.
|
19
|
+
Note: Never tested on windows...
|
20
|
+
Enjoy the game !
|
17
21
|
email: xavier.nayrac@gmail.com
|
18
22
|
executables:
|
19
23
|
- rsokoban
|
@@ -35,12 +39,23 @@ files:
|
|
35
39
|
- lib/rsokoban/ui/base_ui.rb
|
36
40
|
- lib/rsokoban/ui/tk_ui.rb
|
37
41
|
- lib/rsokoban/ui/tk_dialogs.rb
|
38
|
-
- lib/rsokoban/ui/
|
42
|
+
- lib/rsokoban/ui/skin.rb
|
39
43
|
- lib/rsokoban/ui/console.rb
|
40
44
|
- lib/rsokoban/ui/player_action.rb
|
41
|
-
- lib/rsokoban/
|
45
|
+
- lib/rsokoban/config.rb
|
46
|
+
- lib/rsokoban/layered_map.rb
|
47
|
+
- lib/rsokoban/record.rb
|
42
48
|
- lib/rsokoban/raw_level.rb
|
49
|
+
- lib/rsokoban/game/game.rb
|
50
|
+
- lib/rsokoban/game/game_gui.rb
|
51
|
+
- lib/rsokoban/game/game_factory.rb
|
52
|
+
- lib/rsokoban/game/game_ui.rb
|
53
|
+
- lib/rsokoban/game/game_curses.rb
|
54
|
+
- lib/rsokoban/game/game_portable.rb
|
55
|
+
- lib/rsokoban/game/game_tk.rb
|
56
|
+
- lib/rsokoban/set_loader.rb
|
43
57
|
- lib/rsokoban/position.rb
|
58
|
+
- lib/rsokoban/install.rb
|
44
59
|
- lib/rsokoban/level.rb
|
45
60
|
- lib/rsokoban/map.rb
|
46
61
|
- lib/rsokoban/extensions.rb
|
@@ -48,25 +63,64 @@ files:
|
|
48
63
|
- lib/rsokoban/move_result.rb
|
49
64
|
- lib/rsokoban/man.rb
|
50
65
|
- bin/rsokoban
|
66
|
+
- data/big.xsb
|
51
67
|
- data/original.xsb
|
52
68
|
- data/test.xsb
|
53
69
|
- data/microban.xsb
|
54
|
-
- skins/
|
55
|
-
- skins/
|
56
|
-
- skins/
|
57
|
-
- skins/
|
58
|
-
- skins/
|
59
|
-
- skins/
|
60
|
-
- skins/
|
61
|
-
- skins/
|
62
|
-
- skins/
|
63
|
-
- skins/
|
64
|
-
- skins/
|
65
|
-
- skins/
|
66
|
-
- skins/
|
67
|
-
- skins/
|
68
|
-
- skins/
|
69
|
-
- skins/
|
70
|
+
- skins/AntiqueDesk/outside.bmp
|
71
|
+
- skins/AntiqueDesk/store.bmp
|
72
|
+
- skins/AntiqueDesk/man_left.bmp
|
73
|
+
- skins/AntiqueDesk/man_up.bmp
|
74
|
+
- skins/AntiqueDesk/man_store_right.bmp
|
75
|
+
- skins/AntiqueDesk/man_right.bmp
|
76
|
+
- skins/AntiqueDesk/crate_store.bmp
|
77
|
+
- skins/AntiqueDesk/skin.conf
|
78
|
+
- skins/AntiqueDesk/man_store_up.bmp
|
79
|
+
- skins/AntiqueDesk/floor.bmp
|
80
|
+
- skins/AntiqueDesk/man_store_left.bmp
|
81
|
+
- skins/AntiqueDesk/crate.bmp
|
82
|
+
- skins/AntiqueDesk/man_store_down.bmp
|
83
|
+
- skins/AntiqueDesk/wall.bmp
|
84
|
+
- skins/AntiqueDesk/man_down.bmp
|
85
|
+
- skins/HeavyMetal/outside.bmp
|
86
|
+
- skins/HeavyMetal/store.bmp
|
87
|
+
- skins/HeavyMetal/wall_udl.bmp
|
88
|
+
- skins/HeavyMetal/wall_d.bmp
|
89
|
+
- skins/HeavyMetal/wall_u.bmp
|
90
|
+
- skins/HeavyMetal/crate_store.bmp
|
91
|
+
- skins/HeavyMetal/wall_udr.bmp
|
92
|
+
- skins/HeavyMetal/skin.conf
|
93
|
+
- skins/HeavyMetal/floor.bmp
|
94
|
+
- skins/HeavyMetal/crate.bmp
|
95
|
+
- skins/HeavyMetal/wall_udlr.bmp
|
96
|
+
- skins/HeavyMetal/wall_lr.bmp
|
97
|
+
- skins/HeavyMetal/man_store.bmp
|
98
|
+
- skins/HeavyMetal/wall_ur.bmp
|
99
|
+
- skins/HeavyMetal/wall_dlr.bmp
|
100
|
+
- skins/HeavyMetal/wall_dl.bmp
|
101
|
+
- skins/HeavyMetal/wall_r.bmp
|
102
|
+
- skins/HeavyMetal/wall.bmp
|
103
|
+
- skins/HeavyMetal/wall_ud.bmp
|
104
|
+
- skins/HeavyMetal/wall_dr.bmp
|
105
|
+
- skins/HeavyMetal/wall_ulr.bmp
|
106
|
+
- skins/HeavyMetal/man.bmp
|
107
|
+
- skins/HeavyMetal/wall_ul.bmp
|
108
|
+
- skins/HeavyMetal/wall_l.bmp
|
109
|
+
- skins/BlueGranite/outside.bmp
|
110
|
+
- skins/BlueGranite/store.bmp
|
111
|
+
- skins/BlueGranite/man_left.bmp
|
112
|
+
- skins/BlueGranite/man_up.bmp
|
113
|
+
- skins/BlueGranite/man_store_right.bmp
|
114
|
+
- skins/BlueGranite/man_right.bmp
|
115
|
+
- skins/BlueGranite/crate_store.bmp
|
116
|
+
- skins/BlueGranite/skin.conf
|
117
|
+
- skins/BlueGranite/man_store_up.bmp
|
118
|
+
- skins/BlueGranite/floor.bmp
|
119
|
+
- skins/BlueGranite/man_store_left.bmp
|
120
|
+
- skins/BlueGranite/crate.bmp
|
121
|
+
- skins/BlueGranite/man_store_down.bmp
|
122
|
+
- skins/BlueGranite/wall.bmp
|
123
|
+
- skins/BlueGranite/man_down.bmp
|
70
124
|
- README.rdoc
|
71
125
|
- TODO
|
72
126
|
- NEWS
|
@@ -74,26 +128,35 @@ files:
|
|
74
128
|
- COPYING
|
75
129
|
- Rakefile
|
76
130
|
- test/test_file1.xsb
|
131
|
+
- test/tc_set_loader.rb
|
77
132
|
- test/tc_move_recorder.rb
|
78
|
-
- test/tc_level_loader.rb
|
79
133
|
- test/test_file2.xsb
|
80
134
|
- test/tc_level.rb
|
81
135
|
- test/tc_move_result.rb
|
136
|
+
- test/record/original.yaml
|
82
137
|
- test/tc_position.rb
|
83
138
|
- test/original.xsb
|
84
|
-
- test/ui
|
85
139
|
- test/ui/tc_console.rb
|
140
|
+
- test/ui/tc_skin.rb
|
86
141
|
- test/ui/tc_player_action.rb
|
142
|
+
- test/tc_game_gui.rb
|
87
143
|
- test/tc_map.rb
|
144
|
+
- test/tc_game_factory.rb
|
145
|
+
- test/tc_install.rb
|
88
146
|
- test/tc_extensions.rb
|
89
147
|
- test/tc_raw_level.rb
|
90
148
|
- test/tc_man.rb
|
149
|
+
- test/tc_layered_map.rb
|
91
150
|
- test/tc_game.rb
|
92
151
|
- test/test.rb
|
93
152
|
- test/tc_moveable.rb
|
153
|
+
- test/tc_record.rb
|
154
|
+
- test/tc_game_ui.rb
|
94
155
|
- test/tc_level_set.rb
|
95
|
-
has_rdoc:
|
156
|
+
has_rdoc: true
|
96
157
|
homepage: https://github.com/lkdjiin/RSokoban/wiki
|
158
|
+
licenses: []
|
159
|
+
|
97
160
|
post_install_message:
|
98
161
|
rdoc_options: []
|
99
162
|
|
@@ -114,9 +177,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
177
|
requirements: []
|
115
178
|
|
116
179
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
180
|
+
rubygems_version: 1.3.4
|
118
181
|
signing_key:
|
119
|
-
specification_version:
|
182
|
+
specification_version: 3
|
120
183
|
summary: Clone of the Sokoban game.
|
121
184
|
test_files:
|
122
185
|
- test/test.rb
|
@@ -1,81 +0,0 @@
|
|
1
|
-
module RSokoban
|
2
|
-
|
3
|
-
# I load a file containing the levels of the game. On instanciation,
|
4
|
-
# you tell me a file (in xsb file format) containing one or more levels.
|
5
|
-
#
|
6
|
-
# You can then ask for a particular level (a Level object). You can use me too
|
7
|
-
# to find the description of a level.
|
8
|
-
# @todo give some examples
|
9
|
-
# @todo document and refactor
|
10
|
-
class LevelLoader
|
11
|
-
|
12
|
-
# @param [String] filename an xsb filename.
|
13
|
-
# This file is searched in thedata/ folder.
|
14
|
-
# @raise [RSokoban::NoFileError] if filename doesn't exist
|
15
|
-
# @see LevelSet overview of .xsb file format
|
16
|
-
def initialize filename
|
17
|
-
filename = "#{$RSOKOBAN_DATA_PATH}/" + filename
|
18
|
-
raise NoFileError unless File.exist?(filename)
|
19
|
-
@set = LevelSet.new
|
20
|
-
file = open(filename)
|
21
|
-
@set.title = file.readline.get_xsb_info_line_chomp
|
22
|
-
file.readline # must be blank line
|
23
|
-
line = file.readline
|
24
|
-
desc = ''
|
25
|
-
while line[0] == ?; do
|
26
|
-
desc += line.get_xsb_info_line
|
27
|
-
line = file.readline
|
28
|
-
end
|
29
|
-
@set.description = desc
|
30
|
-
|
31
|
-
loop do
|
32
|
-
begin
|
33
|
-
line = file.readline.chomp
|
34
|
-
raw = []
|
35
|
-
while line =~ /^ *#/
|
36
|
-
raw.push line
|
37
|
-
line = file.readline.chomp
|
38
|
-
end
|
39
|
-
line = line.get_xsb_info_line_chomp
|
40
|
-
@set.rawLevels.push RawLevel.new(line, raw) unless raw.empty?
|
41
|
-
|
42
|
-
line = file.readline
|
43
|
-
while line[0, 1] == ';'
|
44
|
-
line = file.readline
|
45
|
-
end
|
46
|
-
# must be a blank line here
|
47
|
-
rescue EOFError
|
48
|
-
break
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# Get the level numbered +num+
|
54
|
-
# @param [Fixnum] num a level number in base 1
|
55
|
-
# @return [Level]
|
56
|
-
def level num
|
57
|
-
raise LevelNumberTooHighError if num > @set.rawLevels.size
|
58
|
-
Level.new @set.rawLevels[num-1]
|
59
|
-
end
|
60
|
-
|
61
|
-
# Get the description field of the loaded set of levels.
|
62
|
-
# @return [String] possibly multi-line
|
63
|
-
def file_description
|
64
|
-
@set.description
|
65
|
-
end
|
66
|
-
|
67
|
-
# Get number of levels in this set.
|
68
|
-
# @return [Fixnum]
|
69
|
-
def size
|
70
|
-
@set.size
|
71
|
-
end
|
72
|
-
|
73
|
-
# Get title of this set.
|
74
|
-
# @return [String]
|
75
|
-
def title
|
76
|
-
@set.title
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|