shogi-ruby 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e429472baaa224e6e0b2262cde50bfb08c23075b
4
- data.tar.gz: 01a6477654158aca9f98345c1e8052c362fa1ffb
3
+ metadata.gz: 9d04141b8259822f9f675663b36789155a1cefdd
4
+ data.tar.gz: 41710950fea3ecf1fe1f8f0a64482bf1a6082874
5
5
  SHA512:
6
- metadata.gz: 45d583c374b2b91803db38971127af6f5781ae4cc924e7a7f2fc35350bf17cd9c1e2e82a66f376b907aa6b6749c3eccdb772fe25420a38b5e4bbdd2d3c256114
7
- data.tar.gz: db81567e8cde18b60a646b22e12504ee4918f9b247a5b1363764baefc2a0cb3d64b7d64472722da22a97e2dcf1be6b5d5ce0fa49acb4b3a3e41045bf63a740fc
6
+ metadata.gz: b58afe066c75e1aad5879b85b7970e3d1e7ece52c32d762d3e0d05870e920a66a539f0d44289706d5293c86e469431f14d56213138ac398f636629d77867a70d
7
+ data.tar.gz: dd95ab16a0e4becef1f23cf2d8957d363886156e2280cba54459f80591a46406e7da36b5e84b77bdbae6023faa6d3679554cea720af1e476a5e8ad97edeb655e
@@ -1,8 +1,14 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
- - 2.1.0
4
+ - 2.1
5
+ - 2.2
6
+ - jruby-19mode
7
+ - jruby-head
8
+ - rbx-2
9
+ - ruby-head
6
10
  matrix:
7
11
  allow_failures:
8
- - rvm: 2.1.0
12
+ - rvm: jruby-head
13
+ - rvm: rbx-2
14
+ fast_finish: true
data/NEWS.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # NEWS
2
2
 
3
+ ## 0.0.8: 2015-05-31
4
+
5
+ ### Changes
6
+
7
+ * Improvements
8
+ * Supported Bundler.require (require "shogi-ruby").
9
+ * Added Board.register and Cell.register as plugin system.
10
+ * Fixes
11
+ * Fixed error messages.
12
+
3
13
  ## 0.0.7: 2013-10-29
4
14
 
