Skip to content

Commit 887fa8e

Browse files
committed
飛び駒判定追加
1 parent 76c7dec commit 887fa8e

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

board.rb

+37-1
Original file line numberDiff line numberDiff line change
@@ -191,13 +191,21 @@ def move before, after, id
191191
end
192192

193193
if piece(after).player == order(id)
194-
raise CannotMove, "指定場所へは動かせません"
194+
raise ExistPiece, "自分の駒は取れません"
195195
end
196196

197197
unless orig_piece.move? before, after
198198
raise CannotMove, "指定場所へは動かせません"
199199
end
200200

201+
rlist = road_list piece(before), before, after
202+
rlist.each do |pos|
203+
if piece(pos).kind != :nil
204+
p "他の駒は飛び越えられません"
205+
raise CannotMove, "他の駒は飛び越えられません"
206+
end
207+
end
208+
201209
if exist? after
202210
captured = @data[after[0]][after[1]]
203211
if captured.player == :first
@@ -342,4 +350,32 @@ def can_next? pos
342350
def grow_piece pos
343351
piece(pos).grow = true
344352
end
353+
354+
def road_list piece, before, after
355+
mlist = move_list piece, before
356+
rlist = []
357+
orig_dist = Math.sqrt((before[0]-after[0])**2 + (before[1]-after[1])**2)
358+
mlist.each do |pos|
359+
dist = Math.sqrt((pos[0]-after[0])**2 + (pos[1]-after[1])**2)
360+
361+
if orig_dist > dist && dist != 0
362+
rlist << pos
363+
end
364+
end
365+
366+
rlist
367+
end
368+
369+
def move_list piece, pos
370+
list = []
371+
9.times do |x|
372+
9.times do |y|
373+
if piece.move? pos, [x, y]
374+
#dist = Math.sqrt((pos[0]-x)**2 + (pos[1]-y)**2)
375+
list << [x, y]
376+
end
377+
end
378+
end
379+
list
380+
end
345381
end

pieces/nil_piece.rb

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ def initialize
66
@grow = false
77
end
88

9+
def kind
10+
:nil
11+
end
12+
913
def ==(pce)
1014
pce.class == 'NilPiece'
1115
end

spec/board_spec.rb

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
require_relative '../board'
2+
3+
4+
describe Board do
5+
describe "road_list" do
6+
before do
7+
data = Array.new(9).map{ Array.new(9, NilPiece.new) }
8+
data[1][7] = Kyo.new(:first, false)
9+
data[4][4] = Kaku.new(:first, false)
10+
data[4][7] = Hi.new(:first, false)
11+
@board = Board.instance
12+
@board.instance_eval do
13+
@data = data
14+
15+
@order_list[:first] = 1
16+
end
17+
end
18+
19+
it "road_listの確認" do
20+
pce = @board.piece [4,4]
21+
#p @board.road_list pce, [4,7], [0,7]
22+
p @board.move [4,7], [0,7], 1
23+
end
24+
end
25+
end

0 commit comments

Comments
 (0)