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.
Files changed (111) hide show
  1. data/NEWS +33 -1
  2. data/README.rdoc +21 -14
  3. data/TODO +6 -12
  4. data/VERSION +1 -1
  5. data/bin/rsokoban +40 -3
  6. data/data/big.xsb +35 -0
  7. data/lib/rsokoban/config.rb +34 -0
  8. data/lib/rsokoban/crate.rb +4 -5
  9. data/lib/rsokoban/exception.rb +2 -0
  10. data/lib/rsokoban/game/game.rb +153 -0
  11. data/lib/rsokoban/game/game_curses.rb +11 -0
  12. data/lib/rsokoban/game/game_factory.rb +23 -0
  13. data/lib/rsokoban/game/game_gui.rb +27 -0
  14. data/lib/rsokoban/game/game_portable.rb +10 -0
  15. data/lib/rsokoban/game/game_tk.rb +11 -0
  16. data/lib/rsokoban/game/game_ui.rb +81 -0
  17. data/lib/rsokoban/game.rb +7 -238
  18. data/lib/rsokoban/install.rb +22 -0
  19. data/lib/rsokoban/layered_map.rb +139 -0
  20. data/lib/rsokoban/level.rb +112 -166
  21. data/lib/rsokoban/level_set.rb +4 -4
  22. data/lib/rsokoban/man.rb +3 -4
  23. data/lib/rsokoban/map.rb +91 -15
  24. data/lib/rsokoban/move_result.rb +2 -2
  25. data/lib/rsokoban/option.rb +4 -4
  26. data/lib/rsokoban/position.rb +1 -1
  27. data/lib/rsokoban/raw_level.rb +11 -2
  28. data/lib/rsokoban/record.rb +51 -0
  29. data/lib/rsokoban/set_loader.rb +108 -0
  30. data/lib/rsokoban/ui/base_ui.rb +1 -0
  31. data/lib/rsokoban/ui/console.rb +56 -25
  32. data/lib/rsokoban/ui/curses_console.rb +59 -33
  33. data/lib/rsokoban/ui/player_action.rb +13 -7
  34. data/lib/rsokoban/ui/skin.rb +105 -0
  35. data/lib/rsokoban/ui/tk_dialogs.rb +104 -18
  36. data/lib/rsokoban/ui/tk_ui.rb +410 -233
  37. data/lib/rsokoban/ui.rb +1 -0
  38. data/lib/rsokoban.rb +14 -2
  39. data/skins/AntiqueDesk/crate.bmp +0 -0
  40. data/skins/AntiqueDesk/crate_store.bmp +0 -0
  41. data/skins/AntiqueDesk/floor.bmp +0 -0
  42. data/skins/AntiqueDesk/man_down.bmp +0 -0
  43. data/skins/AntiqueDesk/man_left.bmp +0 -0
  44. data/skins/AntiqueDesk/man_right.bmp +0 -0
  45. data/skins/AntiqueDesk/man_store_down.bmp +0 -0
  46. data/skins/AntiqueDesk/man_store_left.bmp +0 -0
  47. data/skins/AntiqueDesk/man_store_right.bmp +0 -0
  48. data/skins/AntiqueDesk/man_store_up.bmp +0 -0
  49. data/skins/AntiqueDesk/man_up.bmp +0 -0
  50. data/skins/AntiqueDesk/outside.bmp +0 -0
  51. data/skins/AntiqueDesk/skin.conf +3 -0
  52. data/skins/AntiqueDesk/store.bmp +0 -0
  53. data/skins/AntiqueDesk/wall.bmp +0 -0
  54. data/skins/BlueGranite/outside.bmp +0 -0
  55. data/skins/BlueGranite/skin.conf +3 -0
  56. data/skins/HeavyMetal/crate.bmp +0 -0
  57. data/skins/HeavyMetal/crate_store.bmp +0 -0
  58. data/skins/HeavyMetal/floor.bmp +0 -0
  59. data/skins/HeavyMetal/man.bmp +0 -0
  60. data/skins/HeavyMetal/man_store.bmp +0 -0
  61. data/skins/HeavyMetal/outside.bmp +0 -0
  62. data/skins/HeavyMetal/skin.conf +3 -0
  63. data/skins/HeavyMetal/store.bmp +0 -0
  64. data/skins/HeavyMetal/wall.bmp +0 -0
  65. data/skins/HeavyMetal/wall_d.bmp +0 -0
  66. data/skins/HeavyMetal/wall_dl.bmp +0 -0
  67. data/skins/HeavyMetal/wall_dlr.bmp +0 -0
  68. data/skins/HeavyMetal/wall_dr.bmp +0 -0
  69. data/skins/HeavyMetal/wall_l.bmp +0 -0
  70. data/skins/HeavyMetal/wall_lr.bmp +0 -0
  71. data/skins/HeavyMetal/wall_r.bmp +0 -0
  72. data/skins/HeavyMetal/wall_u.bmp +0 -0
  73. data/skins/HeavyMetal/wall_ud.bmp +0 -0
  74. data/skins/HeavyMetal/wall_udl.bmp +0 -0
  75. data/skins/HeavyMetal/wall_udlr.bmp +0 -0
  76. data/skins/HeavyMetal/wall_udr.bmp +0 -0
  77. data/skins/HeavyMetal/wall_ul.bmp +0 -0
  78. data/skins/HeavyMetal/wall_ulr.bmp +0 -0
  79. data/skins/HeavyMetal/wall_ur.bmp +0 -0
  80. data/test/record/original.yaml +2 -0
  81. data/test/tc_game.rb +24 -15
  82. data/test/tc_game_factory.rb +40 -0
  83. data/test/tc_game_gui.rb +26 -0
  84. data/test/tc_game_ui.rb +153 -0
  85. data/test/tc_install.rb +12 -0
  86. data/test/tc_layered_map.rb +105 -0
  87. data/test/tc_level.rb +109 -107
  88. data/test/tc_level_set.rb +4 -4
  89. data/test/tc_map.rb +46 -10
  90. data/test/tc_record.rb +100 -0
  91. data/test/{tc_level_loader.rb → tc_set_loader.rb} +25 -24
  92. data/test/test.rb +9 -2
  93. data/test/ui/tc_skin.rb +71 -0
  94. metadata +89 -26
  95. data/lib/rsokoban/level_loader.rb +0 -81
  96. data/lib/rsokoban/ui/tk_box.rb +0 -21
  97. data/skins/default/outside.bmp +0 -0
  98. data/skins/default/readme +0 -1
  99. /data/skins/{default → BlueGranite}/crate.bmp +0 -0
  100. /data/skins/{default → BlueGranite}/crate_store.bmp +0 -0
  101. /data/skins/{default → BlueGranite}/floor.bmp +0 -0
  102. /data/skins/{default → BlueGranite}/man_down.bmp +0 -0
  103. /data/skins/{default → BlueGranite}/man_left.bmp +0 -0
  104. /data/skins/{default → BlueGranite}/man_right.bmp +0 -0
  105. /data/skins/{default → BlueGranite}/man_store_down.bmp +0 -0
  106. /data/skins/{default → BlueGranite}/man_store_left.bmp +0 -0
  107. /data/skins/{default → BlueGranite}/man_store_right.bmp +0 -0
  108. /data/skins/{default → BlueGranite}/man_store_up.bmp +0 -0
  109. /data/skins/{default → BlueGranite}/man_up.bmp +0 -0
  110. /data/skins/{default → BlueGranite}/store.bmp +0 -0
  111. /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.rawLevels = list
