chess 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/README.md +44 -0
  4. data/Rakefile +6 -7
  5. data/chess.gemspec +1 -1
  6. data/ext/bitboard.c +24 -0
  7. data/ext/board.c +78 -24
  8. data/ext/board.h +4 -2
  9. data/ext/chess.c +216 -196
  10. data/ext/chess.h +1 -0
  11. data/ext/common.c +10 -0
  12. data/ext/game.c +33 -16
  13. data/ext/special.c +14 -11
  14. data/ext/special.h +1 -2
  15. data/lib/chess/exceptions.rb +7 -10
  16. data/lib/chess/game.rb +66 -50
  17. data/lib/chess/gnuchess.rb +19 -25
  18. data/lib/chess/pgn.rb +49 -9
  19. data/lib/chess/utf8_notation.rb +11 -9
  20. data/lib/chess/version.rb +1 -1
  21. data/test/pgn_collection/illegal/0001.pgn +18 -0
  22. data/test/pgn_collection/illegal/0002.pgn +17 -0
  23. data/test/pgn_collection/illegal/0003.pgn +13 -0
  24. data/test/pgn_collection/illegal/0004.pgn +15 -0
  25. data/test/pgn_collection/illegal/0005.pgn +16 -0
  26. data/test/pgn_collection/invalid/0001.pgn +20 -0
  27. data/test/pgn_collection/invalid/0002.pgn +16 -0
  28. data/test/pgn_collection/invalid/0003.pgn +13 -0
  29. data/test/pgn_collection/invalid/0004.pgn +15 -0
  30. data/test/pgn_collection/valid/0001.pgn +6 -7
  31. data/test/pgn_collection/valid/0002.pgn +8 -9
  32. data/test/pgn_collection/valid/0005.pgn +7 -8
  33. data/test/pgn_collection/valid/0009.pgn +14 -15
  34. data/test/pgn_collection/valid/0010.pgn +6 -7
  35. data/test/pgn_collection/valid/0011.pgn +5 -6
  36. data/test/pgn_collection/valid/0012.pgn +0 -1
  37. data/test/pgn_collection/valid/0013.pgn +5 -6
  38. data/test/pgn_collection/valid/0014.pgn +6 -7
  39. data/test/pgn_collection/valid/0020.pgn +6 -7
  40. data/test/pgn_collection/valid/0021.pgn +15 -16
  41. data/test/pgn_collection/valid/0971.pgn +22 -14
  42. data/test/test_big_pgn_collection.rb +12 -5
  43. data/test/test_helper.rb +1 -1
  44. data/test/test_illegal_moves.rb +14 -0
  45. data/test/test_insufficient_material.rb +13 -1
  46. data/test/test_particular_situations.rb +14 -0
  47. data/test/test_pgn.rb +24 -0
  48. data/test/test_pgn_collection.rb +1 -4
  49. metadata +30 -63
  50. data/README.rdoc +0 -44
  51. data/doc/Chess.html +0 -112
  52. data/doc/Chess/BadNotationError.html +0 -107
  53. data/doc/Chess/Board.html +0 -700
  54. data/doc/Chess/CGame.html +0 -1004
  55. data/doc/Chess/Game.html +0 -684
  56. data/doc/Chess/Gnuchess.html +0 -215
  57. data/doc/Chess/IllegalMoveError.html +0 -105
  58. data/doc/Chess/InvalidFenFormatError.html +0 -105
  59. data/doc/Chess/InvalidPgnFormatError.html +0 -105
  60. data/doc/Chess/Pgn.html +0 -309
  61. data/doc/Chess/UTF8Notation.html +0 -174
  62. data/doc/README_rdoc.html +0 -143
  63. data/doc/created.rid +0 -15
  64. data/doc/css/fonts.css +0 -167
  65. data/doc/css/rdoc.css +0 -590
  66. data/doc/fonts/Lato-Light.ttf +0 -0
  67. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  68. data/doc/fonts/Lato-Regular.ttf +0 -0
  69. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  70. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  71. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  72. data/doc/images/add.png +0 -0
  73. data/doc/images/arrow_up.png +0 -0
  74. data/doc/images/brick.png +0 -0
  75. data/doc/images/brick_link.png +0 -0
  76. data/doc/images/bug.png +0 -0
  77. data/doc/images/bullet_black.png +0 -0
  78. data/doc/images/bullet_toggle_minus.png +0 -0
  79. data/doc/images/bullet_toggle_plus.png +0 -0
  80. data/doc/images/date.png +0 -0
  81. data/doc/images/delete.png +0 -0
  82. data/doc/images/find.png +0 -0
  83. data/doc/images/loadingAnimation.gif +0 -0
  84. data/doc/images/macFFBgHack.png +0 -0
  85. data/doc/images/package.png +0 -0
  86. data/doc/images/page_green.png +0 -0
  87. data/doc/images/page_white_text.png +0 -0
  88. data/doc/images/page_white_width.png +0 -0
  89. data/doc/images/plugin.png +0 -0
  90. data/doc/images/ruby.png +0 -0
  91. data/doc/images/tag_blue.png +0 -0
  92. data/doc/images/tag_green.png +0 -0
  93. data/doc/images/transparent.png +0 -0
  94. data/doc/images/wrench.png +0 -0
  95. data/doc/images/wrench_orange.png +0 -0
  96. data/doc/images/zoom.png +0 -0
  97. data/doc/index.html +0 -160
  98. data/doc/js/darkfish.js +0 -161
  99. data/doc/js/jquery.js +0 -4
  100. data/doc/js/navigation.js +0 -142
  101. data/doc/js/navigation.js.gz +0 -0
  102. data/doc/js/search.js +0 -109
  103. data/doc/js/search_index.js +0 -1
  104. data/doc/js/search_index.js.gz +0 -0
  105. data/doc/js/searcher.js +0 -229
  106. data/doc/js/searcher.js.gz +0 -0
  107. data/doc/table_of_contents.html +0 -331
