Skip to content

Commit 01dbbcb

Browse files
committed
駒クラス修正完了
1 parent 258969e commit 01dbbcb

File tree

15 files changed

+164
-77
lines changed

15 files changed

+164
-77
lines changed

.bundle/config

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
---
22
BUNDLE_PATH: vendor/bundle
3+
BUNDLE_DISABLE_SHARED_GEMS: '1'

board.rb

+111-52
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
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'
214
require 'singleton'
315

416
class ExistPiece < StandardError; end
517
class MissingPiece < StandardError; end
18+
class CannotMove < StandardError; end
619

720
# TODO: 飛び駒の判定
821
# TODO: 二歩判定
922
# TODO: 観客は見るだけにする
10-
# TODO: 観客ステータス
11-
# TODO: 先後逆の駒は触れないようにする
1223
# TODO: ログ機能
1324
# TODO: 待った機能
1425
# TODO: 負けました機能
@@ -34,75 +45,75 @@ def init_board
3445
@order_first = true
3546

3647
@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)
4253
]
4354

4455
@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)
5061
]
5162

5263
@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)
5869
]
5970

6071
@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)
6677
]
6778

6879
@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)
7485
]
7586

7687
@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)
8293
]
8394

8495
@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)
90101
]
91102

92103
@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)
98109
]
99110

100111
@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)
106117
]
107118
end
108119

@@ -175,11 +186,15 @@ def move before, after, id
175186
p "観戦者は駒を動かす事は出来ません"
176187
return
177188
else
178-
p "自分の駒以外は動かせません"
189+
p "指定場所へ動かせません"
179190
return
180191
end
181192
end
182193

194+
unless orig_piece.move? before, after
195+
raise CannotMove, "そこへは動かせません"
196+
end
197+
183198
if exist? after
184199
captured = @data[after[0]][after[1]]
185200
if captured.player == :first
@@ -194,10 +209,10 @@ def move before, after, id
194209
end
195210

196211
@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
198213

199214
if can_grow? after
200-
if piece(after).can_next?(after)
215+
if can_next? after
201216
status = {grow: :can}
202217
else
203218
status = {grow: :must}
@@ -240,7 +255,7 @@ def set pos, kind, id
240255
return
241256
end
242257

243-
piece = Piece.new(kind, order(id), false)
258+
piece = piece_incetance(kind, order(id), false)
244259

245260
if @piece_stand[order(id)].include?(piece)
246261
@piece_stand[order(id)].each_with_index do |p, i|
@@ -256,6 +271,27 @@ def set pos, kind, id
256271
@data[pos[0]][pos[1]] = piece
257272
end
258273

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+
259295
def exist? pos
260296
nil != @data[pos[0]][pos[1]].player
261297
end
@@ -276,6 +312,29 @@ def can_grow? pos
276312
true if pos[1] >= 6
277313
end
278314
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
279338

280339
def grow_piece pos
281340
piece(pos).grow = true

jcclient.rb

+2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ def command str
7070
puts "動かそうとする駒がありません"
7171
elsif e.message == "ExistPiece"
7272
puts "移動先に自分の駒があります"
73+
elsif e.message == "CannotMove"
74+
puts "指定場所へ動かせません"
7375
else
7476
p e
7577
end

pieces/fu.rb

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
require './pieces/piece'
22

33
class Fu < Piece
4+
def kind
5+
:fu
6+
end
7+
48
def move? before, after
59
if @grow == true
610
return move_kin before, after
@@ -19,13 +23,4 @@ def move? before, after
1923
def to_s
2024
disp "歩"
2125
end
22-
23-
def can_next? pos
24-
return true if @grow == true
25-
if @player == :first
26-
return false if pos[1] <= 0
27-
else
28-
return false if pos[1] >= 8
29-
end
30-
end
3126
end

pieces/gin.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
require './pieces/piece'
22

33
class Gin < Piece
4+
def kind
5+
:gin
6+
end
7+
48
def move? before, after
59
if @grow == true
610
return move_kin before, after

pieces/hi.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
require './pieces/piece'
22

33
class Hi < Piece
4+
def kind
5+
:hi
6+
end
7+
48
def move? before, after
59
return true if before[0] == after[0]
610
return true if before[1] == after[1]

pieces/kaku.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
require './pieces/piece'
22

33
class Kaku < Piece
4+
def kind
5+
:kaku
6+
end
7+
48
def move? before, after
59
dist_x = before[0] - after[0]
610
dist_y = before[1] - after[1]

pieces/kei.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
require './pieces/piece'
22

33
class Kei < Piece
4+
def kind
5+
:kei
6+
end
7+
48
def move? before, after
59
if @grow == true
610
return move_kin before, after

pieces/kin.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
require './pieces/piece'
22

33
class Kin < Piece
4+
def kind
5+
:kin
6+
end
7+
48
def move? before, after
59
move_kin before, after
610
end

pieces/kyo.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
require './pieces/piece'
22

33
class Kyo < Piece
4+
def kind
5+
:kyo
6+
end
7+
48
def move? before, after
59
if @grow == true
610
return move_kin before, after

pieces/nil_piece.rb

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
require './pieces/piece'
22

33
class NilPiece < Piece
4+
def initialize
5+
@player = nil
6+
@grow = false
7+
end
8+
49
def ==(pce)
510
pce.class == 'NilPiece'
611
end

pieces/ou.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
require './pieces/piece'
22

33
class Ou < Piece
4+
def kind
5+
:ou
6+
end
47

58
def move? before, after
69
move_ou before, after
@@ -12,9 +15,9 @@ def grow status
1215

1316
def to_s
1417
if @player == :first
15-
"王"
18+
disp "王"
1619
else
17-
"玉"
20+
disp "玉"
1821
end
1922
end
2023
end

0 commit comments

Comments
 (0)