Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
99 | pmbaty | 1 | /* |
2 | Texel - A UCI chess engine. |
||
3 | Copyright (C) 2012-2014 Peter Ă–sterlund, peterosterlund2@gmail.com |
||
4 | |||
5 | This program is free software: you can redistribute it and/or modify |
||
6 | it under the terms of the GNU General Public License as published by |
||
7 | the Free Software Foundation, either version 3 of the License, or |
||
8 | (at your option) any later version. |
||
9 | |||
10 | This program is distributed in the hope that it will be useful, |
||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
13 | GNU General Public License for more details. |
||
14 | |||
15 | You should have received a copy of the GNU General Public License |
||
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. |
||
17 | */ |
||
18 | |||
19 | /* |
||
20 | * book.cpp |
||
21 | * |
||
22 | * Created on: Feb 25, 2012 |
||
23 | * Author: petero |
||
24 | */ |
||
25 | |||
26 | #include "book.hpp" |
||
27 | #include "position.hpp" |
||
28 | #include "moveGen.hpp" |
||
29 | #include "textio.hpp" |
||
30 | #include "util/timeUtil.hpp" |
||
31 | |||
32 | #include <cassert> |
||
33 | |||
34 | |||
35 | Book::BookMap Book::bookMap; |
||
36 | Random Book::rndGen; |
||
37 | |||
38 | int Book::numBookMoves = -1; |
||
39 | |||
40 | |||
41 | void |
||
42 | Book::getBookMove(Position& pos, Move& out) { |
||
43 | initBook(); |
||
44 | out = Move(); |
||
45 | BookMap::iterator it = bookMap.find(pos.zobristHash()); |
||
46 | if (it == bookMap.end()) |
||
47 | return; |
||
48 | const std::vector<BookEntry>& bookMoves = it->second; |
||
49 | |||
50 | MoveList legalMoves; |
||
51 | MoveGen::pseudoLegalMoves(pos, legalMoves); |
||
52 | MoveGen::removeIllegal(pos, legalMoves); |
||
53 | int sum = 0; |
||
54 | for (size_t i = 0; i < bookMoves.size(); i++) { |
||
55 | const BookEntry& be = bookMoves[i]; |
||
56 | bool contains = false; |
||
57 | for (int mi = 0; mi < legalMoves.size; mi++) |
||
58 | if (legalMoves[mi].equals(be.move)) { |
||
59 | contains = true; |
||
60 | break; |
||
61 | } |
||
62 | if (!contains) { |
||
63 | // If an illegal move was found, it means there was a hash collision. |
||
64 | return; |
||
65 | } |
||
66 | sum += getWeight(be.count); |
||
67 | } |
||
68 | if (sum <= 0) |
||
69 | return; |
||
70 | int rnd = rndGen.nextInt(sum); |
||
71 | sum = 0; |
||
72 | for (size_t i = 0; i < bookMoves.size(); i++) { |
||
73 | sum += getWeight(bookMoves[i].count); |
||
74 | if (rnd < sum) { |
||
75 | out = bookMoves[i].move; |
||
76 | return; |
||
77 | } |
||
78 | } |
||
79 | // Should never get here |
||
80 | assert(false); |
||
81 | } |
||
82 | |||
83 | /** Return a string describing all book moves. */ |
||
84 | std::string |
||
85 | Book::getAllBookMoves(const Position& pos) { |
||
86 | initBook(); |
||
87 | std::string ret; |
||
88 | BookMap::iterator it = bookMap.find(pos.zobristHash()); |
||
89 | if (it != bookMap.end()) { |
||
90 | std::vector<BookEntry>& bookMoves = it->second; |
||
91 | for (size_t i = 0; i < bookMoves.size(); i++) { |
||
92 | BookEntry& be = bookMoves[i]; |
||
93 | std::string moveStr = TextIO::moveToString(pos, be.move, false); |
||
94 | ret += moveStr; |
||
95 | ret += '('; |
||
96 | ret += num2Str(be.count); |
||
97 | ret += ") "; |
||
98 | } |
||
99 | } |
||
100 | return ret; |
||
101 | } |
||
102 | |||
103 | void |
||
104 | Book::initBook() { |
||
105 | if (numBookMoves >= 0) |
||
106 | return; |
||
107 | U64 t0 = currentTimeMillis(); |
||
108 | bookMap.clear(); |
||
109 | rndGen.setSeed(currentTimeMillis()); |
||
110 | numBookMoves = 0; |
||
111 | std::vector<S8> buf; |
||
112 | createBinBook(buf); |
||
113 | |||
114 | Position startPos(TextIO::readFEN(TextIO::startPosFEN)); |
||
115 | Position pos(startPos); |
||
116 | UndoInfo ui; |
||
117 | for (size_t i = 0; i < buf.size(); i += 2) { |
||
118 | int b0 = buf[i]; if (b0 < 0) b0 += 256; |
||
119 | int b1 = buf[i+1]; if (b1 < 0) b1 += 256; |
||
120 | int move = (b0 << 8) + b1; |
||
121 | if (move == 0) { |
||
122 | pos = startPos; |
||
123 | } else { |
||
124 | bool bad = ((move >> 15) & 1) != 0; |
||
125 | int prom = (move >> 12) & 7; |
||
126 | Move m(move & 63, (move >> 6) & 63, |
||
127 | promToPiece(prom, pos.isWhiteMove())); |
||
128 | if (!bad) |
||
129 | addToBook(pos, m); |
||
130 | pos.makeMove(m, ui); |
||
131 | } |
||
132 | } |
||
133 | if (verbose) { |
||
134 | S64 t1 = currentTimeMillis(); |
||
135 | std::stringstream ss; |
||
136 | ss.precision(3); |
||
137 | ss << std::fixed << ((t1 - t0) / 1000.0); |
||
138 | std::cout << "Book moves:" << numBookMoves << " (parse time:" << ss.str() << ')' << std::endl; |
||
139 | } |
||
140 | } |
||
141 | |||
142 | /** Add a move to a position in the opening book. */ |
||
143 | void |
||
144 | Book::addToBook(const Position& pos, const Move& moveToAdd) { |
||
145 | BookMap::iterator it = bookMap.find(pos.zobristHash()); |
||
146 | if (it == bookMap.end()) |
||
147 | it = bookMap.insert(std::make_pair(pos.zobristHash(), |
||
148 | std::vector<BookEntry>())).first; |
||
149 | |||
150 | std::vector<BookEntry>& ent = it->second; |
||
151 | for (size_t i = 0; i < ent.size(); i++) { |
||
152 | BookEntry& be = ent[i]; |
||
153 | if (be.move.equals(moveToAdd)) { |
||
154 | be.count++; |
||
155 | return; |
||
156 | } |
||
157 | } |
||
158 | BookEntry be(moveToAdd); |
||
159 | ent.push_back(be); |
||
160 | numBookMoves++; |
||
161 | } |
||
162 | |||
163 | int |
||
164 | Book::getWeight(int count) { |
||
165 | double tmp = ::sqrt((double)count); |
||
166 | return (int)(tmp * ::sqrt(tmp) * 100 + 1); |
||
167 | } |
||
168 | |||
169 | void |
||
170 | Book::createBinBook(std::vector<S8>& binBook) { |
||
171 | for (size_t i = 0; bookLines[i]; i++) { |
||
172 | const char* line = bookLines[i]; |
||
173 | if (!addBookLine(line, binBook)) { |
||
174 | std::cout << "Book parse error, line:" << i << std::endl; |
||
175 | assert(false); |
||
176 | } |
||
177 | // std::cout << "no:" << i << " line:" << line << std::endl; |
||
178 | } |
||
179 | } |
||
180 | |||
181 | /** Add a sequence of moves, starting from the initial position, to the binary opening book. */ |
||
182 | bool |
||
183 | Book::addBookLine(const std::string& line, std::vector<S8>& binBook) { |
||
184 | Position pos(TextIO::readFEN(TextIO::startPosFEN)); |
||
185 | UndoInfo ui; |
||
186 | std::vector<std::string> strMoves; |
||
187 | splitString(line, strMoves); |
||
188 | for (size_t i = 0; i < strMoves.size(); i++) { |
||
189 | std::string strMove = strMoves[i]; |
||
190 | // std::cout << "Adding move:" << strMove << std::endl; |
||
191 | int bad = 0; |
||
192 | if ((strMove.length() > 0) && (strMove[strMove.length()-1] == '?')) { |
||
193 | strMove = strMove.substr(0, strMove.length() - 1); |
||
194 | bad = 1; |
||
195 | } |
||
196 | Move m(TextIO::stringToMove(pos, strMove)); |
||
197 | if (m.isEmpty()) |
||
198 | return false; |
||
199 | int prom = pieceToProm(m.promoteTo()); |
||
200 | int val = m.from() + (m.to() << 6) + (prom << 12) + (bad << 15); |
||
201 | binBook.push_back((S8)(val >> 8)); |
||
202 | binBook.push_back((S8)(val & 255)); |
||
203 | pos.makeMove(m, ui); |
||
204 | } |
||
205 | binBook.push_back((S8)0); |
||
206 | binBook.push_back((S8)0); |
||
207 | return true; |
||
208 | } |
||
209 | |||
210 | int |
||
211 | Book::pieceToProm(int p) { |
||
212 | switch (p) { |
||
213 | case Piece::WQUEEN: case Piece::BQUEEN: return 1; |
||
214 | case Piece::WROOK: case Piece::BROOK: return 2; |
||
215 | case Piece::WBISHOP: case Piece::BBISHOP: return 3; |
||
216 | case Piece::WKNIGHT: case Piece::BKNIGHT: return 4; |
||
217 | default: return 0; |
||
218 | } |
||
219 | } |
||
220 | |||
221 | int |
||
222 | Book::promToPiece(int prom, bool whiteMove) { |
||
223 | switch (prom) { |
||
224 | case 1: return whiteMove ? Piece::WQUEEN : Piece::BQUEEN; |
||
225 | case 2: return whiteMove ? Piece::WROOK : Piece::BROOK; |
||
226 | case 3: return whiteMove ? Piece::WBISHOP : Piece::BBISHOP; |
||
227 | case 4: return whiteMove ? Piece::WKNIGHT : Piece::BKNIGHT; |
||
228 | default: return Piece::EMPTY; |
||
229 | } |
||
230 | } |
||
231 | |||
232 | |||
233 | |||
234 | const char* |
||
235 | Book::bookLines[] = { |
||
236 | // Philidors defense |
||
237 | "e4 e5 Nf3 d6? d4 exd4 Nxd4 Nf6 Nc3 Be7 Bf4 O-O Qd2 d5 exd5 Nxd5 Nxd5 Qxd5 Nb5 Qe4+", |
||
238 | "e4 e5 Nf3 d6? d4 exd4 Nxd4 Nf6 Nc3 Be7 Bf4 O-O Qd2 a6 O-O-O b5 f3 c5", |
||
239 | "e4 e5 Nf3 d6? d4 exd4 Qxd4 Nf6 Nc3 Be7 Bg5? Nc6 Bb5 O-O", |
||
240 | |||
241 | // Nordic gambit |
||
242 | "e4 e5 d4? exd4 c3 dxc3 Bc4? cxb2 Bxb2 d5 Bxd5 Nf6 Bxf7+ Kxf7 Qxd8 Bb4+", |
||
243 | "e4 e5 d4? exd4 c3 d5? exd5 Qxd5 cxd4 Nc6 Nf3 Bg4 Be2 Bb4 Nc3 Bxf3 Bxf3 Qc4", |
||
244 | "e4 e5 d4? exd4 c3 d5? exd5 Qxd5 Nf3 Nc6 cxd4", |
||
245 | "e4 e5 d4? exd4 c3 d5? exd5 Qxd5 Nf3 Nc6 Be2 Nf6", |
||
246 | "e4 e5 d4? exd4 c3 d5? exd5 Qxd5 Nf3 Nc6 Be2 Bg4 O-O O-O-O cxd4", |
||
247 | "e4 e5 d4? exd4 Qxd4 Nc6 Qe3 Nf6 Nc3 Bb4 Bd2 O-O O-O-O Re8 Bc4 d6", |
||
248 | |||
249 | // Scottish game |
||
250 | "e4 e5 Nf3 Nc6 d4 exd4 Nxd4 Nf6 Nc3 Bb4 Nxc6 bxc6 Bd3 d5 exd5", |
||
251 | "e4 e5 Nf3 Nc6 d4 exd4 Nxd4 Bc5 Be3 Qf6 c3 Nge7 Bc4 Ne5 Bb3", |
||
252 | "e4 e5 Nf3 Nc6 d4 exd4 Nxd4 Bc5 Nb3 Bb6 a4 a5 Nc3 Qf6? Qe2 Nge7", |
||
253 | "e4 e5 d4? exd4 Nf3 Nc6 Nxd4 Nf6 Nxc6 bxc6 e5 Qe7 Qe2 Nd5 c4 Ba6 b3 g6 f4 f6 Ba3 Qf7 Qd2 Nb6", |
||
254 | |||
255 | // Italian game |
||
256 | "e4 e5 Nf3 Nc6 Bc4 Bc5 c3 Nf6 d4 exd4 cxd4 Bb4+ Bd2 Bxd2+ Nbxd2 d5 exd5 Nxd5 Qb3 Nce7", |
||
257 | "e4 e5 Nf3 Nc6 Bc4 Bc5 c3 Qe7? d4 Bb6 O-O d6 h3 Nf6 Re1 O-O Na3", |
||
258 | "e4 e5 Nf3 Nc6 Bc4 Bc5 c3 Nf6 d3 d6 O-O Qe7? b4 Bb6 a4 a6", |
||
259 | "e4 e5 Nf3 Nc6 Bc4 Bc5 d3 Nf6 c3 d6 O-O O-O b4 Bb6", |
||
260 | |||
261 | // Two knights defense |
||
262 | "e4 e5 Nf3 Nc6 Bc4 Nf6 Nc3 Nxe4 Nxe4 d5 Bd3", |
||
263 | "e4 e5 Nf3 Nc6 Bc4 Nf6 Ng5 d5 exd5 Na5 Bb5+ c6? dxc6 bxc6 Be2? h6 Nf3 e4 Ne5 Bd6", |
||
264 | "e4 e5 Nf3 Nc6 Bc4 Nf6 Ng5 d5 exd5 Na5 Bb5+ c6? dxc6 bxc6 Be2? h6 Nf3 e4 Ne5 Qc7", |
||
265 | "e4 e5 Nf3 Nc6 Bc4 Nf6 Ng5 d5 exd5 Na5 Bb5+ c6? dxc6 bxc6 Bd3 Nd5 Nf3 Bd6 O-O O-O Re1 Re8 Nc3 f5 Nxd5 cxd5", |
||
266 | "e4 e5 Nf3 Nc6 Bc4 Nf6 Ng5 d5 exd5 Na5 Bb5+ Bd7 Qe2 Be7 Nc3", |
||
267 | "e4 e5 Nf3 Nc6 Bc4 Nf6 d3 Bc5", |
||
268 | |||
269 | // Max Lange attack |
||
270 | "e4 e5 Nf3 Nc6 Bc4 Nf6 d4? exd4 O-O Bc5? e5 Ng4 Bf4 d6 exd6 Bxd6 Re1+ Kf8 Bxd6+ Qxd6 c3 Qc5", |
||
271 | "e4 e5 Nf3 Nc6 Bc4 Bc5 O-O Nf6 d4 exd4? e5 d5 exf6 dxc4 Re1+ Be6 Ng5 Qd5? Nc3 Qf5", |
||
272 | "e4 e5 Nf3 Nc6 d4 exd4 Bc4 Nf6 O-O", |
||
273 | |||
274 | // Scottish gambit |
||
275 | "e4 e5 Nf3 Nc6 Bc4 Nf6 d4? exd4 O-O Nxe4 Re1 d5 Bxd5 Qxd5 Nc3 Qa5 Nxe4 Be6 Neg5 O-O-O Nxe6 fxe6 Rxe6", |
||
276 | "e4 e5 Nf3 Nc6 d4 exd4 Bc4 Nf6 e5 d5 Bb5 Ne4 Nxd4 Bd7 Bxc6 bxc6 O-O Be7 f3 Nc5 f4 Ne4", |
||
277 | "e4 e5 Nf3 Nc6 d4 exd4 Bc4 Nf6 e5 d5 Bb5 Ne4 Nxd4 Bd7 Bxc6 bxc6 O-O Bc5 Be3 O-O? f3 Ng5 Qd2? f6 Kh1", |
||
278 | "e4 e5 Nf3 Nc6 d4 exd4 Bc4 Bc5 O-O d6 c3 Bg4 Qb3 Bxf3 Bxf7 Kf8 gxf3 Ne5 cxd4 Bxd4", |
||
279 | "e4 e5 Nf3 Nc6 d4 exd4 c3? d5 exd5 Qxd5 cxd4 Bg4 Be2 Bb4 Nc3 Bxf3 Bxf3 Qc4 Qb3", |
||
280 | |||
281 | // Hungarian |
||
282 | "e4 e5 Nf3 Nc6 Bc4 Be7 d4 d6? dxe5 dxe5 Qxd8+ Bxd8", |
||
283 | "e4 e5 Nf3 Nc6 Bc4 Be7 d4 exd4 Nxd4 Nf6", |
||
284 | |||
285 | // Three and four knights game |
||
286 | "e4 e5 Nf3 Nc6 Nc3 Nf6 Bb5 Nd4 Nxe5? Qe7 Nf3 Nxb5 Nxb5 Qxe4+ Qe2 Qxe2+ Kxe2 Nd5", |
||
287 | "e4 e5 Nf3 Nc6 Nc3 Nf6 Bb5 Nd4 Bc4 d6 Nxd4 exd4 Nd5 Nd7 d3 c6 Nf4 g6", |
||
288 | "e4 e5 Nf3 Nf6? Nc3? Nc6 d4 exd4 Nxd4 Bb4 Nxc6 bxc6", |
||
289 | |||
290 | // Russian defense |
||
291 | "e4 e5 Nf3 Nf6? Nxe5 d6 Nf3 Nxe4 Qe2 Qe7 d3 Nf6 Bg5 Nbd7 Nc3 Qxe2+ Bxe2 h6 Bh4 g6", |
||
292 | "e4 e5 Nf3 Nf6? Nxe5 d6 Nf3 Nxe4 d4 d5 Bd3 Be7 O-O Nc6 Re1 Bg4 c4 Nf6 cxd5 Nxd5 Nc3 O-O Be4 Be6", |
||
293 | "e4 e5 Nf3 Nf6? Nxe5 Qe7 Nf3 Nxe4 Be2 d5 O-O Qd8 Re1 Be7", |
||
294 | "e4 e5 Nf3 Nf6? d4 Nxe4 dxe5 d5 Nbd2 Nc6", |
||
295 | |||
296 | // Kings gambit |
||
297 | "e4 e5 f4? exf4 Nf3 d5 exd5 Nf6 Nc3? Nxd5 Nxd5 Qxd5 d4 Be7 c4 Qe4+ Be2 Nc6", |
||
298 | "e4 e5 f4? exf4 Nf3 d5 exd5 Nf6 Bb5+ c6 dxc6 Nxc6 d4 Qe7+ Kf2 Ng4+ Kf1 Be6", |
||
299 | "e4 e5 f4? exf4 Nf3 Be7 Bc4 Nf6 e5 Ng4 O-O Nc6 d4 d5 exd6 Bxd6", |
||
300 | "e4 e5 f4? exf4 Bc4 Nf6 Nc3 c6 d4 Bb4 Ne2 d5 exd5 f3", |
||
301 | "e4 e5 f4? d5 exd5 exf4 Nf3 Nf6 Nc3? Nxd5 Bc4 Qe7 Qe2", |
||
302 | "e4 e5 f4? d5 exd5 e4? d3 Nf6 dxe4 Nxe4 Nf3 Bc5 Qe2", |
||
303 | |||
304 | // Spanish |
||
305 | "e4 e5 Nf3 Nc6 Bb5 d6 d4 Bd7? Nc3 Nf6 O-O Be7 Re1 exd4 Nxd4 O-O", |
||
306 | "e4 e5 Nf3 Nc6 Bb5 d6? d4 exd4 Nxd4 Bd7 Nxc6 bxc6 Bc4 Nf6", |
||
307 | "e4 e5 Nf3 Nc6 Bb5 d6? d4 exd4 Qxd4? Bd7 Bxc6 Bxc6 Nc3 Nf6", |
||
308 | "e4 e5 Nf3 Nc6 Bb5 d6? O-O? Bd7 d4 exd4 Bxc6 Bxc6 Nxd4 Be7", |
||
309 | "e4 e5 Nf3 Nc6 Bb5 Nf6? O-O Nxe4 Re1? Nd6 Nxe5 Be7 Bd3 O-O", |
||
310 | "e4 e5 Nf3 Nc6 Bb5 Nf6? O-O Nxe4 d4 Nd6", |
||
311 | "e4 e5 Nf3 Nc6 Bb5 Nf6? O-O Bc5 c3 O-O d4 Bb6 Bg5 h6 Bh4 d6 a4 a5 Re1 exd4 Bxc6 bxc6 Nxd4", |
||
312 | "e4 e5 Nf3 Nc6 Bb5 Nf6? O-O Bc5 Nxe5 Nxe5 d4 a6 Ba4? b5 Bb3 Bxd4 Qxd4 d6", |
||
313 | "e4 e5 Nf3 Nc6 Bb5 Nf6? O-O Bc5 Nxe5 Nxe5 d4 a6 Be2 Ba7 dxe5 Nxe4 Qd5 Nc5", |
||
314 | "e4 e5 Nf3 Nc6 Bb5 Nf6? O-O Bc5 Nc3? O-O d3 d6", |
||
315 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 O-O c3 d6 h3 h6 d4 Re8 Nbd2 Bf8 Nf1 Bb7 Ng3 Na5? Bc2 Nc4 a4 d5", |
||
316 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 O-O c3 d6 h3 h6 d4 Re8 Nbd2 Bf8 Nf1 Bb7 Ng3 exd4 cxd4", |
||
317 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 O-O c3 d6 h3 h6 d4 Re8 Nbd2 Bb7 Nf1 exd4 cxd4 Bf8 Ng3", |
||
318 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 O-O c3 d6 d4 Bg4 Be3 exd4 cxd4 Na5 Bc2 Nc4 Bc1 c5 b3", |
||
319 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 d6 c3 O-O d4 Bg4 Be3 Bh5 h3", |
||
320 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 d6 c3 O-O d4 Bg4 d5 Na5 Bc2 c6 h3 Bc8 dxc6 Qc7 Nbd2 Qxc6 Nf1 Nc4", |
||
321 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 d6 c3 Na5 Bc2 c5 d4 Nc6? d5", |
||
322 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 d6 c3 Na5 Bc2 c5 d4 Nc6? h3 Qc7 d5", |
||
323 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 d6 c3 Na5 Bc2 c5 d4 cxd4 cxd4 Qc7", |
||
324 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 d6 c3 Na5 Bc2 c5 d4 Qc7 Nbd2 cxd4 cxd4 Bg4 h3 Bh5", |
||
325 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Be7 Re1 b5 Bb3 d6 c3 Na5 Bc2 c5 d3 Nc6 Nbd2 O-O Nf1 Re8 h3 h6 Ne3 Bf8", |
||
326 | "Nf3 Nc6 e4 e5 Bb5 a6 Ba4 Nf6 O-O Nxe4 d4 b5 Bb3 d5 dxe5 Be6 c3 Bc5 Nbd2 O-O Bc2", |
||
327 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O Nxe4 d4 b5 Bb3 d5 dxe5 Be6 c3 Be7? Nbd2 Nc5 Bc2 Bg4 Re1", |
||
328 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 Nf6 O-O b5? Bb3 Bb7 c3 Nxe4? d4 Na5 Bc2 exd4 Bxe4 Bxe4 Re1 d5", |
||
329 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 d6? O-O Bd7 c3 g6 d4 Bg7 Re1 Nge7 Be3 O-O Nbd2 h6 dxe5 dxe5 Bb3 b6 a4", |
||
330 | "e4 e5 Nf3 Nc6 Bb5 a6 Ba4 d6? c3 Bd7 d4 Nge7 Bb3 h6 Nbd2 Ng6 Nc4 Be7 Ne3 O-O", |
||
331 | |||
332 | // Scandinavian |
||
333 | "e4 d5? exd5 Qxd5 Nc3 Qa5 d4 Nf6 Nf3 Bf5 Bc4 e6 Bd2 c6 Qe2 Bb4 Ne5 Nbd7 Nxd7 Nxd7 a3", |
||
334 | "e4 d5? exd5 Qxd5 Nc3 Qa5 d4 c6 Nf3 Nf6 Bc4 Bg4 h3 Bh5 g4 Bg6 Bd2 Qb6 Qe2", |
||
335 | "e4 d5? exd5 Nf6 d4 Nxd5 c4 Nb6 Nf3 g6 Nc3 Bg7 Be3 O-O h3 Nc6 Qd2 e5 d5", |
||
336 | "e4 d5? exd5 Nf6 d4 Nxd5 c4 Nf6 Nf3", |
||
337 | "e4 d5? exd5 Nf6 d4 Nxd5 Nf3 g6 c4 Nb6", |
||
338 | "e4 d5? exd5 Nf6 d4 Nxd5 Nf3 g6 Be2 Bg7 O-O O-O c4 Nb6 Nc3 Nc6 d5 Ne5", |
||
339 | |||
340 | // Queens gambit accepted |
||
341 | "d4 d5 c4 dxc4? Nf3 Nf6 e3 Bg4? Bxc4 e6 h3 Bh5 Nc3", |
||
342 | "d4 d5 c4 dxc4? Nf3 Nf6 e3 c5 Bxc4 e6", |
||
343 | "d4 d5 c4 dxc4? e3 Nf6 Nf3", |
||
344 | "d4 d5 c4 dxc4? e3 Nf6 Nf3 e6 Bxc4 c5 O-O a6", |
||
345 | |||
346 | // Queens gambit declined |
||
347 | "d4 d5 c4 e6 Nc3 Nf6 Bg5 Nbd7 e3 Be7 Nf3 O-O Rc1 c6 Qc2 h6 Bh4", |
||
348 | "d4 d5 c4 e6 Nc3 Nf6 Bg5 Be7 e3 O-O", |
||
349 | "c4 e6 d4 d5 Nf3 Be7 Nc3 Nf6 Bg5? O-O e3 h6", |
||
350 | "d4 d5 c4 e6 Nf3 Be7 Nc3 Nf6 Bf4 dxc4 e3 Nd5", |
||
351 | "d4 d5 c4 e6 Nf3 Nf6 Nc3 c5? cxd5 Nxd5 e4 Nxc3 bxc3", |
||
352 | "c4 Nf6 Nc3? e6 Nf3 d5 d4 Be7 Bg5 O-O e3 Nbd7 Qc2 c5", |
||
353 | "c4 Nf6 Nc3? e6 Nf3 d5 d4 Be7 e3 O-O Bd3 c5", |
||
354 | "Nf3? d5 d4 Nf6 c4 e6 Nc3 Be7 Bf4 O-O e3 c5 dxc5 Bxc5 Qc2 Nc6", |
||
355 | "d4 d5 c4 c6 Nf3 Nf6 Nc3 e6 e3 Nbd7 Bd3 dxc4 Bxc4 b5 Bd3 a6 O-O", |
||
356 | "d4 d5 c4 c6 Nf3 Nf6 Nc3 e6 Bg5 h6 Bh4? dxc4 e4 g5 Bg3 b5 Be2 Bb7 Ne5 Bg7 h4 Nbd7", |
||
357 | "d4 d5 c4 c6 Nf3 Nf6 Nc3 e6 Bg5 h6 Bxf6 Qxf6 e3 Bd6", |
||
358 | "d4 d5 c4 c6 Nf3 Nf6 Nc3 e6 Bg5 h6 Bxf6 Qxf6 e3 Nd7 Bd3 dxc4 Bxc4 g6 O-O Bg7", |
||
359 | "d4 d5 c4 c6 Nf3 e6 Nc3 Nf6 e3 Nbd7 Qc2 Bd6 Bd3 O-O O-O dxc4 Bxc4 a6 Rd1 b5 Be2 Qc7 e4 e5", |
||
360 | "d4 d5 c4 c6 Nf3 e6 Qc2 Nf6 e3 Nbd7 Nc3 Bd6 Bd3 O-O O-O dxc4", |
||
361 | "d4 d5 c4 c6 Nf3 e6 Qc2 Nf6 Bg5 h6 Bxf6 Qxf6 Nc3 Nd7 e3 g6 Bd3 Bg7", |
||
362 | "d4 d5 c4 c6 cxd5 cxd5 Nc3 Nf6 Bf4 Nc6 e3 a6", |
||
363 | "d4 d5 c4 c6 cxd5 cxd5 Nc3 Nf6 Bf4 Qb6 Qd2 Nc6 e3 Bf5", |
||
364 | "d4 d5 c4 c6 Nc3 Nf6 e3 e6 Nf3", |
||
365 | "d4 d5 c4 c6 Nc3 Nf6 e3 a6 Nf3 e6 b3 Bb4 Bd2 O-O Bd3 Nbd7 O-O Qe7 Qc2 e5", |
||
366 | "c4 c6? d4 d5", |
||
367 | "Nf3 d5 d4 e6 c4 Nf6 g3 Be7 Bg2 O-O O-O dxc4 Qc2 a6 a4 Bd7 Qxc4 Bc6", |
||
368 | "d4 Nf6 c4 e6 Nf3 d5 g3? dxc4 Bg2 Nc6 Qa4 Bb4+ Bd2 Nd5 Bxb4 Nxb4 O-O Rb8 Nc3 a6 Ne5 O-O", |
||
369 | "d4 Nf6 Nf3? d5", |
||
370 | "d4 Nf6 Nf3? e6 c4 d5 g3 Be7 Bg2 O-O Qc2 c5 O-O cxd4 Nxd4 Nc6", |
||
371 | |||
372 | // Tarrasch defense |
||
373 | "d4 d5 c4 e6 Nc3 c5? cxd5 exd5 Nf3 Nc6 g3 Nf6 Bg2 Be7 O-O O-O Bg5 cxd4 Nxd4 h6", |
||
374 | |||
375 | // Budapest defense |
||
376 | "d4 Nf6 c4 e5? dxe5 Ng4 Nf3 Bc5 e3 Nc6 Be2 Ngxe5 O-O d6", |
||
377 | |||
378 | // Sicilian |
||
379 | "e4 c5 Nf3 Nc6 d4 cxd4 Nxd4 e6 Nc3 Qc7 Be2 a6 O-O Nf6 Be3 Be7 f4 d6 Qe1 O-O Rd1 Nxd4 Bxd4 b5 a3", |
||
380 | "e4 c5 Nf3 Nc6 d4 cxd4 Nxd4 e6 Nc3 a6 Be2 Qc7 Be3 Nf6 O-O Be7 f4 d6", |
||
381 | "e4 c5 Nf3 Nc6 d4 cxd4 Nxd4 e6 Nc3 a6 Bf4 d6 Nxc6 bxc6 Qd2 e5 Bg5 Nf6 O-O-O h6 Bh4 Be6 Be2 Rb8 Kb1 a5", |
||
382 | "e4 c5 Nf3 Nc6 d4 cxd4 Nxd4 Nf6 Nc3 e5 Ndb5 d6 Bg5 a6 Na3 b5", |
||
383 | "e4 c5 Nf3 Nc6 Nc3 e6 d4 cxd4 Nxd4 Qc7 Be3 a6 Be2 Nf6 O-O Be7 f4 d6 Qe1 O-O", |
||
384 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 f4? e5 Nf3 Qc7 Bd3", |
||
385 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 f4? e6 Qf3 Qb6 Nb3 Qc7", |
||
386 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 f4? Nbd7? Be2", |
||
387 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 Be2 e5 Nb3 Be7 O-O O-O Be3 Be6", |
||
388 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 Be3 e5 Nb3 Be6 Qd2 Nbd7 f3 b5", |
||
389 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 Be3 e5 Nb3 Be6 Qd2 Nbd7 f3 h5 Be2 Be7 Nd5", |
||
390 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 Be3 e5 Nb3 Be6 f3 Be7 Qd2 O-O O-O-O Nbd7 g4 b5 g5 b4", |
||
391 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 Bg5 e6 f4 Be7 Qf3 Qc7 O-O-O Nbd7? g4 b5", |
||
392 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 a6 Bg5 e6 f4 Be7 Qf3 Qc7 O-O-O h6 Bh4 Nbd7", |
||
393 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 Nc6 Bg5 e6 Qd2 a6 O-O-O h6 Nxc6 bxc6 Bf4 d5", |
||
394 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 g6 Be3 Bg7 f3 O-O Qd2 Nc6 Bc4 Bd7 O-O-O Rc8 Bb3 Ne5 h4 Nc4 Bxc4 Rxc4 g4 Qa5", |
||
395 | "e4 c5 Nf3 e6 d4 cxd4 Nxd4 Nf6 Nc3 d6 Be2 a6 O-O Be7 f4 O-O", |
||
396 | "e4 c5 Nf3 d6 d4 cxd4 Nxd4 Nf6 Nc3 e5? Bb5+ Bd7 Bxd7+ Qxd7 Nde2 Qg4 O-O Nxe4 Nd5 Qd7 f3 Nf6 Nxf6+ gxf6 Nc3", |
||
397 | "e4 c5 Nf3 e6 d4 cxd4 Nxd4 a6 Bd3 Nf6 O-O Qc7 Qe2 d6 c4 g6 Nc3 Bg7 Rd1 O-O", |
||
398 | "e4 c5 Nf3 e6 d4 cxd4 Nxd4 Nc6 Nc3 Qc7 Be3 a6 Bd3 Nf6 O-O Ne5 h3 Bc5 Qe2 d6", |
||
399 | "e4 c5 Nf3 e6 d4 cxd4 Nxd4 Nc6 Nc3 Qc7 f4 a6 Be2 b5", |
||
400 | "e4 c5 Nf3 e6 Nc3 Nc6 d4 cxd4 Nxd4 Qc7 Be3 a6 Qd2 Nf6 O-O-O Be7", |
||
401 | "e4 c5 Nc3 Nc6 Nge2? g6 d4 cxd4 Nxd4 Bg7 Be3 Nf6 Bc4 O-O Bb3 d6", |
||
402 | "e4 c5 Nc3 Nc6 f4? d6 Nf3 g6 Bb5 Bd7 O-O Bg7 d3 a6 Bc4 Na5 e5 Nxc4 dxc4 Be6", |
||
403 | "e4 c5 Nc3 Nc6 f4? d6 Nf3 g6 Bb5 Bd7 O-O Bg7 d3 a6 Bc4 e6 f5 b5 Bb3 Nf6 fxe6 Bxe6", |
||
404 | "e4 c5 Nc3 Nc6 f4? g6 Nf3 Bg7 Bb5 Nd4", |
||
405 | "e4 c5 Nc3 Nc6 g3? g6 Bg2 Bg7 d3 d6 f4? e6 Nf3 Nge7 O-O O-O", |
||
406 | "e4 c5 Nc3 Nc6 Nf3 e6 Bb5? Nge7 O-O a6 Bxc6 Nxc6 d4 cxd4 Nxd4 Qc7", |
||
407 | "e4 c5 Nc3 Nc6 Nf3 g6 d4 cxd4 Nxd4", |
||
408 | "e4 c5 Nc3 e6 Nf3 Nc6 d4 cxd4 Nxd4 Qc7 Be2 a6 O-O Nf6 Be3 Bb4", |
||
409 | "e4 c5 Nc3 e6 g3? Nc6 Bg2 Nf6", |
||
410 | "e4 c5 Nc3 a6 Nf3 d6 d4 cxd4 Nxd4 Nf6", |
||
411 | "e4 c5 Nc3 d6 f4? g6 Nf3 Bg7 Bc4 Nc6 O-O Nf6", |
||
412 | "e4 c5 Nc3 d6 Nf3 Nf6 d4 cxd4 Nxd4", |
||
413 | "e4 c5 Nc3 d6 Nf3 Nf6 Bb5+ Bd7 Bxd7+ Qxd7 O-O Nc6", |
||
414 | "Nc3? c5 Nf3 Nc6 d4 cxd4 Nxd4 Nf6 e4 d6 Bg5 e6 Qd2 a6? O-O-O Bd7 f4 b5", |
||
415 | "Nc3? c5 Nf3 Nc6 d4 cxd4 Nxd4 Nf6 e4 d6 Bg5 e6 Qd2 Be7 O-O-O Nxd4 Qxd4", |
||
416 | "e4 c5 d4 cxd4 c3? dxc3 Nxc3 Nc6 Nf3 d6 Bc4 e6 O-O Nf6 Qe2 Be7 Rd1 e5", |
||
417 | "e4 c5 d4? cxd4 c3? dxc3 Nxc3 Nc6 Nf3 e6 Bc4 a6 O-O b5 Bd3 Bb7", |
||
418 | "e4 c5 d4? cxd4 Nf3 d6 Nxd4", |
||
419 | "e4 c5 c3 d5 exd5 Qxd5 d4 Nf6 Nf3 Bg4? Be2 e6 O-O Nc6 Be3? cxd4 cxd4 Be7", |
||
420 | "e4 c5 c3 d5 exd5 Qxd5 d4 Nf6 Nf3 Bg4? Be2 e6 O-O Nc6 h3 Bh5 Be3", |
||
421 | "e4 c5 c3? d5 exd5 Qxd5 d4 Nf6 Nf3 e6 Na3 Nc6 Be2 Qd8 Nc2 b6 O-O Bb7", |
||
422 | "e4 c5 c3? Nf6 e5 Nd5 Nf3 Nc6 Bc4 Nb6 Bb3 c4 Bc2 Qc7 Qe2 g5", |
||
423 | "e4 c5 f4 d5 exd5 Nf6 Bb5+ Bd7 Bxd7+ Qxd7 c4 e6 Qe2 Bd6 f5 O-O fxe6 fxe6 dxe6", |
||
424 | "e4 c5 Nc3? d6 Nf3 Nf6 d4 cxd4 Nxd4 a6 Be3 e5 Nb3 Be6 Qd2 Nbd7 f3 h5 Be2 Be7 Nd5 Bxd5 exd5", |
||
425 | "e4 c5 Nf3 g6? c3 Bg7 d4 cxd4 cxd4 d5 e5 Nc6 h3 e6 Nc3", |
||
426 | |||
427 | // French defense |
||
428 | "d4 e6 e4 d5 exd5 exd5 Nf3 Nf6 Bd3 Bd6 O-O O-O Bg5 Bg4 Nbd2 Nbd7 c3 c6 Qc2 Qc7", |
||
429 | "e4 e6 d4 d5 exd5 exd5 Bd3 Bd6 Nf3 Nf6", |
||
430 | "e4 e6 d4 d5 exd5 exd5 Bd3 Bd6 Nf3 Ne7 O-O O-O Bg5 f6 Bd2 Bf5", |
||
431 | "e4 e6 d4 d5 e5? c5 c3 Nc6 Nf3 Qb6 Be2 cxd4 cxd4 Nge7 Nc3 Nf5 Na4 Qa5+ Bd2 Bb4 Bc3", |
||
432 | "e4 e6 d4 d5 e5? c5 c3 Nc6 Nf3 Qb6 Bd3? cxd4 cxd4 Bd7", |
||
433 | "e4 e6 d4 d5 e5? c5 c3 Nc6 Nf3 Qb6 a3? c4 Nbd2 Na5 Be2 Bd7", |
||
434 | "e4 e6 d4 d5 e5? c5 c3 Nc6 Nf3 Bd7 Be2 Nge7 O-O Rc8", |
||
435 | "e4 e6 d4 d5 Nc3 Nf6 Bg5? Be7 e5 Nfd7 Bxe7 Qxe7", |
||
436 | "e4 e6 d4 d5 Nc3 Nf6 exd5 exd5 Nf3 Bd6 Bd3 O-O O-O", |
||
437 | "e4 e6 d4 d5 Nd2 Nf6 e5 Nfd7 Bd3 c5 c3 Nc6 Ne2 cxd4 cxd4 f6 exf6 Nxf6", |
||
438 | "e4 e6 d4 d5 Nd2 c5 Ngf3 Nf6 exd5 exd5 Bb5+ Bd7 Bxd7+ Nbxd7 O-O Be7 dxc5 Nxc5", |
||
439 | "e4 e6 d4 d5 Nc3 Nf6 e5 Nfd7 f4 c5 Nf3 Nc6 Be3 cxd4 Nxd4 Bc5 Qd2 O-O O-O-O a6", |
||
440 | "e4 e6 d4 d5 Nc3 Bb4 e5 c5 a3 Bxc3+ bxc3 Ne7 Qg4 Qc7? Qxg7 Rg8 Qxh7 cxd4 Ne2 Nbc6 f4 Bd7", |
||
441 | "e4 e6 d4 d5 Nc3 Bb4 e5 c5 a3 Bxc3+ bxc3 Ne7 Qg4 O-O Nf3 Nbc6 Bd3 f5 exf6 Rxf6 Bg5 Rf7", |
||
442 | "e4 e6 d4 d5 Nc3 Bb4 e5 c5 a3 Bxc3+ bxc3 Qc7? Qg4 f6? f4 f5 Qg3 cxd4 cxd4 Ne7 c3 b6", |
||
443 | "e4 e6 d4 d5 Nc3 Bb4 e5 c5 Qg4? Ne7 dxc5 Nbc6 Bd2? O-O", |
||
444 | "e4 e6 d4 d5 Nc3 Bb4 e5 c5 Nf3? Ne7 a3 Bxc3+ bxc3", |
||
445 | "e4 e6 d4 d5 Nc3 Bb4 e5 Ne7 a3 Bxc3+ bxc3 c5 Qg4 O-O Bd3 c4 Bh6 Ng6 Bxg6 fxg6 Be3 Nc6", |
||
446 | "e4 e6 d4 c5? d5 exd5 exd5 d6 Nf3 Nf6 c4", |
||
447 | "e4 e6 d4 c5? d5 Nf6 Nc3 d6 Nf3 exd5 exd5 Be7 Bc4 O-O", |
||
448 | "e4 e6 d3? d5 Nd2 c5 Ngf3 Nc6 g3 Nf6 Bg2 Be7 O-O O-O", |
||
449 | |||
450 | // Caro Kann defense |
||
451 | "e4 c6 d4 d5 Nc3 dxe4 Nxe4 Bf5 Ng3 Bg6 h4 h6 Nf3 Nd7 h5 Bh7 Bd3 Bxd3 Qxd3 Qc7 Bd2 Ngf6 O-O-O e6", |
||
452 | "e4 c6 d4 d5 Nc3 dxe4 Nxe4 Bf5 Ng3 Bg6 h4 h6 Nf3 Nd7 h5 Bh7 Bd3 Bxd3 Qxd3 e6 Bf4 Qa5+ Bd2 Qc7 O-O-O Ngf6 Ne4", |
||
453 | "e4 c6 d4 d5 Nc3 dxe4 Nxe4 Bf5 Ng3 Bg6 h4 h6 Nf3 Nd7 h5 Bh7 Bd3 Bxd3 Qxd3 e6 Bf4 Qa5+ Bd2 Bb4 Ne4? Bxd2+ Nfxd2 Ngf6 Nd6+ Ke7 Nxb7 Qb4 Qb3 Qxd4", |
||
454 | "e4 c6 d4 d5 Nc3 dxe4 Nxe4 Bf5 Ng3 Bg6 h4 h6 Nf3 Nd7 h5 Bh7 Bd3 Bxd3 Qxd3 e6 Bf4 Qa5+ Bd2 Bb4 c3 Be7 c4 Qc7", |
||
455 | "e4 c6 d4 d5 Nd2 dxe4 Nxe4 Bf5 Ng3 Bg6 h4 h6 Nf3 Nd7 Bd3 Bxd3 Qxd3 Qc7 Bd2 Ngf6", |
||
456 | "e4 c6 d4 d5 Nd2 dxe4 Nxe4 Bf5 Ng3 Bg6 Nf3 Nd7 Bd3 e6 O-O", |
||
457 | "e4 c6 d4 d5 exd5 cxd5 c4 Nf6 Nc3 e6 Nf3 Be7 cxd5 Nxd5 Bd3 Nc6 O-O O-O Re1 Nf6", |
||
458 | "e4 c6 d4 d5 e5 Bf5 Nf3 e6 Be2 c5 O-O Nc6 c3 cxd4 cxd4 Nge7 Nc3 Nc8? Be3 Nb6 Rc1 Be7", |
||
459 | "e4 c6 d4 d5 e5 Bf5 Nf3 e6 Be2 c5 O-O Nc6 c3 cxd4 cxd4 Nge7 Nc3 Bg4 Bg5 Qb6 Na4 Qc7 Rc1 Nf5 h3 Bxf3 Bxf3 Be7 Be3 O-O", |
||
460 | "e4 c6 d4 d5 e5 Bf5 Nf3 e6 Be2 c5 Be3 Qb6? Nc3 Nc6 O-O Qxb2? Nb5", |
||
461 | "e4 c6 d4 d5 e5 Bf5 Nf3 e6 Be2 c5 Be3 cxd4 Nxd4 Ne7 c4 Nbc6 Qa4 a6", |
||
462 | "e4 c6 d4 d5 e5 Bf5 Nf3 e6 Be2 Nd7 O-O Ne7 Nbd2 h6 c3 Qc7 Re1 O-O-O", |
||
463 | "e4 c6 d4 d5 e5 Bf5 Nd2 e6 Nb3 Nd7 Nf3 Qc7", |
||
464 | "e4 c6 d3? d5 Nd2 e5 Ngf3 Bd6 g3 Nf6 Bg2 O-O O-O", |
||
465 | |||
466 | // Aljechins defense |
||
467 | "e4 Nf6? e5 Nd5 d4 d6 c4 Nb6 exd6 cxd6 Be3 g6 Nc3 Bg7", |
||
468 | "e4 Nf6? e5 Nd5 d4 d6 c4 Nb6 exd6 cxd6 Nc3 g6 Be3 Bg7", |
||
469 | "e4 Nf6? e5 Nd5 d4 d6 c4 Nb6 exd6 exd6 Nc3 Be7 Bd3 Nc6 Nge2 Bg4 f3 Bh5 O-O O-O b3", |
||
470 | "e4 Nf6? e5 Nd5 d4 d6 Nf3 Bg4 Be2 e6 c4 Nb6 exd6 cxd6", |
||
471 | "e4 Nf6? e5 Nd5 d4 d6 Nf3 Bg4 Be2 e6 O-O Be7 c4 Nb6 Nc3 O-O Be3 N8d7 exd6 cxd6 b3", |
||
472 | "e4 Nf6? e5 Nd5 d4 d6 Nf3 g6 c4 Nb6 exd6 cxd6", |
||
473 | "e4 Nf6? e5 Nd5 c4 Nb6 d4 d6 exd6 cxd6 Nf3 g6 Be2 Bg7 O-O O-O Nc3 Nc6 h3", |
||
474 | "e4 Nf6? e5 Nd5 c4 Nb6 d4 d6 Nf3 Bg4 exd6 exd6 Be2 Be7 O-O O-O Nc3 Nc6 b3 Bf6 Be3 d5", |
||
475 | "e4 Nf6? Nc3? d5? e5 Nfd7 d4? e6 f4 c5 Nf3 Nc6 Be3 a6 Qd2 b5 dxc5 Bxc5 Bxc5 Nxc5", |
||
476 | "e4 Nf6? Nc3? d5? e5 Nfd7 d4? e6 f4 c5 Nf3 Nc6 Be3 cxd4 Nxd4 Bc5 Qd2 O-O O-O-O a6", |
||
477 | "e4 Nf6? Nc3? e5", |
||
478 | |||
479 | // Kings indian |
||
480 | "d4 Nf6 c4 g6? Nc3 Bg7? e4 d6 Nf3 O-O Be2 e5 O-O exd4 Nxd4 Re8", |
||
481 | "d4 Nf6 c4 g6? Nc3 Bg7? e4 d6 Nf3 O-O Be2 e5 O-O Nc6? d5 Ne7 Ne1 Nd7 Nd3 f5 Bd2 fxe4 Nxe4", |
||
482 | "d4 Nf6 c4 g6? Nc3 Bg7? g3? O-O Bg2 d6? Nf3 Nbd7 O-O e5", |
||
483 | "d4 Nf6 c4 g6? Nc3 Bg7? g3? d5 cxd5 Nxd5 Bg2", |
||
484 | "d4 Nf6 c4 g6? Nc3 d5 cxd5 Nxd5 e4 Nxc3 bxc3 Bg7 Nf3 c5 Rb1 O-O Be2 cxd4? cxd4 Qa5", |
||
485 | "d4 Nf6 c4 g6? Nc3 d5 cxd5 Nxd5 e4 Nxc3 bxc3 Bg7 Nf3 c5 Rb1 O-O Be2 Nc6 d5", |
||
486 | "c4 Nf6 Nf3 g6? d4 Bg7 Nc3 O-O e4 d6 Be2", |
||
487 | "c4 Nf6 Nc3? g6? d4 d5 cxd5 Nxd5 e4 Nxc3 bxc3 Bg7 Bc4 c5", |
||
488 | "Nf3? Nf6 c4 g6? Nc3 Bg7 d4 O-O", |
||
489 | "d4 Nf6 c4 d6? Nf3 Nbd7 Nc3 e5 e4 exd4 Nxd4 g6 Be2 Bg7 O-O O-O", |
||
490 | "e4 g6? d4 Bg7 Nc3 d6 f4? Nf6 Nf3 O-O Bd3 Nc6? O-O e5", |
||
491 | "d4 g6? e4 Bg7 Nc3 d6 f4? Nf6 Nf3 O-O Bd3 Na6 O-O c5 d5 Rb8 a3 Nc7 a4 b6", |
||
492 | |||
493 | // English opening |
||
494 | "c4 Nf6 Nf3 c5 Nc3 Nc6 g3 g6 Bg2 Bg7 d4 cxd4 Nxd4 O-O O-O Nxd4 Qxd4 d6", |
||
495 | "c4 e5 Nc3 Nf6 Nf3 Nc6 g3 d5 cxd5 Nxd5 Bg2 Nb6 O-O Be7 d3 O-O a3 Be6 b4? a5 b5 Nd4", |
||
496 | "c4 e5 Nc3 Nf6 Nf3 Nc6 g3 d5 cxd5 Nxd5 Bg2 Nb6 O-O Be7 d3 O-O a3 Be6 Be3 f5 Rc1", |
||
497 | "c4 e5 Nc3 Nf6 g3 d5 cxd5 Nxd5 Bg2 Nb6 Nf3 Nc6 O-O Be7 a3 O-O b4 Be6 d3", |
||
498 | "c4 e5 Nc3 Nc6 g3 g6 Bg2 Bg7 e3 d6 Nge2 h5 h4 Bg4", |
||
499 | "c4 Nf6 Nc3? e5 Nf3 Nc6 g3 d5 cxd5 Nxd5 Bg2 Nb6 d3 Be7 O-O O-O", |
||
500 | "c4 Nf6 g3? g6 Bg2 Bg7 Nc3 O-O e4 d6 Nge2 c5 O-O Nc6 d3 a6 h3 Rb8 a4", |
||
501 | "c4 Nf6 g3? e5 Bg2 c6", |
||
502 | "c4 Nf6 g3? e6 d4 d5 Nf3 dxc4 Bg2 a6 O-O Nc6", |
||
503 | |||
504 | // Queen indian |
||
505 | "d4 Nf6 c4 e6 Nf3 b6 g3 Bb7 Bg2 Be7 O-O O-O Nc3 Ne4 Qc2 Nxc3 Qxc3 c5", |
||
506 | "d4 e6 Nf3 Nf6 c4 b6 g3 Bb7 Bg2 Bb4 Bd2 Bxd2 Qxd2", |
||
507 | "d4 e6 Nf3 Nf6 c4 b6 g3 Bb7 Bg2 c5 d5 exd5 Nh4 g6 Nc3 Bg7 O-O d6 Bg5 Qd7", |
||
508 | "c4 Nf6 d4 e6 Nf3 b6 Nc3? Bb7 a3 d5 cxd5 Nxd5 Qc2", |
||
509 | "c4 Nf6 d4 e6 Nf3 b6 e3 Bb7 Bd3 d5 cxd5 exd5 Nc3 Bd6", |
||
510 | "d4 Nf6 c4 e6 Nf3 b6 a3 Bb7", |
||
511 | |||
512 | // Nimzo indian |
||
513 | "d4 e6 c4 Nf6 Nc3 Bb4 Bg5? h6 Bh4 c5 d5 d6", |
||
514 | "c4 e6 d4 Nf6 Nc3 Bb4 a3? Bxc3+ bxc3 c5 f3? d5", |
||
515 | "d4 Nf6 c4 e6 Nc3 Bb4 Qc2? d5 a3 Bxc3+ Qxc3 Ne4? Qc2 O-O e3 b6 Bd3", |
||
516 | "d4 Nf6 c4 e6 Nc3 Bb4 Qc2? d5 a3 Bxc3+ Qxc3 O-O Bg5 dxc4 Qxc4 b6 Nf3 Ba6 Qa4 h6 Bh4", |
||
517 | "d4 Nf6 c4 e6 Nc3 Bb4 Qc2? O-O a3 Bxc3+ Qxc3 b6 Bg5 Bb7 e3 d6", |
||
518 | "d4 Nf6 c4 e6 Nc3 Bb4 Nf3 O-O Bg5 h6 Bh4 c5", |
||
519 | "d4 Nf6 c4 e6 Nc3 Bb4 Nf3 O-O e3 c5 Bd3 d5", |
||
520 | "d4 Nf6 c4 e6 Nc3 Bb4 Nf3 b6 e3 Bb7 Bd3 O-O O-O c5 Na4 d6 a3 Ba5 Rb1 Na6 Nd2 Qd7 Nc3", |
||
521 | "d4 Nf6 c4 e6 Nc3 Bb4 f3? d5 a3 Bxc3+ bxc3 c5 cxd5? exd5 e3 c4", |
||
522 | "d4 Nf6 c4 e6 Nc3 Bb4 e3 c5 Bd3 d5 Nf3 O-O O-O Nc6? cxd5 exd5 dxc5 Bxc5 b3 Bg4 Bb2", |
||
523 | "d4 Nf6 c4 e6 Nc3 Bb4 e3 c5 Bd3 O-O Ne2 d5 cxd5 cxd4 exd4 Nxd5 O-O Nc6", |
||
524 | "d4 Nf6 c4 e6 Nc3 Bb4 e3 O-O Bd3 d5 Nf3 c5 O-O dxc4 Bxc4 Nbd7 Qe2 b6 Rd1", |
||
525 | "c4 Nf6 Nc3? e6 d4", |
||
526 | |||
527 | // Benoni |
||
528 | "d4 Nf6 Nf3 e6 c4 c5? d5 exd5 cxd5 d6 Nc3 g6 e4 Bg7", |
||
529 | "d4 Nf6 Nf3 e6 c4 c5? d5 b5? dxe6 fxe6 cxb5 a6 e3 Be7 Nc3 O-O a4 Bb7", |
||
530 | "d4 Nf6 c4 c5? d5 e6 Nc3 exd5 cxd5 d6 e4 g6 f4? Bg7 Bb5 Nfd7 a4 O-O Nf3 Na6 O-O Nc7", |
||
531 | "d4 c5? d5 Nf6 c4 e6 Nc3 exd5 cxd5 d6 Nf3 g6 Bf4 a6 a4 Bg7 e4 O-O", |
||
532 | "c4 Nf6 d4 g6? Nc3 Bg7 g3? O-O Bg2 c5 d5 e6 Nf3 exd5 cxd5 d6 O-O", |
||
533 | "d4 c5? d5 Nf6 c4 e6 g3? exd5 cxd5 d6 Nc3 g6 Nf3 Bg7 Bg2 O-O", |
||
534 | |||
535 | // Reti's opening |
||
536 | "Nf3 d5 g3? g6 Bg2 Bg7 O-O? e5 d3 Ne7 Nbd2 O-O c4 c6", |
||
537 | "Nf3 d5 g3? g6 Bg2 Bg7 d4 Nf6 c4 c6", |
||
538 | "Nf3 d5 g3? g6 Bg2 Nf6 O-O Bg7 d4", |
||
539 | "Nf3 Nf6 g3? g6? c4 Bg7 Bg2 O-O O-O? c5 d4 d6? d5 Na6 Nc3 Nc7", |
||
540 | "Nf3 Nf6 g3? g6? c4 Bg7 Bg2 O-O O-O? c5 d4 cxd4 Nxd4 Nc6 Nc3 Nxd4 Qxd4 d6", |
||
541 | "Nf3 Nf6 g3? g6? c4 Bg7 Bg2 O-O d4 c6 O-O d5 cxd5 cxd5", |
||
542 | "Nf3 Nf6 g3? g6? c4 Bg7 Bg2 c6 Nc3 d5 cxd5 cxd5 d4", |
||
543 | "Nf3 Nf6 g3? d5 d4 c5 Bg2 Nc6 O-O", |
||
544 | "Nf3 Nf6 g3? d5 Bg2 c6 d4 Bf5 O-O g6", |
||
545 | "Nf3 Nf6 d4", |
||
546 | "Nf3 Nf6 c4 e6 d4 d5 Nc3 c6 e3 Nbd7 Bd3 dxc4 Bxc4 b5 Bd3 a6 e4 c5 d5 c4 Bc2 e5 O-O Bd6 Ne2 O-O", |
||
547 | "Nf3 d5 d4 Nf6 c4 e6 g3 dxc4 Bg2 Nc6 Qa4 Bb4 Bd2 Nd5 Bxb4 Nxb4 O-O Rb8", |
||
548 | "Nf3 c5 c4 Nf6 Nc3 e6 g3 Be7? Bg2 O-O O-O a6? d4 cxd4 Nxd4 Qc7", |
||
549 | "Nf3 c5 c4 Nf6 Nc3 e6 g3 b6 Bg2 Bb7 O-O Be7 d4 cxd4 Qxd4 d6", |
||
550 | "Nf3 Nf6 c4 e6 d4 d5 Nc3 c6 e3 Nbd7 Bd3 dxc4 Bxc4 b5 Bd3 Bb7 O-O", |
||
551 | "g3? g6 Bg2 Bg7 c4 Nf6 Nc3 O-O Nf3 d6? d4 Nbd7 O-O e5 e4", |
||
552 | "g3? g6 Bg2 Bg7 c4 Nf6 Nc3 O-O Nf3 c6 d4 d5 cxd5 cxd5 O-O Ne4 Nxe4 dxe4", |
||
553 | "g3? d5 Bg2? Nf6? Nf3 c6 O-O Bf5 d3 e6 Nbd2 h6 b3 Be7 Bb2 O-O", |
||
554 | "g3? d5 Bg2? e5 d3 Nf6 Nf3 Bd6", |
||
555 | "g3? d5 Nf3 Nf6 Bg2 e6 O-O Be7 d3 O-O Nbd2 c5 e4 Nc6", |
||
556 | "g3? Nf6 Bg2 d5 d3? c6? Nd2 e5 e4 Bd6 Ngf3 O-O O-O", |
||
557 | "g3? Nf6 Bg2 d5 d3? c5 Nf3 Nc6", |
||
558 | "g3? e5 Bg2? d5 d3 Nf6 Nf3 Nc6 O-O Be7 c4 O-O cxd5 Nxd5 Nc3 Be6", |
||
559 | "g3? e5 c4 Nf6 Bg2 c6 d4 exd4 Qxd4", |
||
560 | |||
561 | // Dutch |
||
562 | "d4 f5? g3 Nf6 Bg2 g6 Nf3 Bg7 O-O O-O c4 d6 Nc3 Qe8", |
||
563 | "c4 f5? d4 Nf6 Nc3 g6 Nf3 Bg7 e3 O-O Be2 d6 O-O Nc6", |
||
564 | "d4 f5? Nf3 Nf6 g3 g6 Bg2 Bg7 c4 O-O Nc3 d6 O-O Nc6 d5", |
||
565 | |||
566 | // Less usual openings |
||
567 | "Nc3? d5 e4 d4 Nce2 e5 Nf3 Bd6 Ng3 Ne7", |
||
568 | "Nc3? d5 d4 Nf6 Bg5 Nbd7 Nf3 h6 Bh4 c6 e3 e6 Bd3 Be7 O-O O-O", |
||
569 | "Nc3? d5 Nf3 Nf6 d4 e6 Bg5 Nbd7 a3 Be7 e3 h6 Bf4 Nh5 Be5", |
||
570 | "f4? d5 Nf3 Nf6 e3 g6 Be2 Bg7 O-O O-O d3? c5 Qe1 Nc6 Nc3 Re8", |
||
571 | "f4? d5 Nf3 g6 g3 Bg7 Bg2 Nf6 O-O O-O d3 c5 Nc3 d4 Ne4", |
||
572 | "f4? d5 Nf3 g6 e3 Bg7 Be2 Nf6", |
||
573 | "f4? d5 e3 Nf6 Nf3 g6 d4 Bg7 c4 c5 dxc5 O-O Nc3 Ne4", |
||
574 | "b3? e5 Bb2 Nc6 e3 Nf6 Bb5 Bd6", |
||
575 | "b3? e6 Bb2 Nf6 e3 c5 Nf3 Be7 d4 cxd4", |
||
576 | "e4 d6? d4 Nf6 Nc3 g6 Nf3 Bg7", |
||
577 | "e4 d6? d4 Nf6 Nc3 g6 f4? Bg7", |
||
578 | "d4 d6? e4 Nf6 Nc3 g6 Be3? Bg7 Qd2 c6", |
||
579 | "e4 d6? d4 Nf6 Nc3 Nbd7 f4 e5 Nf3", |
||
580 | "e4 d6? d4 g6 Nc3 Bg7 Nf3 Nf6 Be2", |
||
581 | "e4 d6? d4 g6 c4 Bg7", |
||
582 | "d4 g6? e4 Bg7 Nf3 d6 Nc3 Nf6 Be2 O-O O-O c6 h3 Qc7 Bf4 Nbd7 e5 dxe5 Nxe5 Nxe5 Bxe5 Qb6", |
||
583 | "d4 g6? c4 Bg7 Nc3 d6 e4 Nf6 Nf3 O-O Be2 e5", |
||
584 | "d4 g6? e4 Bg7 c4 d6 Nc3 Nc6? Be3 e5 d5 Nce7", |
||
585 | "d4 Nf6 c4 g6? g3? c6 Bg2 d5 cxd5 cxd5 Nf3 Bg7 Nc3 O-O O-O Ne4 Ne5 Bf5", |
||
586 | "d4 e6 g3? d5 Bg2 c5", |
||
587 | "e4 e5 Bc4? Nf6 d3 c6 Nf3 d5 Bb3 Bb4+ Bd2 Bxd2+ Qxd2", |
||
588 | "d4 e6 Nf3 Nf6 c4 d5 Bg5 Be7 Nc3 h6 Bh4 O-O", |
||
589 | "e4 e5 Nc3? Nf6 Bc4 Nc6 Nf3 Bc5 d3 O-O", |
||
590 | |||
591 | nullptr |
||
592 | }; |