sokobanrb 0.0.3
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/.gitignore +5 -0
- data/.rvmrc +3 -0
- data/Gemfile +4 -0
- data/README +39 -0
- data/Rakefile +1 -0
- data/bin/.gears3.rb.swp +0 -0
- data/bin/.opengl_sokoban.rb.swp +0 -0
- data/bin/sokobanrb +485 -0
- data/lib/sokoban/config.rb +22 -0
- data/lib/sokoban/game_engine.rb +215 -0
- data/lib/sokoban/render.rb +401 -0
- data/lib/sokoban/sokoban_levels.txt +760 -0
- data/lib/sokoban/sokoban_saved_game.yaml +1821 -0
- data/lib/sokoban.rb +10 -0
- data/sokobanrb/.gitignore +4 -0
- data/sokobanrb/Gemfile +4 -0
- data/sokobanrb/Rakefile +1 -0
- data/sokobanrb/lib/sokobanrb/version.rb +3 -0
- data/sokobanrb/lib/sokobanrb.rb +5 -0
- data/sokobanrb/sokobanrb.gemspec +20 -0
- data/sokobanrb.gemspec +33 -0
- data/spec/sokoban/board_spec.rb +477 -0
- data/spec/spec_helper.rb +10 -0
- data/test/sokoban/board_test.rb +38 -0
- data/test/sokoban/tc_moveable.rb +41 -0
- data/test/test_helper.rb +28 -0
- metadata +92 -0
data/lib/sokoban.rb
ADDED
data/sokobanrb/Gemfile
ADDED
data/sokobanrb/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "sokobanrb/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "sokobanrb"
|
7
|
+
s.version = Sokobanrb::VERSION
|
8
|
+
s.authors = ["brownman"]
|
9
|
+
s.email = ["ofer.shaham@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{TODO: Write a gem summary}
|
12
|
+
s.description = %q{TODO: Write a gem description}
|
13
|
+
|
14
|
+
s.rubyforge_project = "sokobanrb"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
end
|
data/sokobanrb.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
#require "sokoban/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "sokobanrb"
|
7
|
+
s.version = "0.0.3"
|
8
|
+
s.authors = ["brownman"]
|
9
|
+
|
10
|
+
s.email = ["ofer.shaham@gmail.com"]
|
11
|
+
|
12
|
+
s.homepage = "https://github.com/brownman/sokoban.rb"
|
13
|
+
|
14
|
+
|
15
|
+
s.summary = %q{just adding code to ruby quiz 5 solution of James Edward Gray II from grayproductions.net }
|
16
|
+
s.description = %q{in order to have fun playing with opengl, i use existing sokoban project , so no rights have reserved for me :(}
|
17
|
+
|
18
|
+
|
19
|
+
s.executables = ["sokobanrb"]
|
20
|
+
|
21
|
+
|
22
|
+
if RUBY_VERSION == "1.9.1"
|
23
|
+
s.add_development_dependency "ruby-opengl"
|
24
|
+
elsif RUBY_VERSION == "1.9.2"
|
25
|
+
s.add_development_dependency "ffi-opengl"
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
s.files = `git ls-files`.split("\n")
|
30
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
31
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
32
|
+
s.require_paths = ["lib"]
|
33
|
+
end
|
@@ -0,0 +1,477 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
#describe String do
|
4
|
+
#it "should wrap text at white space when over a specific character length" do
|
5
|
+
#"foo bar blah".hard_wrap(10).should == "foo bar\nblah"
|
6
|
+
#end
|
7
|
+
#end
|
8
|
+
|
9
|
+
#require 'Sokoban'
|
10
|
+
|
11
|
+
describe Sokoban1::Sokoban do
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
@game = Sokoban1::Sokoban.new
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should create a new instance of the game model' do
|
18
|
+
@game.class.should == Sokoban1::Sokoban
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should load first level' do
|
22
|
+
@game.load_level
|
23
|
+
@game.display.should == <<-MAP
|
24
|
+
############
|
25
|
+
#.. # ###
|
26
|
+
#.. # o o #
|
27
|
+
#.. #o#### #
|
28
|
+
#.. @ ## #
|
29
|
+
#.. # # o ##
|
30
|
+
###### ##o o #
|
31
|
+
# o o o o #
|
32
|
+
# # #
|
33
|
+
############
|
34
|
+
MAP
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
it 'should set game charecter with a char' do
|
39
|
+
Sokoban1::Sokoban::CRATE.should == 'o'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should keep the board as it is' do
|
43
|
+
|
44
|
+
board_st = "###\n" +
|
45
|
+
"# #\n" +
|
46
|
+
"###"
|
47
|
+
|
48
|
+
b = Sokoban.new(board_st)
|
49
|
+
|
50
|
+
b.current_board.should == board_st
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should go left" do
|
55
|
+
board_st = "####\n" +
|
56
|
+
"# x#\n" +
|
57
|
+
"####"
|
58
|
+
|
59
|
+
board_st_result = "####\n" +
|
60
|
+
"#x #\n" +
|
61
|
+
"####"
|
62
|
+
|
63
|
+
b = Sokoban.new(board_st)
|
64
|
+
b.left
|
65
|
+
b.current_board.should == board_st_result
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should go left considering player column" do
|
69
|
+
board_st = "#####\n" +
|
70
|
+
"# x#\n" +
|
71
|
+
"#####"
|
72
|
+
|
73
|
+
board_st_result = "#####\n" +
|
74
|
+
"# x #\n" +
|
75
|
+
"#####"
|
76
|
+
|
77
|
+
b = Sokoban.new(board_st)
|
78
|
+
b.left
|
79
|
+
b.current_board.should == board_st_result
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should go left considering player line" do
|
83
|
+
board_st = "#####\n" +
|
84
|
+
"# #\n" +
|
85
|
+
"# x#\n" +
|
86
|
+
"#####"
|
87
|
+
|
88
|
+
board_st_result = "#####\n" +
|
89
|
+
"# #\n" +
|
90
|
+
"# x #\n" +
|
91
|
+
"#####"
|
92
|
+
|
93
|
+
b = Sokoban.new(board_st)
|
94
|
+
b.left
|
95
|
+
b.current_board.should == board_st_result
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should not go left through the wall" do
|
99
|
+
board_st = "#####\n" +
|
100
|
+
"#x #\n" +
|
101
|
+
"#####"
|
102
|
+
|
103
|
+
b = Sokoban.new(board_st)
|
104
|
+
b.left
|
105
|
+
b.current_board.should == board_st
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should go right" do
|
109
|
+
board_st = "####\n" +
|
110
|
+
"#x #\n" +
|
111
|
+
"####"
|
112
|
+
|
113
|
+
board_st_result = "####\n" +
|
114
|
+
"# x#\n" +
|
115
|
+
"####"
|
116
|
+
|
117
|
+
b = Sokoban.new(board_st)
|
118
|
+
b.right
|
119
|
+
b.current_board.should == board_st_result
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
it "should go up" do
|
124
|
+
board_st = "####\n" +
|
125
|
+
"# #\n" +
|
126
|
+
"#x #\n" +
|
127
|
+
"####"
|
128
|
+
|
129
|
+
board_st_result = "####\n" +
|
130
|
+
"#x #\n" +
|
131
|
+
"# #\n" +
|
132
|
+
"####"
|
133
|
+
|
134
|
+
b = Sokoban.new(board_st)
|
135
|
+
b.up
|
136
|
+
b.current_board.should == board_st_result
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should go down" do
|
140
|
+
board_st = "####\n" +
|
141
|
+
"#x #\n" +
|
142
|
+
"# #\n" +
|
143
|
+
"####"
|
144
|
+
|
145
|
+
board_st_result = "####\n" +
|
146
|
+
"# #\n" +
|
147
|
+
"#x #\n" +
|
148
|
+
"####"
|
149
|
+
|
150
|
+
b = Sokoban.new(board_st)
|
151
|
+
b.down
|
152
|
+
b.current_board.should == board_st_result
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should walk down in a bigger board" do
|
156
|
+
board_st = "#####\n" +
|
157
|
+
"# #\n" +
|
158
|
+
"# x #\n" +
|
159
|
+
"# #\n" +
|
160
|
+
"#####"
|
161
|
+
|
162
|
+
board_st_result = "#####\n" +
|
163
|
+
"# #\n" +
|
164
|
+
"# #\n" +
|
165
|
+
"# x #\n" +
|
166
|
+
"#####"
|
167
|
+
|
168
|
+
b = Sokoban.new(board_st)
|
169
|
+
b.down
|
170
|
+
b.current_board.should == board_st_result
|
171
|
+
end
|
172
|
+
|
173
|
+
it "pushes the crate downward" do
|
174
|
+
board_st = "#####\n" +
|
175
|
+
"# x #\n" +
|
176
|
+
"# c #\n" +
|
177
|
+
"# #\n" +
|
178
|
+
"#####"
|
179
|
+
|
180
|
+
board_st_result = "#####\n" +
|
181
|
+
"# #\n" +
|
182
|
+
"# x #\n" +
|
183
|
+
"# c #\n" +
|
184
|
+
"#####"
|
185
|
+
|
186
|
+
b = Sokoban.new(board_st)
|
187
|
+
b.down
|
188
|
+
b.current_board.should == board_st_result
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should not push the crate down against the wall" do
|
192
|
+
board_st = "#####\n" +
|
193
|
+
"# #\n" +
|
194
|
+
"# x #\n" +
|
195
|
+
"# c #\n" +
|
196
|
+
"#####"
|
197
|
+
|
198
|
+
b = Sokoban.new(board_st)
|
199
|
+
b.down
|
200
|
+
b.current_board.should == board_st
|
201
|
+
end
|
202
|
+
|
203
|
+
it "pushes the crate upwards" do
|
204
|
+
board_st = "#####\n" +
|
205
|
+
"# #\n" +
|
206
|
+
"# c #\n" +
|
207
|
+
"# x #\n" +
|
208
|
+
"#####"
|
209
|
+
|
210
|
+
board_st_result = "#####\n" +
|
211
|
+
"# c #\n" +
|
212
|
+
"# x #\n" +
|
213
|
+
"# #\n" +
|
214
|
+
"#####"
|
215
|
+
|
216
|
+
b = Sokoban.new(board_st)
|
217
|
+
b.up
|
218
|
+
b.current_board.should == board_st_result
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should not push the crate up against the wall" do
|
222
|
+
board_st = "#####\n" +
|
223
|
+
"# c #\n" +
|
224
|
+
"# x #\n" +
|
225
|
+
"# #\n" +
|
226
|
+
"#####"
|
227
|
+
|
228
|
+
b = Sokoban.new(board_st)
|
229
|
+
b.up
|
230
|
+
b.current_board.should == board_st
|
231
|
+
end
|
232
|
+
|
233
|
+
|
234
|
+
it "pushes the crate right" do
|
235
|
+
board_st = "#####\n" +
|
236
|
+
"# #\n" +
|
237
|
+
"#xc #\n" +
|
238
|
+
"# #\n" +
|
239
|
+
"#####"
|
240
|
+
|
241
|
+
board_st_result = "#####\n" +
|
242
|
+
"# #\n" +
|
243
|
+
"# xc#\n" +
|
244
|
+
"# #\n" +
|
245
|
+
"#####"
|
246
|
+
|
247
|
+
b = Sokoban.new(board_st)
|
248
|
+
b.right
|
249
|
+
b.current_board.should == board_st_result
|
250
|
+
end
|
251
|
+
|
252
|
+
it "should not push the crate right against the wall" do
|
253
|
+
board_st = "#####\n" +
|
254
|
+
"# #\n" +
|
255
|
+
"# xc#\n" +
|
256
|
+
"# #\n" +
|
257
|
+
"#####"
|
258
|
+
|
259
|
+
b = Sokoban.new(board_st)
|
260
|
+
b.right
|
261
|
+
b.current_board.should == board_st
|
262
|
+
end
|
263
|
+
|
264
|
+
it "pushes the crate to the left" do
|
265
|
+
board_st = "#####\n" +
|
266
|
+
"# #\n" +
|
267
|
+
"# cx#\n" +
|
268
|
+
"# #\n" +
|
269
|
+
"#####"
|
270
|
+
|
271
|
+
board_st_result = "#####\n" +
|
272
|
+
"# #\n" +
|
273
|
+
"#cx #\n" +
|
274
|
+
"# #\n" +
|
275
|
+
"#####"
|
276
|
+
|
277
|
+
b = Sokoban.new(board_st)
|
278
|
+
b.left
|
279
|
+
b.current_board.should == board_st_result
|
280
|
+
end
|
281
|
+
|
282
|
+
it "should not push the crate to the left against the wall" do
|
283
|
+
board_st = "#####\n" +
|
284
|
+
"# #\n" +
|
285
|
+
"#cx #\n" +
|
286
|
+
"# #\n" +
|
287
|
+
"#####"
|
288
|
+
|
289
|
+
b = Sokoban.new(board_st)
|
290
|
+
b.left
|
291
|
+
b.current_board.should == board_st
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should not push the crate down over another crate" do
|
295
|
+
board_st = "#####\n" +
|
296
|
+
"# x #\n" +
|
297
|
+
"# c #\n" +
|
298
|
+
"# c #\n" +
|
299
|
+
"# #\n" +
|
300
|
+
"#####"
|
301
|
+
|
302
|
+
b = Sokoban.new(board_st)
|
303
|
+
b.down
|
304
|
+
b.current_board.should == board_st
|
305
|
+
end
|
306
|
+
|
307
|
+
it "should not push the crate up over another crate" do
|
308
|
+
board_st = "#####\n" +
|
309
|
+
"# #\n" +
|
310
|
+
"# c #\n" +
|
311
|
+
"# c #\n" +
|
312
|
+
"# x #\n" +
|
313
|
+
"#####"
|
314
|
+
|
315
|
+
b = Sokoban.new(board_st)
|
316
|
+
b.up
|
317
|
+
b.current_board.should == board_st
|
318
|
+
end
|
319
|
+
|
320
|
+
it "should recognize a crate on top of a goal" do
|
321
|
+
board_st = "#####\n" +
|
322
|
+
"# #\n" +
|
323
|
+
"# . #\n" +
|
324
|
+
"# c #\n" +
|
325
|
+
"# x #\n" +
|
326
|
+
"#####"
|
327
|
+
|
328
|
+
board_st_result = "#####\n" +
|
329
|
+
"# #\n" +
|
330
|
+
"# o #\n" +
|
331
|
+
"# x #\n" +
|
332
|
+
"# #\n" +
|
333
|
+
"#####"
|
334
|
+
|
335
|
+
b = Sokoban.new(board_st)
|
336
|
+
b.up
|
337
|
+
b.current_board.should == board_st_result
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should recognize a player on top of a goal" do
|
341
|
+
board_st = "#####\n" +
|
342
|
+
"# #\n" +
|
343
|
+
"# . #\n" +
|
344
|
+
"# x #\n" +
|
345
|
+
"# #\n" +
|
346
|
+
"#####"
|
347
|
+
|
348
|
+
board_st_result = "#####\n" +
|
349
|
+
"# #\n" +
|
350
|
+
"# x #\n" +
|
351
|
+
"# #\n" +
|
352
|
+
"# #\n" +
|
353
|
+
"#####"
|
354
|
+
|
355
|
+
b = Sokoban.new(board_st)
|
356
|
+
b.up
|
357
|
+
b.current_board.should == board_st_result
|
358
|
+
b.down
|
359
|
+
b.current_board.should == board_st
|
360
|
+
end
|
361
|
+
|
362
|
+
it "should recognize a player on top of a goal" do
|
363
|
+
board_st = "#####\n" +
|
364
|
+
"# . #\n" +
|
365
|
+
"# . #\n" +
|
366
|
+
"# x #\n" +
|
367
|
+
"# #\n" +
|
368
|
+
"#####"
|
369
|
+
|
370
|
+
board_st_result = "#####\n" +
|
371
|
+
"# .x#\n" +
|
372
|
+
"# . #\n" +
|
373
|
+
"# #\n" +
|
374
|
+
"# #\n" +
|
375
|
+
"#####"
|
376
|
+
|
377
|
+
b = Sokoban.new(board_st)
|
378
|
+
b.up
|
379
|
+
b.up
|
380
|
+
b.right
|
381
|
+
b.current_board.should == board_st_result
|
382
|
+
end
|
383
|
+
|
384
|
+
it "should not remove a crate when exiting a goal" do
|
385
|
+
board_st = "#####\n" +
|
386
|
+
"# #\n" +
|
387
|
+
"# . #\n" +
|
388
|
+
"# c #\n" +
|
389
|
+
"# x #\n" +
|
390
|
+
"#####"
|
391
|
+
|
392
|
+
board_st_result = "#####\n" +
|
393
|
+
"# c #\n" +
|
394
|
+
"# x #\n" +
|
395
|
+
"# #\n" +
|
396
|
+
"# #\n" +
|
397
|
+
"#####"
|
398
|
+
|
399
|
+
b = Sokoban.new(board_st)
|
400
|
+
b.up
|
401
|
+
b.up
|
402
|
+
b.current_board.should == board_st_result
|
403
|
+
end
|
404
|
+
|
405
|
+
it "should not lose that a crate is above a goal after a second movement" do
|
406
|
+
board_st = "#####\n" +
|
407
|
+
"# . #\n" +
|
408
|
+
"# . #\n" +
|
409
|
+
"# c #\n" +
|
410
|
+
"# x #\n" +
|
411
|
+
"#####"
|
412
|
+
|
413
|
+
board_st_result = "#####\n" +
|
414
|
+
"# o #\n" +
|
415
|
+
"# x #\n" +
|
416
|
+
"# #\n" +
|
417
|
+
"# #\n" +
|
418
|
+
"#####"
|
419
|
+
|
420
|
+
b = Sokoban.new(board_st)
|
421
|
+
b.up
|
422
|
+
b.up
|
423
|
+
b.current_board.should == board_st_result
|
424
|
+
end
|
425
|
+
|
426
|
+
it "should be fail by default" do
|
427
|
+
board_st = "#####\n" +
|
428
|
+
"#c. #\n" +
|
429
|
+
"# x #\n" +
|
430
|
+
"#####"
|
431
|
+
|
432
|
+
b = Sokoban.new(board_st)
|
433
|
+
b.is_finished.should == false
|
434
|
+
end
|
435
|
+
|
436
|
+
it "should win with a single achievable goal" do
|
437
|
+
board_st = "#####\n" +
|
438
|
+
"# . #\n" +
|
439
|
+
"# c #\n" +
|
440
|
+
"# x #\n" +
|
441
|
+
"#####"
|
442
|
+
|
443
|
+
b = Sokoban.new(board_st)
|
444
|
+
b.up
|
445
|
+
b.is_finished.should == true
|
446
|
+
end
|
447
|
+
|
448
|
+
it "should win with a single achievable goal in another goal point" do
|
449
|
+
board_st = "#####\n" +
|
450
|
+
"# #\n" +
|
451
|
+
"# . #\n" +
|
452
|
+
"# c #\n" +
|
453
|
+
"# x #\n" +
|
454
|
+
"#####"
|
455
|
+
|
456
|
+
b = Sokoban.new(board_st)
|
457
|
+
b.up
|
458
|
+
b.is_finished.should == true
|
459
|
+
end
|
460
|
+
|
461
|
+
it "should not win when there are more crates to put into goals" do
|
462
|
+
board_st = "#####\n" +
|
463
|
+
"# #\n" +
|
464
|
+
"# ..#\n" +
|
465
|
+
"# cc#\n" +
|
466
|
+
"# x #\n" +
|
467
|
+
"#####"
|
468
|
+
|
469
|
+
b = Sokoban.new(board_st)
|
470
|
+
b.up
|
471
|
+
b.down
|
472
|
+
b.right
|
473
|
+
b.is_finished.should == false
|
474
|
+
end
|
475
|
+
|
476
|
+
end
|
477
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sokoban'
|
3
|
+
|
4
|
+
class BoardTest < Test::Unit::TestCase
|
5
|
+
include Sokoban
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@board = new_board_from_file('easy.skn')
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_board_parser
|
12
|
+
expected_board = "#####\n" +
|
13
|
+
"#.o@#\n" +
|
14
|
+
"#####"
|
15
|
+
assert_equal expected_board, @board.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_win
|
19
|
+
assert !@board.win?
|
20
|
+
@board.push(:left)
|
21
|
+
expected_board = "#####\n" +
|
22
|
+
"#*@ #\n" +
|
23
|
+
"#####"
|
24
|
+
assert @board.win?
|
25
|
+
assert_equal expected_board, @board.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_storage_cells
|
29
|
+
cells = @board.storage_cells
|
30
|
+
cell = cells.first
|
31
|
+
assert_equal 1, cells.size
|
32
|
+
assert_equal [1, 1], cell.coordinates
|
33
|
+
assert_nil cell.contents
|
34
|
+
@board.push(:left)
|
35
|
+
assert cell.contents
|
36
|
+
assert_equal :package, cell.contents.type
|
37
|
+
end
|
38
|
+
end
|
@@ -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/test_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
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_set_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/tc_move_recorder"
|
16
|
+
require "../test/tc_map"
|
17
|
+
require "../test/ui/tc_console"
|
18
|
+
require "../test/ui/tc_player_action"
|
19
|
+
require "../test/ui/tc_skin"
|
20
|
+
require "../test/tc_extensions"
|
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"
|