console-shogi 0.1.0 → 0.3.0
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +19 -0
- data/exe/console-shogi +7 -0
- data/images/active/gote/fu.png +0 -0
- data/images/active/gote/gin.png +0 -0
- data/images/active/gote/gyoku.png +0 -0
- data/images/active/gote/hisha.png +0 -0
- data/images/active/gote/kaku.png +0 -0
- data/images/active/gote/keima.png +0 -0
- data/images/active/gote/kin.png +0 -0
- data/images/active/gote/kyosha.png +0 -0
- data/images/active/gote/narigin.png +0 -0
- data/images/active/gote/narikei.png +0 -0
- data/images/active/gote/narikyo.png +0 -0
- data/images/active/gote/ohsho.png +0 -0
- data/images/active/gote/ryu.png +0 -0
- data/images/active/gote/tokin.png +0 -0
- data/images/active/gote/uma.png +0 -0
- data/images/active/nonepiece.png +0 -0
- data/images/active/sente/fu.png +0 -0
- data/images/active/sente/gin.png +0 -0
- data/images/active/sente/gyoku.png +0 -0
- data/images/active/sente/hisha.png +0 -0
- data/images/active/sente/kaku.png +0 -0
- data/images/active/sente/keima.png +0 -0
- data/images/active/sente/kin.png +0 -0
- data/images/active/sente/kyosha.png +0 -0
- data/images/active/sente/narigin.png +0 -0
- data/images/active/sente/narikei.png +0 -0
- data/images/active/sente/narikyo.png +0 -0
- data/images/active/sente/ohsho.png +0 -0
- data/images/active/sente/ryu.png +0 -0
- data/images/active/sente/tokin.png +0 -0
- data/images/active/sente/uma.png +0 -0
- data/images/focused/gote/fu.png +0 -0
- data/images/focused/gote/gin.png +0 -0
- data/images/focused/gote/gyoku.png +0 -0
- data/images/focused/gote/hisha.png +0 -0
- data/images/focused/gote/kaku.png +0 -0
- data/images/focused/gote/keima.png +0 -0
- data/images/focused/gote/kin.png +0 -0
- data/images/focused/gote/kyosha.png +0 -0
- data/images/focused/gote/narigin.png +0 -0
- data/images/focused/gote/narikei.png +0 -0
- data/images/focused/gote/narikyo.png +0 -0
- data/images/focused/gote/ohsho.png +0 -0
- data/images/focused/gote/ryu.png +0 -0
- data/images/focused/gote/tokin.png +0 -0
- data/images/focused/gote/uma.png +0 -0
- data/images/focused/nonepiece.png +0 -0
- data/images/focused/sente/fu.png +0 -0
- data/images/focused/sente/gin.png +0 -0
- data/images/focused/sente/gyoku.png +0 -0
- data/images/focused/sente/hisha.png +0 -0
- data/images/focused/sente/kaku.png +0 -0
- data/images/focused/sente/keima.png +0 -0
- data/images/focused/sente/kin.png +0 -0
- data/images/focused/sente/kyosha.png +0 -0
- data/images/focused/sente/narigin.png +0 -0
- data/images/focused/sente/narikei.png +0 -0
- data/images/focused/sente/narikyo.png +0 -0
- data/images/focused/sente/ohsho.png +0 -0
- data/images/focused/sente/ryu.png +0 -0
- data/images/focused/sente/tokin.png +0 -0
- data/images/focused/sente/uma.png +0 -0
- data/lib/console_shogi/board.rb +5 -9
- data/lib/console_shogi/game.rb +118 -19
- data/lib/console_shogi/komadai.rb +11 -9
- data/lib/console_shogi/new_board_builder.rb +41 -41
- data/lib/console_shogi/piece.rb +34 -23
- data/lib/console_shogi/piece_movement_checker.rb +46 -0
- data/lib/console_shogi/piece_mover.rb +31 -48
- data/lib/console_shogi/piece_mover_on_komadai.rb +30 -36
- data/lib/console_shogi/player.rb +5 -13
- data/lib/console_shogi/teban.rb +8 -0
- data/lib/console_shogi/terminal/cursor.rb +80 -0
- data/lib/console_shogi/terminal/display_area.rb +30 -0
- data/lib/console_shogi/terminal/operator.rb +209 -0
- data/lib/console_shogi/version.rb +1 -1
- data/lib/console_shogi.rb +6 -1
- metadata +105 -38
- data/images/gote/nonepiece.png +0 -0
- data/lib/console_shogi/terminal_operator.rb +0 -211
- /data/images/{gote/shori.png → gote_shori.png} +0 -0
- /data/images/{gote → nomal/gote}/fu.png +0 -0
- /data/images/{gote → nomal/gote}/gin.png +0 -0
- /data/images/{gote → nomal/gote}/gyoku.png +0 -0
- /data/images/{gote → nomal/gote}/hisha.png +0 -0
- /data/images/{gote → nomal/gote}/kaku.png +0 -0
- /data/images/{gote → nomal/gote}/keima.png +0 -0
- /data/images/{gote → nomal/gote}/kin.png +0 -0
- /data/images/{gote → nomal/gote}/kyosha.png +0 -0
- /data/images/{gote → nomal/gote}/narigin.png +0 -0
- /data/images/{gote → nomal/gote}/narikei.png +0 -0
- /data/images/{gote → nomal/gote}/narikyo.png +0 -0
- /data/images/{gote → nomal/gote}/ohsho.png +0 -0
- /data/images/{gote → nomal/gote}/ryu.png +0 -0
- /data/images/{gote → nomal/gote}/tokin.png +0 -0
- /data/images/{gote → nomal/gote}/uma.png +0 -0
- /data/images/{sente → nomal}/nonepiece.png +0 -0
- /data/images/{sente → nomal/sente}/fu.png +0 -0
- /data/images/{sente → nomal/sente}/gin.png +0 -0
- /data/images/{sente → nomal/sente}/gyoku.png +0 -0
- /data/images/{sente → nomal/sente}/hisha.png +0 -0
- /data/images/{sente → nomal/sente}/kaku.png +0 -0
- /data/images/{sente → nomal/sente}/keima.png +0 -0
- /data/images/{sente → nomal/sente}/kin.png +0 -0
- /data/images/{sente → nomal/sente}/kyosha.png +0 -0
- /data/images/{sente → nomal/sente}/narigin.png +0 -0
- /data/images/{sente → nomal/sente}/narikei.png +0 -0
- /data/images/{sente → nomal/sente}/narikyo.png +0 -0
- /data/images/{sente → nomal/sente}/ohsho.png +0 -0
- /data/images/{sente → nomal/sente}/ryu.png +0 -0
- /data/images/{sente → nomal/sente}/tokin.png +0 -0
- /data/images/{sente → nomal/sente}/uma.png +0 -0
- /data/images/{sente/shori.png → sente_shori.png} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: add4a4e51f593521d761a1afe000dfe184f8effe9d4f41d4822807465036a3cb
|
4
|
+
data.tar.gz: dbde9af4607ec797e9bdbea94d1a7ef64d7eb0cdbfbca8c9d5c601696e1f0785
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85e7e5b136cfda4c6a31fa6e1cb9b380b0adfb3162b2f9c2ae154d831a1ee3e7302275c8e94f2da2ce7a2c6695280eedf26fb4df2f0a24b9775b606030d2d0a5
|
7
|
+
data.tar.gz: 5ea91665e1498809b9b59cc282e2ea22ac7c8dbd1ed2b5770f02bd29afbc18cb08c0ab074ef2a8a5b8aaa4e006513ced0f62a4f9b67bff31866a341b46d810b6
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1 +1,20 @@
|
|
1
1
|
# console-shogi
|
2
|
+
|
3
|
+
You can play the Shogi in your terminal ☗☖
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```
|
8
|
+
gem install console-shogi
|
9
|
+
```
|
10
|
+
|
11
|
+
## Start Game
|
12
|
+
|
13
|
+
```
|
14
|
+
console-shogi
|
15
|
+
```
|
16
|
+
|
17
|
+
## Commands
|
18
|
+
|
19
|
+
* move a cursor : `direction keys` ←↓↑→
|
20
|
+
* select and drop a piece : `Enter`
|
data/exe/console-shogi
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/console_shogi/board.rb
CHANGED
@@ -12,6 +12,10 @@ module ConsoleShogi
|
|
12
12
|
@pieces
|
13
13
|
end
|
14
14
|
|
15
|
+
def copy
|
16
|
+
Board.new(pieces: pieces.to_a)
|
17
|
+
end
|
18
|
+
|
15
19
|
def within_range?(x:, y:)
|
16
20
|
case {x: x, y: y}
|
17
21
|
in x: 0..8, y: 0..8
|
@@ -34,16 +38,8 @@ module ConsoleShogi
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def move_piece!(from:, to:)
|
37
|
-
|
41
|
+
@pieces[to[:y], to[:x]] = @pieces[from[:y], from[:x]]
|
38
42
|
@pieces[from[:y], from[:x]] = NonePiece.new
|
39
|
-
|
40
|
-
to_piece = @pieces[to[:y], to[:x]]
|
41
|
-
|
42
|
-
# NOTE 駒を取る、リファクタする
|
43
|
-
# from_piece.player で player 取るの違和感
|
44
|
-
from_piece.player.capture_piece!(to_piece) unless to_piece.none?
|
45
|
-
|
46
|
-
@pieces[to[:y], to[:x]] = from_piece
|
47
43
|
end
|
48
44
|
|
49
45
|
private
|
data/lib/console_shogi/game.rb
CHANGED
@@ -5,13 +5,21 @@ require 'io/console'
|
|
5
5
|
module ConsoleShogi
|
6
6
|
class Game
|
7
7
|
def initialize
|
8
|
-
@sente_player = Player.new(teban:
|
9
|
-
@gote_player = Player.new(teban:
|
10
|
-
@board = NewBoardBuilder.build
|
8
|
+
@sente_player = Player.new(teban: Teban::SENTE)
|
9
|
+
@gote_player = Player.new(teban: Teban::GOTE)
|
10
|
+
@board = NewBoardBuilder.build
|
11
|
+
|
12
|
+
@previous_board = Board.new(pieces: [])
|
13
|
+
@from_cursor = nil
|
14
|
+
@selected_piece = false
|
15
|
+
@teban_player = @sente_player
|
11
16
|
end
|
12
17
|
|
13
18
|
def start
|
14
|
-
|
19
|
+
Terminal::Operator.clear_scrren
|
20
|
+
|
21
|
+
Terminal::Operator.print_diff_board(previous_board: previous_board, board: board, sente_komadai: sente_player.komadai, gote_komadai: gote_player.komadai)
|
22
|
+
Terminal::Operator.print_teban(teban_player.teban)
|
15
23
|
|
16
24
|
while key = STDIN.getch
|
17
25
|
# NOTE Ctrl-C を押したら終了
|
@@ -21,29 +29,80 @@ module ConsoleShogi
|
|
21
29
|
elsif key == "\e" && STDIN.getch == "["
|
22
30
|
key = STDIN.getch
|
23
31
|
|
24
|
-
|
32
|
+
cursor = Terminal::Operator.cursor
|
33
|
+
@previous_cursor_on_square = cursor.dup unless cursor.squares_position.location == :none
|
34
|
+
|
35
|
+
cursor.move(key)
|
36
|
+
|
37
|
+
# TODO 選択したピースは色を変えないようにしている。状態の持ち方を見直したい
|
38
|
+
deactive_piece(previous_cursor_on_square) unless selected_piece && from_cursor.squares_position == previous_cursor_on_square.squares_position
|
39
|
+
focus_piece(cursor) unless selected_piece && from_cursor.squares_position == cursor.squares_position
|
25
40
|
# NOTE Enter を押したら駒を移動
|
26
41
|
elsif key == "\r"
|
27
42
|
# TODO このまま Hash にするかは要検討
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
43
|
+
cursor = Terminal::Operator.cursor
|
44
|
+
|
45
|
+
if selected_piece
|
46
|
+
next if cursor.squares_position.location != :board
|
47
|
+
|
48
|
+
piece_mover =
|
49
|
+
case from_cursor.squares_position.location
|
50
|
+
when :board
|
51
|
+
# TODO 後で index を統一的にどう扱うか整理する
|
52
|
+
PieceMover.new(
|
53
|
+
board: board,
|
54
|
+
player: teban_player,
|
55
|
+
from: from_cursor.squares_position.to_h,
|
56
|
+
to: cursor.squares_position.to_h
|
57
|
+
)
|
58
|
+
when :sente_komadai
|
59
|
+
PieceMoverOnKomadai.new(
|
60
|
+
board: board,
|
61
|
+
komadai: sente_player.komadai,
|
62
|
+
from: from_cursor.squares_position.to_h,
|
63
|
+
to: cursor.squares_position.to_h
|
64
|
+
)
|
65
|
+
when :gote_komadai
|
66
|
+
PieceMoverOnKomadai.new(
|
67
|
+
board: board,
|
68
|
+
komadai: gote_player.komadai,
|
69
|
+
from: from_cursor.squares_position.to_h,
|
70
|
+
to: cursor.squares_position.to_h
|
71
|
+
)
|
72
|
+
end
|
38
73
|
|
39
|
-
|
40
|
-
|
74
|
+
piece_mover.move!
|
75
|
+
|
76
|
+
if piece_mover.moved_piece?
|
77
|
+
Terminal::Operator.print_diff_board(previous_board: previous_board, board: board, sente_komadai: sente_player.komadai, gote_komadai: gote_player.komadai)
|
78
|
+
|
79
|
+
@previous_board = board.copy
|
80
|
+
change_teban!
|
81
|
+
|
82
|
+
Terminal::Operator.print_teban(teban_player.teban)
|
83
|
+
else
|
84
|
+
deactive_piece(from_cursor)
|
85
|
+
end
|
86
|
+
|
87
|
+
@from_cursor = nil
|
88
|
+
@selected_piece = false
|
89
|
+
else
|
90
|
+
# TODO PieceMover の can_move? と分散してしまっている気もする
|
91
|
+
next if cursor.squares_position.location == :none
|
92
|
+
next if teban_player.sente? && cursor.squares_position.location == :gote_komadai
|
93
|
+
next if teban_player.gote? && cursor.squares_position.location == :sente_komadai
|
94
|
+
|
95
|
+
active_piece(cursor)
|
96
|
+
|
97
|
+
@from_cursor = cursor.dup
|
98
|
+
@selected_piece = true
|
99
|
+
end
|
41
100
|
|
42
101
|
# TODO ひとまず動く物を作った。リファクタリングする
|
43
102
|
[sente_player, gote_player].each do |player|
|
44
103
|
next unless player.win?
|
45
104
|
|
46
|
-
|
105
|
+
Terminal::Operator.print_winner(player)
|
47
106
|
exit
|
48
107
|
end
|
49
108
|
end
|
@@ -52,6 +111,46 @@ module ConsoleShogi
|
|
52
111
|
|
53
112
|
private
|
54
113
|
|
55
|
-
attr_reader :board, :sente_player, :gote_player
|
114
|
+
attr_reader :board, :sente_player, :gote_player, :selected_piece, :from_cursor, :teban_player, :previous_board, :previous_cursor_on_square
|
115
|
+
|
116
|
+
def change_teban!
|
117
|
+
@teban_player = teban_player == sente_player ? gote_player : sente_player
|
118
|
+
end
|
119
|
+
|
120
|
+
def active_piece(cursor)
|
121
|
+
# TODO case で指定しないといけないのイケてないのでリファクタしたい
|
122
|
+
case cursor.squares_position.location
|
123
|
+
when :board
|
124
|
+
Terminal::Operator.active_piece(location: board, cursor: cursor)
|
125
|
+
when :sente_komadai
|
126
|
+
Terminal::Operator.active_piece(location: sente_player.komadai, cursor: cursor)
|
127
|
+
when :gote_komadai
|
128
|
+
Terminal::Operator.active_piece(location: gote_player.komadai, cursor: cursor)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def deactive_piece(cursor)
|
133
|
+
# TODO case で指定しないといけないのイケてないのでリファクタしたい
|
134
|
+
case cursor.squares_position.location
|
135
|
+
when :board
|
136
|
+
Terminal::Operator.deactive_piece(location: board, previous_cursor: cursor)
|
137
|
+
when :sente_komadai
|
138
|
+
Terminal::Operator.deactive_piece(location: sente_player.komadai, previous_cursor: cursor)
|
139
|
+
when :gote_komadai
|
140
|
+
Terminal::Operator.deactive_piece(location: gote_player.komadai, previous_cursor: cursor)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def focus_piece(cursor)
|
145
|
+
# TODO case で指定しないといけないのイケてないのでリファクタしたい
|
146
|
+
case cursor.squares_position.location
|
147
|
+
when :board
|
148
|
+
Terminal::Operator.focus_piece(location: board, cursor: cursor)
|
149
|
+
when :sente_komadai
|
150
|
+
Terminal::Operator.focus_piece(location: sente_player.komadai, cursor: cursor)
|
151
|
+
when :gote_komadai
|
152
|
+
Terminal::Operator.focus_piece(location: gote_player.komadai, cursor: cursor)
|
153
|
+
end
|
154
|
+
end
|
56
155
|
end
|
57
156
|
end
|
@@ -12,22 +12,16 @@ module ConsoleShogi
|
|
12
12
|
@pieces = empty_pieces
|
13
13
|
end
|
14
14
|
|
15
|
-
def expand!
|
16
|
-
@pieces = pieces.hstack(empty_pieces)
|
17
|
-
end
|
18
|
-
|
19
|
-
def have_space?
|
20
|
-
pieces.any?(&:none?)
|
21
|
-
end
|
22
|
-
|
23
15
|
def fetch_piece(x:, y:)
|
24
16
|
pieces[y, x]
|
25
17
|
end
|
26
18
|
|
27
19
|
def put(piece:)
|
20
|
+
expand! unless have_space?
|
21
|
+
|
28
22
|
index = pieces.index(&:none?)
|
29
23
|
|
30
|
-
|
24
|
+
piece = piece.original if piece.promoted?
|
31
25
|
|
32
26
|
@pieces[*index] = piece
|
33
27
|
|
@@ -41,6 +35,14 @@ module ConsoleShogi
|
|
41
35
|
|
42
36
|
private
|
43
37
|
|
38
|
+
def expand!
|
39
|
+
@pieces = pieces.hstack(empty_pieces)
|
40
|
+
end
|
41
|
+
|
42
|
+
def have_space?
|
43
|
+
pieces.any?(&:none?)
|
44
|
+
end
|
45
|
+
|
44
46
|
def sort_pieces
|
45
47
|
column_num = pieces.count / 3
|
46
48
|
Matrix.rows(pieces.sort_by {|p| -p.number }.each_slice(column_num).to_a)
|
@@ -3,41 +3,41 @@
|
|
3
3
|
module ConsoleShogi
|
4
4
|
class NewBoardBuilder
|
5
5
|
class << self
|
6
|
-
def build
|
6
|
+
def build
|
7
7
|
Board.new(
|
8
8
|
pieces: [
|
9
9
|
[
|
10
|
-
Kyosha.new(
|
11
|
-
Keima.new(
|
12
|
-
Gin.new(
|
13
|
-
Kin.new(
|
14
|
-
Ohsho.new(
|
15
|
-
Kin.new(
|
16
|
-
Gin.new(
|
17
|
-
Keima.new(
|
18
|
-
Kyosha.new(
|
10
|
+
Kyosha.new(teban: Teban::GOTE),
|
11
|
+
Keima.new(teban: Teban::GOTE),
|
12
|
+
Gin.new(teban: Teban::GOTE),
|
13
|
+
Kin.new(teban: Teban::GOTE),
|
14
|
+
Ohsho.new(teban: Teban::GOTE),
|
15
|
+
Kin.new(teban: Teban::GOTE),
|
16
|
+
Gin.new(teban: Teban::GOTE),
|
17
|
+
Keima.new(teban: Teban::GOTE),
|
18
|
+
Kyosha.new(teban: Teban::GOTE)
|
19
19
|
],
|
20
20
|
[
|
21
21
|
NonePiece.new,
|
22
|
-
Hisha.new(
|
22
|
+
Hisha.new(teban: Teban::GOTE),
|
23
23
|
NonePiece.new,
|
24
24
|
NonePiece.new,
|
25
25
|
NonePiece.new,
|
26
26
|
NonePiece.new,
|
27
27
|
NonePiece.new,
|
28
|
-
Kaku.new(
|
28
|
+
Kaku.new(teban: Teban::GOTE),
|
29
29
|
NonePiece.new
|
30
30
|
],
|
31
31
|
[
|
32
|
-
Fu.new(
|
33
|
-
Fu.new(
|
34
|
-
Fu.new(
|
35
|
-
Fu.new(
|
36
|
-
Fu.new(
|
37
|
-
Fu.new(
|
38
|
-
Fu.new(
|
39
|
-
Fu.new(
|
40
|
-
Fu.new(
|
32
|
+
Fu.new(teban: Teban::GOTE),
|
33
|
+
Fu.new(teban: Teban::GOTE),
|
34
|
+
Fu.new(teban: Teban::GOTE),
|
35
|
+
Fu.new(teban: Teban::GOTE),
|
36
|
+
Fu.new(teban: Teban::GOTE),
|
37
|
+
Fu.new(teban: Teban::GOTE),
|
38
|
+
Fu.new(teban: Teban::GOTE),
|
39
|
+
Fu.new(teban: Teban::GOTE),
|
40
|
+
Fu.new(teban: Teban::GOTE)
|
41
41
|
],
|
42
42
|
[
|
43
43
|
NonePiece.new,
|
@@ -73,37 +73,37 @@ module ConsoleShogi
|
|
73
73
|
NonePiece.new
|
74
74
|
],
|
75
75
|
[
|
76
|
-
Fu.new(
|
77
|
-
Fu.new(
|
78
|
-
Fu.new(
|
79
|
-
Fu.new(
|
80
|
-
Fu.new(
|
81
|
-
Fu.new(
|
82
|
-
Fu.new(
|
83
|
-
Fu.new(
|
84
|
-
Fu.new(
|
76
|
+
Fu.new(teban: Teban::SENTE),
|
77
|
+
Fu.new(teban: Teban::SENTE),
|
78
|
+
Fu.new(teban: Teban::SENTE),
|
79
|
+
Fu.new(teban: Teban::SENTE),
|
80
|
+
Fu.new(teban: Teban::SENTE),
|
81
|
+
Fu.new(teban: Teban::SENTE),
|
82
|
+
Fu.new(teban: Teban::SENTE),
|
83
|
+
Fu.new(teban: Teban::SENTE),
|
84
|
+
Fu.new(teban: Teban::SENTE)
|
85
85
|
],
|
86
86
|
[
|
87
87
|
NonePiece.new,
|
88
|
-
Kaku.new(
|
88
|
+
Kaku.new(teban: Teban::SENTE),
|
89
89
|
NonePiece.new,
|
90
90
|
NonePiece.new,
|
91
91
|
NonePiece.new,
|
92
92
|
NonePiece.new,
|
93
93
|
NonePiece.new,
|
94
|
-
Hisha.new(
|
94
|
+
Hisha.new(teban: Teban::SENTE),
|
95
95
|
NonePiece.new
|
96
96
|
],
|
97
97
|
[
|
98
|
-
Kyosha.new(
|
99
|
-
Keima.new(
|
100
|
-
Gin.new(
|
101
|
-
Kin.new(
|
102
|
-
Ohsho.new(
|
103
|
-
Kin.new(
|
104
|
-
Gin.new(
|
105
|
-
Keima.new(
|
106
|
-
Kyosha.new(
|
98
|
+
Kyosha.new(teban: Teban::SENTE),
|
99
|
+
Keima.new(teban: Teban::SENTE),
|
100
|
+
Gin.new(teban: Teban::SENTE),
|
101
|
+
Kin.new(teban: Teban::SENTE),
|
102
|
+
Ohsho.new(teban: Teban::SENTE),
|
103
|
+
Kin.new(teban: Teban::SENTE),
|
104
|
+
Gin.new(teban: Teban::SENTE),
|
105
|
+
Keima.new(teban: Teban::SENTE),
|
106
|
+
Kyosha.new(teban: Teban::SENTE)
|
107
107
|
]
|
108
108
|
]
|
109
109
|
)
|