RSokoban 0.71
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/COPYING +674 -0
- data/README.rdoc +47 -0
- data/TODO +34 -0
- data/bin/rsokoban +10 -0
- data/data/microban.xsb +1838 -0
- data/data/original.xsb +1497 -0
- data/data/test.xsb +30 -0
- data/lib/rsokoban/crate.rb +16 -0
- data/lib/rsokoban/exception.rb +7 -0
- data/lib/rsokoban/game.rb +105 -0
- data/lib/rsokoban/level.rb +269 -0
- data/lib/rsokoban/level_loader.rb +58 -0
- data/lib/rsokoban/level_set.rb +31 -0
- data/lib/rsokoban/man.rb +17 -0
- data/lib/rsokoban/moveable.rb +22 -0
- data/lib/rsokoban/option.rb +93 -0
- data/lib/rsokoban/position.rb +24 -0
- data/lib/rsokoban/raw_level.rb +16 -0
- data/lib/rsokoban/storage.rb +14 -0
- data/lib/rsokoban/ui/console.rb +107 -0
- data/lib/rsokoban/ui/curses_console.rb +123 -0
- data/lib/rsokoban/ui/ui.rb +44 -0
- data/lib/rsokoban.rb +29 -0
- data/test/original.xsb +1497 -0
- data/test/tc_level.rb +773 -0
- data/test/tc_level_loader.rb +88 -0
- data/test/tc_level_set.rb +42 -0
- data/test/tc_man.rb +55 -0
- data/test/tc_moveable.rb +41 -0
- data/test/tc_position.rb +75 -0
- data/test/tc_raw_level.rb +35 -0
- data/test/test.rb +16 -0
- data/test/test_file1.xsb +9 -0
- data/test/test_file2.xsb +49 -0
- data/test/ui/tc_console.rb +75 -0
- metadata +102 -0
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
class TC_LevelLoader < Test::Unit::TestCase
|
3
|
+
|
4
|
+
def setup
|
5
|
+
$RSOKOBAN_DATA_PATH = File.expand_path(File.dirname(__FILE__))
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_instance
|
9
|
+
ins = RSokoban::LevelLoader.new "original.xsb"
|
10
|
+
assert_equal true, ins.instance_of?(RSokoban::LevelLoader)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_NoFileError
|
14
|
+
assert_raise(RSokoban::NoFileError) do
|
15
|
+
ins = RSokoban::LevelLoader.new "inexistant"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_title_of_set
|
20
|
+
ins = RSokoban::LevelLoader.new "test_file1.xsb"
|
21
|
+
assert_equal 'test level', ins.set.title
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_description_of_set
|
25
|
+
ins = RSokoban::LevelLoader.new "test_file1.xsb"
|
26
|
+
assert_equal "one simple level to test\n", ins.set.description
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_picture
|
30
|
+
ins = RSokoban::LevelLoader.new "test_file1.xsb"
|
31
|
+
expected = [ '#####',
|
32
|
+
'#.$@#',
|
33
|
+
'#####']
|
34
|
+
assert_equal expected, ins.set.rawLevels[0].picture
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_title_of_level
|
38
|
+
ins = RSokoban::LevelLoader.new "test_file1.xsb"
|
39
|
+
assert_equal "1", ins.set.rawLevels[0].title
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_level_1
|
43
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
44
|
+
level = RSokoban::Level.new(RSokoban::RawLevel.new('1', ['#####', '#.$@#', '#####']))
|
45
|
+
assert_equal level, ins.level(1)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_level_2
|
49
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
50
|
+
level = RSokoban::Level.new(RSokoban::RawLevel.new('2', ['######', '#. $@#', '######']))
|
51
|
+
assert_equal level, ins.level(2)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_level_3
|
55
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
56
|
+
level = RSokoban::Level.new(RSokoban::RawLevel.new('3', ['#####', '# #', '#$ #', '#. @#', '#####' ]))
|
57
|
+
assert_equal level, ins.level(3)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_level_4_title
|
61
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
62
|
+
assert_equal '4', ins.level(4).title
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_level_5_title
|
66
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
67
|
+
assert_equal '5', ins.level(5).title
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_level_6_title
|
71
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
72
|
+
assert_equal '6', ins.level(6).title
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_level_6
|
76
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
77
|
+
level = RSokoban::Level.new(RSokoban::RawLevel.new('6', ['#####', '#.$@#', '#####']))
|
78
|
+
assert_equal level, ins.level(6)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_level_number_that_doesnt_exist
|
82
|
+
ins = RSokoban::LevelLoader.new "test_file2.xsb"
|
83
|
+
assert_raise(RSokoban::LevelNumberTooHighError) do
|
84
|
+
assert_equal '99', ins.level(99).title
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
class TC_LevelSet < Test::Unit::TestCase
|
3
|
+
|
4
|
+
def test_instance
|
5
|
+
ins = RSokoban::LevelSet.new
|
6
|
+
assert_equal true, ins.instance_of?(RSokoban::LevelSet)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_title_accessors
|
10
|
+
ins = RSokoban::LevelSet.new
|
11
|
+
ins.title = "Le titre"
|
12
|
+
assert_equal "Le titre", ins.title
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_default_title
|
16
|
+
ins = RSokoban::LevelSet.new
|
17
|
+
assert_equal 'Unknown set title', ins.title
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_description_accessors
|
21
|
+
ins = RSokoban::LevelSet.new
|
22
|
+
ins.description = "description"
|
23
|
+
assert_equal "description", ins.description
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_default_description
|
27
|
+
ins = RSokoban::LevelSet.new
|
28
|
+
assert_equal 'Empty description', ins.description
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_raw_levels_list_accessors
|
32
|
+
ins = RSokoban::LevelSet.new
|
33
|
+
list = [].push(RSokoban::RawLevel.new('title', ['###']))
|
34
|
+
ins.rawLevels = list
|
35
|
+
assert_equal list, ins.rawLevels
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_default_raw_levels_list
|
39
|
+
ins = RSokoban::LevelSet.new
|
40
|
+
assert_equal [], ins.rawLevels
|
41
|
+
end
|
42
|
+
end
|
data/test/tc_man.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
class TC_Man < Test::Unit::TestCase
|
3
|
+
|
4
|
+
def testInstance
|
5
|
+
ins = RSokoban::Man.new 12, 3
|
6
|
+
assert_equal true, ins.instance_of?(RSokoban::Man)
|
7
|
+
end
|
8
|
+
|
9
|
+
def testXY
|
10
|
+
ins = RSokoban::Man.new 12, 3
|
11
|
+
assert_equal 12, ins.x
|
12
|
+
assert_equal 3, ins.y
|
13
|
+
end
|
14
|
+
|
15
|
+
def testUp
|
16
|
+
pos = RSokoban::Man.new 12, 3
|
17
|
+
pos.up
|
18
|
+
assert_equal 12, pos.x
|
19
|
+
assert_equal 2, pos.y
|
20
|
+
end
|
21
|
+
|
22
|
+
def testDown
|
23
|
+
pos = RSokoban::Man.new 12, 3
|
24
|
+
pos.down
|
25
|
+
assert_equal 12, pos.x
|
26
|
+
assert_equal 4, pos.y
|
27
|
+
end
|
28
|
+
|
29
|
+
def testLeft
|
30
|
+
pos = RSokoban::Man.new 12, 3
|
31
|
+
pos.left
|
32
|
+
assert_equal 11, pos.x
|
33
|
+
assert_equal 3, pos.y
|
34
|
+
end
|
35
|
+
|
36
|
+
def testRight
|
37
|
+
pos = RSokoban::Man.new 12, 3
|
38
|
+
pos.right
|
39
|
+
assert_equal 13, pos.x
|
40
|
+
assert_equal 3, pos.y
|
41
|
+
end
|
42
|
+
|
43
|
+
def testEqual
|
44
|
+
pos1 = RSokoban::Man.new 99, 98
|
45
|
+
pos2 = RSokoban::Man.new 99, 98
|
46
|
+
assert pos1 == pos2
|
47
|
+
end
|
48
|
+
|
49
|
+
def testNotEqual
|
50
|
+
pos1 = RSokoban::Man.new 99, 98
|
51
|
+
pos2 = RSokoban::Man.new 19, 18
|
52
|
+
assert pos1 != pos2
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
data/test/tc_moveable.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require "../lib/rsokoban/moveable"
|
2
|
+
|
3
|
+
class TC_Moveable < Test::Unit::TestCase
|
4
|
+
|
5
|
+
class Foo
|
6
|
+
include RSokoban::Moveable
|
7
|
+
attr_reader :x, :y
|
8
|
+
def initialize
|
9
|
+
@x = 12
|
10
|
+
@y = 3
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def testUp
|
15
|
+
pos = Foo.new
|
16
|
+
pos.up
|
17
|
+
assert_equal 12, pos.x
|
18
|
+
assert_equal 2, pos.y
|
19
|
+
end
|
20
|
+
|
21
|
+
def testDown
|
22
|
+
pos = Foo.new
|
23
|
+
pos.down
|
24
|
+
assert_equal 12, pos.x
|
25
|
+
assert_equal 4, pos.y
|
26
|
+
end
|
27
|
+
|
28
|
+
def testLeft
|
29
|
+
pos = Foo.new
|
30
|
+
pos.left
|
31
|
+
assert_equal 11, pos.x
|
32
|
+
assert_equal 3, pos.y
|
33
|
+
end
|
34
|
+
|
35
|
+
def testRight
|
36
|
+
pos = Foo.new
|
37
|
+
pos.right
|
38
|
+
assert_equal 13, pos.x
|
39
|
+
assert_equal 3, pos.y
|
40
|
+
end
|
41
|
+
end
|
data/test/tc_position.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
class TC_Position < Test::Unit::TestCase
|
3
|
+
|
4
|
+
def testInstance
|
5
|
+
pos = RSokoban::Position.new
|
6
|
+
assert_equal true, pos.instance_of?(RSokoban::Position)
|
7
|
+
end
|
8
|
+
|
9
|
+
def testXYForDefaultPositions
|
10
|
+
pos = RSokoban::Position.new
|
11
|
+
assert_equal 0, pos.x
|
12
|
+
assert_equal 0, pos.y
|
13
|
+
end
|
14
|
+
|
15
|
+
def testXY
|
16
|
+
pos = RSokoban::Position.new 12, 3
|
17
|
+
assert_equal 12, pos.x
|
18
|
+
assert_equal 3, pos.y
|
19
|
+
end
|
20
|
+
|
21
|
+
def testEqualityForDefaultPositions
|
22
|
+
pos1 = RSokoban::Position.new
|
23
|
+
pos2 = RSokoban::Position.new
|
24
|
+
assert pos1 == pos2
|
25
|
+
end
|
26
|
+
|
27
|
+
def testEqlForDefaultPositions
|
28
|
+
pos1 = RSokoban::Position.new
|
29
|
+
pos2 = RSokoban::Position.new
|
30
|
+
assert pos1.eql?(pos2)
|
31
|
+
end
|
32
|
+
|
33
|
+
def testEqualityForTwoDifferentPositions
|
34
|
+
pos1 = RSokoban::Position.new
|
35
|
+
pos2 = RSokoban::Position.new 0, 1
|
36
|
+
assert_equal false, pos1 == pos2
|
37
|
+
end
|
38
|
+
|
39
|
+
def testEquality
|
40
|
+
pos1 = RSokoban::Position.new 1, 2
|
41
|
+
pos2 = RSokoban::Position.new 1, 2
|
42
|
+
assert pos1 == pos2
|
43
|
+
end
|
44
|
+
|
45
|
+
def testEqualityWithWrongObject
|
46
|
+
pos1 = RSokoban::Position.new
|
47
|
+
pos2 = Object.new
|
48
|
+
assert_equal false, pos1 == pos2
|
49
|
+
end
|
50
|
+
|
51
|
+
def testEqlForTwoDifferentPositions
|
52
|
+
pos1 = RSokoban::Position.new
|
53
|
+
pos2 = RSokoban::Position.new 0, 1
|
54
|
+
assert_equal false, pos1.eql?(pos2)
|
55
|
+
end
|
56
|
+
|
57
|
+
def testEql
|
58
|
+
pos1 = RSokoban::Position.new 1, 2
|
59
|
+
pos2 = RSokoban::Position.new 1, 2
|
60
|
+
assert pos1.eql?(pos2)
|
61
|
+
end
|
62
|
+
|
63
|
+
def testEqlWithWrongObject
|
64
|
+
pos1 = RSokoban::Position.new
|
65
|
+
pos2 = Object.new
|
66
|
+
assert_equal false, pos1.eql?(pos2)
|
67
|
+
end
|
68
|
+
|
69
|
+
def testNotEqual
|
70
|
+
pos1 = RSokoban::Position.new 11, 12
|
71
|
+
pos2 = RSokoban::Position.new 1, 2
|
72
|
+
assert pos1 != pos2
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
class TC_RawLevel < Test::Unit::TestCase
|
3
|
+
|
4
|
+
def test_instance
|
5
|
+
ins = RSokoban::RawLevel.new
|
6
|
+
assert_equal true, ins.instance_of?(RSokoban::RawLevel)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_title_accessors
|
10
|
+
ins = RSokoban::RawLevel.new
|
11
|
+
ins.title = "Le titre"
|
12
|
+
assert_equal "Le titre", ins.title
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_default_title
|
16
|
+
ins = RSokoban::RawLevel.new
|
17
|
+
assert_equal 'Unknown level title', ins.title
|
18
|
+
end
|
19
|
+
|
20
|
+
Picture1 = [ '#####',
|
21
|
+
'#.$@#',
|
22
|
+
'#####']
|
23
|
+
|
24
|
+
def test_picture_accessors
|
25
|
+
ins = RSokoban::RawLevel.new
|
26
|
+
ins.picture = Picture1
|
27
|
+
assert_equal Picture1, ins.picture
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_default_picture
|
31
|
+
ins = RSokoban::RawLevel.new
|
32
|
+
assert_equal [], ins.picture
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/test/test.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
4
|
+
require "rsokoban"
|
5
|
+
|
6
|
+
require "test/unit"
|
7
|
+
|
8
|
+
require "../test/tc_level"
|
9
|
+
require "../test/tc_level_loader"
|
10
|
+
require "../test/tc_level_set"
|
11
|
+
require "../test/tc_raw_level"
|
12
|
+
require "../test/tc_position"
|
13
|
+
require "../test/tc_moveable"
|
14
|
+
require "../test/tc_man"
|
15
|
+
require "../test/ui/tc_console"
|
16
|
+
|
data/test/test_file1.xsb
ADDED
data/test/test_file2.xsb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
; another test file
|
2
|
+
|
3
|
+
; 6 levels
|
4
|
+
; blablabla
|
5
|
+
; bla
|
6
|
+
|
7
|
+
#####
|
8
|
+
#.$@#
|
9
|
+
#####
|
10
|
+
; 1
|
11
|
+
; blabla
|
12
|
+
|
13
|
+
######
|
14
|
+
#. $@#
|
15
|
+
######
|
16
|
+
; 2
|
17
|
+
|
18
|
+
#####
|
19
|
+
# #
|
20
|
+
#$ #
|
21
|
+
#. @#
|
22
|
+
#####
|
23
|
+
; 3
|
24
|
+
|
25
|
+
######
|
26
|
+
#.$ #
|
27
|
+
#.$ #
|
28
|
+
#.$ @#
|
29
|
+
######
|
30
|
+
; 4
|
31
|
+
|
32
|
+
#####
|
33
|
+
# #
|
34
|
+
#$ #
|
35
|
+
### $##
|
36
|
+
# $ $ #
|
37
|
+
### # ## # ######
|
38
|
+
# # ## ##### ..#
|
39
|
+
# $ $ ..#
|
40
|
+
##### ### #@## ..#
|
41
|
+
# #########
|
42
|
+
#######
|
43
|
+
; 5
|
44
|
+
; Original level 1 from Thinking Rabbits
|
45
|
+
|
46
|
+
#####
|
47
|
+
#.$@#
|
48
|
+
#####
|
49
|
+
; 6
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'rsokoban/ui/console'
|
2
|
+
class TC_Console < Test::Unit::TestCase
|
3
|
+
|
4
|
+
def setup
|
5
|
+
@console = RSokoban::UI::Console.new
|
6
|
+
# Console#parse is private, make it public for testing purpose.
|
7
|
+
def @console.public_parse(*args)
|
8
|
+
parse(*args)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_string_quit_must_returns_symbol_quit
|
13
|
+
assert_equal :quit, @console.public_parse('quit')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_string_help_must_returns_symbol_help
|
17
|
+
assert_equal :help, @console.public_parse('help')
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_string_retry_must_returns_symbol_retry
|
21
|
+
assert_equal :retry, @console.public_parse('retry')
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_string_up_must_returns_symbol_up
|
25
|
+
assert_equal :up, @console.public_parse('up')
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_string_down_must_returns_symbol_down
|
29
|
+
assert_equal :down, @console.public_parse('down')
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_string_right_must_returns_symbol_right
|
33
|
+
assert_equal :right, @console.public_parse('right')
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_string_left_must_returns_symbol_left
|
37
|
+
assert_equal :left, @console.public_parse('left')
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_string_z_must_returns_symbol_up
|
41
|
+
assert_equal :up, @console.public_parse('z')
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_string_s_must_returns_symbol_down
|
45
|
+
assert_equal :down, @console.public_parse('s')
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_string_q_must_returns_symbol_left
|
49
|
+
assert_equal :left, @console.public_parse('q')
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_string_d_must_returns_symbol_right
|
53
|
+
assert_equal :right, @console.public_parse('d')
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_string_representing_a_number_must_returns_this_number
|
57
|
+
assert_equal 12, @console.public_parse("12")
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_must_return_nil_if_number_is_negative
|
61
|
+
assert_equal nil, @console.public_parse("-12")
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_must_return_nil_if_number_is_zero
|
65
|
+
assert_equal nil, @console.public_parse("0")
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_xsb_filename_must_returns_itself
|
69
|
+
assert_equal 'some_levels.xsb', @console.public_parse("some_levels.xsb")
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_anything_else_must_returns_nil
|
73
|
+
assert_equal nil, @console.public_parse('azerty')
|
74
|
+
end
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: RSokoban
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 71
|
8
|
+
version: "0.71"
|
9
|
+
platform: ruby
|
10
|
+
authors:
|
11
|
+
- Xavier Nayrac
|
12
|
+
autorequire:
|
13
|
+
bindir: bin
|
14
|
+
cert_chain: []
|
15
|
+
|
16
|
+
date: 2011-01-21 00:00:00 +01:00
|
17
|
+
default_executable:
|
18
|
+
dependencies: []
|
19
|
+
|
20
|
+
description: |-
|
21
|
+
RSokoban is a clone of the famous Sokoban game.
|
22
|
+
I wrote this program just to improve my skills in Ruby. Currently, you can play only in a console window.
|
23
|
+
Enjoy the game !
|
24
|
+
email: xavier.nayrac@gmail.com
|
25
|
+
executables:
|
26
|
+
- rsokoban
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- lib/rsokoban.rb
|
33
|
+
- lib/rsokoban/game.rb
|
34
|
+
- lib/rsokoban/option.rb
|
35
|
+
- lib/rsokoban/exception.rb
|
36
|
+
- lib/rsokoban/crate.rb
|
37
|
+
- lib/rsokoban/storage.rb
|
38
|
+
- lib/rsokoban/moveable.rb
|
39
|
+
- lib/rsokoban/ui/curses_console.rb
|
40
|
+
- lib/rsokoban/ui/ui.rb
|
41
|
+
- lib/rsokoban/ui/console.rb
|
42
|
+
- lib/rsokoban/level_loader.rb
|
43
|
+
- lib/rsokoban/raw_level.rb
|
44
|
+
- lib/rsokoban/position.rb
|
45
|
+
- lib/rsokoban/level.rb
|
46
|
+
- lib/rsokoban/level_set.rb
|
47
|
+
- lib/rsokoban/man.rb
|
48
|
+
- bin/rsokoban
|
49
|
+
- data/original.xsb
|
50
|
+
- data/test.xsb
|
51
|
+
- data/microban.xsb
|
52
|
+
- README.rdoc
|
53
|
+
- TODO
|
54
|
+
- COPYING
|
55
|
+
- test/test_file1.xsb
|
56
|
+
- test/tc_level_loader.rb
|
57
|
+
- test/test_file2.xsb
|
58
|
+
- test/tc_level.rb
|
59
|
+
- test/tc_position.rb
|
60
|
+
- test/original.xsb
|
61
|
+
- test/ui/tc_console.rb
|
62
|
+
- test/tc_raw_level.rb
|
63
|
+
- test/tc_man.rb
|
64
|
+
- test/test.rb
|
65
|
+
- test/tc_moveable.rb
|
66
|
+
- test/tc_level_set.rb
|
67
|
+
has_rdoc: true
|
68
|
+
homepage: https://github.com/lkdjiin/RSokoban/wiki
|
69
|
+
licenses:
|
70
|
+
- GPL-3
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
segments:
|
82
|
+
- 1
|
83
|
+
- 9
|
84
|
+
- 0
|
85
|
+
version: 1.9.0
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
segments:
|
92
|
+
- 0
|
93
|
+
version: "0"
|
94
|
+
requirements: []
|
95
|
+
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 1.3.7
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: Clone of the Sokoban game.
|
101
|
+
test_files:
|
102
|
+
- test/test.rb
|