RSokoban 0.71 → 0.73
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +22 -0
- data/README.rdoc +19 -19
- data/RSokoban-0.73.gem +0 -0
- data/TODO +25 -18
- data/VERSION +1 -0
- data/bin/rsokoban +65 -1
- data/lib/rsokoban/exception.rb +4 -0
- data/lib/rsokoban/game.rb +42 -29
- data/lib/rsokoban/level.rb +67 -30
- data/lib/rsokoban/level_loader.rb +4 -4
- data/lib/rsokoban/level_set.rb +20 -10
- data/lib/rsokoban/map.rb +51 -0
- data/lib/rsokoban/move_recorder.rb +38 -0
- data/lib/rsokoban/option.rb +29 -12
- data/lib/rsokoban/raw_level.rb +15 -4
- data/lib/rsokoban/ui/base_ui.rb +37 -0
- data/lib/rsokoban/ui/console.rb +43 -33
- data/lib/rsokoban/ui/curses_console.rb +45 -36
- data/lib/rsokoban/ui/player_action.rb +74 -0
- data/lib/rsokoban/ui/tk_ui.rb +474 -0
- data/lib/rsokoban/ui.rb +10 -0
- data/lib/rsokoban.rb +4 -5
- data/skins/default/crate.bmp +0 -0
- data/skins/default/crate_store.bmp +0 -0
- data/skins/default/floor.bmp +0 -0
- data/skins/default/man_down.bmp +0 -0
- data/skins/default/man_left.bmp +0 -0
- data/skins/default/man_right.bmp +0 -0
- data/skins/default/man_store_down.bmp +0 -0
- data/skins/default/man_store_left.bmp +0 -0
- data/skins/default/man_store_right.bmp +0 -0
- data/skins/default/man_store_up.bmp +0 -0
- data/skins/default/man_up.bmp +0 -0
- data/skins/default/outside.bmp +0 -0
- data/skins/default/readme +1 -0
- data/skins/default/store.bmp +0 -0
- data/skins/default/wall.bmp +0 -0
- data/test/original.xsb +0 -2
- data/test/tc_level.rb +37 -37
- data/test/tc_level_loader.rb +14 -2
- data/test/tc_level_set.rb +8 -0
- data/test/tc_map.rb +40 -0
- data/test/tc_move_recorder.rb +100 -0
- data/test/tc_raw_level.rb +5 -5
- data/test/test.rb +3 -1
- data/test/test_file2.xsb +2 -0
- data/test/ui/tc_console.rb +27 -13
- data/test/ui/tc_player_action.rb +156 -0
- metadata +38 -25
- data/lib/rsokoban/ui/ui.rb +0 -44
@@ -0,0 +1,156 @@
|
|
1
|
+
class TC_PlayerAction < Test::Unit::TestCase
|
2
|
+
|
3
|
+
def setup
|
4
|
+
@pa = RSokoban::UI::PlayerAction.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_default_action_is_nil
|
8
|
+
assert_equal nil, RSokoban::UI::PlayerAction.new.action
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_set_action_quit
|
12
|
+
@pa.action = :quit
|
13
|
+
assert_equal :quit, @pa.action
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_set_action_along_constructor
|
17
|
+
pa = RSokoban::UI::PlayerAction.new(:quit)
|
18
|
+
assert_equal :quit, pa.action
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_set_action_next
|
22
|
+
@pa.action = :next
|
23
|
+
assert_equal :next, @pa.action
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_set_action_retry
|
27
|
+
@pa.action = :retry
|
28
|
+
assert_equal :retry, @pa.action
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_set_action_undo
|
32
|
+
@pa.action = :undo
|
33
|
+
assert_equal :undo, @pa.action
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_set_action_up
|
37
|
+
@pa.action = :up
|
38
|
+
assert_equal :up, @pa.action
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_set_action_down
|
42
|
+
@pa.action = :down
|
43
|
+
assert_equal :down, @pa.action
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_set_action_left
|
47
|
+
@pa.action = :left
|
48
|
+
assert_equal :left, @pa.action
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_set_action_right
|
52
|
+
@pa.action = :right
|
53
|
+
assert_equal :right, @pa.action
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_no_other_symbols_allowed
|
57
|
+
assert_raise(ArgumentError) do
|
58
|
+
@pa.action = :not_allowed
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_action_is_a_level_number
|
63
|
+
@pa.action = 23
|
64
|
+
assert_equal 23, @pa.action
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_action_is_an_xsb_filename
|
68
|
+
@pa.action = 'file.xsb'
|
69
|
+
assert_equal 'file.xsb', @pa.action
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_bad_filename
|
73
|
+
assert_raise(ArgumentError) do
|
74
|
+
@pa.action = 'file.x'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_is_level_number
|
79
|
+
@pa.action = 23
|
80
|
+
assert_equal true, @pa.level_number?
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_is_not_level_number
|
84
|
+
@pa.action = :quit
|
85
|
+
assert_equal false, @pa.level_number?
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_is_set_name
|
89
|
+
@pa.action = 'file.xsb'
|
90
|
+
assert_equal true, @pa.set_name?
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_is_not_set_name
|
94
|
+
@pa.action = :quit
|
95
|
+
assert_equal false, @pa.set_name?
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_is_quit
|
99
|
+
@pa.action = :quit
|
100
|
+
assert_equal true, @pa.quit?
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_is_not_quit
|
104
|
+
@pa.action = :up
|
105
|
+
assert_equal false, @pa.quit?
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_is_next
|
109
|
+
@pa.action = :next
|
110
|
+
assert_equal true, @pa.next?
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_is_not_next
|
114
|
+
@pa.action = :up
|
115
|
+
assert_equal false, @pa.next?
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_is_retry
|
119
|
+
@pa.action = :retry
|
120
|
+
assert_equal true, @pa.retry?
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_is_not_retry
|
124
|
+
@pa.action = :up
|
125
|
+
assert_equal false, @pa.retry?
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_is_move
|
129
|
+
@pa.action = :up
|
130
|
+
assert_equal true, @pa.move?
|
131
|
+
|
132
|
+
@pa.action = :down
|
133
|
+
assert_equal true, @pa.move?
|
134
|
+
|
135
|
+
@pa.action = :left
|
136
|
+
assert_equal true, @pa.move?
|
137
|
+
|
138
|
+
@pa.action = :right
|
139
|
+
assert_equal true, @pa.move?
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_is_not_move
|
143
|
+
@pa.action = :quit
|
144
|
+
assert_equal false, @pa.move?
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_is_undo
|
148
|
+
@pa.action = :undo
|
149
|
+
assert_equal true, @pa.undo?
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_is_not_undo
|
153
|
+
@pa.action = :up
|
154
|
+
assert_equal false, @pa.undo?
|
155
|
+
end
|
156
|
+
end
|
metadata
CHANGED
@@ -1,11 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RSokoban
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
segments:
|
6
|
-
- 0
|
7
|
-
- 71
|
8
|
-
version: "0.71"
|
4
|
+
version: "0.73"
|
9
5
|
platform: ruby
|
10
6
|
authors:
|
11
7
|
- Xavier Nayrac
|
@@ -13,14 +9,11 @@ autorequire:
|
|
13
9
|
bindir: bin
|
14
10
|
cert_chain: []
|
15
11
|
|
16
|
-
date: 2011-01-
|
12
|
+
date: 2011-01-27 00:00:00 +01:00
|
17
13
|
default_executable:
|
18
14
|
dependencies: []
|
19
15
|
|
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 !
|
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 !
|
24
17
|
email: xavier.nayrac@gmail.com
|
25
18
|
executables:
|
26
19
|
- rsokoban
|
@@ -35,68 +28,88 @@ files:
|
|
35
28
|
- lib/rsokoban/exception.rb
|
36
29
|
- lib/rsokoban/crate.rb
|
37
30
|
- lib/rsokoban/storage.rb
|
31
|
+
- lib/rsokoban/ui.rb
|
32
|
+
- lib/rsokoban/move_recorder.rb
|
38
33
|
- lib/rsokoban/moveable.rb
|
39
34
|
- lib/rsokoban/ui/curses_console.rb
|
40
|
-
- lib/rsokoban/ui/
|
35
|
+
- lib/rsokoban/ui/base_ui.rb
|
36
|
+
- lib/rsokoban/ui/tk_ui.rb
|
41
37
|
- lib/rsokoban/ui/console.rb
|
38
|
+
- lib/rsokoban/ui/player_action.rb
|
42
39
|
- lib/rsokoban/level_loader.rb
|
43
40
|
- lib/rsokoban/raw_level.rb
|
44
41
|
- lib/rsokoban/position.rb
|
45
42
|
- lib/rsokoban/level.rb
|
43
|
+
- lib/rsokoban/map.rb
|
46
44
|
- lib/rsokoban/level_set.rb
|
47
45
|
- lib/rsokoban/man.rb
|
48
46
|
- bin/rsokoban
|
49
47
|
- data/original.xsb
|
50
48
|
- data/test.xsb
|
51
49
|
- data/microban.xsb
|
50
|
+
- skins/default
|
51
|
+
- skins/default/outside.bmp
|
52
|
+
- skins/default/store.bmp
|
53
|
+
- skins/default/man_left.bmp
|
54
|
+
- skins/default/man_up.bmp
|
55
|
+
- skins/default/man_store_right.bmp
|
56
|
+
- skins/default/man_right.bmp
|
57
|
+
- skins/default/crate_store.bmp
|
58
|
+
- skins/default/readme
|
59
|
+
- skins/default/man_store_up.bmp
|
60
|
+
- skins/default/floor.bmp
|
61
|
+
- skins/default/man_store_left.bmp
|
62
|
+
- skins/default/crate.bmp
|
63
|
+
- skins/default/man_store_down.bmp
|
64
|
+
- skins/default/wall.bmp
|
65
|
+
- skins/default/man_down.bmp
|
52
66
|
- README.rdoc
|
53
67
|
- TODO
|
68
|
+
- NEWS
|
69
|
+
- RSokoban-0.73.gem
|
70
|
+
- VERSION
|
54
71
|
- COPYING
|
55
72
|
- test/test_file1.xsb
|
73
|
+
- test/tc_move_recorder.rb
|
56
74
|
- test/tc_level_loader.rb
|
57
75
|
- test/test_file2.xsb
|
58
76
|
- test/tc_level.rb
|
59
77
|
- test/tc_position.rb
|
60
78
|
- test/original.xsb
|
79
|
+
- test/ui
|
61
80
|
- test/ui/tc_console.rb
|
81
|
+
- test/ui/tc_player_action.rb
|
82
|
+
- test/tc_map.rb
|
62
83
|
- test/tc_raw_level.rb
|
63
84
|
- test/tc_man.rb
|
64
85
|
- test/test.rb
|
65
86
|
- test/tc_moveable.rb
|
66
87
|
- test/tc_level_set.rb
|
67
|
-
has_rdoc:
|
88
|
+
has_rdoc: false
|
68
89
|
homepage: https://github.com/lkdjiin/RSokoban/wiki
|
69
|
-
licenses:
|
70
|
-
- GPL-3
|
71
90
|
post_install_message:
|
72
91
|
rdoc_options: []
|
73
92
|
|
74
93
|
require_paths:
|
75
94
|
- lib
|
76
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
-
none: false
|
78
96
|
requirements:
|
79
97
|
- - ">="
|
80
98
|
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
|
83
|
-
- 9
|
84
|
-
- 0
|
85
|
-
version: 1.9.0
|
99
|
+
version: 1.8.7
|
100
|
+
version:
|
86
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
102
|
requirements:
|
89
103
|
- - ">="
|
90
104
|
- !ruby/object:Gem::Version
|
91
|
-
segments:
|
92
|
-
- 0
|
93
105
|
version: "0"
|
106
|
+
version:
|
94
107
|
requirements: []
|
95
108
|
|
96
109
|
rubyforge_project:
|
97
|
-
rubygems_version: 1.
|
110
|
+
rubygems_version: 1.2.0
|
98
111
|
signing_key:
|
99
|
-
specification_version:
|
112
|
+
specification_version: 2
|
100
113
|
summary: Clone of the Sokoban game.
|
101
114
|
test_files:
|
102
115
|
- test/test.rb
|
data/lib/rsokoban/ui/ui.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
module RSokoban
|
2
|
-
|
3
|
-
# Module dedicated to user interfaces.
|
4
|
-
module UI
|
5
|
-
|
6
|
-
# Every concrete UI should inherits from me.
|
7
|
-
class BaseUI
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@level_title = ''
|
11
|
-
end
|
12
|
-
|
13
|
-
# Based on things found in the arguments, I display the game
|
14
|
-
# to the user. Then he can tell what it want to do. Whatever
|
15
|
-
# my childs permit the user to do, they can only return one
|
16
|
-
# of the following actions.
|
17
|
-
#
|
18
|
-
# List of action I must be able to parse and return :
|
19
|
-
# :quit to quit game
|
20
|
-
# :next to load and play next level
|
21
|
-
# :retry to restart the current level
|
22
|
-
# :up, :down, :left, :right to move the man
|
23
|
-
# a number to load this level number
|
24
|
-
# an .xsb filename to load the set with this name
|
25
|
-
#
|
26
|
-
# @param ['START'|'DISPLAY'|'WIN'] type the type of message
|
27
|
-
# @param [Array<String>] level the picture of the level
|
28
|
-
# @param [String] message a message to be displayed. See Level#move
|
29
|
-
# to learn more about the message format and content.
|
30
|
-
# @return [Object] the user's action
|
31
|
-
# @since 0.71
|
32
|
-
# @todo write some examples
|
33
|
-
# @todo action diserves its own class
|
34
|
-
# @todo picture diserves its own class
|
35
|
-
# @todo document better +type+
|
36
|
-
def get_action(type, level, message)
|
37
|
-
raise "Please implement me !"
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|