35
- assert_equal list, ins.rawLevels
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.rawLevels
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.rawLevels = list
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 = RSokoban::Map.new
5
+ @map = Map.new
5
6
  end
6
7
 
7
8
  def test_default_picture_is_empy
8
- assert_equal [], RSokoban::Map.new.rows
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
- def test_get_height
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 test_get_width
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
- expected = '#'
34
- @map.each {|row|
35
- assert_equal expected, row
36
- expected += '#'
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 TC_LevelLoader < Test::Unit::TestCase
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 = RSokoban::LevelLoader.new "original.xsb"
10
- assert_equal true, ins.instance_of?(RSokoban::LevelLoader)
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(RSokoban::NoFileError) do
15
- ins = RSokoban::LevelLoader.new "inexistant"
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 = RSokoban::LevelLoader.new "test_file1.xsb"
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 = RSokoban::LevelLoader.new "test_file1.xsb"
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 = RSokoban::LevelLoader.new "test_file2.xsb"
31
- level = RSokoban::Level.new(RSokoban::RawLevel.new('1', ['#####', '#.$@#', '#####']))
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 = RSokoban::LevelLoader.new "test_file2.xsb"
37
- level = RSokoban::Level.new(RSokoban::RawLevel.new('2', ['######', '#. $@#', '######']))
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 = RSokoban::LevelLoader.new "test_file2.xsb"
43
- level = RSokoban::Level.new(RSokoban::RawLevel.new('3', ['#####', '# #', '#$ #', '#. @#', '#####' ]))
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 = RSokoban::LevelLoader.new "test_file2.xsb"
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 = RSokoban::LevelLoader.new "test_file2.xsb"
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 = RSokoban::LevelLoader.new "test_file2.xsb"
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 = RSokoban::LevelLoader.new "test_file2.xsb"
64
- level = RSokoban::Level.new(RSokoban::RawLevel.new('6', ['#####', '#.$@#', '#####']))
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 = RSokoban::LevelLoader.new "test_file2.xsb"
70
- assert_raise(RSokoban::LevelNumberTooHighError) do
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 = RSokoban::LevelLoader.new "original.xsb"
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 = RSokoban::LevelLoader.new "original.xsb"
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 = RSokoban::LevelLoader.new "test_file2.xsb"
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/tc_level_loader"
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"
@@ -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.74"
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-01-31 00:00:00 +01:00
12
+ date: 2011-02-27 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: RSokoban is a clone of the famous Sokoban game. I wrote this program just to improve my skills in Ruby. Currently, you can play only in a console window. Enjoy the game !
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/tk_box.rb
42
+ - lib/rsokoban/ui/skin.rb
39
43
  - lib/rsokoban/ui/console.rb
40
44
  - lib/rsokoban/ui/player_action.rb
41
- - lib/rsokoban/level_loader.rb
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/default
55
- - skins/default/outside.bmp
56
- - skins/default/store.bmp
57
- - skins/default/man_left.bmp
58
- - skins/default/man_up.bmp
59
- - skins/default/man_store_right.bmp
60
- - skins/default/man_right.bmp
61
- - skins/default/crate_store.bmp
62
- - skins/default/readme
63
- - skins/default/man_store_up.bmp
64
- - skins/default/floor.bmp
65
- - skins/default/man_store_left.bmp
66
- - skins/default/crate.bmp
67
- - skins/default/man_store_down.bmp
68
- - skins/default/wall.bmp
69
- - skins/default/man_down.bmp
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: false
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.2.0
180
+ rubygems_version: 1.3.4
118
181
  signing_key:
119
- specification_version: 2
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