1
- require './pieces/piece'
1
+ #Dir[File.expand_path('./pieces', __FILE__) << '/*.rb'].each do |file|
2
+ # require file
3
+ #end
4
+
5
+ require './pieces/ou'
6
+ require './pieces/kin'
7
+ require './pieces/gin'
8
+ require './pieces/kei'
9
+ require './pieces/kyo'
10
+ require './pieces/fu'
11
+ require './pieces/hi'
12
+ require './pieces/kaku'
13
+ require './pieces/nil_piece'
2
14
require 'singleton'
3
15
4
16
class ExistPiece < StandardError ; end
5
17
class MissingPiece < StandardError ; end
18
+ class CannotMove < StandardError ; end
6
19
7
20
# TODO: 飛び駒の判定
8
21
# TODO: 二歩判定
9
22
# TODO: 観客は見るだけにする
10
- # TODO: 観客ステータス
11
- # TODO: 先後逆の駒は触れないようにする
12
23
# TODO: ログ機能
13
24
# TODO: 待った機能
14
25
# TODO: 負けました機能
@@ -34,75 +45,75 @@ def init_board
34
45
@order_first = true
35
46
36
47
@data << [
37
- Piece . new ( :kyo , : second, false ) , Piece . new ,
38
- Piece . new ( :fu , : second, false ) , Piece . new ,
39
- Piece . new , Piece . new ,
40
- Piece . new ( :fu , : first, false ) , Piece . new ,
41
- Piece . new ( :kyo , :first , false )
48
+ Kyo . new ( :second , false ) , NilPiece . new ,
49
+ Fu . new ( :second , false ) , NilPiece . new ,
50
+ NilPiece . new , NilPiece . new ,
51
+ Fu . new ( :first , false ) , NilPiece . new ,
52
+ Kyo . new ( :first , false )
42
53
]
43
54
44
55
@data << [
45
- Piece . new ( :kei , : second, false ) , Piece . new ( :kaku , :second , false ) ,
46
- Piece . new ( :fu , : second, false ) , Piece . new ,
47
- Piece . new , Piece . new ,
48
- Piece . new ( :fu , : first, false ) , Piece . new ( :hi , :first , false ) ,
49
- Piece . new ( :kei , :first , false )
56
+ Kei . new ( :second , false ) , Kaku . new ( :second , false ) ,
57
+ Fu . new ( :second , false ) , NilPiece . new ,
58
+ NilPiece . new , NilPiece . new ,
59
+ Fu . new ( :first , false ) , Hi . new ( :first , false ) ,
60
+ Kei . new ( :first , false )
50
61
]
51
62
52
63
@data << [
53
- Piece . new ( :gin , : second, false ) , Piece . new ,
54
- Piece . new ( :fu , : second, false ) , Piece . new ,
55
- Piece . new , Piece . new ,
56
- Piece . new ( :fu , : first, false ) , Piece . new ,
57
- Piece . new ( :gin , :first , false )
64
+ Gin . new ( :second , false ) , NilPiece . new ,
65
+ Fu . new ( :second , false ) , NilPiece . new ,
66
+ NilPiece . new , NilPiece . new ,
67
+ Fu . new ( :first , false ) , NilPiece . new ,
68
+ Gin . new ( :first , false )
58
69
]
59
70
60
71
@data << [
61
- Piece . new ( :kin , : second, false ) , Piece . new ,
62
- Piece . new ( :fu , : second, false ) , Piece . new ,
63
- Piece . new , Piece . new ,
64
- Piece . new ( :fu , : first, false ) , Piece . new ,
65
- Piece . new ( :kin , :first , false )
72
+ Kin . new ( :second , false ) , NilPiece . new ,
73
+ Fu . new ( :second , false ) , NilPiece . new ,
74
+ NilPiece . new , NilPiece . new ,
75
+ Fu . new ( :first , false ) , NilPiece . new ,
76
+ Kin . new ( :first , false )
66
77
]
67
78
68
79
@data << [
69
- Piece . new ( :ou , : second, false ) , Piece . new ,
70
- Piece . new ( :fu , : second, false ) , Piece . new ,
71
- Piece . new , Piece . new ,
72
- Piece . new ( :fu , : first, false ) , Piece . new ,
73
- Piece . new ( :ou , :first , false )
80
+ Ou . new ( :second , false ) , NilPiece . new ,
81
+ Fu . new ( :second , false ) , NilPiece . new ,
82
+ NilPiece . new , NilPiece . new ,
83
+ Fu . new ( :first , false ) , NilPiece . new ,
84
+ Ou . new ( :first , false )
74
85
]
75
86
76
87
@data << [
77
- Piece . new ( :kin , : second, false ) , Piece . new ,
78
- Piece . new ( :fu , : second, false ) , Piece . new ,
79
- Piece . new , Piece . new ,
80
- Piece . new ( :fu , : first, false ) , Piece . new ,
81
- Piece . new ( :kin , :first , false )
88
+ Kin . new ( :second , false ) , NilPiece . new ,
89
+ Fu . new ( :second , false ) , NilPiece . new ,
90
+ NilPiece . new , NilPiece . new ,
91
+ Fu . new ( :first , false ) , NilPiece . new ,
92
+ Kin . new ( :first , false )
82
93
]
83
94
84
95
@data << [
85
- Piece . new ( :gin , : second, false ) , Piece . new ,
86
- Piece . new ( :fu , : second, false ) , Piece . new ,
87
- Piece . new , Piece . new ,
88
- Piece . new ( :fu , : first, false ) , Piece . new ,
89
- Piece . new ( :gin , :first , false )
96
+ Gin . new ( :second , false ) , NilPiece . new ,
97
+ Fu . new ( :second , false ) , NilPiece . new ,
98
+ NilPiece . new , NilPiece . new ,
99
+ Fu . new ( :first , false ) , NilPiece . new ,
100
+ Gin . new ( :first , false )
90
101
]
91
102
92
103
@data << [
93
- Piece . new ( :kei , : second, false ) , Piece . new ( :hi , :second , false ) ,
94
- Piece . new ( :fu , : second, false ) , Piece . new ,
95
- Piece . new , Piece . new ,
96
- Piece . new ( :fu , : first, false ) , Piece . new ( :kaku , :first , false ) ,
97
- Piece . new ( :kei , :first , false )
104
+ Kei . new ( :second , false ) , Hi . new ( :second , false ) ,
105
+ Fu . new ( :second , false ) , NilPiece . new ,
106
+ NilPiece . new , NilPiece . new ,
107
+ Fu . new ( :first , false ) , Kaku . new ( :first , false ) ,
108
+ Kei . new ( :first , false )
98
109
]
99
110
100
111
@data << [
101
- Piece . new ( :kyo , : second, false ) , Piece . new ,
102
- Piece . new ( :fu , : second, false ) , Piece . new ,
103
- Piece . new , Piece . new ,
104
- Piece . new ( :fu , : first, false ) , Piece . new ,
105
- Piece . new ( :kyo , :first , false )
112
+ Kyo . new ( :second , false ) , NilPiece . new ,
113
+ Fu . new ( :second , false ) , NilPiece . new ,
114
+ NilPiece . new , NilPiece . new ,
115
+ Fu . new ( :first , false ) , NilPiece . new ,
116
+ Kyo . new ( :first , false )
106
117
]
107
118
end
108
119
@@ -175,11 +186,15 @@ def move before, after, id
175
186
p "観戦者は駒を動かす事は出来ません"
176
187
return
177
188
else
178
- p "自分の駒以外は動かせません "
189
+ p "指定場所へ動かせません "
179
190
return
180
191
end
181
192
end
182
193
194
+ unless orig_piece . move? before , after
195
+ raise CannotMove , "そこへは動かせません"
196
+ end
197
+
183
198
if exist? after
184
199
captured = @data [ after [ 0 ] ] [ after [ 1 ] ]
185
200
if captured . player == :first
@@ -194,10 +209,10 @@ def move before, after, id
194
209
end
195
210
196
211
@data [ after [ 0 ] ] [ after [ 1 ] ] = @data [ before [ 0 ] ] [ before [ 1 ] ]
197
- @data [ before [ 0 ] ] [ before [ 1 ] ] = Piece . new
212
+ @data [ before [ 0 ] ] [ before [ 1 ] ] = NilPiece . new
198
213
199
214
if can_grow? after
200
- if piece ( after ) . can_next? ( after )
215
+ if can_next? after
201
216
status = { grow : :can }
202
217
else
203
218
status = { grow : :must }
@@ -240,7 +255,7 @@ def set pos, kind, id
240
255
return
241
256
end
242
257
243
- piece = Piece . new ( kind , order ( id ) , false )
258
+ piece = piece_incetance ( kind , order ( id ) , false )
244
259
245
260
if @piece_stand [ order ( id ) ] . include? ( piece )
246
261
@piece_stand [ order ( id ) ] . each_with_index do |p , i |
@@ -256,6 +271,27 @@ def set pos, kind, id
256
271
@data [ pos [ 0 ] ] [ pos [ 1 ] ] = piece
257
272
end
258
273
274
+ def piece_incetance kind , order , grow
275
+ case kind
276
+ when :ou
277
+ Ou . new ( order , grow )
278
+ when :kin
279
+ Kin . new ( order , grow )
280
+ when :gin
281
+ Gin . new ( order , grow )
282
+ when :kei
283
+ Kei . new ( order , grow )
284
+ when :kyo
285
+ Kyo . new ( order , grow )
286
+ when :fu
287
+ Fu . new ( order , grow )
288
+ when :hi
289
+ Hi . new ( order , grow )
290
+ when :kaku
291
+ Kaku . new ( order , grow )
292
+ end
293
+ end
294
+
259
295
def exist? pos
260
296
nil != @data [ pos [ 0 ] ] [ pos [ 1 ] ] . player
261
297
end
@@ -276,6 +312,29 @@ def can_grow? pos
276
312
true if pos [ 1 ] >= 6
277
313
end
278
314
end
315
+
316
+ def can_next? pos
317
+ pce = piece ( pos )
318
+ return true if pce . grow == true
319
+ case pce . kind
320
+ when :kei
321
+ if pce . player == :first
322
+ false if pos [ 1 ] <= 1
323
+ else
324
+ false if pos [ 1 ] >= 7
325
+ end
326
+ true
327
+ when :kyo , :fu
328
+ if pce . player == :first
329
+ false if pos [ 1 ] <= 0
330
+ else
331
+ false if pos [ 1 ] >= 8
332
+ end
333
+ true
334
+ else
335
+ true
336
+ end
337
+ end
279
338
280
339
def grow_piece pos
281
340
piece ( pos ) . grow = true
0 commit comments