chess 0.1.3 → 0.1.4

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.
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
-