5
15
  ### Changes
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Shogi Library by Pure Ruby [![Build Status](https://secure.travis-ci.org/myokoym/shogi-ruby.png?branch=master)](http://travis-ci.org/myokoym/shogi-ruby)
1
+ # Shogi Library by Pure Ruby [![Build Status](https://secure.travis-ci.org/myokoym/shogi-ruby.png?branch=master)](http://travis-ci.org/myokoym/shogi-ruby) [![Gem Version](https://badge.fury.io/rb/shogi-ruby.png)](http://badge.fury.io/rb/shogi-ruby)
2
2
 
3
3
  Ruby用の将棋ライブラリです。
4
4
 
@@ -11,20 +11,26 @@ Ruby用の将棋ライブラリです。
11
11
  * コンピュータ将棋協会が推奨する標準形式です。
12
12
 
13
13
  ## 用途
14
+
14
15
  ### 向いていること
16
+
15
17
  * 将棋盤の簡単なコンソール表示
16
18
  * GUIアプリケーションの内部状態の管理
17
19
 
18
20
  ### 向いていないこと
21
+
19
22
  * 速度的に、思考エンジンのデータ構造には向きません。
20
23
 
21
24
  ## 機能
25
+
22
26
  ### できること
27
+
23
28
  * CSA形式で、将棋盤オブジェクトを作成、操作、表示
24
29
  * 駒の動きが正しいかどうかのチェック
25
30
  * 棋譜の管理
26
31
 
27
32
  ### まだできないこと
33
+
28
34
  * 二歩チェック
29
35
  * 行きどころのない駒のチェック
30
36
  * 詰みチェック
@@ -47,7 +53,7 @@ Or install it yourself as:
47
53
 
48
54
  ## Ruby Version
49
55
 
50
- Ruby 2.0.0 or later. (and 1.9.3)
56
+ Ruby 2.0.0 or later.
51
57
 
52
58
  ## Usage
53
59
 
@@ -0,0 +1 @@
1
+ require "shogi"
@@ -1,121 +1,31 @@
1
+ require "shogi/format/csa/board"
2
+ require "shogi/format/usi/board"
3
+
1
4
  module Shogi
5
+ class Error < StandardError; end
6
+ class CodingError < Error; end
7
+ class FormatError < Error; end
8
+ class UndefinedPieceError < Error; end
9
+ class MoveError < Error; end
10
+ class MovementError < Error; end
11
+
2
12
  class Board
3
- class Error < StandardError; end
4
- class CodingError < Error; end
5
- class FormatError < Error; end
6
- class UndefinedPieceError < Error; end
7
- class MoveError < Error; end
8
- class MovementError < Error; end
13
+ def self.register(name)
14
+ send(:include, Format.const_get(name).const_get("Board"))
15
+ end
16
+ self.register("CSA")
17
+ self.register("USI")
9
18
 
10
19
  attr_accessor :default_format
11
20
  attr_accessor :validate_movement
12
- def initialize(default_format=:csa, position=nil)
21
+ def initialize(default_format=:csa, table=nil)
13
22
  @default_format = default_format
14
- if position
15
- set_from_csa(position)
16
- else
17
- @position = default_position
18
- @captured = []
19
- end
23
+ set_from_csa(table || default_table)
20
24
  @validate_movement = true
21
25
  end
22
26
 
23
- def to_csa
24
- csa_rows = ""
25
-
26
- @position.each_with_index do |row, i|
27
- csa_row = ""
28
- row.each do |cell|
29
- if cell == ""
30
- csa_row << " * "
31
- else
32
- csa_row << cell
33
- end
34
- end
35
- csa_rows << "P#{i + 1}#{csa_row}\n"
36
- end
37
-
38
- sente = "P+"
39
- gote = "P-"
40
- @captured.each do |piece|
41
- if piece[0] == "+"
42
- sente << "00#{piece[1..2]}"
43
- else
44
- gote << "00#{piece[1..2]}"
45
- end
46
- end
47
- csa_rows << "#{sente}\n"
48
- csa_rows << "#{gote}\n"
49
-
50
- csa_rows
51
- end
52
-
53
27
  def set_from_csa(csa)
54
- position = []
55
- cell_pattern = '[+-][A-Z]{2}| \* '
56
- csa_lines = csa.each_line.to_a
57
- csa_lines.slice(0, 9).to_enum.with_index do |row, i|
58
- position_row = []
59
- row.chomp!
60
- unless /\AP#{i + 1}(#{cell_pattern}){9}\z/ =~ row
61
- raise FormatError, "Format Error: line P#{i + 1}"
62
- end
63
- row[2..28].scan(/#{cell_pattern}/) do |cell|
64
- if cell == " * "
65
- position_row << ""
66
- else
67
- position_row << cell
68
- end
69
- end
70
- position << position_row
71
- end
72
- @position = position
73
-
74
- captured = []
75
- csa_lines.slice(9, 2).each do |captured_line|
76
- captured_line.chomp!
77
- unless /\AP[+-](00[A-Z]{2})*\z/ =~ captured_line
78
- raise FormatError, "Format Error: captured piece line"
79
- end
80
- turn = captured_line[1]
81
- captured_line[2..-1].scan(/00([A-Z]{2})/) do |cell|
82
- captured << turn + cell[0]
83
- end
84
- end
85
- @captured = captured
86
- end
87
-
88
- def to_usi
89
- @position.map {|row|
90
- usi_row = ""
91
- space_count = 0
92
- row.each do |cell|
93
- if cell == ""
94
- space_count += 1
95
- else
96
- if space_count > 0
97
- usi_row << space_count.to_s
98
- space_count = 0
99
- end
100
- usi = Piece.const_get(cell[1..2]).new.usi
101
- if cell[0] == "-"
102
- usi_row << usi.downcase
103
- else
104
- usi_row << usi
105
- end
106
- end
107
- end
108
- if space_count > 0
109
- usi_row << space_count.to_s
110
- space_count = 0
111
- end
112
- usi_row
113
- }.join("/") << "\n"
114
- end
115
-
116
- def move_from_csa(movement)
117
- $stderr.puts "warning: Shogi::Board#move_from_csa(movement) is deprecated. Use Shogi::Board#move(movement, :csa)"
118
- move(movement, :csa)
28
+ @table, @captured = parse_from_csa(csa)
119
29
  end
120
30
 
121
31
  def move(movement_lines, format=@default_format)
@@ -129,7 +39,7 @@ module Shogi
129
39
  def at(place)
130
40
  array_x = to_array_x_from_shogi_x(place[0].to_i)
131
41
  array_y = to_array_y_from_shogi_y(place[1].to_i)
132
- @position[array_y][array_x]
42
+ @table[array_y][array_x]
133
43
  end
134
44
 
135
45
  def show(format=@default_format)
@@ -137,118 +47,20 @@ module Shogi
137
47
  end
138
48
 
139
49
  private
140
- def default_position
141
- [["-KY", "-KE", "-GI", "-KI", "-OU", "-KI", "-GI", "-KE", "-KY"],
142
- [ "", "-HI", "", "", "", "", "", "-KA", ""],
143
- ["-FU", "-FU", "-FU", "-FU", "-FU", "-FU", "-FU", "-FU", "-FU"],
144
- [ "", "", "", "", "", "", "", "", ""],
145
- [ "", "", "", "", "", "", "", "", ""],
146
- [ "", "", "", "", "", "", "", "", ""],
147
- ["+FU", "+FU", "+FU", "+FU", "+FU", "+FU", "+FU", "+FU", "+FU"],
148
- [ "", "+KA", "", "", "", "", "", "+HI", ""],
149
- ["+KY", "+KE", "+GI", "+KI", "+OU", "+KI", "+GI", "+KE", "+KY"]]
150
- end
151
-
152
- def move_by_csa(csa)
153
- unless /\A[+-](00|[1-9]{2})[1-9]{2}[A-Z]{2}\z/ =~ csa
154
- raise FormatError, "Wrong CSA format: #{csa}"
155
- end
156
-
157
- unless Piece.const_defined?(csa[5..6])
158
- raise UndefinedPieceError, "Undefined piece: #{csa[5..6]}"
159
- end
160
-
161
- if csa[1..2] == "00"
162
- before_piece = csa[0] + csa[5..6]
163
- unless @captured.include?(before_piece)
164
- raise MoveError, "Not captured piece: #{before_piece}"
165
- end
166
- before_cell = before_piece
167
- before_piece = Piece.const_get(before_cell[1..2]).new
168
- else
169
- before_x = to_array_x_from_shogi_x(csa[1].to_i)
170
- before_y = to_array_y_from_shogi_y(csa[2].to_i)
171
- before_cell = @position[before_y][before_x]
172
- if before_cell == ""
173
- raise MoveError, "Before cell is blank"
174
- end
175
- before_piece = Piece.const_get(before_cell[1..2]).new
176
-
177
- unless csa[0] == before_cell[0]
178
- raise MoveError, "Not your piece: #{before_cell}"
179
- end
180
- unless csa[5..6] == before_cell[1..2]
181
- after_piece = Piece.const_get(csa[5..6]).new
182
- unless before_piece.promoter == after_piece.class
183
- raise MoveError, "Don't promote: #{before_cell[1..2]} -> #{csa[5..6]}"
184
- end
185
-
186
- after_y = to_array_y_from_shogi_y(csa[4].to_i)
187
- if csa[0] == "+"
188
- unless after_y < 3 || before_y < 3
189
- raise_movement_error("Don't promote this move: #{csa}")
190
- end
191
- else
192
- unless after_y > 5 || before_y > 5
193
- raise_movement_error("Don't promote this move: #{csa}")
194
- end
195
- end
196
- end
197
- end
198
-
199
- after_x = to_array_x_from_shogi_x(csa[3].to_i)
200
- after_y = to_array_y_from_shogi_y(csa[4].to_i)
201
- after_cell = @position[after_y][after_x]
202
- if csa[0] == after_cell[0]
203
- raise MoveError, "Your piece on after cell: #{csa}"
204
- end
205
-
206
- if csa[1..2] == "00"
207
- unless after_cell == ""
208
- raise MoveError, "Exist piece on after cell"
209
- end
210
- else
211
- if csa[0] == "+"
212
- movement_x = after_x - before_x
213
- movement_y = before_y - after_y
214
- else
215
- movement_x = before_x - after_x
216
- movement_y = after_y - before_y
217
- end
218
-
219
- unless before_piece.move?(movement_x, movement_y)
220
- raise_movement_error("Invalid movement: #{csa}")
221
- end
222
- end
223
-
224
- unless after_cell == ""
225
- after_piece = Piece.const_get(after_cell[1..2]).new
226
- if after_piece.class.const_defined?(:CHILD)
227
- @captured << "#{csa[0]}#{after_piece.class::CHILD}"
228
- else
229
- @captured << "#{csa[0]}#{after_cell[1..2]}"
230
- end
231
- end
232
- @position[after_y][after_x] = "#{csa[0]}#{csa[5..6]}"
233
-
234
- if csa[1..2] == "00"
235
- used = nil
236
-
237
- @captured.each_with_index do |captured_piece, i|
238
- if captured_piece == before_cell
239
- used = @captured.delete_at(i)
240
- break
241
- end
242
- end
243
-
244
- unless used == before_cell
245
- raise CodingError, "[Bug] missing piece in captured"
246
- end
247
- else
248
- @position[before_y][before_x] = ""
249
- end
250
-
251
- self
50
+ def default_table
51
+ <<-TABLE
52
+ P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
53
+ P2 * -HI * * * * * -KA *
54
+ P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
55
+ P4 * * * * * * * * *
56
+ P5 * * * * * * * * *
57
+ P6 * * * * * * * * *
58
+ P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
59
+ P8 * +KA * * * * * +HI *
60
+ P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
61
+ P+
62
+ P-
63
+ TABLE
252
64
  end
253
65
 
254
66
  def raise_movement_error(message)
@@ -1,16 +1,13 @@
1
+ require "shogi/format/csa/cell"
2
+ require "shogi/format/usi/cell"
3
+
1
4
  module Shogi
2
5
  class Cell
3
- USI_VERTICAL_LABELS = {
4
- "1" => "a",
5
- "2" => "b",
6
- "3" => "c",
7
- "4" => "d",
8
- "5" => "e",
9
- "6" => "f",
10
- "7" => "g",
11
- "8" => "h",
12
- "9" => "i",
13
- }
6
+ def self.register(name)
7
+ send(:include, Format.const_get(name).const_get("Cell"))
8
+ end
9
+ self.register("CSA")
10
+ self.register("USI")
14
11
 
15
12
  attr_reader :x, :y
16
13
  attr_accessor :piece
@@ -21,33 +18,5 @@ module Shogi
21
18
  @piece = piece
22
19
  @turn = turn
23
20
  end
24
-
25
- def place_csa
26
- "#{x}#{y}"
27
- end
28
-
29
- def place_usi
30
- "#{x}#{USI_VERTICAL_LABELS[y]}"
31
- end
32
-
33
- def piece_csa
34
- if @piece
35
- "#{turn ? "+" : "-"}#{@piece.csa}"
36
- else
37
- " * "
38
- end
39
- end
40
-
41
- def piece_usi
42
- if @piece
43
- if @turn
44
- @piece.usi
45
- else
46
- @piece.usi.downcase
47
- end
48
- else
49
- 1
50
- end
51
- end
52
21
  end
53
22
  end
@@ -0,0 +1,175 @@
1
+ module Shogi
2
+ module Format
3
+ module CSA
4
+ module Board
5
+ def to_csa
6
+ csa_rows = ""
7
+
8
+ @table.each_with_index do |row, i|
9
+ csa_row = ""
10
+ row.each do |cell|
11
+ if cell == ""
12
+ csa_row << " * "
13
+ else
14
+ csa_row << cell
15
+ end
16
+ end
17
+ csa_rows << "P#{i + 1}#{csa_row}\n"
18
+ end
19
+
20
+ sente = "P+"
21
+ gote = "P-"
22
+ @captured.each do |piece|
23
+ if piece[0] == "+"
24
+ sente << "00#{piece[1..2]}"
25
+ else
26
+ gote << "00#{piece[1..2]}"
27
+ end
28
+ end
29
+ csa_rows << "#{sente}\n"
30
+ csa_rows << "#{gote}\n"
31
+
32
+ csa_rows
33
+ end
34
+
35
+ def parse_from_csa(csa)
36
+ table = []
37
+ cell_pattern = '[+-][A-Z]{2}| \* '
38
+ csa_lines = csa.each_line.to_a
39
+ csa_lines.slice(0, 9).to_enum.with_index do |row, i|
40
+ table_row = []
41
+ row.chomp!
42
+ unless /\AP#{i + 1}(#{cell_pattern}){9}\z/ =~ row
43
+ raise FormatError, "Format Error: line P#{i + 1}"
44
+ end
45
+ row[2..28].scan(/#{cell_pattern}/) do |cell|
46
+ if cell == " * "
47
+ table_row << ""
48
+ else
49
+ table_row << cell
50
+ end
51
+ end
52
+ table << table_row
53
+ end
54
+
55
+ captured = []
56
+ csa_lines.slice(9, 2).each do |captured_line|
57
+ captured_line.chomp!
58
+ unless /\AP[+-](00[A-Z]{2})*\z/ =~ captured_line
59
+ raise FormatError, "Invalid format: #{captured_line}"
60
+ end
61
+ turn = captured_line[1]
62
+ captured_line[2..-1].scan(/00([A-Z]{2})/) do |cell|
63
+ captured << turn + cell[0]
64
+ end
65
+ end
66
+
67
+ [table, captured]
68
+ end
69
+
70
+ private
71
+ def move_by_csa(csa)
72
+ unless /\A[+-](00|[1-9]{2})[1-9]{2}[A-Z]{2}\z/ =~ csa
73
+ raise FormatError, "Invalid CSA format: #{csa}"
74
+ end
75
+
76
+ unless Piece.const_defined?(csa[5..6])
77
+ raise UndefinedPieceError, "Undefined piece: #{csa[5..6]}"
78
+ end
79
+
80
+ if csa[1..2] == "00"
81
+ before_piece = csa[0] + csa[5..6]
82
+ unless @captured.include?(before_piece)
83
+ raise MoveError, "Not captured piece: #{before_piece}"
84
+ end
85
+ before_cell = before_piece
86
+ before_piece = Piece.const_get(before_cell[1..2]).new
87
+ else
88
+ before_x = to_array_x_from_shogi_x(csa[1].to_i)
89
+ before_y = to_array_y_from_shogi_y(csa[2].to_i)
90
+ before_cell = @table[before_y][before_x]
91
+ if before_cell == ""
92
+ raise MoveError, "Before cell is blank"
93
+ end
94
+ before_piece = Piece.const_get(before_cell[1..2]).new
95
+
96
+ unless csa[0] == before_cell[0]
97
+ raise MoveError, "Not your piece: #{before_cell}"
98
+ end
99
+ unless csa[5..6] == before_cell[1..2]
100
+ after_piece = Piece.const_get(csa[5..6]).new
101
+ unless before_piece.promoter == after_piece.class
102
+ raise MoveError, "Can't promote: #{before_cell[1..2]} -> #{csa[5..6]}"
103
+ end
104
+
105
+ after_y = to_array_y_from_shogi_y(csa[4].to_i)
106
+ if csa[0] == "+"
107
+ unless after_y < 3 || before_y < 3
108
+ raise_movement_error("Can't promote: #{csa}")
109
+ end
110
+ else
111
+ unless after_y > 5 || before_y > 5
112
+ raise_movement_error("Can't promote: #{csa}")
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ after_x = to_array_x_from_shogi_x(csa[3].to_i)
119
+ after_y = to_array_y_from_shogi_y(csa[4].to_i)
120
+ after_cell = @table[after_y][after_x]
121
+ if csa[0] == after_cell[0]
122
+ raise MoveError, "Your piece exists in the cell: #{csa}"
123
+ end
124
+
125
+ if csa[1..2] == "00"
126
+ unless after_cell == ""
127
+ raise MoveError, "A piece exists in the cell: #{csa}"
128
+ end
129
+ else
130
+ if csa[0] == "+"
131
+ movement_x = after_x - before_x
132
+ movement_y = before_y - after_y
133
+ else
134
+ movement_x = before_x - after_x
135
+ movement_y = after_y - before_y
136
+ end
137
+
138
+ unless before_piece.move?(movement_x, movement_y)
139
+ raise_movement_error("Invalid movement: #{csa}")
140
+ end
141
+ end
142
+
143
+ unless after_cell == ""
144
+ after_piece = Piece.const_get(after_cell[1..2]).new
145
+ if after_piece.class.const_defined?(:CHILD)
146
+ @captured << "#{csa[0]}#{after_piece.class::CHILD}"
147
+ else
148
+ @captured << "#{csa[0]}#{after_cell[1..2]}"
149
+ end
150
+ end
151
+ @table[after_y][after_x] = "#{csa[0]}#{csa[5..6]}"
152
+
153
+ if csa[1..2] == "00"
154
+ used = nil
155
+
156
+ @captured.each_with_index do |captured_piece, i|
157
+ if captured_piece == before_cell
158
+ used = @captured.delete_at(i)
159
+ break
160
+ end
161
+ end
162
+
163
+ unless used == before_cell
164
+ raise CodingError, "[Bug] missing piece in captured"
165
+ end
166
+ else
167
+ @table[before_y][before_x] = ""
168
+ end
169
+
170
+ self
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,19 @@
1
+ module Shogi
2
+ module Format
3
+ module CSA
4
+ module Cell
5
+ def place_csa
6
+ "#{x}#{y}"
7
+ end
8
+
9
+ def piece_csa
10
+ if @piece
11
+ "#{turn ? "+" : "-"}#{@piece.csa}"
12
+ else
13
+ " * "
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ module Shogi
2
+ module Format
3
+ module USI
4
+ module Board
5
+ def to_usi
6
+ @table.map {|row|
7
+ usi_row = ""
8
+ space_count = 0
9
+ row.each do |cell|
10
+ if cell == ""
11
+ space_count += 1
12
+ else
13
+ if space_count > 0
14
+ usi_row << space_count.to_s
15
+ space_count = 0
16
+ end
17
+ usi = Piece.const_get(cell[1..2]).new.usi
18
+ if cell[0] == "-"
19
+ usi_row << usi.downcase
20
+ else
21
+ usi_row << usi
22
+ end
23
+ end
24
+ end
25
+ if space_count > 0
26
+ usi_row << space_count.to_s
27
+ space_count = 0
28
+ end
29
+ usi_row
30
+ }.join("/") << "\n"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ module Shogi
2
+ module Format
3
+ module USI
4
+ module Cell
5
+ USI_VERTICAL_LABELS = {
6
+ "1" => "a",
7
+ "2" => "b",
8
+ "3" => "c",
9
+ "4" => "d",
10
+ "5" => "e",
11
+ "6" => "f",
12
+ "7" => "g",
13
+ "8" => "h",
14
+ "9" => "i",
15
+ }
16
+
17
+ def place_usi
18
+ "#{x}#{USI_VERTICAL_LABELS[y]}"
19
+ end
20
+
21
+ def piece_usi
22
+ if @piece
23
+ if @turn
24
+ @piece.usi
25
+ else
26
+ @piece.usi.downcase
27
+ end
28
+ else
29
+ 1
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module Shogi
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency("test-unit")
22
22
  spec.add_development_dependency("test-unit-notify")
23
23
  spec.add_development_dependency("test-unit-rr")
24
- spec.add_development_dependency("bundler", "~> 1.3")
24
+ spec.add_development_dependency("bundler")
25
25
  spec.add_development_dependency("rake")
26
26
  end
@@ -7,13 +7,13 @@ class BoardTest < Test::Unit::TestCase
7
7
  end
8
8
 
9
9
  def test_initialize
10
- rows = @board.instance_variable_get(:@position)
10
+ rows = @board.instance_variable_get(:@table)
11
11
  assert_equal(9, rows.size)
12
12
  assert_true(rows.all? {|row| row.size == 9 })
13
13
  end
14
14
 
15
15
  def test_initialize_csa
16
- position = <<-EOT
16
+ table = <<-EOT
17
17
  P1 * * * * +HI * * -KE *
18
18
  P2 * * * * * +KA-OU * -KY
19
19
  P3 * * * * * * -FU-FU-FU
@@ -26,8 +26,8 @@ P9 * * * * * * * * *
26
26
  P+00HI00GI00KE
27
27
  P-
28
28
  EOT
29
- @board = Shogi::Board.new(:csa, position)
30
- assert_equal(position, @board.to_csa)
29
+ @board = Shogi::Board.new(:csa, table)
30
+ assert_equal(table, @board.to_csa)
31
31
  assert_nothing_raised do
32
32
  @board.move("+0031HI")
33
33
  end
@@ -47,7 +47,7 @@ P-
47
47
  end
48
48
 
49
49
  def test_to_csa
50
- before_state = @board.instance_variable_get(:@position).dup
50
+ before_state = @board.instance_variable_get(:@table).dup
51
51
  assert_equal(<<-EOT, @board.to_csa)
52
52
  P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
53
53
  P2 * -HI * * * * * -KA *
@@ -61,11 +61,11 @@ P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
61
61
  P+
62
62
  P-
63
63
  EOT
64
- assert_equal(before_state, @board.instance_variable_get(:@position))
64
+ assert_equal(before_state, @board.instance_variable_get(:@table))
65
65
  end
66
66
 
67
67
  def test_show
68
- before_state = @board.instance_variable_get(:@position).dup
68
+ before_state = @board.instance_variable_get(:@table).dup
69
69
  s = ""
70
70
  io = StringIO.new(s)
71
71
  $stdout = io
@@ -87,7 +87,7 @@ P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
87
87
  P+
88
88
  P-
89
89
  EOT
90
- assert_equal(before_state, @board.instance_variable_get(:@position))
90
+ assert_equal(before_state, @board.instance_variable_get(:@table))
91
91
  end
92
92
 
93
93
  def test_set_from_csa
@@ -112,11 +112,11 @@ P-
112
112
  end
113
113
 
114
114
  def test_to_usi
115
- before_state = @board.instance_variable_get(:@position).dup
115
+ before_state = @board.instance_variable_get(:@table).dup
116
116
  assert_equal(<<-EOT, @board.to_usi)
117
117
  lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL
118
118
  EOT
119
- assert_equal(before_state, @board.instance_variable_get(:@position))
119
+ assert_equal(before_state, @board.instance_variable_get(:@table))
120
120
  end
121
121
 
122
122
  def test_at
@@ -126,25 +126,25 @@ lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL
126
126
  def test_move_csa
127
127
  @board.default_format = :csa
128
128
 
129
- assert_raise Shogi::Board::FormatError do
129
+ assert_raise Shogi::FormatError do
130
130
  @board.move("+27FU")
131
131
  end
132
- assert_raise Shogi::Board::UndefinedPieceError do
132
+ assert_raise Shogi::UndefinedPieceError do
133
133
  @board.move("+2726AA")
134
134
  end
135
- assert_raise Shogi::Board::MoveError do
135
+ assert_raise Shogi::MoveError do
136
136
  assert_false(@board.move("+2726HI"))
137
137
  end
138
- assert_raise Shogi::Board::MoveError do
138
+ assert_raise Shogi::MoveError do
139
139
  assert_false(@board.move("+2827HI"))
140
140
  end
141
- assert_raise Shogi::Board::MoveError do
141
+ assert_raise Shogi::MoveError do
142
142
  assert_false(@board.move("+2625FU"))
143
143
  end
144
- assert_raise Shogi::Board::MovementError do
144
+ assert_raise Shogi::MovementError do
145
145
  assert_false(@board.move("+2725FU"))
146
146
  end
147
- assert_raise Shogi::Board::MoveError do
147
+ assert_raise Shogi::MoveError do
148
148
  assert_false(@board.move("-4131KI"))
149
149
  end
150
150
 
@@ -229,7 +229,7 @@ P-00KA
229
229
  def test_move_csa_promote
230
230
  @board.move("+7776FU", :csa)
231
231
  @board.move("-3334FU", :csa)
232
- assert_raise Shogi::Board::MovementError do
232
+ assert_raise Shogi::MovementError do
233
233
  assert_false(@board.move("+2726TO", :csa))
234
234
  end
235
235
  assert_nothing_raised do
@@ -321,7 +321,7 @@ P-00KA
321
321
  end
322
322
 
323
323
  def test_move_csa_promote_to_7
324
- position = <<-EOT
324
+ table = <<-EOT
325
325
  P1 * * * * * * * * *
326
326
  P2 * * * * * * * * *
327
327
  P3 * * * * * * * * *
@@ -334,14 +334,14 @@ P9 * * * * * * * * *
334
334
  P+
335
335
  P-
336
336
  EOT
337
- @board = Shogi::Board.new(:csa, position)
337
+ @board = Shogi::Board.new(:csa, table)
338
338
  assert_nothing_raised do
339
339
  @board.move("-5657TO", :csa)
340
340
  end
341
341
  end
342
342
 
343
343
  def test_move_csa_promote_from_7
344
- position = <<-EOT
344
+ table = <<-EOT
345
345
  P1 * * * * * * * * *
346
346
  P2 * * * * * * * * *
347
347
  P3 * * * * * * * * *
@@ -354,7 +354,7 @@ P9 * * * * * * * * *
354
354
  P+
355
355
  P-
356
356
  EOT
357
- @board = Shogi::Board.new(:csa, position)
357
+ @board = Shogi::Board.new(:csa, table)
358
358
  assert_nothing_raised do
359
359
  @board.move("-5746NG", :csa)
360
360
  end
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shogi-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masafumi Yokoyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-28 00:00:00.000000000 Z
11
+ date: 2015-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-unit
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: test-unit-notify
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: test-unit-rr
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '1.3'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '1.3'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: A Shogi library by pure Ruby. It supports CSA format.
@@ -87,17 +87,22 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - .gitignore
91
- - .travis.yml
90
+ - ".gitignore"
91
+ - ".travis.yml"
92
92
  - Gemfile
93
93
  - LICENSE.txt
94
94
  - NEWS.ja.md
95
95
  - NEWS.md
96
96
  - README.md
97
97
  - Rakefile
98
+ - lib/shogi-ruby.rb
98
99
  - lib/shogi.rb
99
100
  - lib/shogi/board.rb
100
101
  - lib/shogi/cell.rb
102
+ - lib/shogi/format/csa/board.rb
103
+ - lib/shogi/format/csa/cell.rb
104
+ - lib/shogi/format/usi/board.rb
105
+ - lib/shogi/format/usi/cell.rb
101
106
  - lib/shogi/game.rb
102
107
  - lib/shogi/piece.rb
103
108
  - lib/shogi/piece/base.rb
@@ -119,17 +124,17 @@ require_paths:
119
124
  - lib
120
125
  required_ruby_version: !ruby/object:Gem::Requirement
121
126
  requirements:
122
- - - '>='
127
+ - - ">="
123
128
  - !ruby/object:Gem::Version
124
129
  version: '0'
125
130
  required_rubygems_version: !ruby/object:Gem::Requirement
126
131
  requirements:
127
- - - '>='
132
+ - - ">="
128
133
  - !ruby/object:Gem::Version
129
134
  version: '0'
130
135
  requirements: []
131
136
  rubyforge_project:
132
- rubygems_version: 2.0.3
137
+ rubygems_version: 2.2.2
133
138
  signing_key:
134
139
  specification_version: 4
135
140
  summary: Shogi Library by Pure Ruby