data/README.rdoc DELETED
@@ -1,44 +0,0 @@
1
- = Chess
2
-
3
- A fast Ruby library to play chess with Ruby.
4
- This library is quite fast because rappresent
5
- the game situations with bitboards. In addition, the
6
- move generator is written in C as a Ruby extension.
7
-
8
- == Requirements
9
-
10
- * Ruby 1.9 or higher
11
-
12
- == Installation
13
-
14
- gem install chess
15
-
16
- == Usage
17
-
18
- require 'chess'
19
- g = Chess::Game.new
20
- until g.over?
21
- begin
22
- print "Give me a #{g.active_player} move: "
23
- input = gets.chop
24
- break if input == 'quit'
25
- g << input
26
- puts g
27
- puts g.moves.last
28
- rescue Chess::IllegalMoveError => e
29
- puts 'Illegal move!'
30
- end
31
- end
32
- puts g.status
33
-
34
- Documentation is available {here}[http://pioz.github.com/chess].
35
-
36
- == Questions or problems?
37
-
38
- If you have any issues please add an {issue on GitHub}[https://github.com/pioz/chess/issues]
39
- or fork the project and send a pull request.
40
-
41
- == Copyright
42
-
43
- Copyright (c) 2017 {Enrico Pilotto (@pioz)}[https://github.com/pioz].
44
- See {LICENSE}[https://github.com/pioz/chess/blob/master/LICENSE] for details.
data/doc/Chess.html DELETED
@@ -1,112 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>module Chess - Chess</title>
8
-
9
- <script type="text/javascript">
10
- var rdoc_rel_prefix = "./";
11
- var index_rel_prefix = "./";
12
- </script>
13
-
14
- <script src="./js/jquery.js"></script>
15
- <script src="./js/darkfish.js"></script>
16
-
17
- <link href="./css/fonts.css" rel="stylesheet">
18
- <link href="./css/rdoc.css" rel="stylesheet">
19
-
20
-
21
-
22
- <body id="top" role="document" class="module">
23
- <nav role="navigation">
24
- <div id="project-navigation">
25
- <div id="home-section" role="region" title="Quick navigation" class="nav-section">
26
- <h2>
27
- <a href="./index.html" rel="home">Home</a>
28
- </h2>
29
-
30
- <div id="table-of-contents-navigation">
31
- <a href="./table_of_contents.html#pages">Pages</a>
32
- <a href="./table_of_contents.html#classes">Classes</a>
33
- <a href="./table_of_contents.html#methods">Methods</a>
34
- </div>
35
- </div>
36
-
37
- <div id="search-section" role="search" class="project-section initially-hidden">
38
- <form action="#" method="get" accept-charset="utf-8">
39
- <div id="search-field-wrapper">
40
- <input id="search-field" role="combobox" aria-label="Search"
41
- aria-autocomplete="list" aria-controls="search-results"
42
- type="text" name="search" placeholder="Search" spellcheck="false"
43
- title="Type to search, Up and Down to navigate, Enter to load">
44
- </div>
45
-
46
- <ul id="search-results" aria-label="Search Results"
47
- aria-busy="false" aria-expanded="false"
48
- aria-atomic="false" class="initially-hidden"></ul>
49
- </form>
50
- </div>
51
-
52
- </div>
53
-
54
-
55
-
56
- <div id="class-metadata">
57
-
58
-
59
-
60
-
61
-
62
- </div>
63
- </nav>
64
-
65
- <main role="main" aria-labelledby="module-Chess">
66
- <h1 id="module-Chess" class="module">
67
- module Chess
68
- </h1>
69
-
70
- <section class="description">
71
-
72
- <p>The <a href="Chess.html">Chess</a> library module.</p>
73
-
74
- </section>
75
-
76
-
77
-
78
-
79
- <section id="5Buntitled-5D" class="documentation-section">
80
-
81
-
82
-
83
-
84
-
85
- <section class="constants-list">
86
- <header>
87
- <h3>Constants</h3>
88
- </header>
89
- <dl>
90
-
91
- <dt id="VERSION">VERSION
92
-
93
- <dd><p>The library version.</p>
94
-
95
-
96
- </dl>
97
- </section>
98
-
99
-
100
-
101
-
102
-
103
- </section>
104
- </main>
105
-
106
-
107
- <footer id="validator-badges" role="contentinfo">
108
- <p><a href="http://validator.w3.org/check/referer">Validate</a>
109
- <p>Generated by <a href="https://rdoc.github.io/rdoc">RDoc</a> 5.1.0.
110
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
111
- </footer>
112
-
@@ -1,107 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>class Chess::BadNotationError - Chess</title>
8
-
9
- <script type="text/javascript">
10
- var rdoc_rel_prefix = "../";
11
- var index_rel_prefix = "../";
12
- </script>
13
-
14
- <script src="../js/jquery.js"></script>
15
- <script src="../js/darkfish.js"></script>
16
-
17
- <link href="../css/fonts.css" rel="stylesheet">
18
- <link href="../css/rdoc.css" rel="stylesheet">
19
-
20
-
21
-
22
- <body id="top" role="document" class="class">
23
- <nav role="navigation">
24
- <div id="project-navigation">
25
- <div id="home-section" role="region" title="Quick navigation" class="nav-section">
26
- <h2>
27
- <a href="../index.html" rel="home">Home</a>
28
- </h2>
29
-
30
- <div id="table-of-contents-navigation">
31
- <a href="../table_of_contents.html#pages">Pages</a>
32
- <a href="../table_of_contents.html#classes">Classes</a>
33
- <a href="../table_of_contents.html#methods">Methods</a>
34
- </div>
35
- </div>
36
-
37
- <div id="search-section" role="search" class="project-section initially-hidden">
38
- <form action="#" method="get" accept-charset="utf-8">
39
- <div id="search-field-wrapper">
40
- <input id="search-field" role="combobox" aria-label="Search"
41
- aria-autocomplete="list" aria-controls="search-results"
42
- type="text" name="search" placeholder="Search" spellcheck="false"
43
- title="Type to search, Up and Down to navigate, Enter to load">
44
- </div>
45
-
46
- <ul id="search-results" aria-label="Search Results"
47
- aria-busy="false" aria-expanded="false"
48
- aria-atomic="false" class="initially-hidden"></ul>
49
- </form>
50
- </div>
51
-
52
- </div>
53
-
54
-
55
-
56
- <div id="class-metadata">
57
-
58
- <div id="parent-class-section" class="nav-section">
59
- <h3>Parent</h3>
60
-
61
-
62
- <p class="link">StandardError
63
-
64
- </div>
65
-
66
-
67
-
68
-
69
- </div>
70
- </nav>
71
-
72
- <main role="main" aria-labelledby="class-Chess::BadNotationError">
73
- <h1 id="class-Chess::BadNotationError" class="class">
74
- class Chess::BadNotationError
75
- </h1>
76
-
77
- <section class="description">
78
-
79
- <p>This exception will be raised when an invalid short algebraic chess
80
- notation string is passed to the <a
81
- href="Game.html#method-i-move">Chess::Game#move</a> function.</p>
82
-
83
- </section>
84
-
85
-
86
-
87
-
88
- <section id="5Buntitled-5D" class="documentation-section">
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
- </section>
99
- </main>
100
-
101
-
102
- <footer id="validator-badges" role="contentinfo">
103
- <p><a href="http://validator.w3.org/check/referer">Validate</a>
104
- <p>Generated by <a href="https://rdoc.github.io/rdoc">RDoc</a> 5.1.0.
105
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
106
- </footer>
107
-
data/doc/Chess/Board.html DELETED
@@ -1,700 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>class Chess::Board - Chess</title>
8
-
9
- <script type="text/javascript">
10
- var rdoc_rel_prefix = "../";
11
- var index_rel_prefix = "../";
12
- </script>
13
-
14
- <script src="../js/jquery.js"></script>
15
- <script src="../js/darkfish.js"></script>
16
-
17
- <link href="../css/fonts.css" rel="stylesheet">
18
- <link href="../css/rdoc.css" rel="stylesheet">
19
-
20
-
21
-
22
- <body id="top" role="document" class="class">
23
- <nav role="navigation">
24
- <div id="project-navigation">
25
- <div id="home-section" role="region" title="Quick navigation" class="nav-section">
26
- <h2>
27
- <a href="../index.html" rel="home">Home</a>
28
- </h2>
29
-
30
- <div id="table-of-contents-navigation">
31
- <a href="../table_of_contents.html#pages">Pages</a>
32
- <a href="../table_of_contents.html#classes">Classes</a>
33
- <a href="../table_of_contents.html#methods">Methods</a>
34
- </div>
35
- </div>
36
-
37
- <div id="search-section" role="search" class="project-section initially-hidden">
38
- <form action="#" method="get" accept-charset="utf-8">
39
- <div id="search-field-wrapper">
40
- <input id="search-field" role="combobox" aria-label="Search"
41
- aria-autocomplete="list" aria-controls="search-results"
42
- type="text" name="search" placeholder="Search" spellcheck="false"
43
- title="Type to search, Up and Down to navigate, Enter to load">
44
- </div>
45
-
46
- <ul id="search-results" aria-label="Search Results"
47
- aria-busy="false" aria-expanded="false"
48
- aria-atomic="false" class="initially-hidden"></ul>
49
- </form>
50
- </div>
51
-
52
- </div>
53
-
54
-
55
-
56
- <div id="class-metadata">
57
-
58
- <div id="parent-class-section" class="nav-section">
59
- <h3>Parent</h3>
60
-
61
-
62
- <p class="link">Object
63
-
64
- </div>
65
-
66
-
67
-
68
- <!-- Method Quickref -->
69
- <div id="method-list-section" class="nav-section">
70
- <h3>Methods</h3>
71
-
72
- <ul class="link-list" role="directory">
73
-
74
- <li ><a href="#method-i-5B-5D">#[]</a>
75
-
76
- <li ><a href="#method-i-active_color">#active_color</a>
77
-
78
- <li ><a href="#method-i-check-3F">#check?</a>
79
-
80
- <li ><a href="#method-i-checkmate-3F">#checkmate?</a>
81
-
82
- <li ><a href="#method-i-fifty_rule_move-3F">#fifty_rule_move?</a>
83
-
84
- <li ><a href="#method-i-fullmove_number">#fullmove_number</a>
85
-
86
- <li ><a href="#method-i-halfmove_clock">#halfmove_clock</a>
87
-
88
- <li ><a href="#method-i-insufficient_material-3F">#insufficient_material?</a>
89
-
90
- <li ><a href="#method-i-placement">#placement</a>
91
-
92
- <li ><a href="#method-i-stalemate-3F">#stalemate?</a>
93
-
94
- <li ><a href="#method-i-to_fen">#to_fen</a>
95
-
96
- <li ><a href="#method-i-to_s">#to_s</a>
97
-
98
- </ul>
99
- </div>
100
-
101
- </div>
102
- </nav>
103
-
104
- <main role="main" aria-labelledby="class-Chess::Board">
105
- <h1 id="class-Chess::Board" class="class">
106
- class Chess::Board
107
- </h1>
108
-
109
- <section class="description">
110
-
111
- <p>This class rappresents a chess board. The rappresentation of the board use
112
- <em>bitboards</em> where each bit represents a game position or state,
113
- designed for optimization of speed and/or memory or disk use in mass
114
- calculations. This ensures a fast library.</p>
115
-
116
- </section>
117
-
118
-
119
-
120
-
121
- <section id="5Buntitled-5D" class="documentation-section">
122
-
123
-
124
-
125
-
126
-
127
-
128
-
129
-
130
-
131
- <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
132
- <header>
133
- <h3>Public Instance Methods</h3>
134
- </header>
135
-
136
-
137
- <div id="method-i-5B-5D" class="method-detail ">
138
-
139
-
140
- <div class="method-heading">
141
- <span class="method-callseq">
142
- [square]
143
- </span>
144
-
145
- <span class="method-click-advice">click to toggle source</span>
146
-
147
- </div>
148
-
149
-
150
-
151
- <div class="method-description">
152
-
153
- <p>Returns the piece on the <code>square</code> of the chessboard. If there is
154
- no piece or the square is not valid return <code>nil</code>.</p>
155
-
156
- <p>Each square on the chessboard is represented by an integer according to the
157
- following scheme:</p>
158
-
159
- <pre>8 | 56 57 58 59 60 61 62 63
160
- 7 | 48 49 50 51 52 53 54 55
161
- 6 | 40 41 42 43 44 45 46 47
162
- 5 | 32 33 34 35 36 37 38 39
163
- 4 | 24 25 26 27 28 29 30 31
164
- 3 | 16 17 18 19 20 21 22 23
165
- 2 | 8 9 10 11 12 13 14 15
166
- 1 | 0 1 2 3 4 5 6 7
167
- +-------------------------
168
- a b c d e f g h</pre>
169
-
170
- <p>Parameters are:</p>
171
- <dl class="rdoc-list note-list"><dt><code>square</code>
172
- <dd>
173
- <p>the square of the board. Can be an integer between 0 and 63 or a string
174
- like &#39;a2&#39;, &#39;c5&#39;…</p>
175
- </dd></dl>
176
-
177
-
178
-
179
-
180
- <div class="method-source-code" id="5B-5D-source">
181
- <pre>VALUE
182
- board_get_piece (VALUE self, VALUE square)
183
- {
184
- Board *board;
185
- Data_Get_Struct (self, Board, board);
186
- int i;
187
- if (TYPE (square) == T_STRING)
188
- i = coord_to_square (StringValuePtr (square));
189
- else
190
- i = FIX2INT (square);
191
- char piece = board-&gt;placement[i];
192
- if (i &lt; 0 || i &gt; 63 || !piece)
193
- return Qnil;
194
- else
195
- return rb_str_new (&amp;piece, 1);
196
- }</pre>
197
- </div>
198
-
199
- </div>
200
-
201
-
202
-
203
-
204
- </div>
205
-
206
-
207
- <div id="method-i-active_color" class="method-detail ">
208
-
209
-
210
- <div class="method-heading">
211
- <span class="method-callseq">
212
- active_color
213
- </span>
214
-
215
- <span class="method-click-advice">click to toggle source</span>
216
-
217
- </div>
218
-
219
-
220
-
221
- <div class="method-description">
222
-
223
- <p>Returns the active color: <code>false</code> means white turn,
224
- <code>true</code> means black turn.</p>
225
-
226
-
227
-
228
-
229
- <div class="method-source-code" id="active_color-source">
230
- <pre>VALUE
231
- board_active_color (VALUE self)
232
- {
233
- Board *board;
234
- Data_Get_Struct (self, Board, board);
235
- if (board-&gt;active_color)
236
- return Qtrue;
237
- else
238
- return Qfalse;
239
- }</pre>
240
- </div>
241
-
242
- </div>
243
-
244
-
245
-
246
-
247
- </div>
248
-
249
-
250
- <div id="method-i-check-3F" class="method-detail ">
251
-
252
-
253
- <div class="method-heading">
254
- <span class="method-callseq">
255
- check?
256
- </span>
257
-
258
- <span class="method-click-advice">click to toggle source</span>
259
-
260
- </div>
261
-
262
-
263
-
264
- <div class="method-description">
265
-
266
- <p>Returns <code>true</code> if the king of the color that has the turn is in
267
- check, <code>false</code> otherwise.</p>
268
-
269
-
270
-
271
-
272
- <div class="method-source-code" id="check-3F-source">
273
- <pre>VALUE
274
- board_king_in_check (VALUE self)
275
- {
276
- Board *board;
277
- Data_Get_Struct (self, Board, board);
278
- if (king_in_check (board, board-&gt;active_color))
279
- return Qtrue;
280
- else
281
- return Qfalse;
282
- }</pre>
283
- </div>
284
-
285
- </div>
286
-
287
-
288
-
289
-
290
- </div>
291
-
292
-
293
- <div id="method-i-checkmate-3F" class="method-detail ">
294
-
295
-
296
- <div class="method-heading">
297
- <span class="method-callseq">
298
- checkmate?
299
- </span>
300
-
301
- <span class="method-click-advice">click to toggle source</span>
302
-
303
- </div>
304
-
305
-
306
-
307
- <div class="method-description">
308
-
309
- <p>Returns <code>true</code> if the king of the color that has the turn is in
310
- checkmate, <code>false</code> otherwise.</p>
311
-
312
-
313
-
314
-
315
- <div class="method-source-code" id="checkmate-3F-source">
316
- <pre>VALUE
317
- board_king_in_checkmate (VALUE self)
318
- {
319
- Board *board;
320
- Data_Get_Struct (self, Board, board);
321
- if (king_in_checkmate (board, board-&gt;active_color))
322
- return Qtrue;
323
- else
324
- return Qfalse;
325
- }</pre>
326
- </div>
327
-
328
- </div>
329
-
330
-
331
-
332
-
333
- </div>
334
-
335
-
336
- <div id="method-i-fifty_rule_move-3F" class="method-detail ">
337
-
338
-
339
- <div class="method-heading">
340
- <span class="method-callseq">
341
- fifty_move_rule?
342
- </span>
343
-
344
- <span class="method-click-advice">click to toggle source</span>
345
-
346
- </div>
347
-
348
-
349
-
350
- <div class="method-description">
351
-
352
- <p>Returns <code>true</code> if a player can claim draw by the fifty-move
353
- rule, <code>false</code> otherwise.</p>
354
-
355
-
356
-
357
-
358
- <div class="method-source-code" id="fifty_rule_move-3F-source">
359
- <pre>VALUE
360
- board_fifty_move_rule (VALUE self)
361
- {
362
- Board *board;
363
- Data_Get_Struct (self, Board, board);
364
- if (fifty_move_rule (board))
365
- return Qtrue;
366
- else
367
- return Qfalse;
368
- }</pre>
369
- </div>
370
-
371
- </div>
372
-
373
-
374
-
375
-
376
- </div>
377
-
378
-
379
- <div id="method-i-fullmove_number" class="method-detail ">
380
-
381
-
382
- <div class="method-heading">
383
- <span class="method-callseq">
384
- fullmove_number
385
- </span>
386
-
387
- <span class="method-click-advice">click to toggle source</span>
388
-
389
- </div>
390
-
391
-
392
-
393
- <div class="method-description">
394
-
395
- <p>Returns the fullmove number: the number of the full move. It starts at 1,
396
- and is incremented after black&#39;s move.</p>
397
-
398
-
399
-
400
-
401
- <div class="method-source-code" id="fullmove_number-source">
402
- <pre>VALUE
403
- board_fullmove_number (VALUE self)
404
- {
405
- Board *board;
406
- Data_Get_Struct (self, Board, board);
407
- return INT2FIX (board-&gt;fullmove_number);
408
- }</pre>
409
- </div>
410
-
411
- </div>
412
-
413
-
414
-
415
-
416
- </div>
417
-
418
-
419
- <div id="method-i-halfmove_clock" class="method-detail ">
420
-
421
-
422
- <div class="method-heading">
423
- <span class="method-callseq">
424
- halfmove_clock
425
- </span>
426
-
427
- <span class="method-click-advice">click to toggle source</span>
428
-
429
- </div>
430
-
431
-
432
-
433
- <div class="method-description">
434
-
435
- <p>Returns the halfmove clock that is the number of halfmoves since the last
436
- pawn advance or capture. This is used to determine if a draw can be claimed
437
- under the fifty-move rule.</p>
438
-
439
-
440
-
441
-
442
- <div class="method-source-code" id="halfmove_clock-source">
443
- <pre>VALUE
444
- board_halfmove_clock (VALUE self)
445
- {
446
- Board *board;
447
- Data_Get_Struct (self, Board, board);
448
- return INT2FIX (board-&gt;halfmove_clock);
449
- }</pre>
450
- </div>
451
-
452
- </div>
453
-
454
-
455
-
456
-
457
- </div>
458
-
459
-
460
- <div id="method-i-insufficient_material-3F" class="method-detail ">
461
-
462
-
463
- <div class="method-heading">
464
- <span class="method-callseq">
465
- insufficient_material?
466
- </span>
467
-
468
- <span class="method-click-advice">click to toggle source</span>
469
-
470
- </div>
471
-
472
-
473
-
474
- <div class="method-description">
475
-
476
- <p>Returns <code>true</code> if the board has insufficient material to
477
- checkmate, <code>false</code> otherwise.</p>
478
-
479
-
480
-
481
-
482
- <div class="method-source-code" id="insufficient_material-3F-source">
483
- <pre>VALUE
484
- board_insufficient_material (VALUE self)
485
- {
486
- Board *board;
487
- Data_Get_Struct (self, Board, board);
488
- if (insufficient_material (board))
489
- return Qtrue;
490
- else
491
- return Qfalse;
492
- }</pre>
493
- </div>
494
-
495
- </div>
496
-
497
-
498
-
499
-
500
- </div>
501
-
502
-
503
- <div id="method-i-placement" class="method-detail ">
504
-
505
-
506
- <div class="method-heading">
507
- <span class="method-callseq">
508
- placement { |piece, index| block }
509
- </span>
510
-
511
- <span class="method-click-advice">click to toggle source</span>
512
-
513
- </div>
514
-
515
-
516
-
517
- <div class="method-description">
518
-
519
- <p>Calls <code>block</code> once for each square in the board, passing the
520
- <code>piece</code> in the square and the <code>index</code> as parameters.
521
- Return self. If no block is given, the array of pieces is returned instead.</p>
522
-
523
-
524
-
525
-
526
- <div class="method-source-code" id="placement-source">
527
- <pre>VALUE
528
- board_placement (VALUE self)
529
- {
530
- Board *board;
531
- Data_Get_Struct (self, Board, board);
532
- if (!rb_block_given_p ())
533
- {
534
- VALUE placement = rb_ary_new ();
535
- for (int i = 0; i &lt; 64; i++)
536
- {
537
- char piece = board-&gt;placement[i];
538
- rb_ary_push (placement, rb_str_new (&amp;piece, 1));
539
- }
540
- return placement;
541
- }
542
- else
543
- {
544
- for (int i = 0; i &lt; 64; i++)
545
- {
546
- char piece = board-&gt;placement[i];
547
- rb_yield_values (2, rb_str_new (&amp;piece, 1), INT2FIX (i));
548
- }
549
- return self;
550
- }
551
- }</pre>
552
- </div>
553
-
554
- </div>
555
-
556
-
557
-
558
-
559
- </div>
560
-
561
-
562
- <div id="method-i-stalemate-3F" class="method-detail ">
563
-
564
-
565
- <div class="method-heading">
566
- <span class="method-callseq">
567
- stalemate?
568
- </span>
569
-
570
- <span class="method-click-advice">click to toggle source</span>
571
-
572
- </div>
573
-
574
-
575
-
576
- <div class="method-description">
577
-
578
- <p>Returns <code>true</code> if the pieces of the color that has the turn are
579
- in stalemate, <code>false</code> otherwise.</p>
580
-
581
-
582
-
583
-
584
- <div class="method-source-code" id="stalemate-3F-source">
585
- <pre>VALUE
586
- board_stalemate (VALUE self)
587
- {
588
- Board *board;
589
- Data_Get_Struct (self, Board, board);
590
- if (stalemate (board, board-&gt;active_color))
591
- return Qtrue;
592
- else
593
- return Qfalse;
594
- }</pre>
595
- </div>
596
-
597
- </div>
598
-
599
-
600
-
601
-
602
- </div>
603
-
604
-
605
- <div id="method-i-to_fen" class="method-detail ">
606
-
607
-
608
- <div class="method-heading">
609
- <span class="method-callseq">
610
- to_fen
611
- </span>
612
-
613
- <span class="method-click-advice">click to toggle source</span>
614
-
615
- </div>
616
-
617
-
618
-
619
- <div class="method-description">
620
-
621
- <p>Return the FEN string of the board.</p>
622
-
623
-
624
-
625
-
626
- <div class="method-source-code" id="to_fen-source">
627
- <pre>VALUE
628
- board_to_fen (VALUE self)
629
- {
630
- Board *board;
631
- Data_Get_Struct (self, Board, board);
632
- char *fen = to_fen (board);
633
- VALUE rb_fen = rb_str_new2 (fen);
634
- free (fen);
635
- return rb_fen;
636
- }</pre>
637
- </div>
638
-
639
- </div>
640
-
641
-
642
-
643
-
644
- </div>
645
-
646
-
647
- <div id="method-i-to_s" class="method-detail ">
648
-
649
-
650
- <div class="method-heading">
651
- <span class="method-callseq">
652
- to_s
653
- </span>
654
-
655
- <span class="method-click-advice">click to toggle source</span>
656
-
657
- </div>
658
-
659
-
660
-
661
- <div class="method-description">
662
-
663
- <p><a href="Board.html">Board</a> to string.</p>
664
-
665
-
666
-
667
-
668
- <div class="method-source-code" id="to_s-source">
669
- <pre>VALUE
670
- board_to_s (VALUE self)
671
- {
672
- Board *board;
673
- Data_Get_Struct (self, Board, board);
674
- char *s = print_board (board);
675
- VALUE rb_s = rb_str_new2 (s);
676
- free (s);
677
- return rb_s;
678
- }</pre>
679
- </div>
680
-
681
- </div>
682
-
683
-
684
-
685
-
686
- </div>
687
-
688
-
689
- </section>
690
-
691
- </section>
692
- </main>
693
-
694
-
695
- <footer id="validator-badges" role="contentinfo">
696
- <p><a href="http://validator.w3.org/check/referer">Validate</a>
697
- <p>Generated by <a href="https://rdoc.github.io/rdoc">RDoc</a> 5.1.0.
698
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
699
- </footer>
700
-