diff --git a/projectexample/openingtrainer/chessopeningtrainer/__init__.py b/projectexample/openingtrainer/chessopeningtrainer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/projectexample/openingtrainer/chessopeningtrainer/__pycache__/__init__.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 00000000..bbe3f7f7 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/__init__.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/__pycache__/admin.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/admin.cpython-311.pyc new file mode 100644 index 00000000..1425038d Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/admin.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/__pycache__/apps.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/apps.cpython-311.pyc new file mode 100644 index 00000000..e8ae1cb0 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/apps.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/__pycache__/models.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/models.cpython-311.pyc new file mode 100644 index 00000000..a8c17936 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/models.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/__pycache__/views.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/views.cpython-311.pyc new file mode 100644 index 00000000..996fa423 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/__pycache__/views.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/admin.py b/projectexample/openingtrainer/chessopeningtrainer/admin.py new file mode 100644 index 00000000..3ee909af --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from chessopeningtrainer.models import Opening + +admin.site.register(Opening) + +# Register your models here. diff --git a/projectexample/openingtrainer/chessopeningtrainer/apps.py b/projectexample/openingtrainer/chessopeningtrainer/apps.py new file mode 100644 index 00000000..68416832 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + +class ChessopeningtrainerConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'chessopeningtrainer' diff --git a/projectexample/openingtrainer/chessopeningtrainer/management/commands/__pycache__/populate_db.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/management/commands/__pycache__/populate_db.cpython-311.pyc new file mode 100644 index 00000000..27710cb7 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/management/commands/__pycache__/populate_db.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/management/commands/populate_db.py b/projectexample/openingtrainer/chessopeningtrainer/management/commands/populate_db.py new file mode 100644 index 00000000..a99255e8 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/management/commands/populate_db.py @@ -0,0 +1,23 @@ +import os +import csv +from django.core.management.base import BaseCommand +from django.conf import settings +from chessopeningtrainer.models import Opening + +class Command(BaseCommand): + help = 'Populates the database with opening data' + + def handle(self, *args, **options): + opening_files = ['a.tsv', 'b.tsv', 'c.tsv', 'd.tsv', 'e.tsv'] + + for file in opening_files: + file_path = os.path.join(settings.BASE_DIR, 'chessopeningtrainer', 'openings', file) + with open(file_path) as tsvfile: + reader = csv.reader(tsvfile, delimiter='\t') + for row in reader: + opening = Opening() + opening.eco = row[0] + opening.name = row[1] + opening.pgn = row[2] + opening.save() + self.stdout.write(self.style.SUCCESS('Successfully populated database')) \ No newline at end of file diff --git a/projectexample/openingtrainer/chessopeningtrainer/migrations/0001_initial.py b/projectexample/openingtrainer/chessopeningtrainer/migrations/0001_initial.py new file mode 100644 index 00000000..c6b4efed --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2 on 2023-04-24 15:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Opening', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('pgn', models.TextField()), + ], + ), + ] diff --git a/projectexample/openingtrainer/chessopeningtrainer/migrations/0002_opening_eco.py b/projectexample/openingtrainer/chessopeningtrainer/migrations/0002_opening_eco.py new file mode 100644 index 00000000..11c85304 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/migrations/0002_opening_eco.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2 on 2023-04-24 23:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('chessopeningtrainer', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='opening', + name='eco', + field=models.CharField(default='', max_length=255), + ), + ] diff --git a/projectexample/openingtrainer/chessopeningtrainer/migrations/__init__.py b/projectexample/openingtrainer/chessopeningtrainer/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/0001_initial.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 00000000..3f5d00ee Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/0002_opening_eco.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/0002_opening_eco.cpython-311.pyc new file mode 100644 index 00000000..103e6c8d Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/0002_opening_eco.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/__init__.cpython-311.pyc b/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 00000000..0dc457e3 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/models.py b/projectexample/openingtrainer/chessopeningtrainer/models.py new file mode 100644 index 00000000..b5adc1e1 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/models.py @@ -0,0 +1,8 @@ +from django.db import models + +class Opening(models.Model): + eco = models.CharField(max_length=255, default='') + name = models.CharField(max_length=255) + pgn = models.TextField() + +# Create your models here. diff --git a/projectexample/openingtrainer/chessopeningtrainer/openings/a.tsv b/projectexample/openingtrainer/chessopeningtrainer/openings/a.tsv new file mode 100644 index 00000000..ce80bd14 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/openings/a.tsv @@ -0,0 +1,705 @@ +eco name pgn +A00 Amar Gambit 1. Nh3 d5 2. g3 e5 3. f4 Bxh3 4. Bxh3 exf4 +A00 Amar Opening 1. Nh3 +A00 Amar Opening: Gent Gambit 1. Nh3 d5 2. g3 e5 3. f4 Bxh3 4. Bxh3 exf4 5. O-O fxg3 6. hxg3 +A00 Amar Opening: Paris Gambit 1. Nh3 d5 2. g3 e5 3. f4 +A00 Amsterdam Attack 1. e3 e5 2. c4 d6 3. Nc3 Nc6 4. b3 Nf6 +A00 Anderssen's Opening 1. a3 +A00 Anderssen's Opening: Polish Gambit 1. a3 a5 2. b4 +A00 Barnes Opening 1. f3 +A00 Barnes Opening: Fool's Mate 1. f3 e5 2. g4 Qh4# +A00 Barnes Opening: Gedult Gambit 1. f3 d5 2. e4 g6 3. d4 dxe4 4. c3 +A00 Barnes Opening: Gedult Gambit 1. f3 f5 2. e4 fxe4 3. Nc3 +A00 Barnes Opening: Hammerschlag 1. f3 e5 2. Kf2 +A00 Clemenz Opening 1. h3 +A00 Clemenz Opening: Spike Lee Gambit 1. h3 h5 2. g4 +A00 Crab Opening 1. a4 e5 2. h4 +A00 Creepy Crawly Formation: Classical Defense 1. h3 d5 2. a3 e5 +A00 Formation: Hippopotamus Attack 1. a3 e5 2. b3 d5 3. c3 Nf6 4. d3 Nc6 5. e3 Bd6 6. f3 O-O 7. g3 +A00 Formation: Shy Attack 1. a3 e5 2. g3 d5 3. Bg2 Nf6 4. d3 Nc6 5. Nd2 Bd6 6. e3 O-O 7. h3 +A00 Global Opening 1. h3 e5 2. a3 +A00 Grob Opening 1. g4 +A00 Grob Opening: Alessi Gambit 1. g4 f5 +A00 Grob Opening: Double Grob 1. g4 g5 +A00 Grob Opening: Double Grob, Coca-Cola Gambit 1. g4 g5 2. f4 +A00 Grob Opening: Grob Gambit 1. g4 d5 2. Bg2 +A00 Grob Opening: Grob Gambit Declined 1. g4 d5 2. Bg2 c6 +A00 Grob Opening: Grob Gambit, Basman Gambit 1. g4 d5 2. Bg2 h5 3. gxh5 +A00 Grob Opening: Grob Gambit, Fritz Gambit 1. g4 d5 2. Bg2 Bxg4 3. c4 +A00 Grob Opening: Grob Gambit, Fritz Gambit, Romford Countergambit 1. g4 d5 2. Bg2 Bxg4 3. c4 d4 4. Bxb7 Nd7 5. Bxa8 Qxa8 +A00 Grob Opening: Grob Gambit, Keres Gambit 1. g4 d5 2. Bg2 e5 3. d4 exd4 4. c3 +A00 Grob Opening: Grob Gambit, Richter-Grob Gambit 1. g4 d5 2. Bg2 c6 3. c4 dxc4 4. b3 +A00 Grob Opening: Keene Defense 1. g4 d5 2. h3 e5 3. Bg2 c6 +A00 Grob Opening: Keene Defense, Main Line 1. g4 d5 2. h3 e5 3. Bg2 c6 4. d4 e4 5. c4 Bd6 6. Nc3 Ne7 +A00 Grob Opening: London Defense 1. g4 e5 2. h3 Nc6 +A00 Grob Opening: Romford Countergambit 1. g4 d5 2. Bg2 Bxg4 3. c4 d4 +A00 Grob Opening: Spike Attack 1. g4 d5 2. Bg2 c6 3. g5 +A00 Grob Opening: Spike, Hurst Attack 1. g4 e5 2. Bg2 d5 3. c4 +A00 Grob Opening: Zilbermints Gambit 1. g4 d5 2. e4 dxe4 3. Nc3 +A00 Grob Opening: Zilbermints Gambit, Schiller Defense 1. g4 d5 2. e4 dxe4 3. Nc3 h5 +A00 Grob Opening: Zilbermints Gambit, Zilbermints-Hartlaub Gambit 1. g4 d5 2. e4 dxe4 3. Nc3 e5 4. d3 +A00 Hungarian Opening 1. g3 +A00 Hungarian Opening: Asten Gambit 1. g3 Nc6 2. Nc3 d5 3. d4 e5 4. dxe5 d4 5. Ne4 f5 +A00 Hungarian Opening: Burk Gambit 1. g3 e5 2. a3 d5 3. Nf3 e4 4. Nh4 Be7 5. d3 +A00 Hungarian Opening: Bücker Gambit 1. g3 d5 2. Bg2 e5 3. b4 +A00 Hungarian Opening: Catalan Formation 1. g3 d5 2. Bg2 e6 +A00 Hungarian Opening: Dutch Defense 1. g3 f5 +A00 Hungarian Opening: Indian Defense 1. g3 Nf6 +A00 Hungarian Opening: Myers Defense 1. g3 g5 +A00 Hungarian Opening: Pachman Gambit 1. g3 f5 2. e4 fxe4 3. Qh5+ g6 +A00 Hungarian Opening: Paris Gambit 1. g3 e5 2. Nh3 d5 3. f4 Bxh3 4. Bxh3 exf4 5. O-O +A00 Hungarian Opening: Reversed Alekhine 1. g3 e5 2. Nf3 +A00 Hungarian Opening: Reversed Brooklyn Defense, Brooklyn Benko Gambit 1. g3 e5 2. Nf3 e4 3. Ng1 Nf6 4. b4 +A00 Hungarian Opening: Reversed Modern Defense 1. g3 d5 2. Bg2 c5 +A00 Hungarian Opening: Reversed Norwegian Defense 1. g3 e5 2. Nf3 e4 3. Nh4 +A00 Hungarian Opening: Sicilian Invitation 1. g3 c5 +A00 Hungarian Opening: Slav Formation 1. g3 d5 2. Bg2 c6 +A00 Hungarian Opening: Symmetrical Variation 1. g3 g6 +A00 Hungarian Opening: Van Kuijk Gambit 1. g3 h5 2. Nf3 h4 +A00 Hungarian Opening: Winterberg Gambit 1. g3 d5 2. Bg2 e5 3. c4 dxc4 4. b3 +A00 Kádas Opening 1. h4 +A00 Kádas Opening: Beginner's Trap 1. h4 d5 2. Rh3 +A00 Kádas Opening: Kádas Gambit 1. h4 c5 2. b4 +A00 Kádas Opening: Kádas Gambit 1. h4 d5 2. d4 c5 3. Nf3 cxd4 4. c3 +A00 Kádas Opening: Kádas Gambit 1. h4 e5 2. d4 exd4 3. c3 +A00 Kádas Opening: Myers Variation 1. h4 d5 2. d4 c5 3. e4 +A00 Kádas Opening: Schneider Gambit 1. h4 g5 +A00 Kádas Opening: Steinbok Gambit 1. h4 f5 2. e4 fxe4 3. d3 +A00 Lasker Simul Special 1. g3 h5 +A00 Mieses Opening 1. d3 +A00 Mieses Opening: Myers Spike Attack 1. d3 g6 2. g4 +A00 Mieses Opening: Reversed Rat 1. d3 e5 +A00 Polish Opening 1. b4 +A00 Polish Opening: Baltic Defense 1. b4 d5 2. Bb2 Bf5 +A00 Polish Opening: Birmingham Gambit 1. b4 c5 +A00 Polish Opening: Bugayev Advance Variation 1. b4 e5 2. Bb2 f6 3. b5 +A00 Polish Opening: Bugayev Attack 1. b4 e5 2. a3 +A00 Polish Opening: Czech Defense 1. b4 e5 2. Bb2 d6 +A00 Polish Opening: Dutch Defense 1. b4 f5 +A00 Polish Opening: German Defense 1. b4 d5 2. Bb2 Qd6 +A00 Polish Opening: Grigorian Variation 1. b4 Nc6 +A00 Polish Opening: Karniewski Variation 1. b4 Nh6 +A00 Polish Opening: King's Indian Variation 1. b4 Nf6 2. Bb2 g6 +A00 Polish Opening: King's Indian Variation, Schiffler Attack 1. b4 Nf6 2. Bb2 g6 3. e4 +A00 Polish Opening: King's Indian Variation, Sokolsky Attack 1. b4 Nf6 2. Bb2 g6 3. c4 Bg7 4. e3 d6 5. Nf3 O-O 6. d4 +A00 Polish Opening: Myers Variation 1. b4 d5 2. Bb2 c6 3. a4 +A00 Polish Opening: Outflank Variation 1. b4 c6 +A00 Polish Opening: Queen's Indian Variation 1. b4 e6 2. Bb2 Nf6 3. b5 b6 +A00 Polish Opening: Queenside Defense 1. b4 e6 2. Bb2 Nf6 3. b5 a6 +A00 Polish Opening: Rooks Swap Line 1. b4 e6 2. Bb2 Nf6 3. b5 a6 4. a4 axb5 5. axb5 Rxa1 6. Bxa1 +A00 Polish Opening: Schiffler-Sokolsky Variation 1. b4 e6 2. Bb2 Nf6 3. b5 d5 4. e3 +A00 Polish Opening: Schuehler Gambit 1. b4 c6 2. Bb2 a5 3. b5 cxb5 4. e4 +A00 Polish Opening: Symmetrical Variation 1. b4 b5 +A00 Polish Opening: Tartakower Gambit 1. b4 e5 2. Bb2 f6 3. e4 +A00 Polish Opening: Wolferts Gambit 1. b4 e5 2. Bb2 c5 +A00 Saragossa Opening 1. c3 +A00 Sodium Attack 1. Na3 +A00 Sodium Attack: Chenoboskion Variation 1. Na3 g6 2. g4 +A00 Sodium Attack: Durkin Gambit 1. Na3 e5 2. Nc4 Nc6 3. e4 f5 +A00 Valencia Opening 1. d3 e5 2. Nd2 +A00 Van Geet Opening 1. Nc3 +A00 Van Geet Opening: Battambang Variation 1. a3 e5 2. Nc3 +A00 Van Geet Opening: Billockus-Johansen Gambit 1. Nc3 e5 2. Nf3 Bc5 +A00 Van Geet Opening: Caro-Kann Variation, St. Patrick's Attack 1. Nc3 d5 2. e4 c6 3. h3 +A00 Van Geet Opening: Damhaug Gambit 1. Nc3 d5 2. f4 e5 +A00 Van Geet Opening: Dougherty Gambit 1. Nc3 d5 2. e4 dxe4 3. f3 +A00 Van Geet Opening: Dunst-Perrenet Gambit 1. Nc3 d5 2. e4 dxe4 3. d3 +A00 Van Geet Opening: Düsseldorf Gambit 1. Nc3 c5 2. b4 +A00 Van Geet Opening: Gladbacher Gambit 1. Nc3 e5 2. b3 d5 3. e4 dxe4 4. d3 +A00 Van Geet Opening: Hector Gambit 1. Nc3 d5 2. e4 dxe4 3. Bc4 +A00 Van Geet Opening: Hergert Gambit 1. Nc3 d6 2. f4 e5 3. fxe5 Nc6 +A00 Van Geet Opening: Hulsemann Gambit 1. Nc3 e5 2. e3 d5 3. Qh5 Be6 +A00 Van Geet Opening: Jendrossek Gambit 1. Nc3 d5 2. f4 d4 3. Ne4 f5 4. Nf2 Nf6 5. Nf3 c5 6. b4 +A00 Van Geet Opening: Kluever Gambit 1. Nc3 f5 2. e4 fxe4 3. d3 +A00 Van Geet Opening: Laroche Gambit 1. Nc3 b5 +A00 Van Geet Opening: Liebig Gambit 1. Nc3 e5 2. e3 d5 3. Qh5 Nf6 +A00 Van Geet Opening: Melleby Gambit 1. Nc3 d5 2. f4 d4 3. Ne4 c5 +A00 Van Geet Opening: Myers Attack 1. Nc3 g6 2. h4 +A00 Van Geet Opening: Napoleon Attack 1. Nc3 e5 2. Nf3 Nc6 3. d4 +A00 Van Geet Opening: Novosibirsk Variation 1. Nc3 c5 2. d4 cxd4 3. Qxd4 Nc6 4. Qh4 +A00 Van Geet Opening: Nowokunski Gambit 1. Nc3 e5 2. f4 exf4 3. e4 +A00 Van Geet Opening: Pfeiffer Gambit 1. Nc3 d5 2. f4 d4 3. Ne4 e5 +A00 Van Geet Opening: Pfeiffer Gambit, Sleipnir Countergambit 1. Nc3 d5 2. f4 d4 3. Ne4 e5 4. Nf3 +A00 Van Geet Opening: Reversed Nimzowitsch 1. Nc3 e5 +A00 Van Geet Opening: Reversed Scandinavian 1. Nc3 e5 2. d4 exd4 3. Qxd4 Nc6 4. Qa4 +A00 Van Geet Opening: Sicilian Two Knights 1. Nc3 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 +A00 Van Geet Opening: Sleipnir Gambit 1. Nc3 d5 2. e3 e5 3. d4 Bb4 +A00 Van Geet Opening: Twyble Attack 1. Nc3 c5 2. Rb1 +A00 Van Geet Opening: Tübingen Gambit 1. Nc3 Nf6 2. g4 +A00 Van Geet Opening: Venezolana Variation 1. Nc3 d5 2. d3 Nf6 3. g3 +A00 Van Geet Opening: Warsteiner Gambit 1. Nc3 d5 2. f4 g5 +A00 Van't Kruijs Opening 1. e3 +A00 Van't Kruijs Opening: Bouncing Bishop Variation 1. e3 e5 2. Bc4 b5 3. Bb3 +A00 Van't Kruijs Opening: Keoni-Hiva Gambit, Akahi Variation 1. e3 e5 2. Nc3 Nf6 3. f4 exf4 4. Nf3 +A00 Van't Kruijs Opening: Keoni-Hiva Gambit, Alua Variation 1. e3 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 +A00 Van't Kruijs Opening: Keoni-Hiva Gambit, Ekolu Variation 1. e3 e5 2. Nc3 d5 3. f4 exf4 4. Nf3 +A00 Venezolana Opening 1. d3 c5 2. Nc3 Nc6 3. g3 +A00 Ware Opening 1. a4 +A00 Ware Opening: Meadow Hay Trap 1. a4 e5 2. Ra3 +A00 Ware Opening: Ware Gambit 1. a4 e5 2. a5 d5 3. e3 f5 4. a6 +A00 Ware Opening: Wing Gambit 1. a4 b5 2. axb5 Bb7 +A01 Nimzo-Larsen Attack 1. b3 +A01 Nimzo-Larsen Attack: Classical Variation 1. b3 d5 +A01 Nimzo-Larsen Attack: Dutch Variation 1. b3 f5 +A01 Nimzo-Larsen Attack: English Variation 1. b3 c5 +A01 Nimzo-Larsen Attack: Graz Attack 1. b3 d5 2. Ba3 +A01 Nimzo-Larsen Attack: Indian Variation 1. b3 Nf6 +A01 Nimzo-Larsen Attack: Modern Variation 1. b3 e5 +A01 Nimzo-Larsen Attack: Modern Variation 1. b3 e5 2. Bb2 Nc6 +A01 Nimzo-Larsen Attack: Modern Variation 1. b3 e5 2. Bb2 Nc6 3. e3 +A01 Nimzo-Larsen Attack: Pachman Gambit 1. b3 e5 2. Bb2 Nc6 3. f4 +A01 Nimzo-Larsen Attack: Polish Variation 1. b3 b5 +A01 Nimzo-Larsen Attack: Ringelbach Gambit 1. b3 f5 2. Bb2 e6 3. e4 +A01 Nimzo-Larsen Attack: Spike Variation 1. b3 Nf6 2. Bb2 g6 3. g4 +A01 Nimzo-Larsen Attack: Symmetrical Variation 1. b3 b6 +A02 Bird Opening 1. f4 +A02 Bird Opening 1. f4 Nf6 +A02 Bird Opening: Batavo-Polish Attack 1. f4 Nf6 2. Nf3 g6 3. b4 +A02 Bird Opening: Double Duck Formation 1. f4 f5 2. d4 d5 +A02 Bird Opening: From's Gambit 1. f4 e5 +A02 Bird Opening: From's Gambit, Bahr Gambit 1. f4 e5 2. Nc3 +A02 Bird Opening: From's Gambit, Langheld Gambit 1. f4 e5 2. fxe5 d6 3. exd6 Nf6 +A02 Bird Opening: From's Gambit, Lasker Variation 1. f4 e5 2. fxe5 d6 3. exd6 Bxd6 4. Nf3 g5 +A02 Bird Opening: From's Gambit, Lipke Variation 1. f4 e5 2. fxe5 d6 3. exd6 Bxd6 4. Nf3 Nh6 5. d4 +A02 Bird Opening: Hobbs Gambit 1. f4 g5 +A02 Bird Opening: Hobbs-Zilbermints Gambit 1. f4 h6 2. Nf3 g5 +A02 Bird Opening: Horsefly Defense 1. f4 Nh6 +A02 Bird Opening: Lasker Gambit 1. f4 e5 2. fxe5 f6 +A02 Bird Opening: Mujannah 1. f4 Nf6 2. c4 +A02 Bird Opening: Myers Defense 1. f4 b5 +A02 Bird Opening: Platz Gambit 1. f4 e5 2. fxe5 Ne7 +A02 Bird Opening: Schlechter Gambit 1. f4 e5 2. fxe5 Nc6 +A02 Bird Opening: Siegener Gambit 1. f4 e5 2. d4 exd4 3. Nf3 c5 4. c3 +A02 Bird Opening: Swiss Gambit 1. f4 f5 2. e4 fxe4 3. Nc3 Nf6 4. g4 +A02 Bird Opening: Wagner-Zwitersch Gambit 1. f4 f5 2. e4 +A03 Bird Opening: Dutch Variation 1. f4 d5 +A03 Bird Opening: Dutch Variation, Dudweiler Gambit 1. f4 d5 2. g4 +A03 Bird Opening: Lasker Variation 1. f4 d5 2. Nf3 Nf6 3. e3 c5 +A03 Bird Opening: Sturm Gambit 1. f4 d5 2. c4 +A03 Bird Opening: Thomas Gambit 1. f4 d5 2. b3 Nf6 3. Bb2 d4 4. Nf3 c5 5. e3 +A03 Bird Opening: Williams Gambit 1. f4 d5 2. e4 +A03 Bird Opening: Williams Gambit 1. f4 d5 2. e4 dxe4 3. Nc3 Nf6 4. Qe2 +A03 Bird Opening: Williams-Zilbermints Gambit 1. f4 d5 2. e4 dxe4 3. Nc3 Nf6 4. Nge2 +A04 Colle System: Rhamphorhynchus Variation 1. Nf3 c5 2. e3 g6 3. d4 Bg7 4. dxc5 Qa5+ +A04 Modern Defense: Semi-Averbakh Variation, Polish Variation 1. Nf3 c5 2. c4 g6 3. d4 Bg7 4. e4 Qb6 +A04 Modern Defense: Semi-Averbakh Variation, Pterodactyl Variation 1. Nf3 c5 2. c4 g6 3. d4 Bg7 4. e4 Qa5+ +A04 Modern Defense: Semi-Averbakh Variation, Pterodactyl Variation Accepted 1. Nf3 g6 2. d4 Bg7 3. e4 d6 4. c4 c5 5. dxc5 Qa5+ +A04 Zukertort Defense: Kingside Variation 1. Nf3 Nh6 2. d4 g6 +A04 Zukertort Defense: Sicilian Knight Variation 1. Nf3 Na6 2. e4 c5 +A04 Zukertort Opening 1. Nf3 +A04 Zukertort Opening: Arctic Defense 1. Nf3 f6 +A04 Zukertort Opening: Arctic Defense, Drunken Knight Variation 1. Nf3 f6 2. e4 Nh6 3. d4 Nf7 +A04 Zukertort Opening: Basman Defense 1. Nf3 h6 +A04 Zukertort Opening: Black Mustang Defense 1. Nf3 Nc6 +A04 Zukertort Opening: Drunken Cavalry Variation 1. Nf3 Na6 2. e4 Nh6 +A04 Zukertort Opening: Dutch Variation 1. Nf3 f5 +A04 Zukertort Opening: Herrstrom Gambit 1. Nf3 g5 +A04 Zukertort Opening: Kingside Fianchetto 1. Nf3 g6 +A04 Zukertort Opening: Lisitsyn Gambit 1. Nf3 f5 2. e4 +A04 Zukertort Opening: Lisitsyn Gambit Deferred 1. Nf3 f5 2. d3 Nf6 3. e4 +A04 Zukertort Opening: Pirc Invitation 1. Nf3 d6 +A04 Zukertort Opening: Polish Defense 1. Nf3 b5 +A04 Zukertort Opening: Queen's Gambit Invitation 1. Nf3 e6 +A04 Zukertort Opening: Queenside Fianchetto Variation 1. Nf3 b6 +A04 Zukertort Opening: Ross Gambit 1. Nf3 e5 +A04 Zukertort Opening: Shabalov Gambit 1. Nf3 e6 2. c4 a6 3. Nc3 c5 4. g3 b5 +A04 Zukertort Opening: Sicilian Invitation 1. Nf3 c5 +A04 Zukertort Opening: Slav Invitation 1. Nf3 c6 +A04 Zukertort Opening: Speelsmet Gambit 1. Nf3 c5 2. d4 cxd4 3. e3 +A04 Zukertort Opening: St. George Defense 1. Nf3 a6 +A04 Zukertort Opening: The Walrus 1. Nf3 e5 2. Nxe5 Nc6 3. Nxc6 dxc6 +A04 Zukertort Opening: Vos Gambit 1. Nf3 d6 2. d4 e5 +A04 Zukertort Opening: Wade Defense 1. Nf3 d6 2. e4 Bg4 +A04 Zukertort Opening: Ware Defense 1. Nf3 a5 +A05 King's Indian Attack 1. Nf3 Nf6 2. g3 d5 +A05 King's Indian Attack: Smyslov Variation 1. Nf3 Nf6 2. g3 g6 3. b4 +A05 King's Indian Attack: Spassky Variation 1. Nf3 Nf6 2. g3 b5 +A05 King's Indian Attack: Symmetrical Defense 1. Nf3 Nf6 2. g3 g6 +A05 King's Indian Attack: Wahls Defense 1. Nf3 Nf6 2. g3 g6 3. Bg2 Bg7 4. O-O O-O 5. d3 d5 +A05 Polish Opening: Zukertort System 1. Nf3 Nf6 2. b4 +A05 Zukertort Opening 1. Nf3 Nf6 +A05 Zukertort Opening 1. Nf3 Nf6 2. Nc3 Nc6 +A05 Zukertort Opening: Double Fianchetto Attack 1. Nf3 Nf6 2. g3 g6 3. b3 Bg7 4. Bb2 O-O 5. Bg2 d6 6. O-O +A05 Zukertort Opening: Lemberger Gambit 1. Nf3 Nf6 2. e4 +A05 Zukertort Opening: Myers Polish Attack 1. Nf3 Nf6 2. a4 g6 3. b4 +A05 Zukertort Opening: Nimzo-Larsen Variation 1. Nf3 Nf6 2. b3 +A05 Zukertort Opening: Quiet System 1. Nf3 Nf6 2. e3 +A06 Nimzo-Larsen Attack: Classical Variation 1. Nf3 d5 2. b3 +A06 Nimzo-Larsen Attack: Norfolk Gambit 1. Nf3 d5 2. b3 c5 3. e4 +A06 Nimzo-Larsen Attack: Norfolk Gambit 1. Nf3 d5 2. b3 Nf6 3. Bb2 c5 4. e4 +A06 Zukertort Opening 1. Nf3 d5 +A06 Zukertort Opening: Ampel Variation 1. Nf3 d5 2. Rg1 +A06 Zukertort Opening: Old Indian Attack 1. Nf3 d5 2. d3 +A06 Zukertort Opening: Pachman Gambit 1. Nf3 d5 2. e3 c5 3. c4 dxc4 4. b3 +A06 Zukertort Opening: Regina-Nu Gambit 1. Nf3 d5 2. b3 c5 3. c4 dxc4 4. Nc3 +A06 Zukertort Opening: Reversed Mexican Defense 1. Nf3 d5 2. Nc3 +A06 Zukertort Opening: Santasiere's Folly 1. b4 d5 2. Nf3 +A06 Zukertort Opening: Tennison Gambit 1. e4 d5 2. Nf3 +A06 Zukertort Opening: The Potato 1. Nf3 d5 2. a4 +A07 Hungarian Opening: Wiedenhagen-Beta Gambit 1. g3 d5 2. Nf3 g5 +A07 King's Indian Attack 1. Nf3 d5 2. g3 +A07 King's Indian Attack: Double Fianchetto 1. Nf3 d5 2. g3 g6 +A07 King's Indian Attack: Keres Variation 1. Nf3 d5 2. g3 Bg4 +A07 King's Indian Attack: Keres Variation 1. Nf3 d5 2. g3 Bg4 3. Bg2 Nd7 +A07 King's Indian Attack: Omega-Delta Gambit 1. Nf3 d5 2. g3 e5 +A07 King's Indian Attack: Pachman System 1. Nf3 d5 2. g3 g6 3. Bg2 Bg7 4. O-O e5 5. d3 Ne7 +A07 King's Indian Attack: Sicilian Variation 1. Nf3 d5 2. g3 c5 +A07 King's Indian Attack: Yugoslav Variation 1. Nf3 Nf6 2. g3 d5 3. Bg2 c6 4. O-O Bg4 +A08 King's Indian Attack: French Variation 1. Nf3 d5 2. g3 c5 3. Bg2 Nc6 +A08 King's Indian Attack: Sicilian Variation 1. e4 e6 2. d3 d5 3. Nd2 Nf6 4. Ngf3 c5 5. g3 Nc6 6. Bg2 Be7 7. O-O O-O 8. Re1 +A08 King's Indian Attack: Sicilian Variation 1. Nf3 d5 2. g3 c5 3. Bg2 +A08 Zukertort Opening: Grünfeld Reversed 1. Nf3 d5 2. g3 c5 3. Bg2 Nc6 4. d4 e6 5. O-O +A09 Réti Opening 1. Nf3 d5 2. c4 +A09 Réti Opening: Advance Variation 1. Nf3 d5 2. c4 d4 +A09 Réti Opening: Advance Variation, Michel Gambit 1. Nf3 d5 2. c4 d4 3. b4 c5 +A09 Réti Opening: Penguin Variation 1. Nf3 d5 2. c4 d4 3. Rg1 +A09 Réti Opening: Reversed Blumenfeld Gambit 1. Nf3 d5 2. c4 d4 3. e3 c5 4. b4 +A09 Réti Opening: Réti Accepted 1. Nf3 d5 2. c4 dxc4 +A09 Réti Opening: Réti Gambit, Keres Variation 1. Nf3 d5 2. c4 dxc4 3. e3 Be6 +A09 Réti Opening: Zilbermints Gambit 1. Nf3 d5 2. c4 b5 +A10 English Opening 1. c4 +A10 English Opening: Achilles-Omega Gambit 1. c4 Nf6 2. e4 +A10 English Opening: Adorjan Defense 1. c4 g6 2. e4 e5 +A10 English Opening: Anglo-Dutch Defense 1. c4 f5 +A10 English Opening: Anglo-Dutch Defense, Hickmann Gambit 1. c4 f5 2. e4 +A10 English Opening: Anglo-Dutch Variation, Chabanon Gambit 1. c4 f5 2. Nf3 d6 3. e4 +A10 English Opening: Anglo-Dutch Variation, Ferenc Gambit 1. c4 f5 2. Nc3 Nf6 3. e4 +A10 English Opening: Anglo-Lithuanian Variation 1. c4 Nc6 +A10 English Opening: Anglo-Scandinavian Defense 1. c4 d5 +A10 English Opening: Anglo-Scandinavian Defense, Löhn Gambit 1. c4 d5 2. cxd5 e6 +A10 English Opening: Anglo-Scandinavian Defense, Malvinas Variation 1. c4 d5 2. cxd5 Qxd5 3. Nc3 Qa5 +A10 English Opening: Anglo-Scandinavian Defense, Schulz Gambit 1. c4 d5 2. cxd5 Nf6 +A10 English Opening: Great Snake Variation 1. c4 g6 +A10 English Opening: Jaenisch Gambit 1. c4 b5 +A10 English Opening: King's English Variation, Botvinnik System, Prickly Pawn Pass System 1. c4 g6 2. Nc3 Bg7 3. g3 Nf6 4. Bg2 O-O 5. e4 d6 6. Nge2 e5 7. O-O c6 8. d3 a6 +A10 English Opening: Myers Defense 1. c4 g5 +A10 English Opening: Myers Gambit 1. c4 g5 2. d4 Bg7 +A10 English Opening: Porcupine Variation 1. c4 f5 2. Nc3 Nf6 3. e4 fxe4 4. g4 +A10 English Opening: Wade Gambit 1. c4 f5 2. g4 +A10 English Opening: Zilbermints Gambit 1. c4 g5 2. d4 e5 +A11 English Opening: Caro-Kann Defensive System 1. c4 c6 +A12 Réti Opening: Anglo-Slav Variation, Bled Variation 1. Nf3 d5 2. b3 Nf6 3. Bb2 g6 4. c4 c6 +A12 Réti Opening: Anglo-Slav Variation, Bogoljubov Variation 1. Nf3 d5 2. c4 c6 3. b3 +A12 Réti Opening: Anglo-Slav Variation, Bogoljubov Variation 1. Nf3 d5 2. c4 c6 3. b3 Bg4 +A12 Réti Opening: Anglo-Slav Variation, Bogoljubov Variation 1. Nf3 Nf6 2. c4 c6 3. b3 d5 4. Bb2 +A12 Réti Opening: Anglo-Slav Variation, Capablanca Variation 1. c4 Nf6 2. Nf3 c6 3. b3 d5 4. Bb2 Bg4 +A12 Réti Opening: Anglo-Slav Variation, London Defensive System 1. c4 Nf6 2. g3 c6 3. Nf3 d5 4. b3 Bf5 +A12 Réti Opening: Anglo-Slav Variation, New York System 1. Nf3 Nf6 2. c4 c6 3. b3 d5 4. Bb2 Bf5 +A12 Réti Opening: Anglo-Slav Variation, Torre System 1. c4 Nf6 2. g3 c6 3. Nf3 d5 4. b3 Bg4 +A13 English Opening: Agincourt Defense 1. c4 e6 +A13 English Opening: Agincourt Defense 1. c4 e6 2. Nf3 +A13 English Opening: Agincourt Defense 1. c4 e6 2. Nf3 d5 +A13 English Opening: Agincourt Defense, Bogoljubov Defense 1. Nf3 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Bd6 +A13 English Opening: Agincourt Defense, Catalan Defense 1. Nf3 d5 2. c4 e6 3. g3 b6 4. Bg2 Bb7 5. O-O +A13 English Opening: Agincourt Defense, Catalan Defense 1. Nf3 d5 2. c4 e6 3. g3 c5 +A13 English Opening: Agincourt Defense, Catalan Defense Accepted 1. Nf3 Nf6 2. c4 e6 3. g3 d5 4. Bg2 dxc4 +A13 English Opening: Agincourt Defense, Catalan Defense, Semi-Slav Defense 1. Nf3 Nf6 2. c4 e6 3. g3 d5 4. Bg2 c6 +A13 English Opening: Agincourt Defense, Kurajica Defense 1. Nf3 d5 2. c4 e6 3. g3 c6 +A13 English Opening: Agincourt Defense, Tarrasch Defense 1. Nf3 Nf6 2. c4 e6 3. g3 d5 4. b3 c5 5. Bg2 Nc6 6. O-O Be7 +A13 English Opening: Agincourt Defense, Wimpy System 1. Nf3 Nf6 2. c4 e6 3. b3 d5 4. Bb2 c5 5. e3 +A13 English Opening: Neo-Catalan 1. Nf3 Nf6 2. c4 e6 3. g3 d5 +A13 English Opening: Neo-Catalan Declined 1. Nf3 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 +A13 English Opening: Romanishin Gambit 1. Nf3 Nf6 2. c4 e6 3. g3 a6 4. Bg2 b5 +A14 English Opening: Agincourt Defense, Keres Defense 1. c4 c5 2. Nf3 Nf6 3. Nc3 e6 4. g3 d5 5. cxd5 Nxd5 6. Bg2 Nc6 7. O-O Be7 +A14 English Opening: Agincourt Defense, Neo-Catalan Declined 1. Nf3 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 5. O-O +A14 Réti Opening: Anglo-Slav Variation, Bogoljubov Variation, Stonewall Line 1. Nf3 d5 2. c4 e6 3. g3 Nf6 4. Bg2 Be7 5. O-O O-O 6. b3 c6 7. Bb2 +A15 English Opening: Anglo-Indian Defense 1. c4 Nf6 +A15 English Opening: Anglo-Indian Defense, Anti-Anti-Grünfeld 1. Nf3 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 +A15 English Opening: Anglo-Indian Defense, Grünfeld Formation 1. c4 Nf6 2. Nf3 g6 3. g3 d5 +A15 English Opening: Anglo-Indian Defense, King's Indian Formation 1. Nf3 Nf6 2. c4 g6 +A15 English Opening: Anglo-Indian Defense, King's Indian Formation, Double Fianchetto 1. Nf3 Nf6 2. c4 b6 3. g3 Bb7 4. Bg2 g6 +A15 English Opening: Anglo-Indian Defense, King's Knight Variation 1. Nf3 Nf6 2. c4 +A15 English Opening: Anglo-Indian Defense, Old Indian Formation 1. Nf3 Nf6 2. c4 d6 +A15 English Opening: Anglo-Indian Defense, Queen's Indian Formation 1. Nf3 Nf6 2. c4 b6 +A15 English Opening: Anglo-Indian Defense, Queen's Indian Formation 1. Nf3 Nf6 2. c4 e6 3. g3 b6 4. Bg2 Bb7 +A15 English Opening: Anglo-Indian Defense, Romanishin Variation 1. Nf3 Nf6 2. c4 e6 3. g3 a6 +A15 English Opening: Anglo-Indian Defense, Scandinavian Defense 1. Nf3 Nf6 2. c4 d5 +A15 English Opening: Anglo-Indian Defense, Scandinavian Defense, Exchange Variation 1. Nf3 Nf6 2. c4 d5 3. cxd5 Nxd5 +A15 English Opening: Anglo-Indian Defense, Slav Formation 1. Nf3 Nf6 2. c4 g6 3. g3 c6 +A15 English Orangutan 1. c4 Nf6 2. b4 +A16 English Opening: Anglo-Grünfeld Defense 1. c4 Nf6 2. Nc3 d5 +A16 English Opening: Anglo-Grünfeld Defense, Korchnoi Variation 1. Nf3 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. g3 Bg7 6. Bg2 e5 +A16 English Opening: Anglo-Indian Defense, Anglo-Grünfeld Variation 1. c4 Nf6 2. Nc3 d5 3. cxd5 Nxd5 4. Nf3 +A16 English Opening: Anglo-Indian Defense, Anglo-Grünfeld Variation 1. c4 Nf6 2. Nc3 d5 3. cxd5 Nxd5 4. g3 g6 5. Bg2 Nb6 +A16 English Opening: Anglo-Indian Defense, Anglo-Grünfeld Variation 1. c4 Nf6 2. Nc3 d5 3. cxd5 Nxd5 4. g3 g6 5. Bg2 Nxc3 +A16 English Opening: Anglo-Indian Defense, Queen's Knight Variation 1. c4 Nf6 2. Nc3 +A17 English Opening: Anglo-Indian Defense, Hedgehog System 1. c4 Nf6 2. Nc3 e6 +A17 English Opening: Anglo-Indian Defense, Nimzo-English 1. Nf3 Nf6 2. c4 e6 3. Nc3 Bb4 +A17 English Opening: Anglo-Indian Defense, Queen's Indian Formation 1. c4 Nf6 2. Nc3 e6 3. Nf3 b6 +A17 English Opening: Anglo-Indian Defense, Queen's Indian Variation 1. c4 Nf6 2. Nc3 e6 3. Nf3 b6 4. e4 Bb7 5. Bd3 +A17 English Opening: Anglo-Indian Defense, Zvjaginsev-Krasenkow Attack 1. c4 Nf6 2. Nc3 e6 3. Nf3 Bb4 4. g4 +A18 English Opening: Mikenas-Carls Variation 1. c4 Nf6 2. Nc3 e6 3. e4 +A18 English Opening: Mikenas-Carls Variation 1. c4 Nf6 2. Nc3 e6 3. e4 Nc6 +A18 English Opening: Mikenas-Carls Variation 1. c4 Nf6 2. Nc3 e6 3. e4 d5 4. e5 +A19 English Opening: Anglo-Indian Defense, Flohr-Mikenas-Carls Variation, Nei Gambit 1. c4 Nf6 2. Nc3 e6 3. e4 c5 4. e5 Ng8 +A19 English Opening: Mikenas-Carls, Sicilian 1. c4 Nf6 2. Nc3 e6 3. e4 c5 +A20 English Opening: Drill Variation 1. c4 e5 2. g3 h5 +A20 English Opening: King's English Variation 1. c4 e5 +A20 English Opening: King's English Variation, Kahiko-Hula Gambit 1. c4 e5 2. e3 Nf6 3. f4 exf4 4. Nf3 +A20 English Opening: King's English Variation, Nimzowitsch Variation 1. c4 e5 2. Nf3 +A20 English Opening: King's English Variation, Nimzowitsch-Flohr Variation 1. c4 e5 2. Nf3 e4 +A21 English Opening: King's English Variation 1. c4 e5 2. Nc3 d6 3. Nf3 +A21 English Opening: King's English Variation, Keres Defense 1. c4 e5 2. Nc3 d6 3. g3 c6 +A21 English Opening: King's English Variation, Kramnik-Shirov Counterattack 1. c4 e5 2. Nc3 Bb4 +A21 English Opening: King's English Variation, Reversed Sicilian 1. c4 e5 2. Nc3 +A21 English Opening: King's English Variation, Smyslov Defense 1. c4 e5 2. Nc3 d6 3. Nf3 Bg4 +A21 English Opening: King's English Variation, Troger Defense 1. c4 e5 2. Nc3 Nc6 3. g3 d6 4. Bg2 Be6 +A22 English Opening: Carls-Bremen System 1. c4 e5 2. Nc3 Nf6 3. g3 +A22 English Opening: King's English Variation, Bellon Gambit 1. c4 e5 2. Nc3 Nf6 3. Nf3 e4 4. Ng5 b5 +A22 English Opening: King's English Variation, Two Knights Variation 1. c4 e5 2. Nc3 Nf6 +A22 English Opening: King's English Variation, Two Knights Variation, Reversed Dragon 1. c4 e5 2. Nc3 Nf6 3. g3 d5 +A22 English Opening: King's English Variation, Two Knights Variation, Smyslov System 1. c4 e5 2. Nc3 Nf6 3. g3 Bb4 +A22 English Opening: King's English, Erbenheimer Gambit 1. c4 e5 2. Nc3 Nf6 3. Nf3 e4 4. Ng5 Ng4 +A22 English Opening: King's English, Mazedonisch 1. c4 e5 2. Nc3 Nf6 3. f4 +A23 English Opening: King's English Variation, Two Knights Variation, Keres Variation 1. c4 e5 2. Nc3 Nf6 3. g3 c6 +A24 English Opening: King's English Variation, Two Knights Variation, Fianchetto Line 1. c4 e5 2. Nc3 Nf6 3. g3 g6 +A25 English Opening: Closed, Taimanov Variation 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Rb1 Nh6 5. Bg2 Bg7 +A25 English Opening: Closed, Taimanov Variation 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. e3 d6 6. Nge2 Nh6 +A25 English Opening: King's English Variation, Bremen-Hort Variation 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. e3 d6 6. Nge2 Be6 +A25 English Opening: King's English Variation, Closed System 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 +A25 English Opening: King's English Variation, Hungarian Attack 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. Rb1 +A25 English Opening: King's English Variation, Reversed Closed Sicilian 1. c4 e5 2. Nc3 Nc6 +A25 English Opening: King's English Variation, Taimanov Variation 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 +A26 English Opening: King's English Variation, Botvinnik System 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 6. e4 +A26 English Opening: King's English Variation, Closed System, Full Symmetry 1. c4 e5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 +A27 English Opening: King's English Variation, Three Knights System 1. c4 e5 2. Nc3 Nc6 3. Nf3 +A28 English Opening: Four Knights System, Nimzowitsch Variation 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. e4 +A28 English Opening: King's English Variation, Four Knights Variation 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 +A28 English Opening: King's English Variation, Four Knights Variation 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. d4 exd4 5. Nxd4 Bb4 6. Bg5 h6 7. Bh4 Bxc3+ 8. bxc3 Ne5 +A28 English Opening: King's English Variation, Four Knights Variation, Bradley Beach Variation 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. d4 e4 +A28 English Opening: King's English Variation, Four Knights Variation, Flexible Line 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. d3 +A28 English Opening: King's English Variation, Four Knights Variation, Korchnoi Line 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. a3 +A28 English Opening: King's English Variation, Four Knights Variation, Quiet Line 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. e3 +A28 English Opening: King's English Variation, Four Knights Variation, Quiet Line 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. e3 Bb4 5. Qc2 Bxc3 +A28 English Opening: King's English Variation, Four Knights Variation, Quiet Line 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. e3 Bb4 5. Qc2 O-O 6. Nd5 Re8 7. Qf5 +A29 English Opening: King's English Variation, Four Knights Variation, Fianchetto Line 1. c4 e5 2. Nc3 Nf6 3. Nf3 Nc6 4. g3 +A30 English Opening: Symmetrical Variation 1. c4 c5 +A30 English Opening: Symmetrical Variation 1. c4 c5 2. Nf3 +A30 English Opening: Symmetrical Variation, Hedgehog Defense 1. Nf3 Nf6 2. c4 c5 3. Nc3 e6 4. g3 b6 5. Bg2 Bb7 6. O-O Be7 +A30 English Opening: Symmetrical Variation, Napolitano Gambit 1. c4 c5 2. Nf3 Nf6 3. b4 +A30 English Opening: Symmetrical, Hedgehog, Flexible Formation 1. Nf3 c5 2. c4 Nf6 3. Nc3 e6 4. g3 b6 5. Bg2 Bb7 6. O-O Be7 7. d4 cxd4 8. Qxd4 d6 9. Rd1 a6 10. b3 Nbd7 +A30 English Opening: Wing Gambit 1. c4 c5 2. b4 +A31 English Opening: Symmetrical Variation, Anti-Benoni Variation 1. d4 Nf6 2. c4 c5 3. Nf3 +A32 English Opening: Symmetrical Variation, Anti-Benoni Variation, Spielmann Defense 1. d4 Nf6 2. c4 c5 3. Nf3 cxd4 4. Nxd4 e6 +A33 English Opening: Symmetrical Variation, Anti-Benoni Variation, Geller Variation 1. Nf3 Nf6 2. c4 c5 3. Nc3 Nc6 4. d4 cxd4 5. Nxd4 e6 6. g3 Qb6 +A33 English Opening: Symmetrical Variation, Anti-Benoni Variation, Spielmann Defense 1. Nf3 Nf6 2. c4 c5 3. Nc3 Nc6 4. d4 cxd4 5. Nxd4 e6 +A34 English Opening: Symmetrical Variation, Fianchetto Variation 1. c4 Nf6 2. Nc3 c5 3. g3 +A34 English Opening: Symmetrical Variation, Normal Variation 1. c4 c5 2. Nc3 +A34 English Opening: Symmetrical Variation, Rubinstein Variation 1. c4 Nf6 2. Nc3 c5 3. g3 d5 4. cxd5 Nxd5 5. Bg2 Nc7 +A34 English Opening: Symmetrical Variation, Three Knights Variation 1. c4 c5 2. Nc3 Nf6 3. Nf3 +A35 English Opening: Symmetrical Variation, Four Knights Variation 1. Nf3 Nf6 2. c4 c5 3. Nc3 Nc6 +A35 English Opening: Symmetrical Variation, Two Knights Variation 1. c4 c5 2. Nc3 Nc6 +A36 English Opening: Symmetrical Variation, Botvinnik System 1. e4 c5 2. c4 Nc6 3. Nc3 g6 4. g3 Bg7 5. Bg2 +A36 English Opening: Symmetrical Variation, Botvinnik System Reversed, with e3 1. c4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. e3 e5 +A36 English Opening: Symmetrical Variation, Symmetrical Variation 1. c4 c5 2. g3 g6 3. Bg2 Bg7 4. Nc3 Nc6 +A36 English Opening: Symmetrical Variation, Two Knights, Fianchetto Variation 1. c4 c5 2. Nc3 Nc6 3. g3 +A37 English Opening: Symmetrical Variation, Botvinnik System Reversed, with Nf3 1. c4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. Nf3 e5 +A37 English Opening: Symmetrical Variation, Three Knights, Fianchetto Variation 1. c4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. Nf3 +A38 English Opening: Symmetrical Variation, Double Fianchetto 1. c4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. Nf3 Nf6 6. O-O O-O 7. b3 +A38 English Opening: Symmetrical Variation, Duchamp Variation 1. Nf3 Nf6 2. g3 g6 3. Bg2 Bg7 4. O-O O-O 5. c4 c5 6. Nc3 Nc6 7. d3 +A38 English Opening: Symmetrical Variation, Full Symmetry Line 1. Nf3 Nf6 2. c4 c5 3. Nc3 Nc6 4. g3 g6 5. Bg2 Bg7 +A39 English Opening: Symmetrical Variation, Mecking Variation 1. Nf3 Nf6 2. c4 c5 3. Nc3 Nc6 4. g3 g6 5. Bg2 Bg7 6. O-O O-O 7. d4 +A40 Australian Defense 1. d4 Na6 +A40 Benoni Defense: Franco-Sicilian Hybrid 1. d4 e6 2. c4 c5 3. d5 exd5 4. cxd5 d6 5. Nc3 g6 6. e4 Bg7 7. Nf3 Ne7 +A40 Borg Defense: Borg Gambit 1. d4 g5 +A40 Colle System: Pterodactyl Variation 1. d4 g6 2. Nf3 Bg7 3. e3 c5 4. Bd3 Qa5+ +A40 Colle System: Siroccopteryx Variation 1. d4 g6 2. Nf3 Bg7 3. e3 c5 4. Bd3 cxd4 5. Nxd4 Qa5+ +A40 Dutch Defense: Senechaud Gambit 1. d4 e6 2. Bf4 f5 3. g4 +A40 Dutch Defense: Stonewall Variation, Modern Variation 1. d4 e6 2. Nf3 f5 3. g3 Nf6 4. Bg2 d5 5. O-O Bd6 6. c4 c6 +A40 English Defense 1. d4 b6 +A40 English Defense 1. d4 e6 2. c4 b6 +A40 English Defense: Eastbourne Gambit 1. d4 b6 2. c4 Bb7 3. Nc3 e5 +A40 English Defense: Hartlaub Gambit Accepted 1. c4 e6 2. d4 b6 3. Nc3 Bb7 4. e4 f5 5. exf5 Nf6 +A40 English Defense: Hartlaub Gambit Declined 1. c4 e6 2. d4 b6 3. Nc3 Bb7 4. e4 f5 5. d5 +A40 English Defense: Perrin Variation 1. d4 e6 2. c4 b6 3. e4 Bb7 4. Bd3 Nc6 +A40 English Defense: Poli Gambit 1. d4 e6 2. c4 b6 3. e4 Bb7 4. f3 f5 5. exf5 Nh6 +A40 Englund Gambit 1. d4 e5 +A40 Englund Gambit Complex Declined 1. d4 e5 2. d5 +A40 Englund Gambit Complex Declined: Diemer Counterattack 1. d4 e5 2. d5 Bc5 3. e4 Qh4 +A40 Englund Gambit Complex: Englund Gambit 1. d4 e5 2. dxe5 Nc6 3. Nf3 Qe7 +A40 Englund Gambit Complex: Felbecker Gambit 1. d4 e5 2. dxe5 Nc6 3. Nf3 Bc5 +A40 Englund Gambit Complex: Hartlaub-Charlick Gambit 1. d4 e5 2. dxe5 d6 +A40 Englund Gambit Complex: Mosquito Gambit 1. d4 e5 2. dxe5 Qh4 +A40 Englund Gambit Complex: Soller Gambit 1. d4 e5 2. dxe5 f6 +A40 Englund Gambit Complex: Soller Gambit Deferred 1. d4 e5 2. dxe5 Nc6 3. Nf3 f6 +A40 Englund Gambit Complex: Stockholm Variation 1. d4 e5 2. dxe5 Nc6 3. Nf3 Qe7 4. Qd5 +A40 Englund Gambit Complex: Zilbermints Gambit 1. d4 e5 2. dxe5 Nc6 3. Nf3 Nge7 +A40 Englund Gambit Declined: Reversed Alekhine 1. d4 e5 2. Nf3 +A40 Englund Gambit Declined: Reversed Brooklyn 1. d4 e5 2. Nf3 e4 3. Ng1 +A40 Englund Gambit Declined: Reversed French 1. d4 e5 2. e3 +A40 Englund Gambit Declined: Reversed Krebs 1. d4 e5 2. Nf3 e4 +A40 Englund Gambit Declined: Reversed Mokele Mbembe 1. d4 e5 2. Nf3 e4 3. Ne5 +A40 Horwitz Defense 1. d4 e6 +A40 Horwitz Defense: Zilbermints Gambit 1. d4 e6 2. c4 e5 +A40 Kangaroo Defense 1. d4 e6 2. c4 Bb4+ +A40 Kangaroo Defense: Keres Defense, Transpositional Variation 1. d4 e6 2. c4 Bb4+ 3. Nc3 +A40 Mikenas Defense 1. d4 Nc6 +A40 Mikenas Defense: Cannstatter Variation 1. d4 Nc6 2. c4 e5 3. d5 Nd4 +A40 Mikenas Defense: Lithuanian Variation 1. d4 Nc6 2. c4 e5 3. d5 Nce7 +A40 Mikenas Defense: Pozarek Gambit 1. d4 Nc6 2. c4 e5 3. dxe5 Nxe5 4. Nc3 Nxc4 +A40 Modern Defense: Beefeater Variation 1. d4 g6 2. c4 Bg7 3. Nc3 c5 4. d5 Bxc3+ 5. bxc3 f5 +A40 Modern Defense: Lizard Defense, Pirc-Diemer Gambit 1. d4 g6 2. h4 Nf6 3. h5 +A40 Montevideo Defense 1. d4 Nc6 2. d5 Nb8 +A40 Polish Defense 1. d4 b5 +A40 Polish Defense: Spassky Gambit Accepted 1. d4 b5 2. e4 Bb7 3. Bxb5 +A40 Pterodactyl Defense: Central, Benoni Beefeater Pterodactyl 1. d4 g6 2. c4 Bg7 3. Nc3 c5 4. d5 d6 5. e4 Bxc3+ 6. bxc3 Qa5 +A40 Pterodactyl Defense: Central, Benoni Pterodactyl 1. d4 g6 2. c4 Bg7 3. e4 c5 4. d5 Qa5+ +A40 Pterodactyl Defense: Fianchetto, Queen Benoni Pterodactyl 1. d4 g6 2. c4 Bg7 3. Nc3 c5 4. d5 Qa5 +A40 Pterodactyl Defense: Fianchetto, Queen Pteranodon 1. d4 g6 2. c4 Bg7 3. Nc3 c5 4. d5 Bxc3+ 5. bxc3 Qa5 +A40 Pterodactyl Defense: Fianchetto, Queen Pterodactyl 1. d4 g6 2. Nf3 Bg7 3. g3 c5 4. Bg2 Qa5+ +A40 Pterodactyl Defense: Queen Pterodactyl, Quiet Line 1. d4 g6 2. c4 Bg7 3. Nc3 c5 4. e3 +A40 Queen's Pawn Game 1. d4 +A40 Queen's Pawn Game: Anglo-Slav Opening 1. d4 c6 2. c4 d6 +A40 Queen's Pawn Game: Modern Defense 1. d4 g6 +A40 Slav Indian: Kudischewitsch Gambit 1. d4 c6 2. Nf3 Nf6 3. c4 b5 +A40 Zaire Defense 1. d4 Nc6 2. d5 Nb8 3. e4 Nf6 4. e5 Ng8 +A41 Modern Defense 1. d4 g6 2. c4 Bg7 3. Nc3 d6 +A41 Modern Defense: Neo-Modern Defense 1. d4 g6 2. c4 Bg7 3. e4 e5 +A41 Old Indian Defense 1. d4 d6 2. c4 +A41 Queen's Pawn Game 1. d4 d6 +A41 Rat Defense: English Rat 1. d4 d6 2. c4 e5 +A41 Rat Defense: English Rat, Lisbon Gambit 1. d4 d6 2. c4 e5 3. dxe5 Nc6 +A41 Rat Defense: English Rat, Pounds Gambit 1. d4 d6 2. c4 e5 3. dxe5 Be6 +A41 Robatsch Defense 1. d4 d6 2. Nf3 g6 3. c4 Bg7 4. e4 Bg4 +A41 Wade Defense 1. d4 d6 2. Nf3 Bg4 +A41 Zukertort Opening: Wade Defense, Chigorin Plan 1. d4 d6 2. Nf3 Bg4 3. c4 Nd7 4. Qb3 Rb8 +A42 Modern Defense: Averbakh System 1. d4 g6 2. c4 Bg7 3. Nc3 d6 4. e4 +A42 Modern Defense: Averbakh Variation, Pseudo-Sämisch 1. d4 g6 2. c4 Bg7 3. e4 d6 4. Be3 Nf6 5. f3 +A42 Modern Defense: Kotov Variation 1. d4 g6 2. c4 Bg7 3. Nc3 d6 4. e4 Nc6 +A42 Modern Defense: Randspringer Variation 1. d4 g6 2. c4 Bg7 3. Nc3 d6 4. e4 f5 +A42 Pterodactyl Defense 1. Nf3 c5 2. c4 g6 3. d4 Bg7 4. e4 Qa5+ 5. Nc3 d6 +A42 Pterodactyl Defense: Central, Bogolubovia 1. d4 g6 2. c4 Bg7 3. e4 d6 4. Nc3 c5 5. Nge2 Qa5 +A43 Benoni Defense: Benoni Gambit Accepted 1. d4 c5 2. dxc5 +A43 Benoni Defense: Benoni Gambit, Schlenker Defense 1. d4 c5 2. dxc5 Na6 +A43 Benoni Defense: Benoni-Indian Defense 1. d4 c5 2. d5 Nf6 +A43 Benoni Defense: Benoni-Indian Defense, Kingside Move Order 1. d4 Nf6 2. Nf3 c5 3. d5 +A43 Benoni Defense: Benoni-Staunton Gambit 1. d4 c5 2. d5 f5 3. e4 +A43 Benoni Defense: Cormorant Gambit 1. d4 c5 2. dxc5 b6 +A43 Benoni Defense: French Benoni 1. e4 e6 2. d4 c5 3. d5 +A43 Benoni Defense: Hawk Variation 1. d4 Nf6 2. Nf3 c5 3. d5 c4 +A43 Benoni Defense: Old Benoni 1. d4 c5 +A43 Benoni Defense: Old Benoni 1. d4 c5 2. d5 +A43 Benoni Defense: Old Benoni 1. d4 c5 2. d5 d6 +A43 Benoni Defense: Old Benoni, Mujannah Formation 1. d4 c5 2. d5 f5 +A43 Benoni Defense: Old Benoni, Schmid Variation 1. d4 c5 2. d5 d6 3. Nc3 g6 +A43 Benoni Defense: Snail Variation 1. d4 c5 2. d5 Na6 +A43 Benoni Defense: Woozle 1. d4 c5 2. d5 Nf6 3. Nc3 Qa5 +A43 Benoni Defense: Zilbermints-Benoni Gambit 1. d4 c5 2. b4 +A43 Benoni Defense: Zilbermints-Benoni Gambit 1. d4 c5 2. Nf3 cxd4 3. b4 +A43 Benoni Defense: Zilbermints-Benoni Gambit, Tamarkin Countergambit 1. d4 c5 2. Nf3 cxd4 3. b4 e5 +A43 Indian Defense: Pseudo-Benko 1. d4 Nf6 2. Nf3 c5 3. d5 b5 +A43 Queen's Pawn Game: Liedmann Gambit 1. d4 c5 2. c4 cxd4 3. e3 +A44 Benoni Defense: Old Benoni 1. d4 c5 2. d5 e5 +A44 Benoni Defense: Semi-Benoni 1. d4 c5 2. d5 e5 3. e4 d6 +A45 Amazon Attack: Siberian Attack 1. d4 Nf6 2. Nc3 d5 3. Qd3 +A45 Canard Opening 1. d4 Nf6 2. f4 +A45 Indian Defense 1. d4 Nf6 +A45 Indian Defense: Gedult Attack, Gedult Attack 1. d4 Nf6 2. f3 d5 3. g4 +A45 Indian Defense: Gibbins-Weidenhagen Gambit 1. d4 Nf6 2. g4 +A45 Indian Defense: Gibbins-Weidenhagen Gambit Accepted 1. d4 Nf6 2. g4 Nxg4 +A45 Indian Defense: Gibbins-Weidenhagen Gambit, Maltese Falcon 1. d4 Nf6 2. g4 Nxg4 3. f3 Nf6 4. e4 +A45 Indian Defense: Gibbins-Weidenhagen Gambit, Oshima Defense 1. d4 Nf6 2. g4 e5 +A45 Indian Defense: Gibbins-Weidenhagen Gambit, Stummer Gambit 1. d4 Nf6 2. g4 Nxg4 3. e4 d6 4. Be2 Nf6 5. Nc3 +A45 Indian Defense: Lazard Gambit 1. d4 Nf6 2. Nd2 e5 +A45 Indian Defense: Maddigan Gambit 1. d4 Nf6 2. Nc3 e5 +A45 Indian Defense: Omega Gambit 1. d4 Nf6 2. e4 +A45 Indian Defense: Omega Gambit, Arafat Gambit 1. d4 Nf6 2. e4 Nxe4 3. Bd3 Nf6 4. Bg5 +A45 Indian Defense: Paleface Attack, Blackmar-Diemer Gambit Deferred 1. d4 Nf6 2. f3 d5 3. e4 +A45 Indian Defense: Pawn Push Variation 1. d4 Nf6 2. d5 +A45 Indian Defense: Reversed Chigorin Defense 1. d4 Nf6 2. Nc3 c5 +A45 Indian Defense: Tartakower Attack 1. d4 Nf6 2. g3 +A45 Paleface Attack 1. d4 Nf6 2. f3 +A45 Queen's Pawn Game: Chigorin Variation 1. d4 Nf6 2. Nc3 d5 +A45 Queen's Pawn Game: Veresov, Richter Attack 1. d4 Nf6 2. f3 d5 3. Nc3 +A45 Trompowsky Attack 1. d4 Nf6 2. Bg5 +A45 Trompowsky Attack: Borg Variation 1. d4 Nf6 2. Bg5 Ne4 3. Bf4 g5 +A45 Trompowsky Attack: Classical Defense 1. d4 Nf6 2. Bg5 e6 +A45 Trompowsky Attack: Classical Defense, Big Center Variation 1. d4 Nf6 2. Bg5 e6 3. e4 +A45 Trompowsky Attack: Edge Variation 1. d4 Nf6 2. Bg5 Ne4 3. Bh4 +A45 Trompowsky Attack: Edge Variation, Hergert Gambit 1. d4 Nf6 2. Bg5 Ne4 3. Bh4 c6 4. Nd2 Qa5 5. c3 Nxd2 6. Qxd2 d5 7. e4 +A45 Trompowsky Attack: Edge Variation, Hergert Gambit 1. d4 Nf6 2. Bg5 Ne4 3. Bh4 d5 4. f3 Nf6 5. Nc3 Bf5 6. e4 +A45 Trompowsky Attack: Poisoned Pawn Variation 1. d4 Nf6 2. Bg5 c5 3. d5 Qb6 4. Nc3 +A45 Trompowsky Attack: Raptor Variation 1. d4 Nf6 2. Bg5 Ne4 3. h4 +A45 Trompowsky Attack: Raptor Variation, Hergert Gambit 1. d4 Nf6 2. Bg5 Ne4 3. h4 Nxg5 4. hxg5 e5 +A46 Döry Defense 1. d4 Nf6 2. Nf3 Ne4 +A46 Indian Defense: Czech-Indian 1. d4 Nf6 2. Nf3 c6 +A46 Indian Defense: Knights Variation 1. d4 Nf6 2. Nf3 +A46 Indian Defense: Knights Variation, Alburt-Miles Variation 1. d4 Nf6 2. Nf3 a6 +A46 Indian Defense: London System 1. d4 Nf6 2. Nf3 e6 3. Bf4 +A46 Indian Defense: Polish Variation 1. d4 Nf6 2. Nf3 b5 +A46 Indian Defense: Spielmann-Indian 1. d4 Nf6 2. Nf3 c5 +A46 Indian Defense: Wade-Tartakower Defense 1. d4 Nf6 2. Nf3 d6 +A46 Queen's Pawn Game: Torre Attack, Breyer Variation 1. d4 Nf6 2. Nf3 e6 3. Bg5 d5 4. e3 c5 5. c3 Qb6 +A46 Queen's Pawn Game: Veresov Attack, Classical Defense 1. d4 Nf6 2. Nf3 e6 3. Nc3 d5 4. Bg5 +A46 Torre Attack: Classical Defense 1. d4 Nf6 2. Nf3 e6 3. Bg5 +A46 Torre Attack: Classical Defense, Nimzowitsch Variation 1. d4 Nf6 2. Nf3 e6 3. Bg5 h6 +A46 Torre Attack: Classical Defense, Petrosian Gambit 1. d4 Nf6 2. Nf3 e6 3. Bg5 c5 4. e3 b6 5. d5 +A46 Torre Attack: Wagner Gambit 1. d4 Nf6 2. Nf3 e6 3. Bg5 c5 4. e4 +A46 Yusupov-Rubinstein System 1. d4 Nf6 2. Nf3 e6 3. e3 +A47 Indian Defense: Schnepper Gambit 1. d4 Nf6 2. Nf3 b6 3. c3 e5 +A47 Marienbad System 1. d4 Nf6 2. Nf3 b6 3. g3 Bb7 4. Bg2 c5 +A47 Marienbad System: Berg Variation 1. d4 Nf6 2. Nf3 b6 3. g3 Bb7 4. Bg2 c5 5. c4 cxd4 6. Qxd4 +A47 Pseudo Queen's Indian Defense 1. d4 Nf6 2. Nf3 b6 +A48 East Indian Defense 1. d4 Nf6 2. Nf3 g6 +A48 Indian Defense: Colle System, King's Indian Variation 1. d4 Nf6 2. Nf3 g6 3. e3 Bg7 4. Bd3 d6 +A48 London System 1. d4 Nf6 2. Nf3 g6 3. Bf4 +A48 Queen's Pawn Game: Barry Attack, Grünfeld Variation 1. d4 Nf6 2. Nf3 g6 3. Nc3 d5 4. Bf4 Bg7 5. e3 O-O 6. Be2 +A48 Queen's Pawn Game: Torre Attack, Grünfeld Variation, Main Line 1. d4 Nf6 2. Nf3 g6 3. Bg5 Bg7 4. Nbd2 d5 5. e3 O-O +A48 Torre Attack: Fianchetto Defense 1. d4 Nf6 2. Nf3 g6 3. Bg5 +A48 Torre Attack: Fianchetto Defense, Euwe Variation 1. d4 Nf6 2. Nf3 g6 3. Bg5 Bg7 4. Nbd2 c5 +A49 Indian Defense: Przepiorka Variation 1. d4 Nf6 2. Nf3 g6 3. g3 +A50 Indian Defense: Medusa Gambit 1. d4 Nf6 2. c4 g5 +A50 Indian Defense: Normal Variation 1. d4 Nf6 2. c4 +A50 Indian Defense: Pyrenees Gambit 1. d4 Nf6 2. c4 b5 +A50 Mexican Defense 1. d4 Nf6 2. c4 Nc6 +A50 Mexican Defense: Horsefly Gambit 1. d4 Nf6 2. c4 Nc6 3. d5 Ne5 4. f4 +A50 Queen's Indian Accelerated 1. d4 Nf6 2. c4 b6 +A50 Slav Indian 1. d4 Nf6 2. c4 c6 +A51 Indian Defense: Budapest Defense 1. d4 Nf6 2. c4 e5 +A51 Indian Defense: Budapest Defense, Fajarowicz Defense, Bonsdorf Variation 1. d4 Nf6 2. c4 e5 3. dxe5 Ne4 4. a3 b6 +A51 Indian Defense: Budapest Defense, Fajarowicz Variation 1. d4 Nf6 2. c4 e5 3. dxe5 Ne4 +A51 Indian Defense: Budapest Defense, Fajarowicz-Steiner Variation 1. d4 Nf6 2. c4 e5 3. dxe5 Ne4 4. Qc2 +A52 Indian Defense: Budapest Defense 1. d4 Nf6 2. c4 e5 3. dxe5 Ng4 +A52 Indian Defense: Budapest Defense, Adler Variation 1. d4 Nf6 2. c4 e5 3. dxe5 Ng4 4. Nf3 +A52 Indian Defense: Budapest Defense, Alekhine Variation 1. d4 Nf6 2. c4 e5 3. dxe5 Ng4 4. e4 +A52 Indian Defense: Budapest Defense, Alekhine Variation, Abonyi Variation 1. d4 Nf6 2. c4 e5 3. dxe5 Ng4 4. e4 Nxe5 5. f4 Nec6 +A52 Indian Defense: Budapest Defense, Alekhine Variation, Tartakower Defense 1. d4 Nf6 2. c4 e5 3. dxe5 Ng4 4. e4 d6 +A52 Indian Defense: Budapest Defense, Rubinstein Variation 1. d4 Nf6 2. c4 e5 3. dxe5 Ng4 4. Bf4 +A53 Old Indian Defense 1. d4 Nf6 2. c4 d6 +A53 Old Indian Defense: Aged Gibbon Gambit 1. d4 Nf6 2. c4 d6 3. g4 +A53 Old Indian Defense: Czech Variation, with Nc3 1. d4 Nf6 2. c4 d6 3. Nc3 c6 +A53 Old Indian Defense: Czech Variation, with Nf3 1. d4 Nf6 2. c4 d6 3. Nf3 c6 +A53 Old Indian Defense: Janowski Variation 1. d4 Nf6 2. c4 d6 3. Nc3 Bf5 +A53 Old Indian Defense: Janowski Variation, Fianchetto Variation 1. d4 Nf6 2. c4 d6 3. Nc3 Bf5 4. g3 +A53 Old Indian Defense: Janowski Variation, Grinberg Gambit 1. d4 Nf6 2. c4 d6 3. Nc3 Bf5 4. e4 +A53 Old Indian Defense: Janowski Variation, Main Line 1. d4 Nf6 2. c4 d6 3. Nc3 Bf5 4. f3 +A54 Old Indian Defense: Dus-Khotimirsky Variation 1. d4 Nf6 2. c4 d6 3. Nc3 e5 4. e3 Nbd7 5. Bd3 +A54 Old Indian Defense: Tartakower-Indian 1. d4 Nf6 2. c4 d6 3. Nf3 Bg4 +A54 Old Indian Defense: Two Knights Variation 1. d4 Nf6 2. c4 d6 3. Nc3 e5 4. Nf3 +A54 Old Indian Defense: Ukrainian Variation 1. d4 Nf6 2. c4 d6 3. Nc3 e5 +A55 Old Indian Defense: Normal Variation 1. d4 Nf6 2. c4 d6 3. Nc3 Nbd7 4. e4 e5 5. Nf3 +A56 Benoni Defense 1. d4 Nf6 2. c4 c5 +A56 Benoni Defense: Czech Benoni Defense 1. d4 Nf6 2. c4 c5 3. d5 e5 +A56 Benoni Defense: Hromádka System 1. d4 Nf6 2. c4 c5 3. d5 d6 +A56 Benoni Defense: King's Indian System 1. d4 Nf6 2. c4 c5 3. d5 e5 4. Nc3 d6 5. e4 g6 +A56 Benoni Defense: Weenink Variation 1. d4 Nf6 2. c4 c5 3. dxc5 e6 +A56 Grünfeld Defense: Three Knights Variation, Burille Variation, Reversed Tarrasch 1. d4 Nf6 2. c4 c5 3. e3 g6 4. Nc3 Bg7 5. Nf3 O-O 6. Be2 cxd4 7. exd4 d5 8. O-O Nc6 +A56 Vulture Defense 1. d4 Nf6 2. c4 c5 3. d5 Ne4 +A57 Benko Gambit 1. d4 Nf6 2. c4 c5 3. d5 b5 +A57 Benko Gambit Accepted 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 +A57 Benko Gambit Accepted: Dlugy Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. f3 +A57 Benko Gambit Accepted: Modern Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. e3 +A57 Benko Gambit Accepted: Pawn Return Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. b6 +A57 Benko Gambit Declined: Bishop Attack 1. d4 Nf6 2. c4 c5 3. d5 b5 4. Bg5 +A57 Benko Gambit Declined: Hjørring Countergambit 1. d4 Nf6 2. c4 c5 3. d5 b5 4. e4 +A57 Benko Gambit Declined: Main Line 1. d4 Nf6 2. c4 c5 3. d5 b5 4. Nf3 +A57 Benko Gambit Declined: Pseudo-Sämisch 1. d4 Nf6 2. c4 c5 3. d5 b5 4. f3 +A57 Benko Gambit Declined: Quiet Line 1. d4 Nf6 2. c4 c5 3. d5 b5 4. Nd2 +A57 Benko Gambit Declined: Sosonko Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. a4 +A57 Benko Gambit: Mutkin Countergambit 1. d4 Nf6 2. c4 c5 3. d5 b5 4. g4 +A57 Benko Gambit: Nescafe Frappe Attack 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. Nc3 axb5 6. e4 b4 7. Nb5 d6 8. Bc4 +A57 Benko Gambit: Zaitsev System 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. Nc3 +A57 Benko Gambit: Zaitsev Variation, Nescafe Frappe Attack 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. Nc3 axb5 6. e4 b4 7. Nb5 +A58 Benko Gambit Accepted: Central Storming Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 g6 6. Nc3 Bxa6 7. f4 +A58 Benko Gambit Accepted: Fianchetto Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 g6 6. Nc3 Bxa6 7. g3 d6 8. Bg2 Bg7 9. Nf3 +A58 Benko Gambit Accepted: Fully Accepted Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 +A58 Benko Gambit: Fianchetto Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 Bxa6 6. Nc3 d6 7. Nf3 g6 8. g3 +A58 Benko Gambit: Nd2 Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 Bxa6 6. Nc3 d6 7. Nf3 g6 8. Nd2 +A59 Benko Gambit 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 g6 6. Nc3 Bxa6 7. e4 Bxf1 8. Kxf1 d6 9. g3 +A59 Benko Gambit Accepted: King Walk Variation 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 g6 6. Nc3 Bxa6 7. Nf3 d6 8. e4 Bxf1 9. Kxf1 Bg7 10. g3 O-O 11. Kg2 +A59 Benko Gambit Accepted: Yugoslav 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 Bxa6 6. Nc3 d6 7. e4 +A59 Benko Gambit Accepted: Yugoslav 1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. bxa6 g6 6. Nc3 Bxa6 7. e4 Bxf1 8. Kxf1 d6 9. Nge2 +A60 Benoni Defense: Modern Variation 1. d4 Nf6 2. c4 c5 3. d5 e6 +A60 Benoni Defense: Modern Variation, Snake Variation 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 Bd6 +A61 Benoni Defense 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 +A61 Benoni Defense: Fianchetto Variation 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. g3 +A61 Benoni Defense: Knight's Tour Variation 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. Nd2 +A61 Benoni Defense: Uhlmann Variation 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. Bg5 +A62 Benoni Defense: Fianchetto Variation 1. d4 Nf6 2. c4 e6 3. g3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. Bg2 Bg7 8. Nf3 O-O +A63 Benoni Defense: Fianchetto Variation, Hastings Defense 1. d4 Nf6 2. c4 e6 3. g3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. Bg2 Bg7 8. Nf3 O-O 9. O-O Nbd7 +A64 Benoni Defense: Fianchetto Variation, Hastings Defense, Main Line 1. d4 Nf6 2. c4 e6 3. g3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. Bg2 Bg7 8. Nf3 O-O 9. O-O a6 10. a4 Nbd7 11. Nd2 Re8 +A65 Benoni Defense: King's Pawn Line 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 +A66 Benoni Defense: Mikenas Variation 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. f4 Bg7 8. e5 +A66 Benoni Defense: Pawn Storm Variation 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. f4 +A67 Benoni Defense: Taimanov Variation 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. f4 Bg7 8. Bb5+ +A68 Benoni Defense: Four Pawns Attack 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. f4 Bg7 8. Nf3 O-O +A69 Benoni Defense: Four Pawns Attack, Main Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 O-O 6. Nf3 c5 7. d5 e6 8. Be2 exd5 9. cxd5 Re8 +A70 Benoni Defense: Classical Variation 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. e4 +A70 Benoni Defense: Classical Variation, New York Variation 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. e4 Bg7 8. h3 +A70 Benoni Defense: Classical Variation, Traditional Variation 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. e4 Bg7 8. Be2 +A71 Benoni Defense: Classical Variation, Averbakh-Grivas Attack 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. e4 Bg7 8. Bg5 +A72 Benoni Defense: Classical 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. Nf3 Bg7 8. Be2 O-O +A73 Benoni Defense: Classical Variation, Main Line 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. Nf3 Bg7 8. Be2 O-O 9. O-O +A74 Benoni Defense: Classical Variation, Full Line 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. Nf3 Bg7 8. Be2 O-O 9. O-O a6 10. a4 +A75 Benoni Defense: Classical Variation, Argentine Counterattack 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. e4 Bg7 8. Be2 O-O 9. O-O a6 10. a4 Bg4 +A76 Benoni Defense: Classical Variation, Czerniak Defense 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. Nf3 Bg7 8. Be2 O-O 9. O-O Re8 +A77 Benoni Defense: Classical Variation, Czerniak Defense, Tal Line 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. Nf3 Bg7 8. Be2 O-O 9. O-O Re8 10. Nd2 +A78 Benoni Defense: Classical Variation, Czerniak Defense 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 exd5 5. cxd5 d6 6. Nc3 g6 7. e4 Bg7 8. Be2 O-O 9. O-O Re8 10. Nd2 Na6 +A79 Benoni Defense: Classical Variation, Czerniak Defense 1. d4 Nf6 2. c4 c5 3. d5 e6 4. Nc3 exd5 5. cxd5 d6 6. e4 g6 7. Nf3 Bg7 8. Be2 O-O 9. O-O Re8 10. Nd2 Na6 11. f3 +A80 Dutch Defense 1. d4 f5 +A80 Dutch Defense: Alapin Variation 1. d4 f5 2. Qd3 +A80 Dutch Defense: Hevendehl Gambit 1. d4 f5 2. g4 e5 +A80 Dutch Defense: Hopton Attack 1. d4 f5 2. Bg5 +A80 Dutch Defense: Janzen-Korchnoi Gambit 1. d4 f5 2. h3 Nf6 3. g4 +A80 Dutch Defense: Kingfisher Gambit 1. d4 f5 2. Nc3 d5 3. e4 +A80 Dutch Defense: Korchnoi Attack 1. d4 f5 2. h3 +A80 Dutch Defense: Krejcik Gambit 1. d4 f5 2. g4 +A80 Dutch Defense: Krejcik Gambit, Tate Gambit 1. d4 f5 2. g4 fxg4 3. e4 d5 4. Nc3 +A80 Dutch Defense: Manhattan Gambit, Anti-Classical Line 1. d4 f5 2. Qd3 e6 3. g4 +A80 Dutch Defense: Manhattan Gambit, Anti-Leningrad 1. d4 f5 2. Qd3 g6 3. g4 +A80 Dutch Defense: Manhattan Gambit, Anti-Modern 1. d4 f5 2. Qd3 d6 3. g4 +A80 Dutch Defense: Manhattan Gambit, Anti-Stonewall 1. d4 f5 2. Qd3 d5 3. g4 +A80 Dutch Defense: Omega-Isis Gambit 1. d4 f5 2. Nf3 e5 +A80 Dutch Defense: Raphael Variation 1. d4 f5 2. Nc3 +A80 Dutch Defense: Spielmann Gambit 1. d4 f5 2. Nc3 Nf6 3. g4 +A80 Queen's Pawn Game: Veresov Attack, Dutch System 1. d4 f5 2. Nc3 d5 +A81 Dutch Defense: Blackburne Variation 1. d4 f5 2. g3 Nf6 3. Bg2 e6 4. Nh3 +A81 Dutch Defense: Fianchetto Attack 1. d4 f5 2. g3 +A81 Dutch Defense: Leningrad Variation, Karlsbad Variation 1. d4 f5 2. g3 g6 3. Bg2 Bg7 4. Nh3 +A81 Dutch Defense: Leningrad, Basman System 1. d4 f5 2. g3 c6 3. Bg2 g6 4. Nf3 Bg7 5. O-O Nh6 +A81 Dutch Defense: Semi-Leningrad Variation 1. d4 f5 2. g3 Nf6 3. Bg2 g6 +A82 Dutch Defense: Blackmar's Second Gambit 1. d4 f5 2. e4 fxe4 3. Nc3 Nf6 4. f3 +A82 Dutch Defense: Staunton Gambit 1. d4 f5 2. e4 +A82 Dutch Defense: Staunton Gambit Accepted 1. d4 f5 2. e4 fxe4 +A82 Dutch Defense: Staunton Gambit, American Attack 1. d4 f5 2. e4 fxe4 3. Nd2 +A82 Dutch Defense: Staunton Gambit, Tartakower Variation 1. d4 f5 2. e4 fxe4 3. Nc3 Nf6 4. g4 +A82 Rat Defense: Balogh Defense 1. e4 d6 2. d4 f5 +A83 Dutch Defense: Staunton Gambit 1. d4 f5 2. e4 fxe4 3. Nc3 Nf6 4. Bg5 +A83 Dutch Defense: Staunton Gambit, Alekhine Variation 1. d4 f5 2. e4 fxe4 3. Nc3 Nf6 4. Bg5 g6 5. h4 +A83 Dutch Defense: Staunton Gambit, Chigorin Variation 1. d4 f5 2. e4 fxe4 3. Nc3 Nf6 4. Bg5 c6 +A83 Dutch Defense: Staunton Gambit, Lasker Variation 1. d4 f5 2. e4 fxe4 3. Nc3 Nf6 4. Bg5 g6 5. f3 +A83 Dutch Defense: Staunton Gambit, Nimzowitsch Variation 1. d4 f5 2. e4 fxe4 3. Nc3 Nf6 4. Bg5 b6 +A84 Dutch Defense 1. d4 f5 2. c4 +A84 Dutch Defense: Bellon Gambit 1. d4 f5 2. c4 e6 3. e4 +A84 Dutch Defense: Bladel Variation 1. d4 f5 2. c4 g6 3. Nc3 Nh6 +A84 Dutch Defense: Classical Variation 1. d4 e6 2. c4 f5 +A84 Dutch Defense: Krause Variation 1. d4 f5 2. c4 Nf6 3. Nc3 d6 4. Nf3 Nc6 +A84 Dutch Defense: Normal Variation 1. d4 f5 2. c4 Nf6 +A84 Dutch Defense: Rubinstein Variation 1. d4 f5 2. c4 e6 3. Nc3 +A85 Dutch Defense: Queen's Knight Variation 1. d4 f5 2. c4 Nf6 3. Nc3 +A86 Dutch Defense: Fianchetto Variation 1. d4 f5 2. c4 Nf6 3. g3 +A86 Dutch Defense: Hort-Antoshin System 1. c4 f5 2. g3 Nf6 3. Bg2 d6 4. Nc3 c6 5. d4 Qc7 +A86 Dutch Defense: Leningrad Variation 1. d4 f5 2. c4 Nf6 3. g3 g6 +A87 Dutch Defense: Leningrad Variation 1. d4 f5 2. c4 Nf6 3. g3 g6 4. Bg2 Bg7 5. Nf3 +A88 Dutch Defense: Leningrad Variation, Warsaw Variation 1. d4 f5 2. g3 Nf6 3. Bg2 g6 4. Nf3 Bg7 5. O-O O-O 6. c4 d6 7. Nc3 c6 +A89 Dutch Defense: Leningrad Variation, Matulovic Variation 1. d4 f5 2. g3 Nf6 3. Bg2 g6 4. Nf3 Bg7 5. O-O O-O 6. c4 d6 7. Nc3 Nc6 +A90 Dutch Defense: Classical Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 +A90 Dutch Defense: Nimzo-Dutch Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Bb4+ +A90 Dutch Defense: Nimzo-Dutch Variation, Alekhine Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Bb4+ 5. Bd2 Be7 +A91 Dutch Defense: Classical Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 +A91 Dutch Defense: Classical Variation, Blackburne Attack 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nh3 +A92 Dutch Defense: Alekhine Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 O-O 6. O-O Ne4 +A92 Dutch Defense: Classical Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 O-O +A92 Dutch Defense: Stonewall 1. d4 e6 2. Nf3 f5 3. g3 Nf6 4. Bg2 Be7 5. O-O O-O 6. c4 d5 7. Nc3 +A92 Dutch Defense: Stonewall Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 d5 6. O-O O-O +A93 Dutch Defense: Classical Variation, Stonewall Variation, Botvinnik Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 d5 6. O-O O-O 7. b3 +A94 Dutch Defense: Classical Variation, Stonewall Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 d5 6. O-O O-O 7. b3 c6 8. Ba3 +A95 Dutch Defense: Classical Variation, Stonewall Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 d5 5. Nf3 Be7 6. O-O O-O 7. Nc3 c6 +A95 Dutch Defense: Stonewall, Chekhover Variation 1. d4 f5 2. c4 Nf6 3. g3 e6 4. Bg2 Be7 5. Nf3 O-O 6. O-O d5 7. Nc3 c6 8. Qc2 Qe8 9. Bg5 +A96 Dutch Defense: Classical Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 O-O 6. O-O d6 +A96 Dutch Defense: Classical Variation, Buenos Aires Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 O-O 6. O-O d6 7. Nc3 a5 +A96 Dutch Defense: Classical Variation, Huisl Variation 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 O-O 6. O-O d6 7. Nc3 Ne4 +A97 Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation 1. d4 f5 2. Nf3 Nf6 3. g3 e6 4. Bg2 Be7 5. O-O O-O 6. c4 d6 7. Nc3 Qe8 +A97 Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation, Winter Variation 1. d4 f5 2. Nf3 Nf6 3. g3 e6 4. Bg2 Be7 5. O-O O-O 6. c4 d6 7. Nc3 Qe8 8. Re1 +A98 Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation, Alatortsev-Lisitsyn Line 1. d4 f5 2. Nf3 Nf6 3. g3 e6 4. Bg2 Be7 5. O-O O-O 6. c4 d6 7. Nc3 Qe8 8. Qc2 +A99 Dutch Defense: Classical Variation, Ilyin-Zhenevsky Variation, Modern Main Line 1. d4 e6 2. c4 f5 3. g3 Nf6 4. Bg2 Be7 5. Nf3 O-O 6. O-O d6 7. Nc3 Qe8 8. b3 diff --git a/projectexample/openingtrainer/chessopeningtrainer/openings/b.tsv b/projectexample/openingtrainer/chessopeningtrainer/openings/b.tsv new file mode 100644 index 00000000..564565db --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/openings/b.tsv @@ -0,0 +1,732 @@ +eco name pgn +B00 Barnes Defense 1. e4 f6 +B00 Borg Defense 1. e4 g5 +B00 Borg Defense: Borg Gambit 1. e4 g5 2. d4 Bg7 +B00 Borg Defense: Troon Gambit 1. e4 g5 2. d4 h6 3. h4 g4 +B00 Borg Defense: Zilbermints Gambit 1. e4 g5 2. d4 e5 +B00 Carr Defense 1. e4 h6 +B00 Carr Defense: Zilbermints Gambit 1. e4 h6 2. d4 e5 +B00 Duras Gambit 1. e4 f5 +B00 Fried Fox Defense 1. e4 f6 2. d4 Kf7 +B00 Goldsmith Defense 1. e4 h5 +B00 Goldsmith Defense: Picklepuss Defense 1. e4 h5 2. d4 Nf6 +B00 Guatemala Defense 1. e4 b6 2. d4 Ba6 +B00 Hippopotamus Defense 1. e4 Nh6 +B00 Hippopotamus Defense 1. e4 Nh6 2. d4 g6 3. c4 f6 +B00 King's Pawn Game 1. e4 +B00 Lemming Defense 1. e4 Na6 +B00 Lion Defense: Lion's Jaw 1. e4 d6 2. d4 Nf6 3. f3 +B00 Nimzowitsch Defense 1. e4 Nc6 +B00 Nimzowitsch Defense 1. e4 Nc6 2. d4 +B00 Nimzowitsch Defense: Breyer Variation 1. e4 Nc6 2. Nc3 Nf6 3. d4 e5 +B00 Nimzowitsch Defense: Colorado Countergambit 1. e4 Nc6 2. Nf3 f5 +B00 Nimzowitsch Defense: Colorado Countergambit Accepted 1. e4 Nc6 2. Nf3 f5 3. exf5 +B00 Nimzowitsch Defense: Declined Variation 1. e4 Nc6 2. Nf3 +B00 Nimzowitsch Defense: El Columpio Defense 1. e4 Nc6 2. Nf3 Nf6 3. e5 Ng4 +B00 Nimzowitsch Defense: El Columpio Defense, El Columpio Gambit 1. e4 Nc6 2. Nf3 Nf6 3. e5 Ng4 4. d4 d6 5. h3 Nh6 6. e6 +B00 Nimzowitsch Defense: El Columpio Defense, Exchange Variation 1. e4 Nc6 2. Nf3 Nf6 3. e5 Ng4 4. d4 d6 5. h3 Nh6 6. exd6 +B00 Nimzowitsch Defense: El Columpio Defense, Pin Variation 1. e4 Nc6 2. Nf3 Nf6 3. e5 Ng4 4. d4 d6 5. h3 Nh6 6. Bb5 +B00 Nimzowitsch Defense: Franco-Nimzowitsch Variation 1. e4 Nc6 2. Nf3 e6 +B00 Nimzowitsch Defense: French Connection 1. e4 Nc6 2. Nc3 e6 +B00 Nimzowitsch Defense: Hornung Gambit 1. e4 Nc6 2. d4 d5 3. Be3 +B00 Nimzowitsch Defense: Kennedy Variation 1. e4 Nc6 2. d4 e5 +B00 Nimzowitsch Defense: Kennedy Variation, Bielefelder Gambit 1. e4 Nc6 2. d4 e5 3. dxe5 Bc5 +B00 Nimzowitsch Defense: Kennedy Variation, Hammer Gambit 1. e4 Nc6 2. d4 e5 3. dxe5 f6 +B00 Nimzowitsch Defense: Kennedy Variation, Herford Gambit 1. e4 Nc6 2. d4 e5 3. dxe5 Qh4 +B00 Nimzowitsch Defense: Kennedy Variation, Keres Attack 1. e4 Nc6 2. d4 e5 3. dxe5 Nxe5 4. Nc3 +B00 Nimzowitsch Defense: Kennedy Variation, Linksspringer Variation 1. e4 Nc6 2. d4 e5 3. d5 +B00 Nimzowitsch Defense: Kennedy Variation, Main Line 1. e4 Nc6 2. d4 e5 3. dxe5 Nxe5 4. f4 Ng6 +B00 Nimzowitsch Defense: Kennedy Variation, Paulsen Attack 1. e4 Nc6 2. d4 e5 3. dxe5 Nxe5 4. Nf3 +B00 Nimzowitsch Defense: Kennedy Variation, Riemann Defense 1. e4 Nc6 2. d4 e5 3. dxe5 Nxe5 4. f4 Nc6 +B00 Nimzowitsch Defense: Kennedy Variation, de Smet Gambit 1. e4 Nc6 2. d4 e5 3. dxe5 d6 +B00 Nimzowitsch Defense: Mikenas Variation 1. e4 Nc6 2. d4 d6 +B00 Nimzowitsch Defense: Neo-Mongoloid Defense 1. e4 Nc6 2. d4 f6 +B00 Nimzowitsch Defense: Pirc Connection 1. e4 Nc6 2. Nc3 g6 +B00 Nimzowitsch Defense: Pseudo-Spanish Variation 1. e4 Nc6 2. Bb5 +B00 Nimzowitsch Defense: Scandinavian Variation 1. e4 Nc6 2. d4 d5 +B00 Nimzowitsch Defense: Scandinavian Variation, Aachen Gambit 1. e4 Nc6 2. d4 d5 3. exd5 Nb4 +B00 Nimzowitsch Defense: Scandinavian Variation, Advance Variation 1. e4 Nc6 2. d4 d5 3. e5 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation 1. e4 Nc6 2. d4 d5 3. Nc3 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation 1. e4 Nc6 2. d4 d5 3. Nc3 dxe4 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Brandics Gambit 1. e4 Nc6 2. d4 d5 3. Nc3 a6 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Erben Gambit 1. e4 Nc6 2. d4 d5 3. Nc3 g6 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Heinola-Deppe Gambit 1. e4 Nc6 2. d4 d5 3. Nc3 e5 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Nimzowitsch Gambit 1. e4 Nc6 2. d4 d5 3. Nc3 dxe4 4. d5 Ne5 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Richter Gambit 1. e4 Nc6 2. d4 d5 3. Nc3 dxe4 4. d5 Nb8 5. f3 +B00 Nimzowitsch Defense: Scandinavian Variation, Bogoljubov Variation, Vehre Variation 1. e4 Nc6 2. d4 d5 3. Nc3 Nf6 +B00 Nimzowitsch Defense: Scandinavian Variation, Exchange Variation 1. e4 Nc6 2. d4 d5 3. exd5 Qxd5 +B00 Nimzowitsch Defense: Scandinavian Variation, Exchange Variation, Marshall Gambit 1. e4 Nc6 2. d4 d5 3. exd5 Qxd5 4. Nc3 +B00 Nimzowitsch Defense: Wheeler Gambit 1. e4 Nc6 2. b4 +B00 Nimzowitsch Defense: Williams Variation 1. e4 Nc6 2. Nf3 d6 +B00 Nimzowitsch Defense: Woodchuck Variation 1. e4 Nc6 2. d4 a6 +B00 Owen Defense 1. e4 b6 +B00 Owen Defense: Hekili-Loa Gambit 1. e4 b6 2. d4 c5 3. dxc5 Nc6 +B00 Owen Defense: Matovinsky Gambit 1. e4 b6 2. d4 Bb7 3. Bd3 f5 4. exf5 Bxg2 5. Qh5+ g6 +B00 Owen Defense: Naselwaus Gambit 1. e4 b6 2. d4 Bb7 3. Bg5 +B00 Owen Defense: Smith Gambit 1. e4 b6 2. d4 Bb7 3. Nf3 +B00 Owen Defense: Unicorn Variation 1. e4 f6 2. d4 b6 3. c4 Bb7 +B00 Owen Defense: Wind Gambit 1. e4 b6 2. d4 Bb7 3. f3 e5 +B00 Pirc Defense 1. e4 d6 +B00 Pirc Defense 1. e4 d6 2. d4 +B00 Pirc Defense 1. e4 d6 2. d4 Nf6 +B00 Pirc Defense: Roscher Gambit 1. e4 d6 2. d4 Nf6 3. Nf3 +B00 Rat Defense: Antal Defense 1. e4 d6 2. d4 Nd7 +B00 Rat Defense: Fuller Gambit 1. e4 d6 2. f4 d5 3. exd5 Nf6 +B00 Rat Defense: Harmonist 1. e4 d6 2. f4 +B00 Rat Defense: Petruccioli Attack 1. e4 d6 2. h4 +B00 Rat Defense: Spike Attack 1. e4 d6 2. g4 +B00 St. George Defense 1. e4 a6 +B00 St. George Defense: Polish Variation 1. e4 a6 2. d4 b5 3. Nf3 Bb7 4. Bd3 e6 +B00 St. George Defense: San Jorge Variation 1. e4 a6 2. d4 b5 3. Nf3 Bb7 4. Bd3 d6 5. O-O g6 6. c3 Bg7 +B00 St. George Defense: Zilbermints Gambit 1. e4 a6 2. d4 e5 +B00 Van Geet Opening: Berlin Gambit 1. e4 Nc6 2. d4 d5 3. Nc3 dxe4 4. d5 +B00 Ware Defense 1. e4 a5 +B00 Ware Defense: Snagglepuss Defense 1. e4 a5 2. d4 Nc6 +B01 Scandinavian Defense 1. e4 d5 +B01 Scandinavian Defense 1. e4 d5 2. b3 +B01 Scandinavian Defense: Anderssen Counterattack 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 e5 +B01 Scandinavian Defense: Anderssen Counterattack, Collijn Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 e5 5. Nf3 Bg4 +B01 Scandinavian Defense: Anderssen Counterattack, Goteborg System 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 e5 5. Nf3 +B01 Scandinavian Defense: Anderssen Counterattack, Orthodox Attack 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 e5 5. dxe5 Nc6 6. Nf3 Bb4 7. Bd2 +B01 Scandinavian Defense: Blackburne Gambit 1. e4 d5 2. exd5 c6 3. dxc6 Nxc6 +B01 Scandinavian Defense: Blackburne-Kloosterboer Gambit 1. e4 d5 2. exd5 c6 +B01 Scandinavian Defense: Boehnke Gambit 1. e4 d5 2. exd5 e5 3. dxe6 Bxe6 +B01 Scandinavian Defense: Bronstein Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd6 4. d4 Nf6 5. Nf3 a6 +B01 Scandinavian Defense: Classical Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 Nf6 5. Nf3 Bf5 +B01 Scandinavian Defense: Grünfeld Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 Nf6 5. Nf3 Bf5 6. Ne5 c6 7. g4 +B01 Scandinavian Defense: Gubinsky-Melts Defense 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd6 +B01 Scandinavian Defense: Icelandic-Palme Gambit 1. e4 d5 2. exd5 Nf6 3. c4 e6 +B01 Scandinavian Defense: Kiel Variation 1. e4 d5 2. exd5 Nf6 3. d4 Nxd5 4. c4 Nb4 +B01 Scandinavian Defense: Kloosterboer Gambit 1. e4 d5 2. exd5 c6 3. dxc6 e5 +B01 Scandinavian Defense: Kádas Gambit 1. e4 d5 2. exd5 Nf6 3. d4 c6 4. dxc6 e5 +B01 Scandinavian Defense: Lasker Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 Nf6 5. Nf3 Bg4 6. h3 +B01 Scandinavian Defense: Main Line 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 +B01 Scandinavian Defense: Main Line, Leonhardt Gambit 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. b4 +B01 Scandinavian Defense: Main Line, Mieses Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qa5 4. d4 Nf6 +B01 Scandinavian Defense: Marshall Variation 1. e4 d5 2. exd5 Nf6 3. d4 Nxd5 +B01 Scandinavian Defense: Mieses-Kotroc Variation 1. e4 d5 2. exd5 Qxd5 +B01 Scandinavian Defense: Modern Variation 1. e4 d5 2. exd5 Nf6 +B01 Scandinavian Defense: Modern Variation 1. e4 d5 2. exd5 Nf6 3. d4 +B01 Scandinavian Defense: Modern Variation, Gipslis Variation 1. e4 d5 2. exd5 Nf6 3. d4 Nxd5 4. Nf3 Bg4 +B01 Scandinavian Defense: Modern Variation, Wing Gambit 1. e4 d5 2. exd5 Nf6 3. d4 g6 4. c4 b5 +B01 Scandinavian Defense: Panov Transfer 1. e4 d5 2. exd5 Nf6 3. c4 c6 +B01 Scandinavian Defense: Portuguese Gambit 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 +B01 Scandinavian Defense: Portuguese Gambit, Banker Variation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. f3 Bf5 5. c4 +B01 Scandinavian Defense: Portuguese Gambit, Classical Variation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. Nf3 +B01 Scandinavian Defense: Portuguese Gambit, Correspondence Refutation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. f3 Bf5 5. g4 +B01 Scandinavian Defense: Portuguese Gambit, Elbow Variation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. Bb5+ c6 +B01 Scandinavian Defense: Portuguese Gambit, Jadoul Variation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. f3 Bf5 5. Bb5+ Nbd7 6. c4 +B01 Scandinavian Defense: Portuguese Gambit, Lusophobe Variation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. Bb5+ Nbd7 5. Be2 +B01 Scandinavian Defense: Portuguese Gambit, Melbourne Shuffle Variation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. f3 Bf5 5. Bb5+ Nbd7 6. Nc3 +B01 Scandinavian Defense: Portuguese Gambit, Wuss Variation 1. e4 d5 2. exd5 Nf6 3. d4 Bg4 4. Be2 +B01 Scandinavian Defense: Richter Variation 1. e4 d5 2. exd5 Nf6 3. d4 Nxd5 4. Nf3 g6 +B01 Scandinavian Defense: Richter Variation 1. e4 d5 2. exd5 Nf6 3. d4 g6 +B01 Scandinavian Defense: Schiller-Pytel Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd6 4. d4 c6 +B01 Scandinavian Defense: Schiller-Pytel Variation, Modern Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd6 4. d4 Nf6 5. Bc4 c6 6. Nge2 Bf5 7. Bf4 Qb4 +B01 Scandinavian Defense: Valencian Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd8 +B01 Scandinavian Defense: Valencian Variation, Ilundain Variation 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd8 4. d4 Nf6 5. Nf3 c6 +B01 Scandinavian Defense: Valencian Variation, Main Line 1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd8 4. d4 Nf6 5. Nf3 Bg4 +B01 Scandinavian Defense: Zilbermints Gambit 1. e4 d5 2. b4 +B01 Van Geet Opening: Grünfeld Defense 1. e4 d5 2. Nc3 dxe4 3. Nxe4 e5 +B02 Alekhine Defense 1. e4 Nf6 +B02 Alekhine Defense: Brooklyn Variation 1. e4 Nf6 2. e5 Ng8 +B02 Alekhine Defense: Brooklyn Variation, Everglades Variation 1. e4 Nf6 2. e5 Ng8 3. d4 f5 +B02 Alekhine Defense: Buckley Attack 1. e4 Nf6 2. e5 Nd5 3. Na3 +B02 Alekhine Defense: Hunt Variation, Lasker Simul Gambit 1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. c5 Nd5 5. Bc4 e6 6. Nc3 +B02 Alekhine Defense: Hunt Variation, Matsukevich Gambit 1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. c5 Nd5 5. Nc3 Nxc3 6. dxc3 d6 7. Bg5 +B02 Alekhine Defense: Hunt Variation, Mikenas Gambit 1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. c5 Nd5 5. Bc4 e6 6. Nc3 d6 7. Nxd5 exd5 8. Bxd5 +B02 Alekhine Defense: Kmoch Variation 1. e4 Nf6 2. e5 Nd5 3. Bc4 Nb6 4. Bb3 c5 5. d3 +B02 Alekhine Defense: Krejcik Variation 1. e4 Nf6 2. Bc4 +B02 Alekhine Defense: Krejcik Variation, Krejcik Gambit 1. e4 Nf6 2. Bc4 Nxe4 3. Bxf7+ +B02 Alekhine Defense: Maróczy Variation 1. e4 Nf6 2. d3 +B02 Alekhine Defense: Mokele Mbembe 1. e4 Nf6 2. e5 Ne4 +B02 Alekhine Defense: Mokele Mbembe, Modern Line 1. e4 Nf6 2. e5 Ne4 3. d4 f6 +B02 Alekhine Defense: Mokele Mbembe, Vavra Defense 1. e4 Nf6 2. e5 Ne4 3. d4 e6 +B02 Alekhine Defense: Normal Variation 1. e4 Nf6 2. e5 Nd5 +B02 Alekhine Defense: Scandinavian Variation 1. e4 Nf6 2. Nc3 d5 +B02 Alekhine Defense: Scandinavian Variation, Geschev Gambit 1. e4 Nf6 2. Nc3 d5 3. exd5 c6 +B02 Alekhine Defense: Scandinavian Variation, Myers Gambit 1. e4 Nf6 2. Nc3 d5 3. d3 dxe4 4. Bg5 +B02 Alekhine Defense: Spielmann Gambit 1. e4 Nf6 2. Nc3 d5 3. e5 Nfd7 4. e6 +B02 Alekhine Defense: Steiner Variation 1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. b3 +B02 Alekhine Defense: Sämisch Attack 1. e4 Nf6 2. e5 Nd5 3. Nc3 +B02 Alekhine Defense: The Squirrel 1. e4 Nf6 2. e5 Nd5 3. c4 Nf4 +B02 Alekhine Defense: Two Pawns Attack 1. e4 Nf6 2. e5 Nd5 3. c4 +B02 Alekhine Defense: Two Pawns Attack, Lasker Variation 1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. c5 +B02 Alekhine Defense: Two Pawns Attack, Mikenas Variation 1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. c5 Nd5 5. Bc4 e6 6. Nc3 d6 +B02 Alekhine Defense: Welling Variation 1. e4 Nf6 2. e5 Nd5 3. b3 +B03 Alekhine Defense 1. e4 Nf6 2. e5 Nd5 3. d4 +B03 Alekhine Defense 1. e4 Nf6 2. e5 Nd5 3. d4 d6 +B03 Alekhine Defense 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 +B03 Alekhine Defense: Balogh Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Bc4 +B03 Alekhine Defense: Exchange Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. exd6 +B03 Alekhine Defense: Exchange Variation, Karpov Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. exd6 cxd6 6. Nc3 g6 7. h3 Bg7 8. Nf3 O-O 9. Be2 Nc6 10. O-O Bf5 11. Bf4 +B03 Alekhine Defense: Exchange Variation, Voronezh Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. exd6 cxd6 6. Nc3 g6 7. Be3 Bg7 8. Rc1 O-O 9. b3 +B03 Alekhine Defense: Four Pawns Attack 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 +B03 Alekhine Defense: Four Pawns Attack, Cambridge Gambit 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 g5 +B03 Alekhine Defense: Four Pawns Attack, Fianchetto Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 g6 +B03 Alekhine Defense: Four Pawns Attack, Ilyin-Zhenevsky Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 dxe5 6. fxe5 Nc6 7. Nf3 Bg4 8. e6 fxe6 9. c5 +B03 Alekhine Defense: Four Pawns Attack, Korchnoi Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 dxe5 6. fxe5 Bf5 7. Nc3 e6 8. Nf3 Be7 9. Be2 O-O 10. O-O f6 +B03 Alekhine Defense: Four Pawns Attack, Main Line 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 dxe5 6. fxe5 Nc6 7. Be3 +B03 Alekhine Defense: Four Pawns Attack, Tartakower Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 dxe5 6. fxe5 Nc6 7. Be3 Bf5 8. Nc3 e6 9. Nf3 Qd7 10. Be2 O-O-O 11. O-O Be7 +B03 Alekhine Defense: Four Pawns Attack, Trifunovic Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. f4 Bf5 +B03 Alekhine Defense: Hunt Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. c5 +B03 Alekhine Defense: Modern Variation, Alekhine Gambit 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. Nf3 Bg4 6. Be2 +B03 Alekhine Defense: O'Sullivan Gambit 1. e4 Nf6 2. e5 Nd5 3. d4 b5 +B04 Alekhine Defense: Modern Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 +B04 Alekhine Defense: Modern Variation, Alburt Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 g6 +B04 Alekhine Defense: Modern Variation, Keres Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 g6 5. Bc4 Nb6 6. Bb3 Bg7 7. a4 +B04 Alekhine Defense: Modern Variation, Larsen Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 dxe5 +B04 Alekhine Defense: Modern Variation, Larsen-Haakert Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 Nc6 +B04 Alekhine Defense: Modern Variation, Schmid Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 Nb6 +B05 Alekhine Defense: Modern Variation, Alekhine Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 Bg4 5. c4 +B05 Alekhine Defense: Modern Variation, Flohr Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 Bg4 5. Be2 c6 +B05 Alekhine Defense: Modern Variation, Main Line 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 Bg4 +B05 Alekhine Defense: Modern Variation, Panov Variation 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 Bg4 5. h3 +B05 Alekhine Defense: Modern Variation, Vitolins Attack 1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. Nf3 Bg4 5. c4 Nb6 6. d5 +B06 Modern Defense 1. e4 g6 +B06 Modern Defense 1. e4 g6 2. d4 Bg7 +B06 Modern Defense: Anti-Modern 1. e4 g6 2. d4 Bg7 3. Nc3 c6 4. Bc4 d6 5. Qe2 +B06 Modern Defense: Bishop Attack 1. e4 g6 2. d4 Bg7 3. Bc4 +B06 Modern Defense: Bishop Attack, Bücker Gambit 1. e4 g6 2. d4 Bg7 3. Bc4 b5 +B06 Modern Defense: Bishop Attack, Monkey's Bum 1. e4 g6 2. Bc4 Bg7 3. Qf3 e6 4. d4 Bxd4 +B06 Modern Defense: Dunworthy Variation 1. e4 g6 2. d4 Bg7 3. c4 d5 4. exd5 c6 5. dxc6 Bxd4 +B06 Modern Defense: Fianchetto Gambit 1. e4 g6 2. d4 f5 +B06 Modern Defense: Gurgenidze Defense 1. e4 g6 2. d4 Bg7 3. Nc3 c6 4. f4 d5 5. e5 h5 +B06 Modern Defense: Lizard Defense, Mittenberger Gambit 1. e4 g6 2. d4 Bg7 3. Nc3 d5 +B06 Modern Defense: Masur Gambit 1. e4 g6 2. d4 Nh6 3. Nc3 f5 4. Bxh6 Bxh6 5. exf5 O-O +B06 Modern Defense: Modern Pterodactyl 1. e4 g6 2. d4 Bg7 3. Nc3 c5 +B06 Modern Defense: Mongredien Defense, with Nc3 1. e4 g6 2. d4 Bg7 3. Nc3 b6 +B06 Modern Defense: Mongredien Defense, with Nf3 1. e4 g6 2. d4 Bg7 3. Nf3 b6 +B06 Modern Defense: Norwegian Defense 1. e4 g6 2. d4 Nf6 +B06 Modern Defense: Norwegian Defense, Norwegian Gambit 1. e4 g6 2. d4 Nf6 3. e5 Nh5 4. Be2 d6 +B06 Modern Defense: Pseudo-Austrian Attack 1. e4 g6 2. d4 Bg7 3. Nc3 d6 4. f4 +B06 Modern Defense: Semi-Averbakh Variation, Pterodactyl Variation Declined 1. e4 g6 2. d4 Bg7 3. c4 c5 4. Nf3 d6 5. Be2 Qa5+ +B06 Modern Defense: Standard Defense 1. e4 g6 2. d4 Bg7 3. Nc3 d6 +B06 Modern Defense: Standard Line 1. e4 g6 2. d4 Bg7 3. Nc3 +B06 Modern Defense: Three Pawns Attack 1. e4 g6 2. d4 Bg7 3. f4 +B06 Modern Defense: Two Knights Variation 1. e4 g6 2. d4 Bg7 3. Nc3 d6 4. Nf3 +B06 Modern Defense: Two Knights Variation, Suttles Variation 1. e4 g6 2. d4 Bg7 3. Nc3 c6 4. Nf3 d6 +B06 Modern Defense: Two Knights Variation, Suttles Variation, Tal Gambit 1. e4 g6 2. d4 Bg7 3. Nc3 d6 4. Nf3 c6 5. Bg5 Qb6 6. Qd2 Qxb2 +B06 Modern Defense: Westermann Gambit 1. e4 g6 2. d4 Bg7 3. Bd2 +B06 Modern Defense: Wind Gambit 1. e4 g6 2. d4 Bg7 3. Bd3 +B06 Norwegian Defense 1. e4 g6 2. d4 Nf6 3. e5 Nh5 4. g4 Ng7 +B06 Pterodactyl Defense: Austrian, Austriadactylus Western 1. e4 g6 2. d4 Bg7 3. f4 c5 4. Nf3 Qa5+ +B06 Pterodactyl Defense: Austrian, Grand Prix Pterodactyl 1. e4 g6 2. Nc3 Bg7 3. f4 c5 4. Nf3 Qa5 +B06 Pterodactyl Defense: Austrian, Pteranodon 1. e4 g6 2. d4 Bg7 3. f4 c5 4. c3 Qa5 +B06 Pterodactyl Defense: Central, Anhanguera 1. e4 g6 2. d4 Bg7 3. c4 c5 4. Nc3 d6 5. Be3 Qa5 +B06 Pterodactyl Defense: Central, Benoni Quetzalcoatlus 1. e4 g6 2. d4 Bg7 3. c4 c5 4. d5 d6 5. Nc3 Qa5 +B06 Pterodactyl Defense: Central, Quetzalcoatlus Gambit 1. e4 g6 2. d4 Bg7 3. c4 c5 4. Nc3 d6 5. dxc5 Qa5 +B06 Pterodactyl Defense: Eastern, Anhanguera 1. e4 g6 2. d4 Bg7 3. Nc3 c5 4. Be3 +B06 Pterodactyl Defense: Eastern, Benoni 1. d4 g6 2. e4 Bg7 3. Nc3 c5 4. d5 +B06 Pterodactyl Defense: Eastern, Benoni Pteranodon 1. e4 g6 2. d4 Bg7 3. Nc3 c5 4. d5 Bxc3+ 5. bxc3 Qa5 +B06 Pterodactyl Defense: Eastern, Benoni Pterodactyl 1. d4 g6 2. Nc3 Bg7 3. e4 c5 4. d5 Qa5 +B06 Pterodactyl Defense: Eastern, Pteranodon 1. e4 g6 2. d4 Bg7 3. Nc3 c5 4. dxc5 Bxc3+ 5. bxc3 Qa5 +B06 Pterodactyl Defense: Eastern, Pterodactyl 1. e4 g6 2. d4 Bg7 3. Nc3 c5 4. dxc5 Qa5 +B06 Pterodactyl Defense: Eastern, Rhamphorhynchus 1. e4 g6 2. d4 Bg7 3. Nc3 c5 4. dxc5 +B06 Pterodactyl Defense: Fianchetto, King Pterodactyl 1. e4 g6 2. d4 Bg7 3. g3 c5 4. Nf3 Qa5+ +B06 Pterodactyl Defense: Fianchetto, Rhamphorhynchus 1. e4 g6 2. d4 Bg7 3. g3 c5 4. dxc5 Qa5+ +B06 Pterodactyl Defense: Sicilian, Quetzalcoatlus 1. e4 g6 2. d4 Bg7 3. Nc3 c5 4. Nf3 Qa5 5. Be2 d6 +B06 Pterodactyl Defense: Sicilian, Siroccopteryx 1. e4 g6 2. d4 Bg7 3. Nc3 c5 4. Nf3 Qa5 5. Bc4 +B06 Pterodactyl Defense: Western, Anhanguera 1. e4 g6 2. d4 Bg7 3. Nf3 c5 4. Be3 Qa5+ +B06 Pterodactyl Defense: Western, Siroccopteryx 1. e4 g6 2. Nf3 Bg7 3. d4 c5 4. Bc4 cxd4 5. Nxd4 Qa5+ +B06 Rat Defense: Accelerated Gurgenidze 1. e4 g6 2. d4 d6 3. Nc3 c6 +B07 Czech Defense 1. e4 d6 2. d4 Nf6 3. Nc3 c6 +B07 King's Pawn Game: Maróczy Defense 1. e4 d6 2. d4 e5 +B07 Lion Defense: Anti-Philidor 1. e4 d6 2. d4 Nf6 3. Nc3 Nbd7 4. f4 +B07 Lion Defense: Anti-Philidor, Lion's Cave 1. e4 d6 2. d4 Nf6 3. Nc3 Nbd7 4. f4 e5 +B07 Lion Defense: Anti-Philidor, Lion's Cave, Lion Claw Gambit 1. e4 d6 2. d4 Nf6 3. Nc3 Nbd7 4. f4 e5 5. Nf3 exd4 6. Qxd4 c6 7. Bc4 d5 +B07 Lion Defense: Bayonet Attack 1. e4 d6 2. d4 Nf6 3. Nc3 Nbd7 4. g4 +B07 Modern Defense: Geller's System 1. e4 g6 2. d4 Bg7 3. Nf3 d6 4. c3 +B07 Pirc Defense 1. e4 d6 2. d4 Nf6 3. Nc3 g6 +B07 Pirc Defense: 150 Attack 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Be3 c6 5. Qd2 +B07 Pirc Defense: 150 Attack, Inner Doll Defense 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Be3 c6 5. Qd2 Bg4 +B07 Pirc Defense: 150 Attack, Sveshnikov-Jansa Attack 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Be3 c6 5. h3 +B07 Pirc Defense: Bayonet Attack 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Be2 Bg7 5. h4 +B07 Pirc Defense: Byrne Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Bg5 +B07 Pirc Defense: Chinese Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Be2 Bg7 5. g4 +B07 Pirc Defense: Kholmov System 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Bc4 +B07 Pirc Defense: Sveshnikov System 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. g3 +B08 Pirc Defense: Classical Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Nf3 +B08 Pirc Defense: Classical Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Nf3 Bg7 +B08 Pirc Defense: Classical Variation, Quiet System 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Nf3 Bg7 5. Be2 +B08 Pirc Defense: Classical Variation, Quiet System, Chigorin Line 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Nf3 Bg7 5. Be2 O-O 6. O-O Nc6 +B08 Pirc Defense: Classical Variation, Quiet System, Czech Defense 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Nf3 Bg7 5. Be2 O-O 6. O-O c6 +B08 Pirc Defense: Classical Variation, Quiet System, Parma Defense 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Nf3 Bg7 5. Be2 O-O 6. O-O Bg4 +B08 Pirc Defense: Classical Variation, Schlechter Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Nf3 Bg7 5. h3 +B09 Pirc Defense: Austrian Attack 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 +B09 Pirc Defense: Austrian Attack 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 Bg7 5. Nf3 O-O +B09 Pirc Defense: Austrian Attack, Dragon Formation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 Bg7 5. Nf3 c5 +B09 Pirc Defense: Austrian Attack, Kurajica Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 Bg7 5. Nf3 O-O 6. Be3 +B09 Pirc Defense: Austrian Attack, Ljubojevic Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 Bg7 5. Bc4 +B09 Pirc Defense: Austrian Attack, Unzicker Attack 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 Bg7 5. Nf3 O-O 6. e5 +B09 Pirc Defense: Austrian Attack, Unzicker Attack, Bronstein Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 Bg7 5. Nf3 O-O 6. e5 Nfd7 7. h4 +B09 Pirc Defense: Austrian Attack, Weiss Variation 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. f4 Bg7 5. Nf3 O-O 6. Bd3 +B10 Caro-Kann Defense 1. e4 c6 +B10 Caro-Kann Defense 1. e4 c6 2. Nc3 +B10 Caro-Kann Defense 1. e4 c6 2. Nc3 d5 +B10 Caro-Kann Defense: Accelerated Panov Attack 1. e4 c6 2. c4 +B10 Caro-Kann Defense: Accelerated Panov Attack 1. e4 c6 2. c4 d5 +B10 Caro-Kann Defense: Accelerated Panov Attack, Modern Variation 1. e4 c6 2. c4 d5 3. exd5 cxd5 4. cxd5 Nf6 +B10 Caro-Kann Defense: Accelerated Panov Attack, Open Variation 1. e4 c6 2. c4 e5 +B10 Caro-Kann Defense: Accelerated Panov Attack, Pseudo-Scandinavian 1. e4 c6 2. c4 d5 3. exd5 Qxd5 +B10 Caro-Kann Defense: Accelerated Panov Attack, Van Weersel Attack 1. e4 c6 2. c4 d5 3. cxd5 cxd5 4. Qb3 +B10 Caro-Kann Defense: Apocalypse Attack 1. e4 c6 2. Nf3 d5 3. exd5 cxd5 4. Ne5 +B10 Caro-Kann Defense: Breyer Variation 1. e4 c6 2. d3 +B10 Caro-Kann Defense: Breyer Variation, Stein Attack 1. e4 c6 2. d3 d5 3. Nd2 g6 4. Ngf3 Bg7 5. g3 e5 6. Bg2 Ne7 7. O-O O-O 8. b4 +B10 Caro-Kann Defense: Euwe Attack 1. e4 c6 2. b3 +B10 Caro-Kann Defense: Goldman Variation 1. e4 c6 2. Nc3 d5 3. Qf3 +B10 Caro-Kann Defense: Hector Gambit 1. e4 c6 2. Nc3 d5 3. Nf3 dxe4 4. Ng5 +B10 Caro-Kann Defense: Hillbilly Attack 1. e4 c6 2. Bc4 +B10 Caro-Kann Defense: Hillbilly Attack, Schaeffer Gambit 1. e4 c6 2. Bc4 d5 3. Bb3 dxe4 4. Qh5 +B10 Caro-Kann Defense: Labahn Attack 1. e4 c6 2. b4 +B10 Caro-Kann Defense: Labahn Attack, Double Gambit 1. e4 c6 2. b4 d5 3. b5 +B10 Caro-Kann Defense: Labahn Attack, Polish Variation 1. e4 c6 2. b4 e5 3. Bb2 +B10 Caro-Kann Defense: Scorpion-Horus Gambit 1. e4 c6 2. Nc3 d5 3. d3 dxe4 4. Bg5 +B10 Caro-Kann Defense: Spike Variation 1. e4 c6 2. g4 +B10 Caro-Kann Defense: Spike Variation, Scorpion-Grob Gambit 1. e4 c6 2. g4 d5 3. Nc3 dxe4 4. d3 +B10 Caro-Kann Defense: Toikkanen Gambit 1. e4 c6 2. c4 d5 3. e5 +B10 Caro-Kann Defense: Two Knights Attack 1. e4 c6 2. Nc3 d5 3. Nf3 +B11 Caro-Kann Defense: Two Knights Attack, Mindeno Variation 1. e4 c6 2. Nc3 d5 3. Nf3 Bg4 +B11 Caro-Kann Defense: Two Knights Attack, Mindeno Variation, Exchange Line 1. e4 c6 2. Nc3 d5 3. Nf3 Bg4 4. h3 Bxf3 +B11 Caro-Kann Defense: Two Knights Attack, Mindeno Variation, Retreat Line 1. e4 c6 2. Nc3 d5 3. Nf3 Bg4 4. h3 Bh5 +B12 Caro-Kann Defense 1. e4 c6 2. d4 +B12 Caro-Kann Defense 1. e4 c6 2. d4 d5 +B12 Caro-Kann Defense: Advance Variation 1. e4 c6 2. d4 d5 3. e5 +B12 Caro-Kann Defense: Advance Variation, Bayonet Attack 1. e4 c6 2. d4 d5 3. e5 Bf5 4. g4 +B12 Caro-Kann Defense: Advance Variation, Botvinnik-Carls Defense 1. e4 c6 2. d4 d5 3. e5 c5 +B12 Caro-Kann Defense: Advance Variation, Bronstein Variation 1. e4 c6 2. d4 d5 3. e5 Bf5 4. Ne2 +B12 Caro-Kann Defense: Advance Variation, Prins Attack 1. e4 c6 2. d4 d5 3. e5 Bf5 4. b4 +B12 Caro-Kann Defense: Advance Variation, Short Variation 1. e4 c6 2. d4 d5 3. e5 Bf5 4. Nf3 +B12 Caro-Kann Defense: Advance Variation, Tal Variation 1. e4 c6 2. d4 d5 3. e5 Bf5 4. h4 +B12 Caro-Kann Defense: Advance Variation, Van der Wiel Attack 1. e4 c6 2. d4 d5 3. e5 Bf5 4. Nc3 +B12 Caro-Kann Defense: Advance Variation, Van der Wiel Attack 1. e4 c6 2. d4 d5 3. e5 Bf5 4. Nc3 e6 5. g4 Bg6 6. Nge2 c5 7. h4 +B12 Caro-Kann Defense: Advance Variation, Van der Wiel Attack, Dreyev Defense 1. e4 c6 2. d4 d5 3. e5 Bf5 4. Nc3 Qb6 +B12 Caro-Kann Defense: Advance, Short Variation 1. e4 c6 2. d4 d5 3. e5 Bf5 4. c3 e6 5. Be2 +B12 Caro-Kann Defense: De Bruycker Defense 1. e4 c6 2. d4 Na6 +B12 Caro-Kann Defense: De Bruycker Defense 1. e4 c6 2. d4 Na6 3. Nc3 Nc7 +B12 Caro-Kann Defense: Edinburgh Variation 1. e4 c6 2. d4 d5 3. Nd2 Qb6 +B12 Caro-Kann Defense: Maróczy Variation 1. e4 c6 2. d4 d5 3. f3 +B12 Caro-Kann Defense: Maróczy Variation, Maróczy Gambit 1. e4 c6 2. d4 d5 3. f3 dxe4 4. fxe4 e5 5. Nf3 exd4 6. Bc4 +B12 Caro-Kann Defense: Masi Variation 1. e4 c6 2. d4 Nf6 +B12 Caro-Kann Defense: Massachusetts Defense 1. e4 c6 2. d4 f5 +B12 Caro-Kann Defense: Mieses Attack, Landau Gambit 1. e4 c6 2. d4 d5 3. Bd3 Nf6 4. e5 Nfd7 5. e6 +B12 Caro-Kann Defense: Mieses Gambit 1. e4 c6 2. d4 d5 3. Be3 +B12 Caro-Kann Defense: Modern Variation 1. e4 c6 2. d4 d5 3. Nd2 +B12 Caro-Kann Defense: Ulysses Gambit 1. e4 c6 2. d4 d5 3. Nf3 dxe4 4. Ng5 +B13 Caro-Kann Defense: Exchange Variation 1. e4 c6 2. d4 d5 3. exd5 +B13 Caro-Kann Defense: Exchange Variation, Bulla Attack 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. g4 +B13 Caro-Kann Defense: Exchange Variation, Rubinstein Variation 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. Bd3 Nc6 5. c3 Nf6 6. Bf4 +B13 Caro-Kann Defense: Panov Attack 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 +B13 Caro-Kann Defense: Panov Attack 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 +B13 Caro-Kann Defense: Panov Attack, Gunderam Attack 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. c5 +B13 Caro-Kann Defense: Panov Attack, Modern Defense 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 Nc6 +B13 Caro-Kann Defense: Panov Attack, Modern Defense, Carlsbad Line 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 Nc6 6. Bg5 e6 +B13 Caro-Kann Defense: Panov Attack, Modern Defense, Czerniak Line 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 Nc6 6. Bg5 Qa5 +B13 Caro-Kann Defense: Panov Attack, Modern Defense, Mieses Line 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 Nc6 6. Nf3 Bg4 +B13 Caro-Kann Defense: Panov Attack, Modern Defense, Reifir-Spielmann Line 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 Nc6 6. Bg5 Qb6 +B13 Caro-Kann Defense: Panov-Botvinnik, Herzog Defense 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 Nc6 6. Bg5 dxc4 7. d5 Na5 +B14 Caro-Kann Defense: Panov Attack 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 e6 +B14 Caro-Kann Defense: Panov Attack, Fianchetto Defense 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 g6 +B14 Caro-Kann Defense: Panov Attack, Fianchetto Defense, Fianchetto Gambit 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 g6 6. cxd5 Bg7 +B14 Caro-Kann Defense: Panov Attack, Main Line 1. e4 c6 2. d4 d5 3. exd5 cxd5 4. c4 Nf6 5. Nc3 e6 6. Nf3 Bb4 +B15 Caro-Kann Defense 1. e4 c6 2. d4 d5 3. Nc3 +B15 Caro-Kann Defense 1. e4 c6 2. d4 d5 3. Nc3 dxe4 +B15 Caro-Kann Defense: Alekhine Gambit 1. e4 c6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Nf6 5. Bd3 +B15 Caro-Kann Defense: Campomanes Attack 1. e4 c6 2. d4 d5 3. Nc3 Nf6 +B15 Caro-Kann Defense: Forgacs Variation 1. e4 c6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Nf6 5. Nxf6+ exf6 6. Bc4 +B15 Caro-Kann Defense: Gurgenidze Counterattack 1. e4 c6 2. d4 d5 3. Nc3 b5 +B15 Caro-Kann Defense: Gurgenidze System 1. e4 c6 2. d4 d5 3. Nc3 g6 +B15 Caro-Kann Defense: Main Line 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 +B15 Caro-Kann Defense: Rasa-Studier Gambit 1. e4 c6 2. d4 d5 3. Nc3 dxe4 4. f3 +B15 Caro-Kann Defense: Tartakower Variation 1. e4 c6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Nf6 5. Nxf6+ exf6 +B15 Caro-Kann Defense: von Hennig Gambit 1. e4 c6 2. d4 d5 3. Nc3 dxe4 4. Bc4 +B16 Caro-Kann Defense: Bronstein-Larsen Variation 1. e4 c6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Nf6 5. Nxf6+ gxf6 +B16 Caro-Kann Defense: Finnish Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 h6 +B17 Caro-Kann Defense: Karpov Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 +B17 Caro-Kann Defense: Karpov Variation, Modern Main Line 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 5. Ng5 Ngf6 6. Bd3 e6 7. N1f3 Bd6 8. Qe2 h6 9. Ne4 Nxe4 10. Qxe4 +B17 Caro-Kann Defense: Karpov Variation, Modern Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 5. Ng5 +B17 Caro-Kann Defense: Karpov Variation, Modern Variation, Ivanchuk Defense 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 5. Ng5 Ndf6 +B17 Caro-Kann Defense: Karpov Variation, Modern Variation, Kasparov Attack 1. e4 c6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Nd7 5. Nf3 Ngf6 6. Ng3 +B17 Caro-Kann Defense: Karpov Variation, Smyslov Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 5. Bc4 Ngf6 6. Ng5 e6 7. Qe2 Nb6 +B17 Caro-Kann Defense: Karpov Variation, Smyslov Variation, Main Line 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 5. Bc4 Ngf6 6. Ng5 e6 7. Qe2 Nb6 8. Bb3 +B17 Caro-Kann Defense: Karpov Variation, Tiviakov-Fischer Attack 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 5. Bc4 Ngf6 6. Nxf6+ Nxf6 +B18 Caro-Kann Defense: Classical Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 +B18 Caro-Kann Defense: Classical Variation, Flohr Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. Nh3 +B18 Caro-Kann Defense: Classical Variation, Main Line 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. h4 +B18 Caro-Kann Defense: Classical Variation, Maróczy Attack 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. f4 +B19 Caro-Kann Defense: Classical Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. h4 h6 7. Nf3 Nd7 +B19 Caro-Kann Defense: Classical Variation, Lobron System 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. h4 h6 7. Nf3 Nd7 8. h5 Bh7 9. Bd3 Bxd3 10. Qxd3 e6 11. Bd2 Ngf6 12. O-O-O Be7 +B19 Caro-Kann Defense: Classical Variation, Seirawan Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. h4 h6 7. Nf3 Nd7 8. h5 Bh7 9. Bd3 Bxd3 10. Qxd3 Ngf6 11. Bd2 e6 12. O-O-O Bd6 +B19 Caro-Kann Defense: Classical Variation, Spassky Variation 1. e4 c6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. h4 h6 7. Nf3 Nd7 8. h5 +B20 Sicilian Defense 1. e4 c5 +B20 Sicilian Defense: Amazon Attack 1. e4 c5 2. Qg4 +B20 Sicilian Defense: Big Clamp Formation 1. e4 c5 2. d3 Nc6 3. c3 d6 4. f4 +B20 Sicilian Defense: Bowdler Attack 1. e4 c5 2. Bc4 +B20 Sicilian Defense: Brick Variation 1. e4 c5 2. Nh3 +B20 Sicilian Defense: Euwe Attack, Prins Gambit 1. e4 c5 2. b3 d5 3. Bb2 +B20 Sicilian Defense: Gloria Variation 1. e4 c5 2. c4 d6 3. Nc3 Nc6 4. g3 h5 +B20 Sicilian Defense: Grob Variation 1. e4 c5 2. g4 +B20 Sicilian Defense: Keres Variation 1. e4 c5 2. Ne2 +B20 Sicilian Defense: King David's Opening 1. e4 c5 2. Ke2 +B20 Sicilian Defense: Kronberger Variation 1. e4 c5 2. Na3 +B20 Sicilian Defense: Kronberger Variation, Nemeth Gambit 1. e4 c5 2. Na3 Nc6 3. d4 cxd4 4. Bc4 +B20 Sicilian Defense: Lasker-Dunne Attack 1. e4 c5 2. g3 +B20 Sicilian Defense: Mengarini Variation 1. e4 c5 2. a3 +B20 Sicilian Defense: Myers Attack, with a4 1. e4 c5 2. a4 +B20 Sicilian Defense: Myers Attack, with h4 1. e4 c5 2. h4 +B20 Sicilian Defense: Snyder Variation 1. e4 c5 2. b3 +B20 Sicilian Defense: Snyder Variation, Queen Fianchetto Variation 1. e4 c5 2. b3 b6 +B20 Sicilian Defense: Staunton-Cochrane Variation 1. e4 c5 2. c4 +B20 Sicilian Defense: Wing Gambit 1. e4 c5 2. b4 +B20 Sicilian Defense: Wing Gambit, Abrahams Variation 1. e4 c5 2. b4 cxb4 3. Bb2 +B20 Sicilian Defense: Wing Gambit, Carlsbad Variation 1. e4 c5 2. b4 cxb4 3. a3 bxa3 +B20 Sicilian Defense: Wing Gambit, Marienbad Variation 1. e4 c5 2. b4 cxb4 3. a3 d5 4. exd5 Qxd5 5. Bb2 +B20 Sicilian Defense: Wing Gambit, Marshall Variation 1. e4 c5 2. b4 cxb4 3. a3 +B20 Sicilian Defense: Wing Gambit, Nanu Gambit 1. e4 c5 2. b4 cxb4 3. a3 d5 4. exd5 Qxd5 5. Nf3 e5 6. c4 Qe6 7. Bd3 +B20 Sicilian Defense: Wing Gambit, Romanian Defense 1. e4 c5 2. b4 cxb4 3. a3 d5 4. exd5 Qxd5 5. Nf3 e5 6. Bb2 Nc6 7. c4 Qe6 +B20 Sicilian Defense: Wing Gambit, Santasiere Variation 1. e4 c5 2. b4 cxb4 3. c4 +B21 Bird Opening: Dutch Variation, Batavo Gambit 1. e4 c5 2. f4 d5 3. Nf3 dxe4 +B21 Sicilian Defense: Coles Sicilian Gambit 1. e4 c5 2. d4 cxd4 3. Qxd4 Nc6 4. Qd1 Nf6 5. Bc4 +B21 Sicilian Defense: Halasz Gambit 1. e4 c5 2. d4 cxd4 3. f4 +B21 Sicilian Defense: McDonnell Attack 1. e4 c5 2. f4 +B21 Sicilian Defense: McDonnell Attack, Tal Gambit 1. e4 c5 2. f4 d5 3. exd5 Nf6 +B21 Sicilian Defense: Morphy Gambit 1. e4 c5 2. d4 cxd4 3. Nf3 +B21 Sicilian Defense: Morphy Gambit, Andreaschek Gambit 1. e4 c5 2. d4 cxd4 3. Nf3 e5 4. c3 +B21 Sicilian Defense: Smith-Morra Gambit 1. e4 c5 2. d4 +B21 Sicilian Defense: Smith-Morra Gambit 1. e4 c5 2. d4 cxd4 3. c3 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Chicago Defense 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 d6 5. Nf3 e6 6. Bc4 Nf6 7. O-O a6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Classical Formation 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 d6 6. Bc4 a6 7. O-O Nf6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Fianchetto Defense 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 g6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Finegold Defense 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 e6 5. Nf3 d6 6. Bc4 a6 7. O-O Be7 8. Qe2 Nf6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Kan Formation 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 e6 5. Nf3 a6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Larsen Defense 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 e6 6. Bc4 Qc7 7. Qe2 a6 8. O-O Bd6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Morphy Defense 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 e6 6. Bc4 Bc5 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Morphy Defense Deferred 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 e6 6. Bc4 a6 7. O-O b5 8. Bb3 Bc5 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Paulsen Formation 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 e6 6. Bc4 a6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Pin Defense 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 e6 6. Bc4 Bb4 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Scheveningen Formation 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Nf3 d6 6. Bc4 e6 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Sozin Formation 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Bc4 e6 6. Nf3 d6 7. O-O a6 8. Qe2 b5 +B21 Sicilian Defense: Smith-Morra Gambit Accepted, Taimanov Formation 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 e6 5. Bc4 a6 6. Nf3 Ne7 +B21 Sicilian Defense: Smith-Morra Gambit Declined, Alapin Formation 1. e4 c5 2. d4 cxd4 3. c3 Nf6 +B21 Sicilian Defense: Smith-Morra Gambit Declined, Center Formation 1. e4 c5 2. d4 cxd4 3. c3 e5 +B21 Sicilian Defense: Smith-Morra Gambit Declined, Dubois Variation 1. e4 c5 2. d4 cxd4 3. c3 d3 4. c4 +B21 Sicilian Defense: Smith-Morra Gambit Declined, Push Variation 1. e4 c5 2. d4 cxd4 3. c3 d3 +B21 Sicilian Defense: Smith-Morra Gambit Declined, Scandinavian Formation 1. e4 c5 2. d4 cxd4 3. c3 d5 +B21 Sicilian Defense: Smith-Morra Gambit Declined, Wing Formation 1. e4 c5 2. d4 cxd4 3. c3 Qa5 +B21 Sicilian Defense: Smith-Morra Gambit, Chicago Defense 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nxc3 Nc6 5. Bc4 e6 6. Nf3 d6 7. O-O a6 8. Qe2 b5 9. Bb3 Ra7 +B21 Sicilian Defense: Smith-Morra Gambit, Danish Variation 1. e4 c5 2. d4 cxd4 3. c3 dxc3 4. Nf3 +B22 Sicilian Defense: Alapin Variation 1. e4 c5 2. c3 +B22 Sicilian Defense: Alapin Variation, Barmen Defense 1. e4 c5 2. c3 d5 3. exd5 Qxd5 +B22 Sicilian Defense: Alapin Variation, Barmen Defense, Central Exchange 1. e4 c5 2. c3 d5 3. exd5 Qxd5 4. d4 cxd4 5. cxd4 Nc6 6. Nf3 Bg4 +B22 Sicilian Defense: Alapin Variation, Barmen Defense, Endgame Variation 1. e4 c5 2. c3 d5 3. exd5 Qxd5 4. d4 cxd4 5. cxd4 Nc6 6. Nf3 Bg4 7. Nc3 Bxf3 8. gxf3 Qxd4 9. Qxd4 Nxd4 +B22 Sicilian Defense: Alapin Variation, Barmen Defense, Milner-Barry Attack 1. e4 c5 2. c3 d5 3. exd5 Qxd5 4. d4 Nc6 5. Nf3 cxd4 6. cxd4 e5 7. Nc3 Bb4 8. Be2 +B22 Sicilian Defense: Alapin Variation, Barmen Defense, Modern Line 1. e4 c5 2. c3 d5 3. exd5 Qxd5 4. d4 Nf6 5. Nf3 Bg4 +B22 Sicilian Defense: Alapin Variation, Smith-Morra Declined 1. e4 c5 2. c3 Nf6 3. e5 Nd5 4. d4 cxd4 +B22 Sicilian Defense: Alapin Variation, Stoltz Attack 1. e4 c5 2. c3 Nf6 3. e5 Nd5 4. Nf3 Nc6 5. Bc4 Nb6 6. Bb3 +B22 Sicilian Defense: Alapin Variation, Stoltz Attack, Ivanchuk Line 1. e4 c5 2. c3 Nf6 3. e5 Nd5 4. Nf3 Nc6 5. Bc4 Nb6 6. Bb3 c4 7. Bc2 Qc7 8. Qe2 g5 +B22 Sicilian Defense: Heidenfeld Variation 1. e4 c5 2. c3 Nf6 3. e5 Nd5 4. Nf3 Nc6 5. Na3 +B23 Sicilian Defense: Closed 1. e4 c5 2. Nc3 +B23 Sicilian Defense: Closed 1. e4 c5 2. Nc3 e6 +B23 Sicilian Defense: Closed 1. e4 c5 2. Nc3 e6 3. g3 +B23 Sicilian Defense: Closed, Chameleon Variation 1. e4 c5 2. Nc3 Nc6 3. Nge2 +B23 Sicilian Defense: Closed, Grob Attack 1. e4 c5 2. Nc3 Nc6 3. g4 +B23 Sicilian Defense: Closed, Korchnoi Defense 1. e4 c5 2. Nc3 e6 3. g3 d5 +B23 Sicilian Defense: Closed, Traditional 1. e4 c5 2. Nc3 Nc6 +B23 Sicilian Defense: Grand Prix Attack 1. e4 c5 2. Nc3 Nc6 3. f4 +B23 Sicilian Defense: Grand Prix Attack, Schofman Variation 1. e4 c5 2. Nc3 Nc6 3. f4 g6 4. Nf3 Bg7 5. Bc4 e6 6. f5 +B24 Sicilian Defense: Closed 1. e4 c5 2. Nc3 Nc6 3. g3 g6 +B24 Sicilian Defense: Closed 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 +B24 Sicilian Defense: Closed, Fianchetto Variation 1. e4 c5 2. Nc3 Nc6 3. g3 +B24 Sicilian Defense: Closed, Smyslov Variation 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 e6 6. Be3 Nd4 7. Nce2 +B25 Sicilian Defense: Closed 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 +B25 Sicilian Defense: Closed 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 6. f4 +B25 Sicilian Defense: Closed, Botvinnik Defense, Edge Variation 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 6. f4 e5 7. Nh3 Nge7 +B25 Sicilian Defense: Closed, Botvinnik Defense, with Nge2 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 6. Nge2 e5 +B25 Sicilian Defense: Closed, Botvinnik Defense, with f4 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 6. f4 e5 +B26 Sicilian Defense: Closed 1. e4 c5 2. Nc3 Nc6 3. g3 g6 4. Bg2 Bg7 5. d3 d6 6. Be3 +B27 Modern Defense: Pterodactyl Variation 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. Nc3 Qa5 +B27 Pterodactyl Defense: Sicilian, Anhanguera 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. Nc3 Qa5 5. Be3 +B27 Pterodactyl Defense: Sicilian, Benoni Gambit 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. Nc3 Qa5 5. d5 +B27 Pterodactyl Defense: Sicilian, Pteranodon 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. dxc5 Qa5+ 5. Nc3 Bxc3+ 6. bxc3 +B27 Pterodactyl Defense: Sicilian, Rhamphorhynchus 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. dxc5 Qa5+ 5. Nc3 +B27 Pterodactyl Defense: Sicilian, Unpin 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. Nc3 Qa5 5. Bd2 +B27 Pterodactyl Defense: Western, Pterodactyl 1. e4 c5 2. Nf3 g6 3. c3 Bg7 4. d4 Qa5 +B27 Pterodactyl Defense: Western, Rhamphorhynchus 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. dxc5 Qa5+ +B27 Sicilian Defense 1. e4 c5 2. Nf3 +B27 Sicilian Defense: Acton Extension 1. e4 c5 2. Nf3 g6 3. c4 Bh6 +B27 Sicilian Defense: Brussels Gambit 1. e4 c5 2. Nf3 f5 +B27 Sicilian Defense: Bücker Variation 1. e4 c5 2. Nf3 h6 +B27 Sicilian Defense: Double-Dutch Gambit 1. e4 c5 2. Nf3 f5 3. exf5 Nh6 +B27 Sicilian Defense: Frederico Variation 1. e4 c5 2. Nf3 g6 3. d4 f5 +B27 Sicilian Defense: Hyperaccelerated Dragon 1. e4 c5 2. Nf3 g6 +B27 Sicilian Defense: Hyperaccelerated Fianchetto 1. e4 c5 2. Nf3 g6 3. d4 +B27 Sicilian Defense: Hyperaccelerated Pterodactyl 1. e4 c5 2. Nf3 g6 3. d4 Bg7 +B27 Sicilian Defense: Hyperaccelerated Pterodactyl, Exchange Variation 1. e4 c5 2. Nf3 g6 3. d4 Bg7 4. dxc5 Qa5+ 5. Nc3 Bxc3+ 6. bxc3 Qxc3+ +B27 Sicilian Defense: Jalalabad Variation 1. e4 c5 2. Nf3 e5 +B27 Sicilian Defense: Katalimov Variation 1. e4 c5 2. Nf3 b6 +B27 Sicilian Defense: Mongoose Variation 1. e4 c5 2. Nf3 Qa5 +B27 Sicilian Defense: Polish Gambit 1. e4 c5 2. Nf3 b5 +B27 Sicilian Defense: Quinteros Variation 1. e4 c5 2. Nf3 Qc7 +B28 Sicilian Defense: O'Kelly Variation 1. e4 c5 2. Nf3 a6 +B28 Sicilian Defense: O'Kelly Variation, Aronin System 1. e4 c5 2. Nf3 a6 3. Be2 +B28 Sicilian Defense: O'Kelly Variation, Kieseritzky System 1. e4 c5 2. Nf3 a6 3. b3 +B28 Sicilian Defense: O'Kelly Variation, Maróczy Bind 1. e4 c5 2. Nf3 a6 3. c4 +B28 Sicilian Defense: O'Kelly Variation, Maróczy Bind, Paulsen Line 1. e4 c5 2. Nf3 a6 3. c4 e6 +B28 Sicilian Defense: O'Kelly Variation, Maróczy Bind, Robatsch Line 1. e4 c5 2. Nf3 a6 3. c4 d6 +B28 Sicilian Defense: O'Kelly Variation, Normal System 1. e4 c5 2. Nf3 a6 3. d4 +B28 Sicilian Defense: O'Kelly Variation, Normal System, Cortlever Gambit 1. e4 c5 2. Nf3 a6 3. d4 cxd4 4. Bc4 +B28 Sicilian Defense: O'Kelly Variation, Normal System, Smith-Morra Line 1. e4 c5 2. Nf3 a6 3. d4 cxd4 4. c3 +B28 Sicilian Defense: O'Kelly Variation, Normal System, Taimanov Line 1. e4 c5 2. Nf3 a6 3. d4 cxd4 4. Nxd4 e5 +B28 Sicilian Defense: O'Kelly Variation, Normal System, Zagorovsky Line 1. e4 c5 2. Nf3 a6 3. d4 cxd4 4. Qxd4 +B28 Sicilian Defense: O'Kelly Variation, Quiet System 1. e4 c5 2. Nf3 a6 3. d3 +B28 Sicilian Defense: O'Kelly Variation, Réti System 1. e4 c5 2. Nf3 a6 3. g3 +B28 Sicilian Defense: O'Kelly Variation, Venice System 1. e4 c5 2. Nf3 a6 3. c3 +B28 Sicilian Defense: O'Kelly Variation, Venice System, Barcza Line 1. e4 c5 2. Nf3 a6 3. c3 Nf6 +B28 Sicilian Defense: O'Kelly Variation, Venice System, Gambit Line 1. e4 c5 2. Nf3 a6 3. c3 d5 4. exd5 Nf6 +B28 Sicilian Defense: O'Kelly Variation, Venice System, Ljubojevic Line 1. e4 c5 2. Nf3 a6 3. c3 b5 +B28 Sicilian Defense: O'Kelly Variation, Venice System, Steiner Line 1. e4 c5 2. Nf3 a6 3. c3 d6 +B28 Sicilian Defense: O'Kelly Variation, Wing Gambit 1. e4 c5 2. Nf3 a6 3. b4 +B28 Sicilian Defense: O'Kelly Variation, Yerevan System 1. e4 c5 2. Nf3 a6 3. Nc3 +B29 Sicilian Defense: Nimzowitsch Variation 1. e4 c5 2. Nf3 Nf6 +B29 Sicilian Defense: Nimzowitsch Variation, Advance Variation 1. e4 c5 2. Nf3 Nf6 3. e5 +B29 Sicilian Defense: Nimzowitsch Variation, Closed Variation 1. e4 c5 2. Nf3 Nf6 3. Nc3 +B29 Sicilian Defense: Nimzowitsch Variation, Exchange Variation 1. e4 c5 2. Nf3 Nf6 3. e5 Nd5 4. Nc3 Nxc3 +B29 Sicilian Defense: Nimzowitsch Variation, Main Line 1. e4 c5 2. Nf3 Nf6 3. e5 Nd5 4. Nc3 e6 5. Nxd5 exd5 6. d4 Nc6 +B30 Sicilian Defense: Closed, Anti-Sveshnikov Variation, Kharlov-Kramnik Line 1. e4 c5 2. Nf3 Nc6 3. Nc3 e5 4. Bc4 Be7 5. d3 d6 6. Nd2 Bg5 +B30 Sicilian Defense: Nyezhmetdinov-Rossolimo Attack 1. e4 c5 2. Nf3 Nc6 3. Bb5 +B30 Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, San Francisco Gambit 1. e4 c5 2. Nf3 Nc6 3. Bb5 Na5 4. b4 +B30 Sicilian Defense: Old Sicilian 1. e4 c5 2. Nf3 Nc6 +B30 Sicilian Defense: Portsmouth Gambit 1. e4 c5 2. Nf3 Nc6 3. b4 +B30 Sicilian Defense: Rossolimo Variation, Brooklyn Retreat Defense 1. e4 c5 2. Nf3 Nc6 3. Bb5 Nb8 +B31 Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation 1. e4 c5 2. Nf3 Nc6 3. Bb5 g6 +B31 Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Gufeld Gambit 1. e4 c5 2. Nf3 Nc6 3. Bb5 g6 4. O-O Bg7 5. c3 e5 6. d4 +B31 Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Lutikov Gambit 1. e4 c5 2. Nf3 Nc6 3. Bb5 g6 4. O-O Bg7 5. c3 Nf6 6. d4 +B31 Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Totsky Attack 1. e4 c5 2. Nf3 Nc6 3. Bb5 g6 4. O-O Bg7 5. c3 Nf6 6. Qa4 +B31 Sicilian Defense: Nyezhmetdinov-Rossolimo Attack, Gurgenidze Variation 1. e4 c5 2. Nf3 Nc6 3. Bb5 g6 4. O-O Bg7 5. Re1 e5 6. b4 +B32 Sicilian Defense: Accelerated Dragon 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 +B32 Sicilian Defense: Flohr Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Qc7 +B32 Sicilian Defense: Franco-Sicilian Variation 1. e4 c5 2. Nf3 Nc6 3. d4 e6 +B32 Sicilian Defense: Godiva Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Qb6 +B32 Sicilian Defense: Kalashnikov Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 e5 5. Nb5 d6 +B32 Sicilian Defense: Löwenthal Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 e5 +B32 Sicilian Defense: Nimzo-American Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 d5 +B32 Sicilian Defense: O'Kelly Variation, Maróczy Bind, Geller Line 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 a6 5. c4 e5 +B32 Sicilian Defense: Open 1. e4 c5 2. Nf3 Nc6 3. d4 +B32 Sicilian Defense: Open 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 +B32 Sicilian Defense: Open 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 +B33 Sicilian Defense: Four Knights Variation, Cobra Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e6 6. Ndb5 Bc5 +B33 Sicilian Defense: Lasker-Pelikan Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 +B33 Sicilian Defense: Lasker-Pelikan Variation, Bird Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Ndb5 d6 7. Bg5 a6 8. Na3 Be6 +B33 Sicilian Defense: Lasker-Pelikan Variation, Exchange Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Nxc6 +B33 Sicilian Defense: Lasker-Pelikan Variation, Retreat Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Nf3 +B33 Sicilian Defense: Lasker-Pelikan Variation, Schlechter Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Nb3 +B33 Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Ndb5 d6 7. Bg5 a6 8. Na3 b5 +B33 Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Ndb5 d6 7. Bg5 a6 8. Na3 b5 9. Bxf6 gxf6 10. Nd5 f5 +B33 Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation, Chelyabinsk Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Ndb5 d6 7. Bg5 a6 8. Na3 b5 9. Nd5 +B33 Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation, Novosibirsk Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Ndb5 d6 7. Bg5 a6 8. Na3 b5 9. Bxf6 gxf6 10. Nd5 Bg7 +B33 Sicilian Defense: Lasker-Pelikan Variation, Sveshnikov Variation, Peresypkin's Sacrifice 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Ndb5 d6 7. Bg5 a6 8. Na3 b5 9. Bxf6 gxf6 10. Nd5 f5 11. Bxb5 +B33 Sicilian Defense: Open 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 +B34 Sicilian Defense: Accelerated Dragon, Exchange Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. Nxc6 +B34 Sicilian Defense: Accelerated Dragon, Modern Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. Nc3 +B35 Sicilian Defense: Accelerated Dragon, Modern Bc4 Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. Nc3 Bg7 6. Be3 Nf6 7. Bc4 +B35 Sicilian Defense: Dragon Variation, Modern Bc4 Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. Nc3 Bg7 6. Be3 Nf6 7. Bc4 d6 +B36 Sicilian Defense: Accelerated Dragon, Maróczy Bind 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. c4 +B36 Sicilian Defense: Accelerated Dragon, Maróczy Bind, Gurgenidze Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. c4 Nf6 6. Nc3 Nxd4 7. Qxd4 d6 +B37 Sicilian Defense: Accelerated Dragon, Maróczy Bind 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. c4 Bg7 +B37 Sicilian Defense: Accelerated Dragon, Simagin Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. c4 Bg7 6. Nc2 d6 7. Be2 Nh6 +B38 Sicilian Defense: Accelerated Dragon, Maróczy Bind 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. c4 Bg7 6. Be3 +B39 Sicilian Defense: Accelerated Dragon, Maróczy Bind, Breyer Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. c4 Bg7 6. Be3 Nf6 7. Nc3 Ng4 +B40 Sicilian Defense: Alapin Variation, Sherzer Variation 1. e4 c5 2. Nf3 e6 3. c3 Nf6 4. e5 Nd5 5. d4 Nc6 +B40 Sicilian Defense: Delayed Alapin Variation 1. e4 c5 2. Nf3 e6 3. c3 +B40 Sicilian Defense: Drazic Variation 1. e4 c5 2. Nf3 e6 3. d4 a6 +B40 Sicilian Defense: Four Knights Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 +B40 Sicilian Defense: Four Knights Variation, Exchange Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Nxc6 +B40 Sicilian Defense: French Variation 1. e4 c5 2. Nf3 e6 +B40 Sicilian Defense: French Variation, Normal 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 +B40 Sicilian Defense: French Variation, Open 1. e4 c5 2. Nf3 e6 3. d4 cxd4 +B40 Sicilian Defense: French Variation, Westerinen Attack 1. e4 c5 2. Nf3 e6 3. b3 +B40 Sicilian Defense: Gaw-Paw Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Qb6 +B40 Sicilian Defense: Kan Variation, Wing Attack, Fianchetto Variation 1. e4 c5 2. Nf3 e6 3. Nc3 a6 4. g3 b5 5. d4 cxd4 6. Nxd4 +B40 Sicilian Defense: Kramnik Variation 1. e4 c5 2. Nf3 e6 3. c4 +B40 Sicilian Defense: Kveinis Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Qb6 +B40 Sicilian Defense: Marshall Counterattack 1. e4 c5 2. Nf3 e6 3. d4 d5 +B40 Sicilian Defense: Paulsen-Basman Defense 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Bc5 +B40 Sicilian Defense: Pin Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Bb4 +B40 Sicilian Defense: Pin Variation, Jaffe Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Bb4 6. Bd3 e5 +B40 Sicilian Defense: Pin Variation, Koch Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Bb4 6. e5 +B40 Sicilian Defense: Smith-Morra Gambit Deferred 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. c3 +B40 Sicilian Defense: Wing Gambit Deferred 1. e4 c5 2. Nf3 e6 3. b4 +B41 Sicilian Defense: Kan Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 +B41 Sicilian Defense: Kan Variation, Maróczy Bind, Bronstein Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. c4 Nf6 6. Nc3 Bb4 7. Bd3 Nc6 +B41 Sicilian Defense: Kan Variation, Maróczy Bind, Bronstein Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. c4 Nf6 6. Nc3 Bb4 7. Bd3 Nc6 8. Bc2 +B41 Sicilian Defense: Kan Variation, Maróczy Bind, Hedgehog Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. c4 g6 +B41 Sicilian Defense: Kan Variation, Maróczy Bind, Réti Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. c4 +B42 Sicilian Defense: Kan Variation, Gipslis Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Bd3 Nf6 6. O-O d6 7. c4 g6 +B42 Sicilian Defense: Kan Variation, Modern Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Bd3 +B42 Sicilian Defense: Kan Variation, Polugaevsky Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Bd3 Bc5 +B42 Sicilian Defense: Kan Variation, Swiss Cheese Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Bd3 g6 +B43 Sicilian Defense: Kan Variation, Knight Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Nc3 +B43 Sicilian Defense: Kan Variation, Wing Attack 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Nc3 b5 +B43 Sicilian Defense: Kan Variation, Wing Attack, Christiansen's Dream 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Nc3 b5 6. Bd3 Qb6 7. Be3 Bc5 8. Qg4 +B43 Sicilian Defense: Kan Variation, Wing Attack, Spraggett Attack 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 a6 5. Nc3 b5 6. Bd3 Qb6 7. Nf3 +B44 Sicilian Defense: Taimanov Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 +B44 Sicilian Defense: Taimanov Variation, Gary Gambit 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nb5 d6 6. c4 Nf6 7. N1c3 a6 8. Na3 d5 +B44 Sicilian Defense: Taimanov Variation, Modern Line 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nb5 d6 6. c4 Nf6 7. N1c3 a6 8. Na3 Be7 9. Be2 O-O 10. O-O b6 +B44 Sicilian Defense: Taimanov Variation, Szén Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nb5 +B45 Sicilian Defense: Taimanov Variation, American Attack 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Nf6 6. Ndb5 Bb4 7. Nd6+ +B45 Sicilian Defense: Taimanov Variation, Normal Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 +B46 Sicilian Defense: Taimanov Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 a6 +B47 Sicilian Defense: Taimanov Variation, Bastrikov Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Qc7 +B47 Sicilian Defense: Taimanov Variation, Bastrikov Variation, Ponomariov Gambit 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Qc7 6. Ndb5 Qb8 7. Be3 a6 8. Bb6 +B48 Sicilian Defense: Taimanov Variation, Bastrikov Variation, English Attack 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Qc7 6. Be3 +B49 Sicilian Defense: Taimanov Variation, Bastrikov Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Qc7 6. Be3 a6 7. Be2 +B50 Sicilian Defense 1. e4 c5 2. Nf3 d6 3. d4 +B50 Sicilian Defense 1. e4 c5 2. Nf3 d6 3. d4 cxd4 +B50 Sicilian Defense: Delayed Alapin 1. e4 c5 2. Nf3 d6 3. c3 +B50 Sicilian Defense: Delayed Alapin, Basman-Palatnik Double Gambit 1. e4 c5 2. Nf3 d6 3. c3 Nf6 4. Be2 Nc6 5. d4 cxd4 6. cxd4 Nxe4 7. d5 Qa5+ 8. Nc3 Nxc3 9. bxc3 +B50 Sicilian Defense: Delayed Alapin, Basman-Palatnik Gambit 1. e4 c5 2. Nf3 d6 3. c3 Nf6 4. Be2 Nc6 5. d4 cxd4 6. cxd4 Nxe4 +B50 Sicilian Defense: Kopec System 1. e4 c5 2. Nf3 d6 3. Bd3 +B50 Sicilian Defense: Kotov Gambit 1. e4 c5 2. Nf3 d6 3. g3 b5 +B50 Sicilian Defense: Modern Variations 1. e4 c5 2. Nf3 d6 +B50 Sicilian Defense: Modern Variations, Anti-Qxd4 Move Order 1. e4 c5 2. Nf3 d6 3. d4 Nf6 +B50 Sicilian Defense: Modern Variations, Anti-Qxd4 Move Order Accepted 1. e4 c5 2. Nf3 d6 3. d4 Nf6 4. dxc5 Nxe4 +B50 Sicilian Defense: Modern Variations, Tartakower 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. c3 +B50 Sicilian Defense: Wing Gambit, Deferred Variation 1. e4 c5 2. Nf3 d6 3. b4 +B51 Sicilian Defense: Moscow Variation 1. e4 c5 2. Nf3 d6 3. Bb5+ +B51 Sicilian Defense: Moscow Variation, Dorfman Gambit 1. e4 c5 2. Nf3 d6 3. Bb5+ Nc6 4. O-O Bd7 5. Qe2 g6 6. e5 +B51 Sicilian Defense: Moscow Variation, Moscow Gambit 1. e4 c5 2. Nf3 d6 3. Bb5+ Nc6 4. O-O Bd7 5. c3 Nf6 6. Re1 a6 7. Bxc6 Bxc6 8. d4 Bxe4 9. Bg5 +B52 Sicilian Defense: Moscow Variation, Haag Gambit 1. e4 c5 2. Nf3 d6 3. Bb5+ Bd7 4. Bxd7+ Qxd7 5. O-O Nc6 6. c3 Nf6 7. d4 +B52 Sicilian Defense: Moscow Variation, Main Line 1. e4 c5 2. Nf3 d6 3. Bb5+ Bd7 +B52 Sicilian Defense: Moscow Variation, Sokolsky Variation 1. e4 c5 2. Nf3 d6 3. Bb5+ Bd7 4. Bxd7+ Qxd7 5. c4 +B53 Sicilian Defense: Chekhover Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Qxd4 +B53 Sicilian Defense: Chekhover Variation, Zaitsev Defense 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Qxd4 Nc6 5. Bb5 Qd7 +B54 Sicilian Defense: Dragon Variation, Accelerated Dragon 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 g6 +B54 Sicilian Defense: Modern Variations, Ginsberg Gambit 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Bc4 +B54 Sicilian Defense: Modern Variations, Main Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 +B54 Sicilian Defense: Prins Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. f3 +B55 Sicilian Defense: Prins Variation, Venice Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. f3 e5 6. Bb5+ +B56 Sicilian Defense: Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 +B56 Sicilian Defense: Classical Variation, Fianchetto Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. g3 +B56 Sicilian Defense: Kupreichik Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Bd7 +B56 Sicilian Defense: Spielmann Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Nde2 +B56 Sicilian Defense: Venice Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 e5 6. Bb5+ +B56 Sicilian Defense: Yates Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bd3 +B57 Sicilian Defense: Classical Variation, Anti-Sozin Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bc4 Qb6 +B57 Sicilian Defense: Classical Variation, Sozin Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bc4 +B57 Sicilian Defense: Magnus Smith Trap 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bc4 g6 7. Nxc6 bxc6 8. e5 +B58 Sicilian Defense: Boleslavsky Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Be2 e5 +B58 Sicilian Defense: Boleslavsky Variation, Louma Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 e5 7. Nxc6 +B58 Sicilian Defense: Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Be2 +B58 Sicilian Defense: Classical Variation, Dragon Transfer 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Be2 Nxd4 7. Qxd4 g6 +B59 Sicilian Defense: Boleslavsky Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 e5 7. Nb3 +B60 Sicilian Defense: Richter-Rauzer Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 +B60 Sicilian Defense: Richter-Rauzer Variation, Dragon Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bg5 g6 +B60 Sicilian Defense: Richter-Rauzer Variation, Modern Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 Bd7 +B61 Sicilian Defense: Richter-Rauzer Variation, Modern Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bg5 Bd7 7. Qd2 +B62 Sicilian Defense: Richter-Rauzer Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 +B62 Sicilian Defense: Richter-Rauzer Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd3 +B62 Sicilian Defense: Richter-Rauzer Variation, Exchange Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Nxc6 +B62 Sicilian Defense: Richter-Rauzer Variation, Podebrady Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bg5 e6 7. Nb3 +B62 Sicilian Defense: Richter-Rauzer Variation, Vitolins Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Bb5 +B63 Sicilian Defense: Richter-Rauzer Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 Be7 +B63 Sicilian Defense: Richter-Rauzer Variation, Classical Variation, Kantscher Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 Be7 8. O-O-O Nxd4 9. Qxd4 a6 10. f4 b5 +B63 Sicilian Defense: Richter-Rauzer Variation, Ivanov Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 Qb6 +B63 Sicilian Defense: Richter-Rauzer Variation, Traditional Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 +B64 Sicilian Defense: Richter-Rauzer Variation, Classical Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bg5 e6 7. Qd2 Be7 8. O-O-O O-O 9. f4 e5 +B64 Sicilian Defense: Richter-Rauzer Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 Be7 8. O-O-O O-O 9. f4 +B65 Sicilian Defense: Richter-Rauzer Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 Be7 8. O-O-O O-O 9. f4 Nxd4 10. Qxd4 +B65 Sicilian Defense: Richter-Rauzer Variation, Rauzer Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 Be7 8. O-O-O O-O 9. f4 Nxd4 +B66 Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation, Early Deviations 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bg5 e6 7. Qd2 a6 +B67 Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bg5 e6 7. Qd2 a6 8. O-O-O Bd7 +B68 Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bg5 e6 7. Qd2 a6 8. O-O-O Bd7 9. f4 Be7 +B69 Sicilian Defense: Richter-Rauzer Variation, Neo-Modern Variation, Nyezhmetdinov Attack 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bg5 e6 7. Qd2 a6 8. O-O-O Bd7 9. f4 Be7 10. Nf3 b5 11. Bxf6 +B70 Sicilian Defense: Dragon Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 +B70 Sicilian Defense: Dragon Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be2 +B70 Sicilian Defense: Dragon Variation, Fianchetto Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. g3 +B71 Sicilian Defense: Dragon Variation, Levenfish Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. f4 +B71 Sicilian Defense: Dragon Variation, Levenfish Variation, Main Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. f4 Nbd7 +B72 Sicilian Defense: Dragon Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 +B72 Sicilian Defense: Dragon Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. Be2 +B72 Sicilian Defense: Dragon Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. Be2 Nc6 +B72 Sicilian Defense: Dragon Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. Be2 Nc6 8. Nb3 +B72 Sicilian Defense: Dragon Variation, Classical Variation, Amsterdam Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 g6 7. Be3 Bg7 8. Qd2 +B72 Sicilian Defense: Dragon Variation, Classical Variation, Grigoriev Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 g6 7. Be3 Bg7 8. Qd2 O-O 9. O-O-O +B73 Sicilian Defense: Dragon Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be2 Bg7 7. O-O Nc6 8. Be3 +B73 Sicilian Defense: Dragon Variation, Classical Variation, Battery Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be2 Bg7 7. O-O O-O 8. Be3 Nc6 9. Qd2 +B73 Sicilian Defense: Dragon Variation, Classical Variation, Zollner Gambit 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. Be3 Bg7 6. Be2 Nf6 7. Nc3 O-O 8. O-O d6 9. f4 Qb6 10. e5 +B74 Sicilian Defense: Dragon Variation, Classical Variation, Alekhine Line 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. Nc3 Bg7 6. Be3 Nf6 7. Be2 O-O 8. O-O d6 9. Nb3 a5 +B74 Sicilian Defense: Dragon Variation, Classical Variation, Bernard Defense 1. e4 c5 2. Nf3 g6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 Bg7 7. O-O O-O 8. Be3 Nc6 9. Nb3 Be6 10. f4 Na5 11. f5 Bc4 12. Bd3 Bxd3 13. cxd3 d5 +B74 Sicilian Defense: Dragon Variation, Classical Variation, Maróczy Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be2 Bg7 7. O-O O-O 8. Be3 Nc6 9. Nb3 Be6 10. f4 Na5 +B74 Sicilian Defense: Dragon Variation, Classical Variation, Normal Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be2 Bg7 7. O-O O-O 8. Be3 Nc6 9. Nb3 +B74 Sicilian Defense: Dragon Variation, Classical Variation, Spielmann Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 g6 5. Nc3 Bg7 6. Be3 Nf6 7. Be2 O-O 8. Nb3 d6 9. O-O Be6 10. f4 Na5 11. f5 Bc4 12. Bd3 +B74 Sicilian Defense: Dragon Variation, Classical Variation, Stockholm Attack 1. e4 c5 2. Nc3 d6 3. f4 Nc6 4. Nf3 g6 5. d4 cxd4 6. Nxd4 Bg7 7. Be3 Nf6 8. Be2 O-O 9. Nb3 Be6 10. O-O Na5 11. f5 Bc4 12. Nxa5 Bxe2 13. Qxe2 Qxa5 14. g4 +B74 Sicilian Defense: Dragon Variation, Classical Variation, Tartakower Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be2 Bg7 7. O-O O-O 8. Be3 Nc6 9. Nb3 Be6 10. f4 Qc8 +B75 Sicilian Defense: Dragon Variation, Yugoslav Attack, Belezky Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 Nc6 +B75 Sicilian Defense: Dragon Variation, Yugoslav Attack, Early Deviations 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 +B76 Sicilian Defense: Dragon Variation, Yugoslav Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O +B76 Sicilian Defense: Dragon Variation, Yugoslav Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 +B76 Sicilian Defense: Dragon Variation, Yugoslav Attack, Modern Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 Nc6 8. Qd2 O-O 9. O-O-O +B76 Sicilian Defense: Dragon Variation, Yugoslav Attack, Panov Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. g4 +B77 Sicilian Defense: Dragon Variation, Yugoslav Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. Bc4 Bd7 +B77 Sicilian Defense: Dragon Variation, Yugoslav Attack, Byrne Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. Bc4 a5 +B77 Sicilian Defense: Dragon Variation, Yugoslav Attack, Czerniak Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 Nc6 8. Qd2 O-O 9. Bc4 Nxd4 10. Bxd4 Be6 +B77 Sicilian Defense: Dragon Variation, Yugoslav Attack, Main Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. Bc4 +B77 Sicilian Defense: Dragon Variation, Yugoslav Attack, Sosonko Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 Nc6 8. Qd2 O-O 9. Bc4 Nd7 +B78 Sicilian Defense: Dragon Variation, Yugoslav Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. Bc4 Bd7 10. O-O-O +B78 Sicilian Defense: Dragon Variation, Yugoslav Attack, Old Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. Bc4 Bd7 10. O-O-O Rc8 +B79 Sicilian Defense: Dragon Variation, Yugoslav Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. Bc4 Bd7 10. h4 Qa5 11. O-O-O Rfc8 12. Bb3 +B79 Sicilian Defense: Dragon Variation, Yugoslav Attack, Soltis Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 g6 6. Be3 Bg7 7. f3 O-O 8. Qd2 Nc6 9. Bc4 Bd7 10. O-O-O Qa5 11. h4 Rfc8 12. Bb3 h5 +B80 Sicilian Defense: Scheveningen Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 +B80 Sicilian Defense: Scheveningen Variation, English Attack, with Qd2 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be3 e6 7. Qd2 +B80 Sicilian Defense: Scheveningen Variation, Fianchetto Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. g3 +B80 Sicilian Defense: Scheveningen Variation, Vitolins Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bb5+ +B81 Sicilian Defense: Scheveningen Variation, Keres Attack 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. g4 +B82 Sicilian Defense: Scheveningen Variation, Matanovic Attack 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. f4 +B82 Sicilian Defense: Scheveningen Variation, Tal Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. f4 Nc6 7. Be3 Be7 8. Qf3 +B83 Sicilian Defense: Scheveningen Variation, Classical Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 +B83 Sicilian Defense: Scheveningen Variation, Modern Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 d6 6. Be2 Nf6 +B83 Sicilian Defense: Scheveningen Variation, Modern Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 Be7 7. O-O O-O 8. f4 Nc6 9. Be3 +B83 Sicilian Defense: Scheveningen Variation, Modern Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Be2 Be7 7. O-O O-O 8. f4 Nc6 9. Be3 Bd7 10. Nb3 +B84 Sicilian Defense: Najdorf Variation, Scheveningen Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e6 7. O-O Nbd7 +B84 Sicilian Defense: Scheveningen Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e6 +B84 Sicilian Defense: Scheveningen Variation, Classical Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e6 7. O-O Qc7 +B85 Sicilian Defense: Scheveningen Variation, Classical Main Line 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Qc7 6. Be2 a6 7. O-O Nf6 8. Be3 Be7 9. f4 d6 10. Qe1 O-O +B85 Sicilian Defense: Scheveningen Variation, Classical Variation, Paulsen Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. f4 e6 7. Be2 Qc7 8. O-O Nc6 +B85 Sicilian Defense: Scheveningen Variation, Classical Variation, Paulsen Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Qc7 6. Be2 a6 7. O-O Nf6 8. Be3 d6 9. f4 +B85 Sicilian Defense: Scheveningen Variation, Classical Variation, Paulsen Variation 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 Qc7 6. Be2 a6 7. O-O Nf6 8. Kh1 Be7 9. f4 d6 10. a4 +B86 Sicilian Defense: Sozin Attack 1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bc4 +B87 Sicilian Defense: Sozin Attack, Flank Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bc4 e6 7. Bb3 b5 +B88 Sicilian Defense: Sozin Attack, Fischer Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bc4 e6 7. Bb3 Be7 8. Be3 O-O 9. f4 +B88 Sicilian Defense: Sozin Attack, Leonhardt Variation 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bc4 e6 +B89 Sicilian Defense: Sozin Attack, Main Line 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bc4 e6 7. Be3 +B89 Sicilian Defense: Sozin Attack, Main Line, Sherbakov Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 Nc6 6. Bc4 e6 7. Be3 Be7 8. Bb3 O-O 9. O-O Na5 10. f4 b6 +B89 Sicilian Defense: Velimirovic Attack 1. e4 c5 2. Nf3 Nc6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 d6 6. Bc4 e6 7. Be3 Be7 8. Qe2 +B90 Sicilian Defense: Najdorf Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 +B90 Sicilian Defense: Najdorf Variation, Adams Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. h3 +B90 Sicilian Defense: Najdorf Variation, Dekker Gambit 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. g4 +B90 Sicilian Defense: Najdorf Variation, English Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be3 +B90 Sicilian Defense: Najdorf Variation, English Attack, Anti-English 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be3 Ng4 +B90 Sicilian Defense: Najdorf Variation, Freak Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Rg1 +B90 Sicilian Defense: Najdorf Variation, Lipnitsky Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bc4 +B90 Sicilian Defense: Scheveningen Variation, Delayed Keres Attack 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be3 e6 7. g4 +B90 Sicilian Defense: Scheveningen Variation, Delayed Keres Attack, Perenyi Gambit 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be3 e6 7. g4 e5 8. Nf5 g6 9. g5 +B90 Sicilian Defense: Scheveningen Variation, English Attack, with f3 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be3 e6 7. f3 +B91 Sicilian Defense: Najdorf Variation, Zagreb Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. g3 +B92 Sicilian Defense: Najdorf Variation, Opocensky Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 +B92 Sicilian Defense: Najdorf Variation, Opocensky Variation, Modern Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e5 7. Nb3 Be7 8. O-O Be6 +B92 Sicilian Defense: Najdorf Variation, Opocensky Variation, Traditional Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be2 e5 7. Nb3 Be7 8. O-O O-O +B93 Sicilian Defense: Najdorf Variation, Amsterdam Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. f4 +B94 Sicilian Defense: Najdorf Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 +B94 Sicilian Defense: Najdorf Variation, Ivkov Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 Nbd7 7. Bc4 Qa5 8. Qd2 e6 9. O-O-O b5 10. Bb3 Bb7 11. Rhe1 Nc5 12. e5 +B95 Sicilian Defense: Najdorf Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 +B96 Sicilian Defense: Najdorf Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 +B96 Sicilian Defense: Najdorf Variation, Neo-Classical Defense 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Nc6 +B96 Sicilian Defense: Najdorf Variation, Polugaevsky Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 b5 +B96 Sicilian Defense: Najdorf Variation, Polugaevsky Variation, Simagin Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 b5 8. e5 dxe5 9. fxe5 Qc7 10. Qe2 +B97 Sicilian Defense: Najdorf Variation, Poisoned Pawn Accepted 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Qb6 8. Qd2 Qxb2 9. Rb1 Qa3 +B97 Sicilian Defense: Najdorf Variation, Poisoned Pawn Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Qb6 +B98 Sicilian Defense: Najdorf Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Be7 +B98 Sicilian Defense: Najdorf Variation, Browne Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Be7 8. Qf3 h6 9. Bh4 Qc7 +B98 Sicilian Defense: Najdorf Variation, Goteborg Variation 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Be7 8. Qf3 h6 9. Bh4 g5 +B98 Sicilian Defense: Najdorf Variation, Traditional Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Be7 8. Qf3 Qc7 +B99 Sicilian Defense: Najdorf Variation, Main Line 1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Bg5 e6 7. f4 Be7 8. Qf3 Qc7 9. O-O-O Nbd7 diff --git a/projectexample/openingtrainer/chessopeningtrainer/openings/c.tsv b/projectexample/openingtrainer/chessopeningtrainer/openings/c.tsv new file mode 100644 index 00000000..840be981 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/openings/c.tsv @@ -0,0 +1,1166 @@ +eco name pgn +C00 French Defense 1. e4 e6 +C00 French Defense 1. e4 e6 2. d4 d5 +C00 French Defense: Alapin Gambit 1. e4 e6 2. d4 d5 3. Be3 +C00 French Defense: Baeuerle Gambit 1. e4 e6 2. d4 b5 +C00 French Defense: Banzai-Leong Gambit 1. e4 e6 2. b4 +C00 French Defense: Banzai-Leong Gambit, Pinova Gambit 1. e4 e6 2. b4 Bxb4 3. e5 +C00 French Defense: Bird Invitation 1. e4 e6 2. Bb5 +C00 French Defense: Carlson Gambit 1. e4 e6 2. d4 d5 3. Nf3 dxe4 4. Ne5 +C00 French Defense: Chigorin Variation 1. e4 e6 2. Qe2 +C00 French Defense: Diemer-Duhm Gambit 1. e4 e6 2. d4 d5 3. c4 +C00 French Defense: Diemer-Duhm Gambit Accepted 1. e4 e6 2. d4 d5 3. c4 dxe4 +C00 French Defense: Franco-Hiva Gambit 1. e4 e6 2. d4 f5 +C00 French Defense: Franco-Hiva Gambit Accepted 1. e4 e6 2. d4 f5 3. exf5 +C00 French Defense: Franco-Sicilian Defense 1. e4 e6 2. d4 c5 +C00 French Defense: Hoffmann Gambit 1. e4 e6 2. d4 d5 3. Qe2 e5 4. f4 exf4 +C00 French Defense: Horwitz Attack 1. e4 e6 2. b3 +C00 French Defense: Horwitz Attack, Papa-Ticulat Gambit 1. e4 e6 2. b3 d5 3. Bb2 +C00 French Defense: King's Indian Attack 1. e4 e6 2. d3 +C00 French Defense: King's Indian Attack, Franco-Hiva Gambit 1. e4 e6 2. d3 f5 +C00 French Defense: Knight Variation 1. e4 e6 2. Nf3 +C00 French Defense: Knight Variation, Franco-Hiva Gambit 1. e4 e6 2. Nf3 f5 +C00 French Defense: La Bourdonnais Variation 1. e4 e6 2. f4 +C00 French Defense: La Bourdonnais Variation, Reuter Gambit 1. e4 e6 2. f4 d5 3. Nf3 dxe4 +C00 French Defense: Mediterranean Defense 1. e4 e6 2. d4 Nf6 +C00 French Defense: Morphy Gambit 1. e4 e6 2. d4 d5 3. Nh3 +C00 French Defense: Normal Variation 1. e4 e6 2. d4 +C00 French Defense: Orthoschnapp Gambit 1. e4 e6 2. c4 d5 3. cxd5 exd5 4. Qb3 +C00 French Defense: Pelikan Variation 1. e4 e6 2. Nc3 d5 3. f4 +C00 French Defense: Perseus Gambit 1. e4 e6 2. d4 d5 3. Nf3 +C00 French Defense: Queen's Knight 1. e4 e6 2. Nc3 +C00 French Defense: Reversed Philidor Formation 1. e4 e6 2. d3 d5 3. Nd2 Nf6 4. Ngf3 Nc6 5. Be2 +C00 French Defense: Réti-Spielmann Attack 1. e4 e6 2. g3 +C00 French Defense: Schlechter Variation 1. e4 e6 2. d4 d5 3. Bd3 +C00 French Defense: St. George Defense 1. e4 e6 2. d4 a6 +C00 French Defense: St. George Defense, Sanky-George Gambit 1. e4 e6 2. d4 a6 3. c4 b5 +C00 French Defense: St. George Defense, St. George Gambit 1. e4 e6 2. d4 a6 3. c4 b5 4. cxb5 axb5 +C00 French Defense: St. George Defense, Three Pawn Attack 1. e4 e6 2. d4 a6 3. c4 +C00 French Defense: St. George Defense, Traditional Line 1. e4 e6 2. d4 a6 3. Nf3 b5 4. Bd3 c5 5. c3 Bb7 6. O-O Nf6 +C00 French Defense: Steiner Variation 1. e4 e6 2. c4 +C00 French Defense: Steinitz Attack 1. e4 e6 2. e5 +C00 French Defense: Two Knights Variation 1. e4 e6 2. Nf3 d5 3. Nc3 +C00 French Defense: Wing Gambit 1. e4 e6 2. Nf3 d5 3. e5 c5 4. b4 +C00 Rat Defense: Small Center Defense 1. d4 e6 2. e4 d6 +C01 French Defense: Exchange Variation 1. e4 e6 2. d4 d5 3. exd5 +C01 French Defense: Exchange Variation, Bogoljubov Variation 1. e4 e6 2. d4 d5 3. exd5 exd5 4. Nc3 Nf6 5. Bg5 Nc6 +C01 French Defense: Exchange Variation, Monte Carlo Variation 1. e4 e6 2. d4 d5 3. exd5 exd5 4. c4 +C01 French Defense: Exchange Variation, Svenonius Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. exd5 exd5 5. Bg5 +C02 French Defense: Advance Variation 1. e4 e6 2. d4 d5 3. e5 +C02 French Defense: Advance Variation 1. e4 e6 2. d4 d5 3. e5 c5 +C02 French Defense: Advance Variation 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 +C02 French Defense: Advance Variation 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Nc6 +C02 French Defense: Advance Variation, Euwe Variation 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Nc6 5. Nf3 Bd7 +C02 French Defense: Advance Variation, Extended Bishop Swap 1. e4 e6 2. d4 d5 3. e5 Bd7 +C02 French Defense: Advance Variation, Frenkel Gambit 1. e4 e6 2. d4 d5 3. e5 c5 4. b4 +C02 French Defense: Advance Variation, Lputian Variation 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Nc6 5. Nf3 Qb6 6. a3 Nh6 +C02 French Defense: Advance Variation, Main Line 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Nc6 5. Nf3 Qb6 6. a3 +C02 French Defense: Advance Variation, Milner-Barry Gambit 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Nc6 5. Nf3 Qb6 6. Bd3 +C02 French Defense: Advance Variation, Nimzowitsch Attack 1. e4 e6 2. d4 d5 3. e5 c5 4. Qg4 +C02 French Defense: Advance Variation, Nimzowitsch Gambit 1. e4 e6 2. d4 d5 3. e5 c5 4. Qg4 cxd4 5. Nf3 +C02 French Defense: Advance Variation, Nimzowitsch System 1. e4 e6 2. d4 d5 3. e5 c5 4. Nf3 +C02 French Defense: Advance Variation, Paulsen Attack 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Nc6 5. Nf3 +C02 French Defense: Advance Variation, Ruisdonk Gambit 1. e4 e6 2. d4 d5 3. e5 c5 4. Nf3 cxd4 5. Bd3 +C02 French Defense: Advance Variation, Steinitz Variation 1. e4 e6 2. d4 d5 3. e5 c5 4. dxc5 +C02 French Defense: Advance Variation, Wade Variation 1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Qb6 5. Nf3 Bd7 +C03 French Defense: Guimard Variation, Thunderbunny Variation 1. e4 e6 2. d4 d5 3. Nd2 Nc6 4. c3 dxe4 5. Nxe4 e5 +C03 French Defense: Tarrasch Variation 1. e4 e6 2. d4 d5 3. Nd2 +C03 French Defense: Tarrasch Variation, Guimard Defense 1. e4 e6 2. d4 d5 3. Nd2 Nc6 +C03 French Defense: Tarrasch Variation, Haberditz Variation 1. e4 e6 2. d4 d5 3. Nd2 f5 +C03 French Defense: Tarrasch Variation, Modern System 1. e4 e6 2. d4 d5 3. Nd2 a6 +C03 French Defense: Tarrasch Variation, Morozevich Variation 1. e4 e6 2. d4 d5 3. Nd2 Be7 +C04 French Defense: Tarrasch Variation, Guimard Defense, Main Line 1. e4 e6 2. d4 d5 3. Nd2 Nc6 4. Ngf3 Nf6 +C05 French Defense: Tarrasch Variation, Botvinnik Variation 1. e4 e6 2. d4 d5 3. Nd2 Nf6 4. e5 Nfd7 5. Bd3 c5 6. c3 b6 +C05 French Defense: Tarrasch Variation, Closed Variation 1. e4 e6 2. d4 d5 3. Nd2 Nf6 +C05 French Defense: Tarrasch Variation, Closed Variation 1. e4 e6 2. d4 d5 3. Nd2 Nf6 4. e5 Nfd7 5. Bd3 c5 6. c3 Nc6 +C05 French Defense: Tarrasch Variation, Pawn Center Variation 1. e4 e6 2. d4 d5 3. Nd2 Nf6 4. e5 Nfd7 5. f4 +C06 French Defense: Tarrasch Variation, Closed Variation, Main Line 1. e4 e6 2. d4 d5 3. Nd2 Nf6 4. e5 Nfd7 5. Bd3 c5 6. c3 Nc6 7. Ne2 cxd4 8. cxd4 +C06 French Defense: Tarrasch Variation, Leningrad Variation 1. e4 e6 2. d4 d5 3. Nd2 Nf6 4. e5 Nfd7 5. Bd3 c5 6. c3 Nc6 7. Ne2 cxd4 8. cxd4 Nb6 +C07 French Defense: Tarrasch Variation, Chistyakov Defense 1. e4 e6 2. d4 d5 3. Nd2 c5 4. exd5 Qxd5 +C07 French Defense: Tarrasch Variation, Chistyakov Defense, Modern Line 1. e4 e6 2. d4 d5 3. Nd2 c5 4. exd5 Qxd5 5. Ngf3 cxd4 6. Bc4 Qd6 7. O-O Nf6 8. Nb3 Nc6 9. Nbxd4 Nxd4 10. Nxd4 a6 +C07 French Defense: Tarrasch Variation, Eliskases Variation 1. e4 e6 2. d4 d5 3. Nd2 c5 4. exd5 Qxd5 5. Ngf3 cxd4 6. Bc4 Qd8 +C07 French Defense: Tarrasch Variation, Open System 1. e4 e6 2. d4 d5 3. Nd2 c5 +C07 French Defense: Tarrasch Variation, Open System, Euwe-Keres Line 1. e4 e6 2. d4 d5 3. Nd2 c5 4. Ngf3 +C07 French Defense: Tarrasch Variation, Open System, Shaposhnikov Gambit 1. e4 e6 2. d4 d5 3. Nd2 c5 4. exd5 Nf6 +C07 French Defense: Tarrasch Variation, Open System, Süchting Line 1. e4 e6 2. d4 d5 3. Nd2 c5 4. c3 +C08 French Defense: Tarrasch Variation, Open System 1. e4 e6 2. d4 d5 3. Nd2 c5 4. exd5 exd5 +C08 French Defense: Tarrasch Variation, Open System, Advance Line 1. e4 e6 2. d4 d5 3. Nd2 c5 4. exd5 exd5 5. Ngf3 c4 +C09 French Defense: Tarrasch Variation, Open System, Main Line 1. e4 e6 2. d4 d5 3. Nd2 c5 4. exd5 exd5 5. Ngf3 Nc6 +C10 French Defense: Classical Variation, Svenonius Variation 1. e4 e6 2. d4 d5 3. Nc3 Nc6 4. exd5 +C10 French Defense: Paulsen Variation 1. e4 e6 2. d4 d5 3. Nc3 +C10 French Defense: Rubinstein Variation 1. e4 e6 2. d4 d5 3. Nc3 dxe4 +C10 French Defense: Rubinstein Variation, Blackburne Defense 1. e4 e6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Nd7 +C10 French Defense: Rubinstein Variation, Capablanca Line 1. e4 e6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Nd7 5. Nf3 Ngf6 6. Nxf6+ Nxf6 7. Ne5 +C10 French Defense: Rubinstein Variation, Ellis Gambit 1. e4 e6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 e5 +C10 French Defense: Rubinstein Variation, Fort Knox Variation 1. e4 e6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Bd7 5. Nf3 Bc6 +C10 French Defense: Rubinstein Variation, Kasparov Attack 1. e4 e6 2. d4 d5 3. Nd2 dxe4 4. Nxe4 Nd7 5. Nf3 Ngf6 6. Nxf6+ Nxf6 7. c3 +C10 French Defense: Rubinstein Variation, Maric Variation 1. e4 e6 2. d4 d5 3. Nc3 dxe4 4. Nxe4 Qd5 +C10 Sicilian Defense: Marshall Gambit 1. e4 c5 2. Nc3 e6 3. d4 d5 +C11 French Defense: Burn Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 +C11 French Defense: Classical Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 +C11 French Defense: Classical Variation, Burn Variation, Main Line 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 dxe4 5. Nxe4 Be7 6. Bxf6 Bxf6 7. Nf3 O-O +C11 French Defense: Classical Variation, Burn Variation, Morozevich Line 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 dxe4 5. Nxe4 Be7 6. Bxf6 gxf6 +C11 French Defense: Classical Variation, Delayed Exchange Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. exd5 +C11 French Defense: Classical Variation, Steinitz Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 +C11 French Defense: Classical Variation, Swiss Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bd3 +C11 French Defense: Henneberger Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Be3 +C11 French Defense: Steinitz Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 Nfd7 5. f4 c5 6. dxc5 Nc6 +C11 French Defense: Steinitz Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 Nfd7 5. f4 c5 6. Nf3 +C11 French Defense: Steinitz Variation, Boleslavsky Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 Nfd7 5. f4 c5 6. Nf3 Nc6 7. Be3 +C11 French Defense: Steinitz Variation, Bradford Attack Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 Nfd7 5. f4 c5 6. dxc5 Bxc5 7. Qg4 +C11 French Defense: Steinitz Variation, Brodsky-Jones Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 Nfd7 5. f4 c5 6. dxc5 Nc6 7. a3 Bxc5 8. Qg4 O-O 9. Nf3 f6 +C11 French Defense: Steinitz Variation, Gledhill Attack 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. e5 Nfd7 5. Qg4 +C12 French Defense: MacCutcheon Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 +C12 French Defense: MacCutcheon Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 +C12 French Defense: MacCutcheon Variation, Bernstein Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. Bh4 +C12 French Defense: MacCutcheon Variation, Bogoljubov Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. exd5 Qxd5 6. Bxf6 gxf6 7. Qd2 Qa5 +C12 French Defense: MacCutcheon Variation, Chigorin Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. exf6 +C12 French Defense: MacCutcheon Variation, Dr. Olland Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. Bc1 +C12 French Defense: MacCutcheon Variation, Duras Variation 1. e4 e6 2. Nc3 d5 3. d4 Nf6 4. Bg5 Bb4 5. e5 h6 6. Bd2 Bxc3 7. bxc3 Ne4 8. Qg4 Kf8 9. Bc1 +C12 French Defense: MacCutcheon Variation, Exchange Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. exd5 +C12 French Defense: MacCutcheon Variation, Grigoriev Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. exf6 hxg5 7. fxg7 Rg8 8. h4 gxh4 9. Qg4 +C12 French Defense: MacCutcheon Variation, Janowski Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. Be3 +C12 French Defense: MacCutcheon Variation, Lasker Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. Bd2 Bxc3 +C12 French Defense: MacCutcheon Variation, Lasker Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. Bd2 Bxc3 7. bxc3 Ne4 8. Qg4 g6 +C12 French Defense: MacCutcheon Variation, Tartakower Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Bb4 5. e5 h6 6. Bd2 Nfd7 +C13 French Defense: Alekhine-Chatard Attack 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. h4 +C13 French Defense: Alekhine-Chatard Attack, Albin-Chatard Gambit 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. h4 Bxg5 7. hxg5 Qxg5 +C13 French Defense: Alekhine-Chatard Attack, Breyer Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. h4 c5 +C13 French Defense: Alekhine-Chatard Attack, Maróczy Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. h4 a6 +C13 French Defense: Alekhine-Chatard Attack, Spielmann Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. h4 O-O +C13 French Defense: Alekhine-Chatard Attack, Teichmann Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. h4 f6 +C13 French Defense: Classical Variation, Frankfurt Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Ng8 6. Be3 b6 +C13 French Defense: Classical Variation, Normal Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 +C13 French Defense: Classical Variation, Richter Attack 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. Bxf6 +C13 French Defense: Classical Variation, Richter Attack 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. Bxf6 Bxf6 6. e5 Be7 7. Qg4 +C13 French Defense: Classical Variation, Tartakower Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Ne4 +C13 French Defense: Classical Variation, Vistaneckis Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Ng8 +C14 French Defense: Classical Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. Bxe7 Qxe7 +C14 French Defense: Classical Variation, Alapin Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. Bxe7 Qxe7 7. Nb5 +C14 French Defense: Classical Variation, Pollock Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. Bxe7 Qxe7 7. Qg4 +C14 French Defense: Classical Variation, Rubinstein Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. Bxe7 Qxe7 7. Qd2 +C14 French Defense: Classical Variation, Stahlberg Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. Bxe7 Qxe7 7. f4 O-O 8. Nf3 c5 9. Qd2 Nc6 10. O-O-O c4 +C14 French Defense: Classical Variation, Steinitz Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. Bxe7 Qxe7 7. f4 +C14 French Defense: Classical Variation, Tarrasch Variation 1. e4 e6 2. d4 d5 3. Nc3 Nf6 4. Bg5 Be7 5. e5 Nfd7 6. Bxe7 Qxe7 7. Bd3 +C15 French Defense: MacCutcheon Variation, Wolf Gambit 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Ne2 Nf6 5. Bg5 +C15 French Defense: Winawer Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 +C15 French Defense: Winawer Variation, Alekhine Gambit Accepted 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Ne2 dxe4 5. a3 Bxc3+ +C15 French Defense: Winawer Variation, Alekhine Gambit, Alatortsev Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Ne2 dxe4 5. a3 Be7 6. Nxe4 Nf6 7. N2g3 O-O 8. Be2 Nc6 +C15 French Defense: Winawer Variation, Alekhine Gambit, Kan Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Ne2 dxe4 5. a3 Bxc3+ 6. Nxc3 Nc6 +C15 French Defense: Winawer Variation, Alekhine-Maróczy Gambit 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Ne2 +C15 French Defense: Winawer Variation, Delayed Exchange Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. exd5 +C15 French Defense: Winawer Variation, Exchange Variation, Canal Attack 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. exd5 exd5 5. Bd3 Ne7 6. Qh5 +C15 French Defense: Winawer Variation, Fingerslip Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Bd2 +C15 French Defense: Winawer Variation, Fingerslip Variation, Kunin Double Gambit 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Bd2 dxe4 5. Qg4 Qxd4 +C15 French Defense: Winawer Variation, Fingerslip Variation, Main Line 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Bd2 dxe4 5. Qg4 Nf6 6. Qxg7 Rg8 7. Qh6 +C15 French Defense: Winawer Variation, Fingerslip Variation, Schwarz's Line 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Bd2 Ne7 5. Nb1 +C15 French Defense: Winawer Variation, Kondratiyev Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. Bd3 c5 5. exd5 Qxd5 6. Bd2 +C15 French Defense: Winawer Variation, Winckelmann-Riemer Gambit 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. a3 +C16 French Defense: Winawer Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 +C16 French Defense: Winawer Variation, Petrosian Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 Qd7 +C17 French Defense: Winawer Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 +C17 French Defense: Winawer Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 +C17 French Defense: Winawer Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 cxd4 6. axb4 dxc3 7. Nf3 +C17 French Defense: Winawer Variation, Advance Variation, Moscow Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. Qg4 +C17 French Defense: Winawer Variation, Bogoljubov Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. Bd2 +C17 French Defense: Winawer Variation, Bogoljubov Variation, Icelandic Defense 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. Bd2 Ne7 6. f4 +C17 French Defense: Winawer Variation, Maróczy-Wallis Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 cxd4 6. axb4 dxc3 +C17 French Defense: Winawer Variation, Retreat Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Ba5 +C17 French Defense: Winawer Variation, Retreat Variation, Armenian Line 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Ba5 6. b4 cxd4 +C18 French Defense: Winawer Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 +C18 French Defense: Winawer Variation, Classical Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Qc7 +C18 French Defense: Winawer Variation, Portisch-Hook Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Qa5 +C19 French Defense: Winawer Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Ne7 +C19 French Defense: Winawer Variation, Advance Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Ne7 7. a4 +C19 French Defense: Winawer Variation, Poisoned Pawn Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Ne7 7. Qg4 +C19 French Defense: Winawer Variation, Poisoned Pawn Variation, Main Line 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Ne7 7. Qg4 Qc7 8. Qxg7 Rg8 9. Qxh7 cxd4 10. Ne2 +C19 French Defense: Winawer Variation, Poisoned Pawn Variation, Paoli Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Ne7 7. Qg4 Qc7 8. Qxg7 Rg8 9. Qxh7 cxd4 10. Kd1 +C19 French Defense: Winawer Variation, Positional Variation 1. e4 e6 2. d4 d5 3. Nc3 Bb4 4. e5 c5 5. a3 Bxc3+ 6. bxc3 Ne7 7. Nf3 +C20 Barnes Opening: Walkerling 1. f3 e5 2. e4 Nf6 3. Bc4 +C20 Bongcloud Attack 1. e4 e5 2. Ke2 +C20 Center Game 1. e4 e5 2. d4 +C20 English Opening: The Whale 1. e4 e5 2. c4 +C20 King's Pawn Game 1. e4 e5 +C20 King's Pawn Game: Alapin Opening 1. e4 e5 2. Ne2 +C20 King's Pawn Game: Bavarian Gambit 1. e4 e5 2. c4 d5 +C20 King's Pawn Game: Beyer Gambit 1. e4 e5 2. d4 d5 +C20 King's Pawn Game: Clam Variation, King's Gambit Reversed 1. e4 e5 2. d3 f5 +C20 King's Pawn Game: Clam Variation, Radisch Gambit 1. e4 e5 2. d3 Nf6 3. f4 Bc5 +C20 King's Pawn Game: King's Head Opening 1. e4 e5 2. f3 +C20 King's Pawn Game: King's Head Opening 1. e4 e5 2. f3 Nf6 3. Nc3 +C20 King's Pawn Game: Leonardis Variation 1. e4 e5 2. d3 +C20 King's Pawn Game: MacLeod Attack 1. e4 e5 2. c3 +C20 King's Pawn Game: MacLeod Attack, Lasa Gambit 1. e4 e5 2. c3 f5 +C20 King's Pawn Game: MacLeod Attack, Norwalde Gambit 1. e4 e5 2. c3 d5 3. Qh5 Bd6 +C20 King's Pawn Game: Mengarini's Opening 1. e4 e5 2. a3 +C20 King's Pawn Game: Napoleon Attack 1. e4 e5 2. Qf3 +C20 King's Pawn Game: Philidor Gambit 1. e4 e5 2. d4 d6 3. dxe5 Bd7 +C20 King's Pawn Game: Tortoise Opening 1. e4 e5 2. Bd3 +C20 King's Pawn Game: Wayward Queen Attack 1. e4 e5 2. Qh5 +C20 King's Pawn Game: Wayward Queen Attack, Kiddie Countergambit 1. e4 e5 2. Qh5 Nf6 +C20 King's Pawn Game: Wayward Queen Attack, Mellon Gambit 1. e4 e5 2. Qh5 Nc6 3. Bc4 Nh6 4. d3 g6 5. Qf3 f6 6. Ne2 d5 +C20 King's Pawn Game: Weber Gambit 1. e4 e5 2. d3 d5 3. exd5 c6 4. dxc6 Nxc6 +C20 King's Pawn Opening 1. e4 e5 2. b3 +C20 King's Pawn Opening: Speers 1. e4 e5 2. Qg4 Nf6 3. Qf5 +C20 King's Pawn Opening: Van Hooydoon Gambit 1. e4 e5 2. Qe2 Nc6 3. c3 Nf6 4. Nf3 Bc5 5. d4 exd4 6. cxd4 Nxd4 +C20 Portuguese Opening 1. e4 e5 2. Bb5 +C20 Portuguese Opening: Miguel Gambit 1. e4 e5 2. Bb5 Bc5 3. b4 +C20 Portuguese Opening: Portuguese Gambit 1. e4 e5 2. Bb5 Nf6 3. d4 +C21 Center Game 1. e4 e5 2. d4 exd4 3. Qxd4 +C21 Center Game Accepted 1. e4 e5 2. d4 exd4 +C21 Center Game: Halasz-McDonnell Gambit 1. e4 e5 2. d4 exd4 3. f4 +C21 Center Game: Halasz-McDonnell Gambit, Crocodile Variation 1. e4 e5 2. d4 exd4 3. f4 Bc5 4. Nf3 Nc6 5. c3 +C21 Center Game: Kieseritzky Variation 1. e4 e5 2. d4 exd4 3. Nf3 +C21 Center Game: Kieseritzky Variation 1. e4 e5 2. d4 exd4 3. Nf3 c5 +C21 Center Game: Kieseritzky Variation 1. e4 e5 2. d4 exd4 3. Nf3 c5 4. Bc4 +C21 Center Game: Kieseritzky Variation 1. e4 e5 2. d4 exd4 3. Nf3 c5 4. Bc4 b5 +C21 Center Game: Lanc-Arnold Gambit 1. e4 e5 2. d4 exd4 3. Nf3 Bc5 4. c3 +C21 Center Game: Lanc-Arnold Gambit, Schippler Gambit 1. e4 e5 2. d4 exd4 3. Nf3 Bc5 4. c3 dxc3 5. Bc4 +C21 Center Game: Ross Gambit 1. e4 e5 2. d4 exd4 3. Bd3 +C21 Center Game: von der Lasa Gambit 1. e4 e5 2. d4 exd4 3. Bc4 +C21 Danish Gambit 1. e4 e5 2. d4 exd4 3. c3 +C21 Danish Gambit Accepted 1. e4 e5 2. d4 exd4 3. c3 dxc3 4. Bc4 cxb2 5. Bxb2 +C21 Danish Gambit Accepted: Chigorin Defense 1. e4 e5 2. d4 exd4 3. c3 dxc3 4. Bc4 cxb2 5. Bxb2 Qe7 +C21 Danish Gambit Accepted: Classical Defense 1. e4 e5 2. d4 exd4 3. c3 dxc3 4. Bc4 cxb2 5. Bxb2 Nf6 +C21 Danish Gambit Accepted: Copenhagen Defense 1. e4 e5 2. d4 exd4 3. c3 dxc3 4. Bc4 cxb2 5. Bxb2 Bb4+ +C21 Danish Gambit Accepted: Schlechter Defense 1. e4 e5 2. d4 exd4 3. c3 dxc3 4. Bc4 cxb2 5. Bxb2 d5 +C21 Danish Gambit Accepted: Svenonius Defense 1. e4 e5 2. d4 exd4 3. c3 Ne7 +C21 Danish Gambit Declined: Sorensen Defense 1. e4 e5 2. d4 exd4 3. c3 d5 +C22 Center Game: Berger Variation 1. e4 e5 2. d4 exd4 3. Qxd4 Nc6 4. Qe3 Nf6 +C22 Center Game: Charousek Variation 1. e4 e5 2. d4 exd4 3. Qxd4 Nc6 4. Qe3 Bb4+ 5. c3 Be7 +C22 Center Game: Hall Variation 1. e4 e5 2. d4 exd4 3. Qxd4 Nc6 4. Qc4 +C22 Center Game: Kupreichik Variation 1. e4 e5 2. d4 exd4 3. Qxd4 Nc6 4. Qe3 Nf6 5. Nc3 Bb4 6. Bd2 O-O 7. O-O-O Re8 8. Bc4 d6 9. Nh3 +C22 Center Game: Normal Variation 1. e4 e5 2. d4 exd4 3. Qxd4 Nc6 +C22 Center Game: Paulsen Attack Variation 1. e4 e5 2. d4 exd4 3. Qxd4 Nc6 4. Qe3 +C22 Center Game: l'Hermet Variation 1. e4 e5 2. d4 exd4 3. Qxd4 Nc6 4. Qe3 f5 +C23 Bishop's Opening 1. e4 e5 2. Bc4 +C23 Bishop's Opening: Anderssen Gambit 1. e4 e5 2. Bc4 b5 3. Bxb5 c6 +C23 Bishop's Opening: Boi Variation 1. e4 e5 2. Bc4 Bc5 +C23 Bishop's Opening: Calabrese Countergambit 1. e4 e5 2. Bc4 f5 +C23 Bishop's Opening: Calabrese Countergambit, Jaenisch Variation 1. e4 e5 2. Bc4 f5 3. d3 +C23 Bishop's Opening: Four Pawns Gambit 1. e4 e5 2. Bc4 Bc5 3. b4 Bxb4 4. f4 exf4 5. Nf3 Be7 6. d4 Bh4+ 7. g3 fxg3 8. O-O gxh2+ 9. Kh1 +C23 Bishop's Opening: Khan Gambit 1. e4 e5 2. Bc4 d5 +C23 Bishop's Opening: Lewis Countergambit 1. e4 e5 2. Bc4 Bc5 3. c3 d5 +C23 Bishop's Opening: Lewis Countergambit 1. e4 e5 2. Bc4 Bc5 3. c3 d5 4. Bxd5 Nf6 +C23 Bishop's Opening: Lewis Countergambit, Walker Variation 1. e4 e5 2. Bc4 Bc5 3. c3 d5 4. Bxd5 Nf6 5. d4 +C23 Bishop's Opening: Lewis Gambit 1. e4 e5 2. Bc4 Bc5 3. d4 +C23 Bishop's Opening: Lisitsyn Variation 1. e4 e5 2. Bc4 c6 3. d4 d5 4. exd5 cxd5 5. Bb5+ Bd7 6. Bxd7+ Nxd7 7. dxe5 Nxe5 8. Ne2 +C23 Bishop's Opening: Lopez Gambit 1. e4 e5 2. Bc4 Bc5 3. Qe2 Nc6 4. c3 Nf6 5. f4 +C23 Bishop's Opening: Lopez Variation 1. e4 e5 2. Bc4 Bc5 3. Qe2 +C23 Bishop's Opening: Lopez Variation, Lopez Gambit 1. e4 e5 2. Bc4 Bc5 3. Qe2 Nf6 4. f4 +C23 Bishop's Opening: McDonnell Gambit 1. e4 e5 2. Bc4 Bc5 3. b4 +C23 Bishop's Opening: McDonnell Gambit, La Bourdonnais-Denker Gambit 1. e4 e5 2. Bc4 Bc5 3. b4 Bxb4 4. c3 +C23 Bishop's Opening: McDonnell Gambit, McDonnell Double Gambit 1. e4 e5 2. Bc4 Bc5 3. b4 Bxb4 4. f4 +C23 Bishop's Opening: Philidor Counterattack 1. e4 e5 2. Bc4 c6 +C23 Bishop's Opening: Philidor Variation 1. e4 e5 2. Bc4 Bc5 3. c3 +C23 Bishop's Opening: Pratt Variation 1. e4 e5 2. Bc4 Bc5 3. c3 Nf6 4. d4 exd4 5. e5 d5 6. exf6 dxc4 7. Qh5 O-O +C23 Bishop's Opening: Stein Gambit 1. e4 e5 2. Bc4 Bc5 3. f4 +C23 Bishop's Opening: Thorold Gambit 1. e4 e5 2. Bc4 b5 3. Bxb5 f5 +C23 Bishop's Opening: del Rio Variation 1. e4 e5 2. Bc4 Bc5 3. c3 Qg5 +C24 Bishop's Opening: Berlin Defense 1. e4 e5 2. Bc4 Nf6 +C24 Bishop's Opening: Berlin Defense, Greco Gambit 1. e4 e5 2. Bc4 Nf6 3. f4 +C24 Bishop's Opening: Kitchener Folly 1. e4 e5 2. Bc4 Nf6 3. d3 Be7 4. Nf3 O-O +C24 Bishop's Opening: Krejcik Gambit 1. e4 e5 2. Bc4 Nf6 3. f3 Bc5 4. Ne2 Nc6 5. b4 +C24 Bishop's Opening: Pachman Gambit 1. e4 e5 2. Bc4 Nf6 3. Ne2 Nxe4 4. Nec3 +C24 Bishop's Opening: Ponziani Gambit 1. e4 e5 2. Bc4 Nf6 3. d4 +C24 Bishop's Opening: Urusov Gambit, Panov Variation 1. e4 e5 2. Bc4 Nf6 3. d4 exd4 4. Nf3 d5 5. exd5 Bb4+ 6. c3 Qe7+ +C24 Bishop's Opening: Vienna Hybrid 1. e4 e5 2. Bc4 Nf6 3. d3 Nc6 4. Nc3 +C24 Bishop's Opening: Warsaw Gambit 1. e4 e5 2. Bc4 Nf6 3. d4 exd4 4. c3 +C25 Vienna Gambit, with Max Lange Defense 1. e4 e5 2. Nc3 Nc6 3. f4 +C25 Vienna Gambit, with Max Lange Defense: Cunningham Defense 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 Be7 +C25 Vienna Gambit, with Max Lange Defense: Hamppe-Allgaier Gambit 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 g5 5. h4 g4 6. Ng5 +C25 Vienna Gambit, with Max Lange Defense: Hamppe-Allgaier Gambit, Alapin Variation 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 g5 5. h4 g4 6. Ng5 d6 +C25 Vienna Gambit, with Max Lange Defense: Hamppe-Allgaier Gambit, Thorold Variation 1. e4 e5 2. f4 exf4 3. Nf3 Nc6 4. Nc3 g5 5. h4 g4 6. Ng5 h6 7. Nxf7 Kxf7 8. d4 +C25 Vienna Gambit, with Max Lange Defense: Hamppe-Muzio Gambit 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 g5 5. Bc4 g4 6. O-O gxf3 +C25 Vienna Gambit, with Max Lange Defense: Knight Variation 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 +C25 Vienna Gambit, with Max Lange Defense: Pierce Gambit 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 g5 5. d4 +C25 Vienna Gambit, with Max Lange Defense: Quelle Gambit 1. e4 e5 2. Nc3 Nc6 3. f4 Bc5 4. fxe5 d6 +C25 Vienna Gambit, with Max Lange Defense: Steinitz Gambit 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. d4 +C25 Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Fraser-Minckwitz Defense 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. d4 Qh4+ 5. Ke2 b6 +C25 Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Main Line 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. d4 Qh4+ 5. Ke2 +C25 Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Paulsen Defense 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. d4 Qh4+ 5. Ke2 d6 +C25 Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Sörensen Defense 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. d4 Qh4+ 5. Ke2 g5 +C25 Vienna Gambit, with Max Lange Defense: Steinitz Gambit, Zukertort Defense 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. d4 Qh4+ 5. Ke2 d5 +C25 Vienna Game 1. e4 e5 2. Nc3 +C25 Vienna Game: Anderssen Defense 1. e4 e5 2. Nc3 Bc5 +C25 Vienna Game: Fyfe Gambit 1. e4 e5 2. Nc3 Nc6 3. d4 +C25 Vienna Game: Giraffe Attack 1. e4 e5 2. Nc3 Bc5 3. Qg4 +C25 Vienna Game: Hamppe-Meitner Variation 1. e4 e5 2. Nc3 Bc5 3. Na4 +C25 Vienna Game: Hamppe-Muzio Gambit 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 g5 5. Bc4 g4 6. O-O +C25 Vienna Game: Hamppe-Muzio, Dubois Variation 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 g5 5. Bc4 g4 6. O-O gxf3 7. Qxf3 Ne5 8. Qxf4 Qf6 +C25 Vienna Game: Max Lange Defense 1. e4 e5 2. Nc3 Nc6 +C25 Vienna Game: Omaha Gambit 1. e4 e5 2. Nc3 d6 3. f4 +C25 Vienna Game: Paulsen Variation 1. e4 e5 2. Nc3 Nc6 3. g3 +C25 Vienna Game: Paulsen Variation 1. e4 e5 2. Nc3 Nc6 3. g3 Nf6 4. Bg2 Bc5 5. Nge2 d5 +C25 Vienna Game: Paulsen Variation, Mariotti Gambit 1. e4 e5 2. Nc3 Nc6 3. g3 Bc5 4. Bg2 h5 5. Nf3 h4 +C25 Vienna Game: Philidor Countergambit 1. e4 e5 2. Nc3 Nc6 3. d4 f5 +C25 Vienna Game: Pierce Gambit, Rushmere Attack 1. e4 e5 2. Nc3 Nc6 3. f4 exf4 4. Nf3 g5 5. d4 g4 6. Bc4 gxf3 7. O-O d5 8. exd5 Bg4 9. dxc6 +C25 Vienna Game: Stanley Variation, Meitner-Mieses Gambit 1. e4 e5 2. Nc3 Nc6 3. Bc4 Bc5 4. Qg4 Qf6 5. Nd5 +C25 Vienna Game: Zhuravlev Countergambit 1. e4 e5 2. Nc3 Bb4 3. Qg4 Nf6 +C26 Bishop's Opening: Horwitz Gambit 1. e4 e5 2. Bc4 Nf6 3. Nc3 b5 +C26 Bishop's Opening: Vienna Hybrid, Spielmann Attack 1. e4 e5 2. Nc3 Nf6 3. Bc4 Bc5 4. d3 +C26 Vienna Game: Falkbeer Variation 1. e4 e5 2. Nc3 Nf6 +C26 Vienna Game: Mengarini Variation 1. e4 e5 2. Nc3 Nf6 3. a3 +C26 Vienna Game: Mieses Variation 1. e4 e5 2. Nc3 Nf6 3. g3 +C26 Vienna Game: Mieses Variation, Erben Gambit 1. e4 e5 2. Nc3 Nf6 3. g3 d5 4. exd5 c6 +C26 Vienna Game: Paulsen Variation, Pollock Gambit 1. e4 e5 2. Nc3 Nf6 3. g3 Bc5 4. Bg2 Nc6 5. Nge2 d5 6. exd5 +C26 Vienna Game: Stanley Variation 1. e4 e5 2. Nc3 Nf6 3. Bc4 +C26 Vienna Game: Stanley Variation, Eifel Gambit 1. e4 e5 2. Nc3 Nf6 3. Bc4 Bc5 4. Nge2 b5 +C26 Vienna Game: Stanley Variation, Reversed Spanish 1. e4 e5 2. Nc3 Nf6 3. Bc4 Bb4 +C27 Bishop's Opening: Boden-Kieseritzky Gambit 1. e4 e5 2. Nf3 Nf6 3. Bc4 Nxe4 4. Nc3 +C27 Bishop's Opening: Boden-Kieseritzky Gambit, Lichtenhein Defense 1. e4 e5 2. Nf3 Nf6 3. Bc4 Nxe4 4. Nc3 d5 +C27 Vienna Game: Adams' Gambit 1. e4 e5 2. Nc3 Nf6 3. Bc4 Nxe4 4. Qh5 Nd6 5. Bb3 Nc6 6. d4 +C27 Vienna Game: Frankenstein-Dracula Variation 1. e4 e5 2. Nc3 Nf6 3. Bc4 Nxe4 +C27 Vienna Game: Stanley Variation, Alekhine Variation 1. e4 e5 2. Nc3 Nf6 3. Bc4 Nxe4 4. Qh5 Nd6 5. Bb3 Be7 6. Nf3 Nc6 7. Nxe5 +C27 Vienna Game: Stanley Variation, Frankenstein-Dracula Variation 1. e4 e5 2. Nc3 Nf6 3. Bc4 Nxe4 4. Qh5 Nd6 5. Bb3 Nc6 6. Nb5 g6 7. Qf3 f5 8. Qd5 Qe7 9. Nxc7+ Kd8 10. Nxa8 b6 +C27 Vienna Game: Stanley Variation, Monster Declined 1. e4 e5 2. Nc3 Nf6 3. Bc4 Nxe4 4. Qh5 Nd6 5. Bb3 Be7 +C28 Bishop's Opening: Vienna Hybrid, Hromádka Variation 1. e4 e5 2. Nc3 Nc6 3. Bc4 Nf6 4. d3 Bb4 5. Ne2 +C28 Vienna Game: Stanley Variation, Bronstein Gambit 1. e4 e5 2. Nc3 Nc6 3. Bc4 Nf6 4. f4 Nxe4 5. Nf3 +C28 Vienna Game: Stanley Variation, Three Knights Variation 1. e4 e5 2. Nc3 Nc6 3. Bc4 Nf6 +C29 Vienna Game: Heyde Variation 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. fxe5 Nxe4 5. Qf3 f5 6. d4 +C29 Vienna Game: Vienna Gambit 1. e4 e5 2. Nc3 Nf6 3. f4 +C29 Vienna Game: Vienna Gambit, Bardeleben Variation 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. fxe5 Nxe4 5. Qf3 f5 +C29 Vienna Game: Vienna Gambit, Breyer Variation 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. fxe5 Nxe4 5. Nf3 Be7 +C29 Vienna Game: Vienna Gambit, Kaufmann Variation 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. fxe5 Nxe4 5. Nf3 Bg4 6. Qe2 +C29 Vienna Game: Vienna Gambit, Main Line 1. e4 e5 2. Nc3 Nf6 3. f4 d5 +C29 Vienna Game: Vienna Gambit, Modern Variation 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. fxe5 Nxe4 5. d3 +C29 Vienna Game: Vienna Gambit, Paulsen Attack 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. fxe5 Nxe4 5. Qf3 +C29 Vienna Game: Vienna Gambit, Steinitz Variation 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. d3 +C29 Vienna Game: Vienna Gambit, Wurzburger Trap 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. fxe5 Nxe4 5. d3 Qh4+ 6. g3 Nxg3 7. Nf3 Qh5 8. Nxd5 +C30 King's Gambit 1. e4 e5 2. f4 +C30 King's Gambit Declined: Classical Variation 1. e4 e5 2. f4 Bc5 +C30 King's Gambit Declined: Classical Variation 1. e4 e5 2. f4 Bc5 3. Nf3 d6 4. c3 +C30 King's Gambit Declined: Classical Variation, Euwe Attack 1. e4 e5 2. f4 Bc5 3. Nf3 d6 4. c3 Bg4 5. fxe5 dxe5 6. Qa4+ +C30 King's Gambit Declined: Classical Variation, Rotlewi Countergambit 1. e4 e5 2. f4 Bc5 3. Nf3 d6 4. b4 +C30 King's Gambit Declined: Classical Variation, Rubinstein Countergambit 1. e4 e5 2. f4 Bc5 3. Nf3 d6 4. c3 f5 +C30 King's Gambit Declined: Classical, Hanham Variation 1. e4 e5 2. f4 Bc5 3. Nf3 d6 4. Nc3 Nd7 +C30 King's Gambit Declined: Classical, Réti Variation 1. e4 e5 2. f4 Bc5 3. Nf3 d6 4. c3 f5 5. fxe5 dxe5 6. d4 exd4 7. Bc4 +C30 King's Gambit Declined: Classical, Soldatenkov Variation 1. e4 e5 2. f4 Bc5 3. Nf3 d6 4. fxe5 +C30 King's Gambit Declined: Classical, Svenonius Variation 1. e4 e5 2. Bc4 Nc6 3. Nc3 Nf6 4. d3 Bc5 5. f4 d6 6. Nf3 Bg4 7. h3 Bxf3 8. Qxf3 exf4 +C30 King's Gambit Declined: Hobbs-Zilbermints Gambit 1. e4 e5 2. f4 Nc6 3. Nf3 g5 4. fxg5 h6 +C30 King's Gambit Declined: Keene Defense 1. e4 e5 2. f4 Qh4+ 3. g3 Qe7 +C30 King's Gambit Declined: Keene's Defense 1. e4 e5 2. f4 Qh4+ +C30 King's Gambit Declined: Keene's Defense 1. e4 e5 2. f4 Qh4+ 3. g3 +C30 King's Gambit Declined: Mafia Defense 1. e4 c5 2. f4 e5 +C30 King's Gambit Declined: Miles Defense 1. e4 e5 2. f4 Nc6 3. Nf3 f5 +C30 King's Gambit Declined: Norwalde Variation 1. e4 e5 2. f4 Qf6 +C30 King's Gambit Declined: Norwalde Variation, Bücker Gambit 1. e4 e5 2. f4 Qf6 3. Nc3 Qxf4 4. Nf3 Bb4 5. Bc4 +C30 King's Gambit Declined: Norwalde Variation, Schubert Variation 1. e4 e5 2. f4 Qf6 3. Nc3 Qxf4 4. d4 +C30 King's Gambit Declined: Panteldakis Countergambit 1. e4 e5 2. f4 f5 +C30 King's Gambit Declined: Panteldakis Countergambit, Greco Variation 1. e4 e5 2. f4 f5 3. exf5 Qh4+ +C30 King's Gambit Declined: Panteldakis Countergambit, Pawn Sacrifice Line 1. e4 e5 2. f4 f5 3. exf5 exf4 4. Qh5+ g6 5. fxg6 Qe7+ 6. Kd1 +C30 King's Gambit Declined: Panteldakis Countergambit, Schiller's Defense 1. e4 e5 2. f4 f5 3. exf5 Bc5 +C30 King's Gambit Declined: Panteldakis Countergambit, Shirazi Line 1. e4 e5 2. f4 f5 3. exf5 exf4 4. Qh5+ Ke7 +C30 King's Gambit Declined: Panteldakis Countergambit, Symmetrical Variation 1. e4 e5 2. f4 f5 3. exf5 exf4 4. Nf3 d5 5. d4 Bd6 6. Bd3 +C30 King's Gambit Declined: Petrov's Defense 1. e4 e5 2. f4 Nf6 +C30 King's Gambit Declined: Queen's Knight Defense 1. e4 e5 2. f4 Nc6 +C30 King's Gambit Declined: Senechaud Countergambit 1. e4 e5 2. f4 Bc5 3. Nf3 g5 +C30 King's Gambit Declined: Soller-Zilbermints Gambit 1. e4 e5 2. f4 f6 3. fxe5 Nc6 +C30 King's Gambit Declined: Zilbermints Double Countergambit 1. e4 e5 2. f4 g5 +C30 King's Gambit Declined: Zilbermints Double Gambit 1. e4 e5 2. f4 Nc6 3. Nf3 g5 +C31 King's Gambit Declined: Falkbeer Countergambit 1. e4 e5 2. f4 d5 +C31 King's Gambit Declined: Falkbeer Countergambit Accepted 1. e4 e5 2. f4 d5 3. exd5 +C31 King's Gambit Declined: Falkbeer Countergambit, Anderssen Attack 1. e4 e5 2. f4 d5 3. exd5 e4 4. Bb5+ +C31 King's Gambit Declined: Falkbeer Countergambit, Blackburne Attack 1. e4 e5 2. f4 d5 3. Nf3 +C31 King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 +C31 King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Morphy Defense 1. e4 e5 2. Nc3 Nf6 3. f4 d5 4. exd5 e4 5. d3 Bb4 6. Bd2 e3 +C31 King's Gambit Declined: Falkbeer Countergambit, Hinrichsen Gambit 1. e4 e5 2. f4 d5 3. d4 +C31 King's Gambit Declined: Falkbeer Countergambit, Miles Gambit 1. e4 e5 2. f4 d5 3. exd5 Bc5 +C31 King's Gambit Declined: Falkbeer Countergambit, Milner-Barry Variation 1. e4 e5 2. f4 d5 3. Nc3 +C31 King's Gambit Declined: Falkbeer Countergambit, Modern Transfer 1. e4 e5 2. f4 d5 3. exd5 exf4 +C31 King's Gambit Declined: Falkbeer Countergambit, Nimzowitsch-Marshall Countergambit 1. e4 e5 2. f4 d5 3. exd5 c6 +C31 King's Gambit Declined: Falkbeer Countergambit, Pickler Gambit 1. e4 e5 2. f4 d5 3. exd5 c6 4. dxc6 Bc5 +C31 King's Gambit Declined: Falkbeer Countergambit, Rubinstein Variation 1. e4 e5 2. f4 d5 3. exd5 e4 4. Nc3 Nf6 5. Qe2 +C31 King's Gambit Declined: Falkbeer Countergambit, Staunton Line 1. e4 e5 2. f4 d5 3. exd5 e4 +C31 Van Geet Opening: Grünfeld Defense, Steiner Gambit 1. e4 e5 2. f4 d5 3. Nc3 dxe4 4. Nxe4 +C32 King's Gambit Declined: Falkbeer Countergambit, Alapin Variation 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. dxe4 Nxe4 6. Nf3 Bc5 7. Qe2 Bf2+ 8. Kd1 Qxd5+ 9. Nfd2 +C32 King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. dxe4 Nxe4 6. Qe2 +C32 King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit Accepted 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. dxe4 +C32 King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Keres Variation 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. Nd2 +C32 King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Main Line 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. dxe4 Nxe4 6. Nf3 Bc5 7. Qe2 Bf5 +C32 King's Gambit Declined: Falkbeer Countergambit, Charousek Gambit, Old Line 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. Qe2 +C32 King's Gambit Declined: Falkbeer Countergambit, Charousek Variation 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. dxe4 Nxe4 6. Qe2 Qxd5 7. Nd2 f5 8. g4 +C32 King's Gambit Declined: Falkbeer Countergambit, Tarrasch Variation 1. e4 e5 2. f4 d5 3. exd5 e4 4. d3 Nf6 5. dxe4 Nxe4 6. Nf3 Bc5 7. Qe2 Bf5 8. g4 O-O +C33 King's Gambit Accepted 1. e4 e5 2. f4 exf4 +C33 King's Gambit Accepted: Basman Gambit 1. e4 e5 2. f4 exf4 3. Qe2 +C33 King's Gambit Accepted: Bishop's Gambit 1. e4 e5 2. f4 exf4 3. Bc4 +C33 King's Gambit Accepted: Bishop's Gambit, Anderssen Defense 1. e4 e5 2. f4 exf4 3. Bc4 g5 +C33 King's Gambit Accepted: Bishop's Gambit, Anderssen Variation 1. e4 e5 2. f4 exf4 3. Bc4 d5 4. Bxd5 c6 +C33 King's Gambit Accepted: Bishop's Gambit, Bledow Countergambit 1. e4 e5 2. f4 exf4 3. Bc4 d5 4. Bxd5 Nf6 +C33 King's Gambit Accepted: Bishop's Gambit, Bledow Variation 1. e4 e5 2. f4 exf4 3. Bc4 d5 +C33 King's Gambit Accepted: Bishop's Gambit, Boden Variation 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 Nc6 +C33 King's Gambit Accepted: Bishop's Gambit, Bogoljubov Defense 1. e4 e5 2. f4 exf4 3. Bc4 Nf6 4. Nc3 c6 +C33 King's Gambit Accepted: Bishop's Gambit, Bogoljubov Variation 1. e4 e5 2. f4 exf4 3. Bc4 Nf6 4. Nc3 +C33 King's Gambit Accepted: Bishop's Gambit, Boren-Svenonius Variation 1. e4 e5 2. f4 exf4 3. Bc4 d5 4. Bxd5 Qh4+ 5. Kf1 Bd6 +C33 King's Gambit Accepted: Bishop's Gambit, Bryan Countergambit 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 b5 +C33 King's Gambit Accepted: Bishop's Gambit, Chigorin's Attack 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 d5 5. Bxd5 g5 6. g3 +C33 King's Gambit Accepted: Bishop's Gambit, Classical Defense 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 Ne7 5. Nc3 g5 6. d4 Bg7 +C33 King's Gambit Accepted: Bishop's Gambit, Classical Defense, Cozio Attack 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 g5 5. Qf3 +C33 King's Gambit Accepted: Bishop's Gambit, Cozio Defense 1. e4 e5 2. f4 exf4 3. Bc4 Nf6 +C33 King's Gambit Accepted: Bishop's Gambit, Cozio Variation 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 d6 +C33 King's Gambit Accepted: Bishop's Gambit, First Jaenisch Variation 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 Nf6 +C33 King's Gambit Accepted: Bishop's Gambit, Fraser Variation 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 g5 5. Nc3 Bg7 6. g3 fxg3 7. Qf3 +C33 King's Gambit Accepted: Bishop's Gambit, Gianutio Gambit 1. e4 e5 2. f4 exf4 3. Bc4 f5 +C33 King's Gambit Accepted: Bishop's Gambit, Greco Variation 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 Bc5 +C33 King's Gambit Accepted: Bishop's Gambit, Grimm Attack 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 g5 5. Nc3 Bg7 6. d4 d6 7. e5 +C33 King's Gambit Accepted: Bishop's Gambit, Kieseritzky Gambit 1. e4 e5 2. f4 exf4 3. Bc4 b5 +C33 King's Gambit Accepted: Bishop's Gambit, Lopez Defense 1. e4 e5 2. f4 exf4 3. Bc4 c6 +C33 King's Gambit Accepted: Bishop's Gambit, Lopez Variation 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 g5 +C33 King's Gambit Accepted: Bishop's Gambit, Maurian Defense 1. e4 e5 2. f4 exf4 3. Bc4 Nc6 +C33 King's Gambit Accepted: Bishop's Gambit, McDonnell Attack 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 g5 5. Nc3 Bg7 6. d4 Ne7 7. g3 +C33 King's Gambit Accepted: Bishop's Gambit, McDonnell Attack 1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ 4. Kf1 g5 5. Nc3 Bg7 6. g3 +C33 King's Gambit Accepted: Bishop's Gambit, Paulsen Attack 1. e4 e5 2. f4 exf4 3. Bc4 Nf6 4. Nc3 Bb4 5. e5 +C33 King's Gambit Accepted: Bishop's Gambit, Steinitz Defense 1. e4 e5 2. f4 exf4 3. Bc4 Ne7 +C33 King's Gambit Accepted: Breyer Gambit 1. e4 e5 2. f4 exf4 3. Qf3 +C33 King's Gambit Accepted: Carrera Gambit 1. e4 e5 2. f4 exf4 3. Qh5 +C33 King's Gambit Accepted: Dodo Variation 1. e4 e5 2. f4 exf4 3. Qg4 +C33 King's Gambit Accepted: Eisenberg Variation 1. e4 e5 2. f4 exf4 3. Nh3 +C33 King's Gambit Accepted: Gaga Gambit 1. e4 e5 2. f4 exf4 3. g3 +C33 King's Gambit Accepted: Lopez-Gianutio Countergambit, Hein Variation 1. e4 e5 2. f4 exf4 3. Bc4 f5 4. Qe2 Qh4+ 5. Kd1 fxe4 6. Nc3 Kd8 +C33 King's Gambit Accepted: Mason-Keres Gambit 1. e4 e5 2. f4 exf4 3. Nc3 +C33 King's Gambit Accepted: Orsini Gambit 1. e4 e5 2. f4 exf4 3. b3 +C33 King's Gambit Accepted: Paris Gambit 1. e4 e5 2. f4 exf4 3. Ne2 +C33 King's Gambit Accepted: Polerio Gambit 1. e4 e5 2. f4 exf4 3. d4 +C33 King's Gambit Accepted: Schurig Gambit, with Bb5 1. e4 e5 2. f4 exf4 3. Bb5 +C33 King's Gambit Accepted: Schurig Gambit, with Bd3 1. e4 e5 2. f4 exf4 3. Bd3 +C33 King's Gambit Accepted: Stamma Gambit 1. e4 e5 2. f4 exf4 3. h4 +C33 King's Gambit Accepted: Tartakower Gambit 1. e4 e5 2. f4 exf4 3. Be2 +C33 King's Gambit Accepted: Tartakower Gambit, Weiss Defense 1. e4 e5 2. f4 exf4 3. Be2 f5 4. exf5 d6 +C33 King's Gambit Accepted: Tumbleweed 1. e4 e5 2. f4 exf4 3. Kf2 +C34 King's Gambit Accepted: Becker Defense 1. e4 e5 2. f4 exf4 3. Nf3 h6 +C34 King's Gambit Accepted: Bonsch-Osmolovsky Variation 1. e4 e5 2. f4 exf4 3. Nf3 Ne7 +C34 King's Gambit Accepted: Fischer Defense 1. e4 e5 2. f4 exf4 3. Nf3 d6 +C34 King's Gambit Accepted: Fischer Defense, Schulder Gambit 1. e4 e5 2. f4 exf4 3. Nf3 d6 4. b4 +C34 King's Gambit Accepted: Fischer Defense, Spanish Variation 1. e4 e5 2. f4 exf4 3. Nf3 d6 4. d4 Nf6 5. Bd3 +C34 King's Gambit Accepted: Gianutio Countergambit 1. e4 e5 2. f4 exf4 3. Nf3 f5 +C34 King's Gambit Accepted: Greco Gambit 1. e4 e5 2. f4 exf4 3. Nf3 d6 4. Bc4 h6 5. d4 g5 6. h4 Bg7 +C34 King's Gambit Accepted: King's Knight's Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 +C34 King's Gambit Accepted: King's Knight's Gambit 1. e4 e5 2. f4 exf4 3. Nf3 +C34 King's Gambit Accepted: MacLeod Defense 1. e4 e5 2. f4 exf4 3. Nf3 Nc6 +C34 King's Gambit Accepted: Schallopp Defense 1. e4 e5 2. f4 exf4 3. Nf3 Nf6 +C34 King's Gambit Accepted: Schallopp Defense, Tashkent Attack 1. e4 e5 2. f4 exf4 3. Nf3 Nf6 4. e5 Nh5 5. g4 +C34 King's Gambit Accepted: Wagenbach Defense 1. e4 e5 2. f4 exf4 3. Nf3 h5 +C35 King's Gambit Accepted: Cunningham Defense 1. e4 e5 2. f4 exf4 3. Nf3 Be7 +C35 King's Gambit Accepted: Cunningham Defense, Bertin Gambit 1. e4 e5 2. f4 exf4 3. Nf3 Be7 4. Bc4 Bh4+ 5. g3 +C35 King's Gambit Accepted: Cunningham Defense, Bertin Gambit 1. e4 e5 2. f4 exf4 3. Nf3 Be7 4. Bc4 Bh4+ 5. g3 fxg3 6. O-O gxh2+ 7. Kh1 +C35 King's Gambit Accepted: Cunningham Defense, McCormick Defense 1. e4 e5 2. f4 exf4 3. Nf3 Be7 4. Bc4 Nf6 +C36 King's Gambit Accepted: Abbazia Defense 1. e4 e5 2. f4 exf4 3. Nf3 d5 4. exd5 Nf6 +C36 King's Gambit Accepted: Abbazia Defense, Main Line 1. e4 e5 2. f4 exf4 3. Nf3 d5 4. exd5 Nf6 5. Bb5+ c6 6. dxc6 bxc6 7. Bc4 Nd5 +C36 King's Gambit Accepted: Modern Defense 1. e4 e5 2. f4 exf4 3. Nf3 d5 +C36 King's Gambit Accepted: Modern Defense 1. e4 e5 2. f4 exf4 3. Nf3 d5 4. exd5 +C37 King's Gambit Accepted: Australian Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. h4 +C37 King's Gambit Accepted: Blachly Gambit 1. e4 e5 2. f4 exf4 3. Nf3 Nc6 4. Bc4 g5 +C37 King's Gambit Accepted: Double Muzio Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Qf6 7. e5 Qxe5 8. Bxf7+ +C37 King's Gambit Accepted: Double Muzio Gambit, Baldwin Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Qf6 7. Nc3 Qd4+ 8. Kh1 Qxc4 9. Nd5 +C37 King's Gambit Accepted: Double Muzio Gambit, Bello Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Qf6 7. Nc3 +C37 King's Gambit Accepted: Double Muzio Gambit, Paulsen Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Qf6 7. e5 Qxe5 8. d3 Bh6 9. Nc3 Ne7 10. Bd2 Nbc6 11. Rae1 +C37 King's Gambit Accepted: Double Muzio Gambit, Young Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Qf6 7. Bxf7+ Kxf7 8. d4 Qxd4+ 9. Be3 Qf6 10. Nc3 fxe3 +C37 King's Gambit Accepted: Ghulam-Kassim Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. d4 +C37 King's Gambit Accepted: Ghulam-Kassim Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. d4 gxf3 6. Qxf3 +C37 King's Gambit Accepted: King's Knight's Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 +C37 King's Gambit Accepted: Kotov Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. d4 gxf3 6. Bxf4 +C37 King's Gambit Accepted: Lolli Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Bxf7+ +C37 King's Gambit Accepted: Lolli Gambit, Young Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Bxf7+ Kxf7 6. O-O gxf3 7. Qxf3 Qf6 8. d4 Qxd4+ 9. Be3 Qf6 10. Nc3 +C37 King's Gambit Accepted: McDonnell Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Nc3 +C37 King's Gambit Accepted: Middleton Countergambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 d6 5. O-O Bg4 6. h3 h5 7. hxg4 hxg4 +C37 King's Gambit Accepted: Muzio Gambit Accepted, From's Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Qe7 +C37 King's Gambit Accepted: Muzio Gambit, Brentano Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O d5 +C37 King's Gambit Accepted: Muzio Gambit, Holloway Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Nc6 +C37 King's Gambit Accepted: Muzio Gambit, Kling and Horwitz Counterattack 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O Qe7 +C37 King's Gambit Accepted: Muzio Gambit, Sarratt Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O gxf3 6. Qxf3 Qf6 +C37 King's Gambit Accepted: Muzio Gambit, Wild Muzio Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. O-O +C37 King's Gambit Accepted: Quade Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Nc3 +C37 King's Gambit Accepted: Rosentreter Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. d4 +C37 King's Gambit Accepted: Rosentreter Gambit, Bird Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. d4 g4 5. Ne5 Qh4+ 6. g3 +C37 King's Gambit Accepted: Rosentreter Gambit, Sörensen Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. d4 g4 5. Nc3 +C37 King's Gambit Accepted: Rosentreter Gambit, Testa Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. d4 g4 5. Bxf4 +C37 King's Gambit Accepted: Salvio Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Ne5 +C37 King's Gambit Accepted: Salvio Gambit, Anderssen Counterattack 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Ne5 Qh4+ 6. Kf1 Nh6 7. d4 d6 +C37 King's Gambit Accepted: Salvio Gambit, Cochrane Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Ne5 Qh4+ 6. Kf1 f3 +C37 King's Gambit Accepted: Salvio Gambit, Santa Maria Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Ne5 Qh4+ 6. Kf1 Nf6 +C37 King's Gambit Accepted: Salvio Gambit, Silberschmidt Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Ne5 Qh4+ 6. Kf1 Nh6 +C37 King's Gambit Accepted: Salvio Gambit, Viennese Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Ne5 Qh4+ 6. Kf1 Nc6 +C37 King's Gambit Accepted: Silberschmidt Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 g4 5. Ne5 Qh4+ 6. Kf1 Nh6 7. d4 f3 +C37 King's Gambit Accepted: Sörensen Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. d4 g4 5. Ne5 +C38 King's Gambit Accepted: Greco Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 Bg7 5. h4 h6 6. d4 d6 7. Nc3 c6 8. hxg5 hxg5 9. Rxh8 Bxh8 10. Ne5 +C38 King's Gambit Accepted: Hanstein Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 Bg7 5. O-O +C38 King's Gambit Accepted: Mayet Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 Bg7 5. d4 d6 6. c3 +C38 King's Gambit Accepted: Philidor Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 Bg7 5. h4 +C38 King's Gambit Accepted: Philidor Gambit, Schultz Variation 1. e4 e5 2. f4 exf4 3. Nf3 h6 4. Bc4 d6 5. d4 g5 6. h4 Bg7 7. Qd3 +C38 King's Gambit Accepted: Traditional Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. Bc4 Bg7 +C39 King's Gambit Accepted: Allgaier Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 +C39 King's Gambit Accepted: Allgaier Gambit, Thorold Attack 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 h6 6. Nxf7 Kxf7 7. d4 +C39 King's Gambit Accepted: Allgaier Gambit, Urusov Attack 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 h6 6. Nxf7 Kxf7 7. Bc4+ +C39 King's Gambit Accepted: Allgaier, Blackburne Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 h6 6. Nxf7 Kxf7 7. Nc3 +C39 King's Gambit Accepted: Allgaier, Cook Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 h6 6. Nxf7 Kxf7 7. d4 d5 8. Bxf4 dxe4 9. Bc4+ Kg7 10. Be5+ +C39 King's Gambit Accepted: Allgaier, Horny Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 h6 6. Nxf7 Kxf7 7. Qxg4 Nf6 8. Qxf4 Bd6 +C39 King's Gambit Accepted: Allgaier, Schlechter Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 Nf6 +C39 King's Gambit Accepted: Allgaier, Urusov Attack 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 h6 6. Nxf7 Kxf7 7. Bc4+ d5 8. Bxd5+ Kg7 9. d4 +C39 King's Gambit Accepted: Kieseritzky Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 +C39 King's Gambit Accepted: Kieseritzky Gambit, Anderssen Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. Bc4 d5 7. exd5 Bd6 +C39 King's Gambit Accepted: Kieseritzky Gambit, Anderssen-Cordel Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. Bc4 d5 7. exd5 Bd6 8. d4 Nh5 9. Bxf4 Nxf4 +C39 King's Gambit Accepted: Kieseritzky Gambit, Berlin Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 +C39 King's Gambit Accepted: Kieseritzky Gambit, Berlin Defense, Rubinstein Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. d4 +C39 King's Gambit Accepted: Kieseritzky Gambit, Berlin Defense, de Riviere Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. Nxg4 d5 +C39 King's Gambit Accepted: Kieseritzky Gambit, Brentano Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 d5 +C39 King's Gambit Accepted: Kieseritzky Gambit, Brentano Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 d5 6. d4 Nf6 7. Bxf4 +C39 King's Gambit Accepted: Kieseritzky Gambit, Brentano Defense, Caro Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 d5 6. d4 Nf6 7. Bxf4 Nxe4 8. Nd2 +C39 King's Gambit Accepted: Kieseritzky Gambit, Cotter Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ng5 h6 6. Nxf7 +C39 King's Gambit Accepted: Kieseritzky Gambit, Kolisch Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 d6 +C39 King's Gambit Accepted: Kieseritzky Gambit, Long Whip 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 h5 +C39 King's Gambit Accepted: Kieseritzky Gambit, Neumann Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nc6 +C39 King's Gambit Accepted: Kieseritzky Gambit, Paulsen Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Bg7 +C39 King's Gambit Accepted: Kieseritzky Gambit, Paulsen Defense Deferred 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. Bc4 d5 7. exd5 Bg7 +C39 King's Gambit Accepted: Kieseritzky Gambit, Rice Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. Bc4 d5 7. exd5 Bd6 8. O-O Bxe5 +C39 King's Gambit Accepted: Kieseritzky Gambit, Rosenthal Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Qe7 +C39 King's Gambit Accepted: Kieseritzky, Long Whip Defense, Jaenisch Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 h5 6. Bc4 Rh7 7. d4 Bh6 8. Nc3 +C39 King's Gambit Accepted: Kieseritzky, Polerio Defense 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Be7 +C39 King's Gambit Accepted: Kieseritzky, Rice Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Nf6 6. Bc4 d5 7. exd5 Bd6 8. O-O +C39 King's Gambit Accepted: Kieseritzky, Salvio Defense, Cozio Variation 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 g4 5. Ne5 Qe7 6. d4 f5 7. Bc4 +C39 King's Gambit Accepted: King's Knight's Gambit 1. e4 e5 2. f4 exf4 3. Nf3 g5 4. h4 +C40 Elephant Gambit 1. e4 e5 2. Nf3 d5 +C40 Elephant Gambit: Maróczy Gambit 1. e4 e5 2. Nf3 d5 3. exd5 Bd6 +C40 Elephant Gambit: Paulsen Countergambit 1. e4 e5 2. Nf3 d5 3. exd5 e4 +C40 Elephant Gambit: Wasp Variation 1. e4 e5 2. Nf3 d5 3. Nxe5 dxe4 4. Bc4 Qg5 +C40 Gunderam Defense 1. e4 e5 2. Nf3 Qe7 +C40 King's Knight Opening 1. e4 e5 2. Nf3 +C40 King's Pawn Game: Busch-Gass Gambit 1. e4 e5 2. Nf3 Bc5 +C40 King's Pawn Game: Busch-Gass Gambit, Chiodini Gambit 1. e4 e5 2. Nf3 Bc5 3. Nxe5 Nc6 +C40 King's Pawn Game: Damiano Defense 1. e4 e5 2. Nf3 f6 +C40 King's Pawn Game: Damiano Defense, Damiano Gambit 1. e4 e5 2. Nf3 f6 3. Nxe5 fxe5 4. Qh5+ g6 5. Qxe5+ Qe7 6. Qxh8 +C40 King's Pawn Game: Damiano Defense, Damiano Gambit, Chigorin Gambit 1. e4 e5 2. Nf3 f6 3. Nxe5 Qe7 4. Nf3 d5 +C40 King's Pawn Game: Gunderam Defense, Gunderam Gambit 1. e4 e5 2. Nf3 Qe7 3. Bc4 f5 +C40 King's Pawn Game: Gunderam Gambit 1. e4 e5 2. Nf3 c6 +C40 King's Pawn Game: La Bourdonnais Gambit 1. e4 e5 2. Nf3 Qf6 3. Bc4 Qg6 4. O-O +C40 King's Pawn Game: McConnell Defense 1. e4 e5 2. Nf3 Qf6 +C40 Latvian Gambit 1. e4 e5 2. Nf3 f5 +C40 Latvian Gambit Accepted 1. e4 e5 2. Nf3 f5 3. exf5 +C40 Latvian Gambit Accepted: Bilguer Variation 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. d4 d6 5. Nc4 +C40 Latvian Gambit Accepted: Bronstein Attack 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. d4 d6 5. Nc4 fxe4 6. Be2 +C40 Latvian Gambit Accepted: Bronstein Gambit 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. d4 d6 5. Nc4 fxe4 6. Qh5+ g6 7. Qe2 +C40 Latvian Gambit Accepted: Foltys Variation 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. Nc4 fxe4 5. d3 +C40 Latvian Gambit Accepted: Foltys-Leonhardt Variation 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. Nc4 +C40 Latvian Gambit Accepted: Leonhardt Variation 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. Nc4 fxe4 5. Nc3 +C40 Latvian Gambit Accepted: Main Line 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. d4 +C40 Latvian Gambit Accepted: Nimzowitsch Attack 1. e4 e5 2. Nf3 f5 3. Nxe5 Qf6 4. d4 d6 5. Nc4 fxe4 6. Ne3 +C40 Latvian Gambit: Behting Variation 1. e4 e5 2. Nf3 f5 3. Bc4 fxe4 4. Nxe5 Qg5 5. Nf7 Qxg2 6. Rf1 d5 7. Nxh8 Nf6 +C40 Latvian Gambit: Corkscrew Countergambit 1. e4 e5 2. Nf3 f5 3. Bc4 fxe4 4. Nxe5 Nf6 +C40 Latvian Gambit: Corkscrew Gambit 1. e4 e5 2. Nf3 f5 3. Nxe5 Nf6 4. Bc4 fxe4 5. Nf7 Qe7 6. Nxh8 d5 +C40 Latvian Gambit: Diepstraten Countergambit 1. e4 e5 2. Nf3 f5 3. c4 +C40 Latvian Gambit: Fraser Defense 1. e4 e5 2. Nf3 f5 3. Nxe5 Nc6 +C40 Latvian Gambit: Greco Variation 1. e4 e5 2. Nf3 f5 3. Nxe5 Qe7 +C40 Latvian Gambit: Lobster Gambit 1. e4 e5 2. Nf3 f5 3. g4 +C40 Latvian Gambit: Mason Countergambit 1. e4 e5 2. Nf3 f5 3. d4 +C40 Latvian Gambit: Mayet Attack 1. e4 e5 2. Nf3 f5 3. Bc4 +C40 Latvian Gambit: Mayet Attack, Morgado Defense 1. e4 e5 2. Nf3 f5 3. Bc4 Nf6 +C40 Latvian Gambit: Mayet Attack, Poisoned Pawn Variation 1. e4 e5 2. Nf3 f5 3. Bc4 fxe4 4. Nxe5 Qg5 5. d4 Qxg2 +C40 Latvian Gambit: Mayet Attack, Polerio-Svedenborg Variation 1. e4 e5 2. Nf3 f5 3. Bc4 fxe4 4. Nxe5 d5 +C40 Latvian Gambit: Mayet Attack, Strautins Gambit 1. e4 e5 2. Nf3 f5 3. Bc4 b5 +C40 Latvian Gambit: Mlotkowski Variation 1. e4 e5 2. Nf3 f5 3. Nc3 +C40 Latvian Gambit: Senechaud Gambit 1. e4 e5 2. Nf3 f5 3. b4 +C41 Philidor Defense 1. e4 e5 2. Nf3 d6 +C41 Philidor Defense 1. e4 e5 2. Nf3 d6 3. d4 +C41 Philidor Defense 1. e4 e5 2. Nf3 d6 3. Bc4 +C41 Philidor Defense 1. e4 e5 2. Nf3 d6 3. Bc4 Be7 +C41 Philidor Defense: Albin-Blackburne Gambit 1. e4 e5 2. Nf3 d6 3. d4 Bg4 4. dxe5 Nd7 +C41 Philidor Defense: Berger Variation 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. Nxd4 Nf6 5. Nc3 Be7 6. Be2 O-O 7. O-O c5 8. Nf3 Nc6 9. Bg5 Be6 10. Re1 +C41 Philidor Defense: Bird Gambit 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. c3 +C41 Philidor Defense: Boden Variation 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. Qxd4 Bd7 +C41 Philidor Defense: Exchange Variation 1. e4 e5 2. Nf3 d6 3. d4 exd4 +C41 Philidor Defense: Exchange Variation 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. Nxd4 +C41 Philidor Defense: Exchange Variation 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. Nxd4 Nf6 +C41 Philidor Defense: Hanham Variation 1. e4 e5 2. Nf3 d6 3. d4 Nd7 +C41 Philidor Defense: Hanham Variation, Delmar Variation 1. e4 e5 2. Nf3 d6 3. d4 Nd7 4. Bc4 c6 5. c3 +C41 Philidor Defense: Hanham Variation, Krause Variation 1. e4 e5 2. Nf3 d6 3. d4 Nd7 4. Bc4 c6 5. O-O +C41 Philidor Defense: Hanham Variation, Schlechter Variation 1. e4 e5 2. Nf3 d6 3. d4 Nd7 4. Bc4 c6 5. Nc3 +C41 Philidor Defense: Hanham Variation, Sharp Variation 1. e4 e5 2. Nf3 d6 3. d4 Nd7 4. Bc4 Nb6 +C41 Philidor Defense: Hanham Variation, Steiner Variation 1. e4 e5 2. Nf3 d6 3. d4 Nd7 4. Bc4 c6 5. O-O Be7 6. dxe5 +C41 Philidor Defense: Hanham, Kmoch Variation 1. e4 e5 2. Nf3 d6 3. d4 Nd7 4. Bc4 c6 5. Ng5 +C41 Philidor Defense: Larsen Variation 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. Nxd4 g6 +C41 Philidor Defense: Lion Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Nc3 Nbd7 +C41 Philidor Defense: Lion Variation, Bishop Sacrifice 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Nc3 Nbd7 5. Bc4 Be7 6. Bxf7+ +C41 Philidor Defense: Lion Variation, Delayed Bishop Sacrifice 1. e4 d6 2. d4 Nf6 3. Nc3 Nbd7 4. Nf3 e5 5. Bc4 Be7 6. dxe5 dxe5 7. Bxf7+ +C41 Philidor Defense: Lion Variation, Forcing Line 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Nc3 Nbd7 5. Bc4 Be7 6. Ng5 O-O 7. Bxf7+ Rxf7 8. Ne6 +C41 Philidor Defense: Lion Variation, Lion's Claw, with Bc4 and h6 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Nc3 Nbd7 5. Bc4 Be7 6. O-O h6 +C41 Philidor Defense: Lion Variation, Lion's Claw, with Be2 and c6 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Nc3 Nbd7 5. Be2 Be7 6. O-O c6 +C41 Philidor Defense: Lion Variation, Shirov Gambit 1. e4 e5 2. Nf3 d6 3. d4 Nd7 4. Nc3 Ngf6 5. g4 +C41 Philidor Defense: Lion Variation, Sozin Variation 1. e4 d6 2. d4 Nf6 3. Nc3 e5 4. Nf3 Nbd7 5. Bc4 Be7 6. O-O O-O 7. Qe2 c6 8. a4 exd4 +C41 Philidor Defense: Lopez Countergambit 1. e4 e5 2. Nf3 d6 3. Bc4 f5 +C41 Philidor Defense: Lopez Countergambit, Jaenisch Variation 1. e4 e5 2. Nf3 d6 3. d4 f5 4. Bc4 exd4 5. Ng5 Nh6 6. Nxh7 +C41 Philidor Defense: Morphy Gambit 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. Bc4 +C41 Philidor Defense: Nimzowitsch Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 +C41 Philidor Defense: Nimzowitsch Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. dxe5 +C41 Philidor Defense: Nimzowitsch Variation, Klein Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Bc4 +C41 Philidor Defense: Nimzowitsch Variation, Rellstab Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. dxe5 Nxe4 5. Qd5 +C41 Philidor Defense: Nimzowitsch Variation, Sokolsky Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. dxe5 Nxe4 5. Nbd2 +C41 Philidor Defense: Nimzowitsch, Larobok Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Nc3 Nbd7 5. Bc4 Be7 6. Ng5 O-O 7. Bxf7+ +C41 Philidor Defense: Nimzowitsch, Locock Variation 1. e4 e5 2. Nf3 d6 3. d4 Nf6 4. Ng5 +C41 Philidor Defense: Paulsen Attack 1. e4 e5 2. Nf3 d6 3. d4 exd4 4. Nxd4 d5 5. exd5 +C41 Philidor Defense: Philidor Countergambit 1. e4 e5 2. Nf3 d6 3. d4 f5 +C41 Philidor Defense: Philidor Countergambit, Berger Variation 1. e4 e5 2. Nf3 d6 3. d4 f5 4. dxe5 fxe4 5. Ng5 d5 6. e6 Bc5 7. Nc3 +C41 Philidor Defense: Philidor Countergambit, Zukertort Variation 1. e4 e5 2. Nf3 d6 3. d4 f5 4. Nc3 +C41 Philidor Defense: Philidor Countergambit, del Rio Attack 1. e4 e5 2. Nf3 d6 3. d4 f5 4. dxe5 fxe4 5. Ng5 d5 6. e6 +C41 Philidor Defense: Philidor Gambit 1. e4 e5 2. Nf3 d6 3. d4 Bd7 +C41 Philidor Defense: Steinitz Variation 1. e4 e5 2. Nf3 d6 3. Bc4 Be7 4. c3 +C42 Russian Game 1. e4 e5 2. Nf3 Nf6 +C42 Russian Game 1. e4 e5 2. Nf3 Nf6 3. Nxe5 +C42 Russian Game 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 +C42 Russian Game 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 +C42 Russian Game 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 +C42 Russian Game: Classical Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 +C42 Russian Game: Classical Attack, Berger Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Be7 7. O-O Nc6 8. Re1 Bg4 9. c3 f5 10. Nbd2 +C42 Russian Game: Classical Attack, Chigorin Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Be7 7. O-O Nc6 8. Re1 +C42 Russian Game: Classical Attack, Chigorin Variation, Browne Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Nc6 7. O-O Be7 8. c4 Nb4 9. cxd5 +C42 Russian Game: Classical Attack, Chigorin Variation, Main Line 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Nc6 7. O-O Be7 8. c4 Nb4 9. Be2 +C42 Russian Game: Classical Attack, Closed Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 Nf6 +C42 Russian Game: Classical Attack, Jaenisch Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Nc6 7. O-O Be7 8. c4 +C42 Russian Game: Classical Attack, Krause Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Nc6 7. O-O Be7 8. Re1 Bg4 9. c3 f5 10. c4 +C42 Russian Game: Classical Attack, Marshall Trap 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Bd6 7. O-O O-O 8. c4 Bg4 9. cxd5 f5 10. Re1 Bxh2+ +C42 Russian Game: Classical Attack, Marshall Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Bd6 +C42 Russian Game: Classical Attack, Marshall Variation, Chinese Gambit 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Bd6 7. O-O O-O 8. c4 c6 9. Re1 Bg4 +C42 Russian Game: Classical Attack, Maróczy Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Be7 7. O-O Nc6 8. Re1 Bg4 9. c3 f5 10. c4 Bh4 +C42 Russian Game: Classical Attack, Mason Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Be7 7. O-O O-O +C42 Russian Game: Classical Attack, Mason-Showalter Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Nc6 +C42 Russian Game: Classical Attack, Staunton Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Bd6 7. O-O O-O 8. c4 c6 +C42 Russian Game: Classical Attack, Tarrasch Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Bd6 7. O-O O-O 8. c4 Bg4 +C42 Russian Game: Cochrane Gambit 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nxf7 +C42 Russian Game: Cochrane Gambit, Bishop Check Line 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nxf7 Kxf7 5. Bc4+ +C42 Russian Game: Cochrane Gambit, Center Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nxf7 Kxf7 5. d4 +C42 Russian Game: Cozio Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. Qe2 +C42 Russian Game: Damiano Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 Nxe4 +C42 Russian Game: Damiano Variation, Kholmov Gambit 1. e4 e5 2. Nf3 Nf6 3. Nxe5 Nxe4 4. Qe2 Qe7 +C42 Russian Game: French Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d3 +C42 Russian Game: Italian Variation 1. e4 e5 2. Nf3 Nf6 3. Bc4 +C42 Russian Game: Karklins-Martinovsky Variation 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nd3 +C42 Russian Game: Kaufmann Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. c4 +C42 Russian Game: Millennium Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. Bd3 +C42 Russian Game: Moody Gambit 1. e4 e5 2. Nf3 Nf6 3. Qe2 Nc6 4. d4 +C42 Russian Game: Nimzowitsch Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. Nc3 +C42 Russian Game: Paulsen Attack 1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nc4 +C42 Russian Game: Stafford Gambit 1. e4 e5 2. Nf3 Nf6 3. Nxe5 Nc6 +C42 Russian Game: Stafford Gambit 1. e4 e5 2. Nf3 Nf6 3. Nxe5 Nc6 4. Nxc6 dxc6 +C42 Russian Game: Three Knights Game 1. e4 e5 2. Nf3 Nf6 3. Nc3 +C43 Bishop's Opening: Urusov Gambit 1. e4 e5 2. Bc4 Nf6 3. d4 exd4 4. Nf3 +C43 Bishop's Opening: Urusov Gambit, Keidansky Gambit 1. e4 e5 2. Bc4 Nf6 3. d4 exd4 4. Nf3 Nxe4 5. Qxd4 +C43 Russian Game: Modern Attack 1. e4 e5 2. Nf3 Nf6 3. d4 +C43 Russian Game: Modern Attack 1. e4 e5 2. Nf3 Nf6 3. d4 exd4 +C43 Russian Game: Modern Attack, Bardeleben Variation 1. e4 e5 2. Nf3 Nf6 3. d4 exd4 4. e5 Ne4 5. Qe2 Nc5 6. Nxd4 Nc6 +C43 Russian Game: Modern Attack, Center Attack 1. e4 e5 2. Nf3 Nf6 3. d4 exd4 4. e5 Ne4 5. Qxd4 +C43 Russian Game: Modern Attack, Center Variation 1. e4 e5 2. Nf3 Nf6 3. d4 Nxe4 4. Bd3 +C43 Russian Game: Modern Attack, Murrey Variation 1. e4 e5 2. Nf3 Nf6 3. d4 Nxe4 4. Bd3 Nc6 +C43 Russian Game: Modern Attack, Steinitz Variation 1. e4 e5 2. Nf3 Nf6 3. d4 exd4 4. e5 Ne4 5. Qe2 +C43 Russian Game: Modern Attack, Symmetrical Variation 1. e4 e5 2. Nf3 Nf6 3. d4 d5 +C43 Russian Game: Modern Attack, Tal Gambit 1. e4 e5 2. Nf3 Nf6 3. d4 exd4 4. e5 Ne4 5. Bb5 +C43 Russian Game: Modern Attack, Trifunovic Variation 1. e4 e5 2. Nf3 Nf6 3. d4 Nxe4 4. Bd3 d5 5. Nxe5 Bd6 6. O-O O-O 7. c4 Bxe5 +C44 Dresden Opening: The Goblin 1. e4 e5 2. Nf3 Nc6 3. c4 Nf6 4. Nxe5 +C44 Irish Gambit 1. e4 e5 2. Nf3 Nc6 3. Nxe5 +C44 King's Knight Opening: Konstantinopolsky 1. e4 e5 2. Nf3 Nc6 3. g3 +C44 King's Knight Opening: Normal Variation 1. e4 e5 2. Nf3 Nc6 +C44 King's Pawn Game: Dresden Opening 1. e4 e5 2. Nf3 Nc6 3. c4 +C44 King's Pawn Game: Pachman Wing Gambit 1. e4 e5 2. Nf3 Nc6 3. b4 +C44 King's Pawn Game: Schulze-Müller Gambit 1. e4 e5 2. Nf3 Nc6 3. Nxe5 Nxe5 4. d4 +C44 King's Pawn Game: Tayler Opening 1. e4 e5 2. Nf3 Nc6 3. Be2 +C44 King's Pawn Game: Tayler Opening 1. e4 e5 2. Nf3 Nc6 3. Be2 Nf6 4. d4 +C44 King's Pawn Game: Tayler Opening, Basman Gambit 1. e4 e5 2. Nf3 Nc6 3. Be2 Nf6 4. d4 exd4 5. e5 +C44 King's Pawn Game: Tayler Opening, Inverted Hanham 1. e4 e5 2. Nf3 Nc6 3. Be2 Nf6 4. d3 d5 5. Nbd2 +C44 Latvian Gambit: Clam Gambit 1. e4 e5 2. Nf3 Nc6 3. d3 f5 4. exf5 +C44 Ponziani Opening 1. e4 e5 2. Nf3 Nc6 3. c3 +C44 Ponziani Opening: Caro Gambit 1. e4 e5 2. Nf3 Nc6 3. c3 d5 4. Qa4 Bd7 +C44 Ponziani Opening: Jaenisch Counterattack 1. e4 e5 2. Nf3 Nc6 3. c3 Nf6 +C44 Ponziani Opening: Leonhardt Variation 1. e4 e5 2. Nf3 Nc6 3. c3 d5 4. Qa4 Nf6 +C44 Ponziani Opening: Neumann Gambit 1. e4 e5 2. Nf3 Nc6 3. c3 Nf6 4. Bc4 +C44 Ponziani Opening: Ponziani Countergambit 1. e4 e5 2. Nf3 Nc6 3. c3 f5 +C44 Ponziani Opening: Ponziani Countergambit, Schmidt Attack 1. e4 e5 2. Nf3 Nc6 3. c3 f5 4. d4 d6 5. d5 +C44 Ponziani Opening: Romanishin Variation 1. e4 e5 2. Nf3 Nc6 3. c3 Be7 +C44 Ponziani Opening: Réti Variation 1. e4 e5 2. Nf3 Nc6 3. c3 Nge7 +C44 Ponziani Opening: Spanish Variation 1. e4 e5 2. Nf3 Nc6 3. c3 d5 4. Bb5 +C44 Ponziani Opening: Spanish Variation, Harrwitz Attack, Nikitin Gambit 1. e4 e5 2. Nf3 Nc6 3. c3 d5 4. Bb5 dxe4 5. Nxe5 Qd5 6. Qa4 +C44 Ponziani Opening: Steinitz Variation 1. e4 e5 2. Nf3 Nc6 3. c3 d5 4. Qa4 f6 +C44 Ponziani Opening: Vukovic Gambit 1. e4 e5 2. Nf3 Nc6 3. c3 Nf6 4. d4 Nxe4 5. d5 Bc5 +C44 Scotch Game 1. e4 e5 2. Nf3 Nc6 3. d4 +C44 Scotch Game 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 +C44 Scotch Game: Benima Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Be7 4. d4 exd4 +C44 Scotch Game: Cochrane Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bb4+ 5. c3 dxc3 6. bxc3 Ba5 7. e5 +C44 Scotch Game: Cochrane-Shumov Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bc5 5. Ng5 Nh6 6. Nxf7 Nxf7 7. Bxf7+ Kxf7 8. Qh5+ g6 9. Qxc5 d5 +C44 Scotch Game: Göring Gambit 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. c3 +C44 Scotch Game: Göring Gambit, Bardeleben Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. c3 dxc3 5. Bc4 Nf6 6. Nxc3 Bb4 +C44 Scotch Game: Göring Gambit, Double Pawn Sacrifice 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. c3 dxc3 5. Bc4 +C44 Scotch Game: Göring Gambit, Main Line 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. c3 dxc3 5. Nxc3 Bb4 +C44 Scotch Game: Hanneken Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bb4+ 5. c3 dxc3 6. O-O cxb2 7. Bxb2 Nf6 8. Ng5 O-O 9. e5 Nxe5 +C44 Scotch Game: Haxo Gambit 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bc5 +C44 Scotch Game: Lolli Variation 1. e4 e5 2. Nf3 Nc6 3. d4 Nxd4 +C44 Scotch Game: Napoleon Gambit 1. e4 e5 2. Nf3 Nc6 3. d4 Nxd4 4. Nxd4 exd4 5. Bc4 +C44 Scotch Game: Relfsson Gambit 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bb5 +C44 Scotch Game: Scotch Gambit 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 +C44 Scotch Game: Scotch Gambit, Advance Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. e5 +C44 Scotch Game: Scotch Gambit, Cochrane-Anderssen Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bc5 5. O-O d6 6. c3 Bg4 +C44 Scotch Game: Scotch Gambit, Dubois Réti Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 +C44 Scotch Game: Scotch Gambit, Göring Gambit Declined 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. c3 d5 +C44 Scotch Game: Scotch Gambit, Kingside Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. e5 Ng4 +C44 Scotch Game: Scotch Gambit, London Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bb4+ +C44 Scotch Game: Scotch Gambit, Sarratt Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bc5 5. Ng5 +C44 Scotch Game: Sea-Cadet Mate 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. c3 dxc3 5. Nxc3 d6 6. Bc4 Bg4 7. O-O Ne5 8. Nxe5 Bxd1 9. Bxf7+ Ke7 10. Nd5# +C44 Scotch Game: Vitzthum Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bc5 5. Ng5 Nh6 6. Qh5 +C45 Scotch Game 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 +C45 Scotch Game 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nb5 Bb4+ 6. Bd2 +C45 Scotch Game: Alekhine Gambit 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Nf6 5. e5 +C45 Scotch Game: Blumenfeld Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Be3 Qf6 6. Nb5 +C45 Scotch Game: Braune Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Be3 +C45 Scotch Game: Classical Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 +C45 Scotch Game: Classical Variation, Blackburne Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Be3 Qf6 6. c3 Nge7 7. Qd2 +C45 Scotch Game: Classical Variation, Intermezzo Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Nxc6 Qf6 +C45 Scotch Game: Classical Variation, Millennium Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Be3 Qf6 6. c3 Qg6 +C45 Scotch Game: Fraser Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nf3 +C45 Scotch Game: Ghulam-Kassim Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Nxd4 5. Qxd4 d6 6. Bd3 +C45 Scotch Game: Gottschall Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Be3 Qf6 6. c3 Nge7 7. Qd2 d5 8. Nb5 Bxe3 9. Qxe3 O-O 10. Nxc7 Rb8 11. Nxd5 Nxd5 12. exd5 Nb4 +C45 Scotch Game: Horwitz Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nb5 +C45 Scotch Game: Horwitz Attack, Blackburne Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nb5 Bb4+ 6. Bd2 Qxe4+ 7. Be2 Kd8 8. O-O Bxd2 9. Qxd2 +C45 Scotch Game: Malaniuk Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bb4+ +C45 Scotch Game: Meitner Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Be3 Qf6 6. c3 Nge7 7. Nc2 +C45 Scotch Game: Mieses Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Nf6 5. Nxc6 bxc6 6. e5 +C45 Scotch Game: Modern Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nc3 Bb4 +C45 Scotch Game: Paulsen Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Be3 Qf6 6. c3 Nge7 7. Bb5 +C45 Scotch Game: Paulsen Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nf5 +C45 Scotch Game: Paulsen, Gunsberg Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Be3 Qf6 6. c3 Nge7 7. Bb5 Nd8 +C45 Scotch Game: Potter Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Nb3 +C45 Scotch Game: Romanishin Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Bc5 5. Nb3 Bb4+ +C45 Scotch Game: Rosenthal Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nb5 Bb4+ 6. Bd2 Qxe4+ 7. Be2 Kd8 8. O-O Bxd2 9. Nxd2 Qg6 +C45 Scotch Game: Schmidt Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Nf6 +C45 Scotch Game: Steinitz Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 +C45 Scotch Game: Steinitz Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Qh4 5. Nc3 +C45 Scotch Game: Tartakower Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Nxd4 Nf6 5. Nxc6 bxc6 6. Nd2 +C46 Three Knights Opening 1. e4 e5 2. Nf3 Nc6 3. Nc3 +C46 Three Knights Opening 1. e4 e5 2. Nf3 Nc6 3. Nc3 Bb4 +C46 Three Knights Opening: Schlechter Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Bb4 4. Nd5 Nf6 +C46 Three Knights Opening: Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Nc3 g6 +C46 Three Knights Opening: Steinitz-Rosenthal Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 g6 4. d4 exd4 5. Nd5 +C46 Three Knights Opening: Winawer Defense 1. e4 e5 2. Nf3 Nc6 3. Nc3 f5 +C47 Four Knights Game 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 +C47 Four Knights Game: Gunsberg Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. a3 +C47 Four Knights Game: Halloween Gambit 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Nxe5 +C47 Four Knights Game: Halloween Gambit, Oldtimer Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Nxe5 Nxe5 5. d4 Ng6 6. e5 Ng8 7. Bc4 Bb4 8. Qf3 f5 +C47 Four Knights Game: Halloween Gambit, Plasma Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Nxe5 Nxe5 5. d4 Nc6 6. d5 Ne5 7. f4 Ng6 8. e5 Ng8 9. d6 cxd6 10. exd6 Qf6 11. Nb5 Rb8 +C47 Four Knights Game: Italian Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Nc3 +C47 Four Knights Game: Italian Variation, Noa Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Nc3 Nxe4 5. Bxf7+ +C47 Four Knights Game: Scotch Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 +C47 Four Knights Game: Scotch Variation Accepted 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 exd4 +C47 Four Knights Game: Scotch Variation, Belgrade Gambit 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 exd4 5. Nd5 +C47 Four Knights Game: Scotch Variation, Belgrade Gambit, Modern Defense 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 exd4 5. Nd5 Nxe4 6. Qe2 f5 +C47 Four Knights Game: Scotch Variation, Krause Gambit 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 Bb4 5. Nxe5 +C47 Four Knights Game: Scotch Variation, Krause Gambit, Leonhardt Defense 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 Bb4 5. Nxe5 Qe7 +C47 Four Knights Game: Scotch Variation, Oxford Gambit 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 Bb4 5. d5 Nd4 +C47 Four Knights Game: Scotch Variation, Schmid Defense 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. d4 exd4 5. Nxd4 Nxe4 +C48 Four Knights Game: Bardeleben Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bc5 5. O-O O-O 6. Nxe5 Nxe5 7. d4 Bd6 8. f4 Nc6 9. e5 Bb4 +C48 Four Knights Game: Marshall Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 5. Nxe5 Bc5 6. O-O O-O +C48 Four Knights Game: Ranken Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 a6 5. Bxc6 +C48 Four Knights Game: Rubinstein Countergambit 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 5. Be2 +C48 Four Knights Game: Rubinstein Countergambit, Henneberger Variation 1. e4 e5 2. Nf3 Nf6 3. Nc3 Nc6 4. Bb5 Nd4 5. O-O +C48 Four Knights Game: Rubinstein Countergambit, Maróczy Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 5. Be2 Nxf3+ 6. Bxf3 Bc5 7. O-O O-O 8. d3 d6 9. Na4 Bb6 +C48 Four Knights Game: Spanish Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 +C48 Four Knights Game: Spanish Variation, Classical Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bc5 +C48 Four Knights Game: Spanish Variation, Classical Variation, Marshall Gambit 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 5. Ba4 Bc5 6. Nxe5 O-O +C48 Four Knights Game: Spanish Variation, Rubinstein Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 +C48 Four Knights Game: Spanish Variation, Rubinstein Variation 1. e4 e5 2. Nf3 Nf6 3. Nc3 Nc6 4. Bb5 Nd4 5. Nxe5 Qe7 6. f4 +C48 Four Knights Game: Spanish Variation, Rubinstein Variation Accepted 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 5. Nxd4 +C48 Four Knights Game: Spielmann Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 a6 5. Bxc6 dxc6 6. Nxe5 Nxe4 7. Nxe4 Qd4 8. O-O Qxe5 9. Re1 Be6 10. d4 Qd5 +C49 Four Knights Game: Alatortsev Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 Qe7 7. Ne2 d5 +C49 Four Knights Game: Double Spanish 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 +C49 Four Knights Game: Double Spanish 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 +C49 Four Knights Game: Gunsberg Counterattack 1. e4 e5 2. Nf3 Nf6 3. Nc3 Nc6 4. Bb5 Bb4 5. O-O O-O 6. Nd5 Nxd5 7. exd5 e4 +C49 Four Knights Game: Janowski Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 Bxc3 7. bxc3 d6 8. Re1 +C49 Four Knights Game: Nimzowitsch Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. Bxc6 +C49 Four Knights Game: Spanish Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 Bxc3 +C49 Four Knights Game: Spanish Variation, Symmetrical Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 d6 +C49 Four Knights Game: Spanish Variation, Symmetrical Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 d6 7. Bg5 Bxc3 8. bxc3 Qe7 9. Re1 Nd8 10. d4 Bg4 +C49 Four Knights Game: Spanish Variation, Symmetrical Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 d6 7. Bg5 Ne7 +C49 Four Knights Game: Spanish Variation, Symmetrical Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 d6 7. Ne2 +C49 Four Knights Game: Svenonius Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 Bxc3 7. bxc3 d5 +C49 Four Knights Game: Symmetrical, Blake Variation 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 d6 7. Bg5 Ne7 8. Nh4 c6 9. Bc4 d5 10. Bb3 Qd6 +C49 Four Knights Game: Symmetrical, Metger Unpin 1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Bb4 5. O-O O-O 6. d3 d6 7. Bg5 Bxc3 8. bxc3 Qe7 +C49 Four Knights Game: Symmetrical, Tarrasch Variation 1. e4 e5 2. Nf3 Nf6 3. Nc3 Nc6 4. Bb5 Bb4 5. O-O O-O 6. d3 d6 7. Bg5 Be6 +C50 Four Knights Game: Italian Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. Nc3 Nf6 +C50 Italian Game 1. e4 e5 2. Nf3 Nc6 3. Bc4 +C50 Italian Game: Anti-Fried Liver Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 h6 +C50 Italian Game: Blackburne-Kostić Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nd4 +C50 Italian Game: Classical Variation, Albin Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. O-O Nf6 5. c3 +C50 Italian Game: Deutz Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. O-O Nf6 5. d4 +C50 Italian Game: Giuoco Pianissimo 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. d3 +C50 Italian Game: Giuoco Pianissimo, Canal Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. d3 Nf6 5. Nc3 d6 6. Bg5 +C50 Italian Game: Giuoco Pianissimo, Dubois Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. d3 f5 5. Ng5 f4 +C50 Italian Game: Giuoco Pianissimo, Italian Four Knights Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. d3 Nf6 5. Nc3 +C50 Italian Game: Giuoco Pianissimo, Lucchini Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. d3 f5 +C50 Italian Game: Giuoco Pianissimo, Normal 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d3 Bc5 +C50 Italian Game: Giuoco Piano 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 +C50 Italian Game: Hungarian Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Be7 +C50 Italian Game: Hungarian Defense, Tartakower Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Be7 4. d4 exd4 5. c3 Nf6 6. e5 Ne4 +C50 Italian Game: Jerome Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. Bxf7+ +C50 Italian Game: Paris Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 d6 +C50 Italian Game: Rosentreter Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. d4 +C50 Italian Game: Rousseau Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 f5 +C51 Italian Game: Evans Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 +C51 Italian Game: Evans Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. Nc3 Bg4 +C51 Italian Game: Evans Gambit Accepted 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 +C51 Italian Game: Evans Gambit Declined 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 +C51 Italian Game: Evans Gambit Declined 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. a4 +C51 Italian Game: Evans Gambit Declined, Cordel Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. Bb2 +C51 Italian Game: Evans Gambit Declined, Hicken Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. b5 Na5 6. Nxe5 Qg5 7. Qf3 Qxe5 8. Qxf7+ Kd8 9. Bb2 +C51 Italian Game: Evans Gambit Declined, Hirschbach Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. b5 Na5 6. Nxe5 Qg5 +C51 Italian Game: Evans Gambit Declined, Lange Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. b5 Na5 6. Nxe5 Nh6 +C51 Italian Game: Evans Gambit Declined, Pavlov Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. b5 Na5 6. Nxe5 Nh6 7. d4 d6 8. Bxh6 dxe5 9. Bxg7 Rg8 10. Bxf7+ Kxf7 11. Bxe5 Qg5 12. Nd2 +C51 Italian Game: Evans Gambit Declined, Showalter Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. a4 a6 6. Nc3 +C51 Italian Game: Evans Gambit Declined, Vasquez Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bb6 5. b5 Na5 6. Nxe5 Qg5 7. Bxf7+ Ke7 8. Qh5 +C51 Italian Game: Evans Gambit, Anderssen Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Be7 +C51 Italian Game: Evans Gambit, Anderssen Variation, Cordel Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Be7 6. d4 Na5 +C51 Italian Game: Evans Gambit, Fontaine Countergambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 b5 +C51 Italian Game: Evans Gambit, Fraser Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. Nc3 Bg4 10. Qa4 +C51 Italian Game: Evans Gambit, Fraser-Mortimer Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. Nc3 Bg4 10. Qa4 Bd7 11. Qb3 Na5 12. Bxf7+ Kf8 13. Qc2 +C51 Italian Game: Evans Gambit, Göring Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. Nc3 Na5 10. Bg5 +C51 Italian Game: Evans Gambit, Harding Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. cxd4 Bb4+ 8. Bd2 +C51 Italian Game: Evans Gambit, Hein Countergambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 d5 +C51 Italian Game: Evans Gambit, Mayet Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bf8 +C51 Italian Game: Evans Gambit, McDonnell Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 +C51 Italian Game: Evans Gambit, McDonnell Defense, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 +C51 Italian Game: Evans Gambit, Morphy Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. Nc3 +C51 Italian Game: Evans Gambit, Mortimer-Evans Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. Nc3 Bg4 10. Qa4 Bd7 11. Qb3 Na5 12. Bxf7+ Kf8 13. Qc2 Kxf7 +C51 Italian Game: Evans Gambit, Paulsen Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. d5 Na5 10. Bb2 Ne7 +C51 Italian Game: Evans Gambit, Steinitz Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. Nc3 Na5 10. Bg5 f6 11. Be3 +C51 Italian Game: Evans Gambit, Stone-Ware Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bd6 +C51 Italian Game: Evans Gambit, Ulvestad Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Bc5 6. d4 exd4 7. O-O d6 8. cxd4 Bb6 9. d5 Na5 10. Bb2 +C52 Italian Game: Evans Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. O-O d6 +C52 Italian Game: Evans Gambit, Alapin-Steinitz Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. O-O d6 7. d4 Bg4 +C52 Italian Game: Evans Gambit, Anderssen Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. O-O Nf6 7. d4 exd4 +C52 Italian Game: Evans Gambit, Bronstein Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 d6 +C52 Italian Game: Evans Gambit, Compromised Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O dxc3 +C52 Italian Game: Evans Gambit, Compromised Defense, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O dxc3 8. Qb3 Qf6 9. e5 Qg6 10. Nxc3 Nge7 11. Ba3 +C52 Italian Game: Evans Gambit, Compromised Defense, Potter Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O dxc3 8. Qb3 Qf6 9. e5 Qg6 10. Nxc3 Nge7 11. Rd1 +C52 Italian Game: Evans Gambit, Dufresne Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O d3 +C52 Italian Game: Evans Gambit, Johner Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O b5 +C52 Italian Game: Evans Gambit, Laroche Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 Nf6 +C52 Italian Game: Evans Gambit, Lasker Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. O-O d6 7. d4 Bb6 +C52 Italian Game: Evans Gambit, Leonhardt Countergambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 b5 +C52 Italian Game: Evans Gambit, Levenfish Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 d6 7. Qb3 Qd7 8. dxe5 dxe5 9. O-O Bb6 10. Ba3 Na5 11. Nxe5 +C52 Italian Game: Evans Gambit, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 +C52 Italian Game: Evans Gambit, Mieses Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O Nge7 +C52 Italian Game: Evans Gambit, Pierce Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 +C52 Italian Game: Evans Gambit, Richardson Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. O-O Nf6 7. d4 O-O 8. Nxe5 +C52 Italian Game: Evans Gambit, Sanders-Alapin Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. O-O d6 7. d4 Bd7 +C52 Italian Game: Evans Gambit, Slow Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. O-O +C52 Italian Game: Evans Gambit, Sokolsky Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 d6 7. Bg5 +C52 Italian Game: Evans Gambit, Tartakower Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 d6 7. Qb3 +C52 Italian Game: Evans Gambit, Waller Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. b4 Bxb4 5. c3 Ba5 6. d4 exd4 7. O-O d6 8. Qb3 +C53 Italian Game: Bird's Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. b4 +C53 Italian Game: Classical Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 +C53 Italian Game: Classical Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 +C53 Italian Game: Classical Variation, Alexandre Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 f5 +C53 Italian Game: Classical Variation, Center Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 +C53 Italian Game: Classical Variation, Center Holding Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Qe7 5. d4 Bb6 +C53 Italian Game: Classical Variation, Closed Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Qe7 +C53 Italian Game: Classical Variation, Giuoco Pianissimo 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d3 +C53 Italian Game: Classical Variation, Giuoco Pianissimo, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d3 d6 6. O-O O-O 7. Re1 a6 8. Bb3 Ba7 9. h3 +C53 Italian Game: Classical Variation, Greco Gambit 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bc5 5. c3 Nf6 6. e5 d5 +C53 Italian Game: Classical Variation, Greco Gambit, Anderssen Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. e5 d5 7. Bb5 Ne4 8. cxd4 Bb4+ +C53 Italian Game: Classical Variation, La Bourdonnais Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 d6 5. d4 exd4 6. cxd4 Bb6 +C53 Italian Game: Classical Variation, Tarrasch Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Qe7 5. d4 Bb6 6. O-O d6 7. a4 a6 8. h3 Nf6 9. Re1 +C53 Italian Game: Giuoco Piano, Eisinger Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Qe7 5. d4 Bb6 6. d5 Nb8 7. d6 +C53 Italian Game: Giuoco Piano, Ghulam-Kassim Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. e5 Ne4 7. Bd5 Nxf2 8. Kxf2 dxc3+ 9. Kg3 +C53 Italian Game: Giuoco Piano, Mestel Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Qe7 5. d4 Bb6 6. Bg5 +C53 Italian Game: Scotch Gambit, Walbrodt-Baird Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. O-O +C54 Italian Game: Classical Variation, Greco Gambit, Greco Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Nxc3 +C54 Italian Game: Classical Variation, Greco Gambit, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Bxc3 +C54 Italian Game: Classical Variation, Greco Gambit, Moeller-Bayonet Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Bxc3 9. d5 Bf6 10. Re1 Ne7 11. Rxe4 d6 12. g4 +C54 Italian Game: Classical Variation, Greco Gambit, Moeller-Therkatz Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Bxc3 9. d5 +C54 Italian Game: Classical Variation, Greco Gambit, Traditional Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 +C54 Italian Game: Giuoco Piano, Aitken Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Nxc3 9. bxc3 Bxc3 10. Ba3 +C54 Italian Game: Giuoco Piano, Bernstein Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Nxc3 9. bxc3 Bxc3 10. Qb3 d5 +C54 Italian Game: Giuoco Piano, Cracow Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Kf1 +C54 Italian Game: Giuoco Piano, Greco's Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 +C54 Italian Game: Giuoco Piano, Krause Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Bd2 Nxe4 8. Bxb4 Nxb4 9. Bxf7+ Kxf7 10. Qb3+ d5 11. Ne5+ Kf6 12. f3 +C54 Italian Game: Giuoco Piano, Steinitz Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Bxc3 9. bxc3 d5 10. Ba3 +C54 Italian Game: Giuoco Piano, Therkatz-Herzog Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. c3 Nf6 5. d4 exd4 6. cxd4 Bb4+ 7. Nc3 Nxe4 8. O-O Bxc3 9. d5 Bf6 10. Re1 Ne7 11. Rxe4 d6 12. Bg5 Bxg5 13. Nxg5 O-O 14. Nxh7 +C55 Italian Game: Giuoco Piano 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. O-O Bc5 5. d4 Bxd4 6. Nxd4 Nxd4 7. Bg5 d6 +C55 Italian Game: Giuoco Piano, Holzhausen Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. O-O Bc5 5. d4 Bxd4 6. Nxd4 Nxd4 7. Bg5 d6 8. f4 Qe7 9. fxe5 dxe5 10. Nc3 +C55 Italian Game: Giuoco Piano, Rosentreter Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. O-O Bc5 5. d4 Bxd4 6. Nxd4 Nxd4 7. Bg5 h6 8. Bh4 g5 9. f4 +C55 Italian Game: Scotch Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O +C55 Italian Game: Scotch Gambit, Janowski Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O d6 +C55 Italian Game: Scotch Gambit, Max Lange Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O Bc5 +C55 Italian Game: Scotch Gambit, Max Lange Attack Accepted 1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 4. O-O Nf6 5. d4 exd4 6. e5 d5 7. exf6 dxc4 8. Re1+ Be6 9. fxg7 +C55 Italian Game: Scotch Gambit, Max Lange Attack, Long Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O Bc5 6. e5 d5 7. exf6 dxc4 8. Re1+ Be6 9. Ng5 Qd5 10. Nc3 Qf5 11. Nce4 +C55 Italian Game: Scotch Gambit, Max Lange Attack, Spielmann Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O Bc5 6. e5 Ng4 +C55 Italian Game: Scotch Gambit, de Riviere Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O Be7 +C55 Italian Game: Scotch Invitation Declined 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 d6 +C55 Italian Game: Two Knights Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 +C55 Italian Game: Two Knights Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 Nxe4 +C55 Italian Game: Two Knights Defense, Keidansky Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. e5 d5 6. Bb5 Ne4 7. Nxd4 Bc5 8. Nxc6 Bxf2+ 9. Kf1 Qh4 +C55 Italian Game: Two Knights Defense, Max Lange Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O Bc5 6. e5 +C55 Italian Game: Two Knights Defense, Max Lange Attack, Berger Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O Bc5 6. e5 d5 7. exf6 dxc4 8. Re1+ Be6 9. Ng5 Qd5 10. Nc3 Qf5 11. g4 Qg6 12. Nce4 Bb6 13. f4 O-O-O +C55 Italian Game: Two Knights Defense, Max Lange Attack, Krause Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O Bc5 6. e5 Ng4 7. c3 +C55 Italian Game: Two Knights Defense, Max Lange Attack, Loman Defense 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Bc5 5. O-O Nf6 6. e5 d5 7. exf6 dxc4 8. Re1+ Be6 9. Ng5 g6 +C55 Italian Game: Two Knights Defense, Max Lange Attack, Rubinstein Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O Bc5 6. e5 d5 7. exf6 dxc4 8. Re1+ Be6 9. Ng5 Qd5 10. Nc3 Qf5 11. Nce4 Bf8 +C55 Italian Game: Two Knights Defense, Modern Bishop's Opening 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d3 +C55 Italian Game: Two Knights Defense, Open Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 +C55 Italian Game: Two Knights Defense, Perreux Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. Ng5 +C56 Italian Game: Scotch Gambit, Anderssen Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O Nxe4 6. Re1 d5 7. Bxd5 Qxd5 8. Nc3 +C56 Italian Game: Scotch Gambit, Anderssen Attack, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O Nxe4 6. Re1 d5 7. Bxd5 Qxd5 8. Nc3 Qa5 9. Nxe4 Be6 10. Bd2 Qd5 11. Bg5 +C56 Italian Game: Scotch Gambit, Canal Variation 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O Nxe4 6. Re1 d5 7. Nc3 +C56 Italian Game: Scotch Gambit, Double Gambit Accepted 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O Nxe4 +C56 Italian Game: Scotch Gambit, Nakhmanson Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. d4 exd4 5. O-O Nxe4 6. Nc3 +C56 Italian Game: Two Knights Defense, Yurdansky Attack 1. e4 e5 2. Nf3 Nc6 3. d4 exd4 4. Bc4 Nf6 5. O-O Nxe4 6. Re1 d5 7. Bxd5 Qxd5 8. Nc3 Qa5 9. Nxe4 Be6 10. Bg5 h6 11. Bh4 g5 12. Nf6+ Ke7 13. b4 +C57 Italian Game: Two Knights Defense, Fegatello Attack, Leonhardt Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Nxd5 6. Nxf7 Kxf7 7. Qf3+ Ke6 8. Nc3 Nb4 9. Qe4 c6 10. a3 Na6 11. d4 Nc7 +C57 Italian Game: Two Knights Defense, Fried Liver Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Nxd5 6. Nxf7 +C57 Italian Game: Two Knights Defense, Fritz Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Nd4 +C57 Italian Game: Two Knights Defense, Fritz, Gruber Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Nd4 6. c3 b5 7. Bf1 Nxd5 8. Ne4 +C57 Italian Game: Two Knights Defense, Kloss Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Nb4 +C57 Italian Game: Two Knights Defense, Knight Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 +C57 Italian Game: Two Knights Defense, Knight Attack, Normal Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 +C57 Italian Game: Two Knights Defense, Lolli Attack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Nxd5 6. d4 +C57 Italian Game: Two Knights Defense, Pincus Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Nxd5 6. d4 Bb4+ +C57 Italian Game: Two Knights Defense, Ponziani-Steinitz Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 Nxe4 +C57 Italian Game: Two Knights Defense, Traxler Counterattack 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 Bc5 +C57 Italian Game: Two Knights Defense, Traxler Counterattack, Bishop Sacrifice Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 Bc5 5. Bxf7+ +C57 Italian Game: Two Knights Defense, Traxler Counterattack, King March Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 Bc5 5. Nxf7 Bxf2+ 6. Kxf2 Nxe4+ 7. Ke3 +C57 Italian Game: Two Knights Defense, Traxler Counterattack, Knight Sacrifice Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 Bc5 5. Nxf7 +C57 Italian Game: Two Knights Defense, Traxler Variation, Trencianske-Teplice Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 Bc5 5. Bxf7+ Ke7 6. d4 +C57 Italian Game: Two Knights Defense, Ulvestad Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 b5 +C57 Italian Game: Two Knights Defense, Ulvestad Variation, Kurkin Gambit 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 b5 6. Bf1 h6 7. Nxf7 +C58 Italian Game: Two Knights Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Be2 +C58 Italian Game: Two Knights Defense, Blackburne Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Qf3 cxb5 +C58 Italian Game: Two Knights Defense, Colman Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Qf3 Rb8 +C58 Italian Game: Two Knights Defense, Maróczy Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. d3 h6 7. Nf3 e4 8. Qe2 Nxc4 9. dxc4 Be7 +C58 Italian Game: Two Knights Defense, Paoli Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Qf3 Qc7 9. Bd3 +C58 Italian Game: Two Knights Defense, Polerio Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 +C58 Italian Game: Two Knights Defense, Polerio Defense, Bishop Check Line 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ +C58 Italian Game: Two Knights Defense, Polerio Defense, Bogoljubov Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Qf3 +C58 Italian Game: Two Knights Defense, Polerio Defense, Kieseritzky Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. d3 +C58 Italian Game: Two Knights Defense, Polerio Defense, Yankovich Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. d3 h6 7. Nf3 e4 8. Qe2 Nxc4 9. dxc4 Bc5 10. Nfd2 +C59 Italian Game: Two Knights Defense, Knorre Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Be2 h6 9. Nf3 e4 10. Ne5 Bd6 11. d4 Qc7 12. Bd2 +C59 Italian Game: Two Knights Defense, Polerio Defense, Göring Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Be2 h6 9. Nf3 e4 10. Ne5 Qc7 +C59 Italian Game: Two Knights Defense, Polerio Defense, Suhle Defense 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Be2 h6 +C59 Italian Game: Two Knights Defense, Steinitz Variation 1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 Na5 6. Bb5+ c6 7. dxc6 bxc6 8. Be2 h6 9. Nh3 +C60 Ruy Lopez 1. e4 e5 2. Nf3 Nc6 3. Bb5 +C60 Ruy Lopez: Alapin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bb4 +C60 Ruy Lopez: Alapin Defense, Alapin Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bb4 4. c3 Ba5 5. Bxc6 dxc6 +C60 Ruy Lopez: Brentano Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 g5 +C60 Ruy Lopez: Bulgarian Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a5 +C60 Ruy Lopez: Cozio Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nge7 +C60 Ruy Lopez: Cozio Defense, Paulsen Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nge7 4. Nc3 g6 +C60 Ruy Lopez: Cozio Defense, Tartakower Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 g6 4. d4 exd4 5. Nxd4 Bg7 6. Be3 Nge7 7. Nc3 O-O 8. Qd2 d5 +C60 Ruy Lopez: Fianchetto Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 g6 +C60 Ruy Lopez: Fianchetto Defense, Kevitz Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 g6 4. c3 f5 +C60 Ruy Lopez: Lucena Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Be7 +C60 Ruy Lopez: Nürnberg Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 f6 +C60 Ruy Lopez: Pollock Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 Na5 +C60 Ruy Lopez: Retreat Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nb8 +C60 Ruy Lopez: Rotary-Albany Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 b6 +C60 Ruy Lopez: Spanish Countergambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 d5 +C60 Ruy Lopez: Spanish Countergambit, Harding Countergambit, Fricke Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 d5 4. Nxe5 Qg5 5. O-O +C60 Ruy Lopez: Spanish Countergambit, Harding Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 d5 4. Nxe5 Qg5 5. Nxc6 +C60 Ruy Lopez: Vinogradov Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Qe7 +C61 Ruy Lopez: Bird Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nd4 +C61 Ruy Lopez: Bird Variation, Paulsen Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nd4 4. Nxd4 exd4 5. O-O Ne7 +C62 Ruy Lopez: Old Steinitz Defense, Semi-Duras Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 d6 4. d4 Bd7 5. c4 +C62 Ruy Lopez: Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 d6 +C62 Ruy Lopez: Steinitz Defense, Center Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 d6 4. d4 exd4 5. O-O +C62 Ruy Lopez: Steinitz Defense, Nimzowitsch Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 d6 4. d4 Bd7 5. Nc3 Nf6 6. Bxc6 +C63 Ruy Lopez: Schliemann Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 +C63 Ruy Lopez: Schliemann Defense, Classical Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. Nc3 fxe4 5. Nxe4 d5 6. Nxe5 dxe4 7. Nxc6 Qg5 +C63 Ruy Lopez: Schliemann Defense, Dyckhoff Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. Nc3 +C63 Ruy Lopez: Schliemann Defense, Exchange Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. Bxc6 +C63 Ruy Lopez: Schliemann Defense, Jaenisch Gambit Accepted 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. exf5 +C63 Ruy Lopez: Schliemann Defense, Kostić Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. Nc3 fxe4 5. Nxe4 Be7 +C63 Ruy Lopez: Schliemann Defense, Möhring Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. Nc3 fxe4 5. Nxe4 d5 6. Nxe5 dxe4 7. Nxc6 Qd5 +C63 Ruy Lopez: Schliemann Defense, Schönemann Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. d4 +C63 Ruy Lopez: Schliemann Defense, Tartakower Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 f5 4. Nc3 fxe4 5. Nxe4 Nf6 +C64 Ruy Lopez: Classical Defense, Benelux Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Bc5 5. c3 O-O 6. d4 Bb6 +C64 Ruy Lopez: Classical Defense, Boden Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 4. c3 Qe7 +C64 Ruy Lopez: Classical Defense, Zaitsev Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 4. O-O Nd4 5. b4 +C64 Ruy Lopez: Classical Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 +C64 Ruy Lopez: Classical Variation, Central Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 4. c3 +C64 Ruy Lopez: Classical Variation, Charousek Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 4. c3 Bb6 +C64 Ruy Lopez: Classical Variation, Cordel Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 4. c3 f5 +C64 Ruy Lopez: Classical Variation, Konikowski Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 4. c3 d5 +C64 Ruy Lopez: Classical Variation, Modern Main Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Bc5 5. c3 O-O 6. d4 Bb6 7. Bg5 +C64 Ruy Lopez: Classical Variation, Spanish Wing Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 Bc5 4. b4 +C65 Ruy Lopez: Berlin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 +C65 Ruy Lopez: Berlin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O +C65 Ruy Lopez: Berlin Defense, Anderssen Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. d3 d6 5. Bxc6+ +C65 Ruy Lopez: Berlin Defense, Beverwijk Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Bc5 +C65 Ruy Lopez: Berlin Defense, Duras Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. d3 d6 5. c4 +C65 Ruy Lopez: Berlin Defense, Fishing Pole Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Ng4 +C65 Ruy Lopez: Berlin Defense, Kaufmann Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. d3 Bc5 5. Be3 +C65 Ruy Lopez: Berlin Defense, Mortimer Trap 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. d3 Ne7 5. Nxe5 c6 +C65 Ruy Lopez: Berlin Defense, Mortimer Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. d3 Ne7 +C65 Ruy Lopez: Berlin Defense, Nyholm Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. d4 exd4 5. O-O +C65 Ruy Lopez: Classical Variation, Zukertort Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Bc5 5. c3 +C65 Ruy Lopez: Halloween Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. Nxe5 +C66 Ruy Lopez: Berlin Defense, Closed Bernstein Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O d6 5. d4 Bd7 6. Nc3 Be7 7. Bg5 +C66 Ruy Lopez: Berlin Defense, Closed Showalter Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O d6 5. d4 Bd7 6. Nc3 Be7 7. Bxc6 +C66 Ruy Lopez: Berlin Defense, Closed Wolf Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O d6 5. d4 Bd7 6. Nc3 exd4 +C66 Ruy Lopez: Berlin Defense, Hedgehog Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O d6 5. d4 Bd7 6. Nc3 Be7 +C66 Ruy Lopez: Berlin Defense, Improved Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O d6 +C66 Ruy Lopez: Berlin Defense, Tarrasch Trap 1. e4 e5 2. Nf3 Nc6 3. Bb5 d6 4. d4 Bd7 5. Nc3 Nf6 6. O-O Be7 7. Re1 O-O +C66 Ruy Lopez: Closed Berlin Defense, Chigorin Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O d6 5. d4 Nd7 +C67 Ruy Lopez: Berlin Defense, Berlin Wall 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Nd6 6. Bxc6 dxc6 7. dxe5 Nf5 8. Qxd8+ Kxd8 9. Nc3 Bd7 +C67 Ruy Lopez: Berlin Defense, Cordel Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 6. Qe2 Nd6 7. Bxc6 bxc6 8. dxe5 Nf5 +C67 Ruy Lopez: Berlin Defense, Minckwitz Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 6. dxe5 +C67 Ruy Lopez: Berlin Defense, Pillsbury Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 6. Qe2 Nd6 7. Bxc6 bxc6 8. dxe5 Nb7 9. b3 +C67 Ruy Lopez: Berlin Defense, Rio Gambit Accepted 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 +C67 Ruy Lopez: Berlin Defense, Rio de Janeiro Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 +C67 Ruy Lopez: Berlin Defense, Rio de Janeiro Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 6. Qe2 Nd6 7. Bxc6 bxc6 8. dxe5 Nb7 9. Nc3 O-O 10. Re1 Nc5 11. Nd4 Ne6 12. Be3 Nxd4 13. Bxd4 c5 +C67 Ruy Lopez: Berlin Defense, Rosenthal Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 a6 +C67 Ruy Lopez: Berlin Defense, Trifunovic Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 6. Qe2 d5 +C67 Ruy Lopez: Berlin Defense, Winawer Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 6. Qe2 Nd6 7. Bxc6 bxc6 8. dxe5 Nb7 9. Nd4 +C67 Ruy Lopez: Berlin Defense, Zukertort Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Be7 6. Qe2 Nd6 7. Bxc6 bxc6 8. dxe5 Nb7 9. c4 +C67 Ruy Lopez: Berlin Defense, l'Hermet Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Nd6 +C67 Ruy Lopez: Berlin Defense, l'Hermet Variation, Berlin Wall Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Nd6 6. Bxc6 dxc6 7. dxe5 Nf5 8. Qxd8+ Kxd8 +C67 Ruy Lopez: Berlin Defense, l'Hermet Variation, Westerinen Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Nd6 6. Bxc6 dxc6 7. dxe5 Ne4 +C67 Ruy Lopez: Open Berlin Defense, Showalter Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Nd6 6. Ba4 +C67 Ruy Lopez: Open Berlin Defense, l'Hermet Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5. d4 Nd6 6. dxe5 +C68 Ruy Lopez: Exchange Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 +C68 Ruy Lopez: Exchange Variation, Alekhine Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. d4 exd4 6. Qxd4 Qxd4 7. Nxd4 Bd6 +C68 Ruy Lopez: Exchange Variation, Keres Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. Nc3 +C68 Ruy Lopez: Exchange Variation, Lutikov Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 bxc6 +C68 Ruy Lopez: Exchange Variation, Romanovsky Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. Nc3 f6 6. d3 +C68 Ruy Lopez: Exchange, Alekhine Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. d4 exd4 6. Qxd4 Qxd4 7. Nxd4 Bd7 +C69 Ruy Lopez: Exchange Variation, Alapin Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. O-O Bg4 6. h3 h5 +C69 Ruy Lopez: Exchange Variation, Bronstein Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. O-O Qd6 +C69 Ruy Lopez: Exchange Variation, Gligoric Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. O-O f6 +C69 Ruy Lopez: Exchange Variation, King's Bishop Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. O-O Bd6 +C69 Ruy Lopez: Exchange Variation, Normal Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Bxc6 dxc6 5. O-O +C70 Ruy Lopez: Bird's Defense Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nd4 +C70 Ruy Lopez: Morphy Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 +C70 Ruy Lopez: Morphy Defense, Alapin's Defense Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Bb4 +C70 Ruy Lopez: Morphy Defense, Caro Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 b5 +C70 Ruy Lopez: Morphy Defense, Classical Defense Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Bc5 +C70 Ruy Lopez: Morphy Defense, Cozio Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nge7 +C70 Ruy Lopez: Morphy Defense, Fianchetto Defense Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 g6 +C70 Ruy Lopez: Morphy Defense, Graz Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 b5 5. Bb3 Bc5 +C70 Ruy Lopez: Morphy Defense, Norwegian Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 b5 5. Bb3 Na5 +C70 Ruy Lopez: Morphy Defense, Norwegian Variation, Nightingale Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 b5 5. Bb3 Na5 6. Bxf7+ +C70 Ruy Lopez: Morphy Defense, Schliemann Defense Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 f5 +C70 Ruy Lopez: Morphy Defense, Schliemann Defense Deferred, Jaenisch Gambit Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 f5 5. exf5 +C71 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 +C71 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. Nc3 +C71 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. c4 +C71 Ruy Lopez: Noah's Ark Trap 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 b5 5. Bb3 d6 6. d4 Nxd4 7. Nxd4 exd4 8. Qxd4 c5 +C72 Ruy Lopez: Closed, Kecskemet Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. O-O Bd7 6. c3 Nf6 7. d4 Be7 8. Nbd2 O-O 9. Re1 Be8 +C72 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. O-O +C73 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. Bxc6+ bxc6 6. d4 +C73 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. Bxc6+ bxc6 6. d4 f6 +C74 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. c3 +C74 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. c3 f5 6. exf5 Bxf5 7. O-O +C74 Ruy Lopez: Morphy Defense, Modern Steinitz Defense, Siesta Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. c3 f5 +C75 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. c3 Bd7 +C75 Ruy Lopez: Morphy Defense, Modern Steinitz Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 d6 5. c3 Bd7 6. d4 Nge7 +C76 Ruy Lopez: Morphy Defense, Modern Steinitz Defense, Fianchetto Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 g6 4. c3 a6 5. Ba4 d6 6. d4 Bd7 +C77 Ruy Lopez: Morphy Defense, Anderssen Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. d3 +C77 Ruy Lopez: Morphy Defense, Bayreuth Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. Bxc6 +C77 Ruy Lopez: Morphy Defense, Duras Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. d3 d6 6. c4 +C77 Ruy Lopez: Morphy Defense, Jaffe Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. c3 +C77 Ruy Lopez: Morphy Defense, Mackenzie Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. d4 +C77 Ruy Lopez: Morphy Defense, Tarrasch Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. Nc3 +C77 Ruy Lopez: Morphy Defense, Wormald Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. Qe2 +C77 Ruy Lopez: Wormald Attack, Grünfeld Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. Qe2 b5 6. Bb3 Be7 7. d4 d6 8. c3 Bg4 +C78 Ruy Lopez: Brix Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O g6 +C78 Ruy Lopez: Central Countergambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O d5 +C78 Ruy Lopez: Morphy Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O +C78 Ruy Lopez: Morphy Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O b5 6. Bb3 d6 +C78 Ruy Lopez: Morphy Defense, Arkhangelsk Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O b5 6. Bb3 Bb7 +C78 Ruy Lopez: Morphy Defense, Neo-Arkhangelsk Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Bc5 +C78 Ruy Lopez: Morphy Defense, Wing Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O b5 6. Bb3 Be7 7. a4 +C78 Ruy Lopez: Rabinovich Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O b5 6. Bb3 d6 7. Ng5 d5 8. exd5 Nd4 9. Re1 Bc5 10. Rxe5+ Kf8 +C79 Ruy Lopez: Morphy Defense, Steinitz Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O d6 +C79 Ruy Lopez: Morphy Defense, Steinitz Deferred 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O d6 6. Bxc6+ bxc6 7. d4 Nxe4 +C79 Ruy Lopez: Steinitz Defense Deferred, Boleslavsky Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O d6 6. Bxc6+ bxc6 7. d4 Nxe4 8. Re1 f5 9. dxe5 d5 10. Nc3 +C79 Ruy Lopez: Steinitz Defense Deferred, Lipnitsky Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O d6 6. Bxc6+ bxc6 7. d4 Bg4 +C80 Ruy Lopez: Morphy Defense, Tartakower Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. Qe2 +C80 Ruy Lopez: Open 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 +C80 Ruy Lopez: Open 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 +C80 Ruy Lopez: Open 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 +C80 Ruy Lopez: Open 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 +C80 Ruy Lopez: Open, Berger Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. a4 Nxd4 9. Nxd4 exd4 10. Nc3 +C80 Ruy Lopez: Open, Bernstein Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. Nbd2 +C80 Ruy Lopez: Open, Bernstein Variation, Luther Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. Nbd2 Bc5 10. Qe1 +C80 Ruy Lopez: Open, Friess Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Nxe5 +C80 Ruy Lopez: Open, Harksen Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. c4 +C80 Ruy Lopez: Open, Karpov Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. Nbd2 Nc5 10. c3 d4 11. Ng5 +C80 Ruy Lopez: Open, Knorre Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. Nc3 +C80 Ruy Lopez: Open, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 +C80 Ruy Lopez: Open, Richter Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. d5 +C80 Ruy Lopez: Open, Riga Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 exd4 +C80 Ruy Lopez: Open, Schlechter Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. a4 Nxd4 +C80 Ruy Lopez: Open, Skipworth Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. Re1 d5 +C80 Ruy Lopez: Open, Zukertort Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Ne7 +C81 Ruy Lopez: Open, Howell Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. Qe2 +C81 Ruy Lopez: Open, Howell Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. Qe2 Be7 10. c4 +C81 Ruy Lopez: Open, Howell Attack, Ekstrom Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. Qe2 Be7 10. Rd1 O-O 11. c4 bxc4 12. Bxc4 Qd7 +C82 Ruy Lopez: Open 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 +C82 Ruy Lopez: Open, Berlin Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Nc5 +C82 Ruy Lopez: Open, Dilworth Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Bc5 10. Nbd2 O-O 11. Bc2 Nxf2 +C82 Ruy Lopez: Open, Italian Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Bc5 +C82 Ruy Lopez: Open, Motzko Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Bc5 10. Qd3 +C82 Ruy Lopez: Open, Motzko Attack, Nenarokov Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Bc5 10. Qd3 Ne7 +C82 Ruy Lopez: Open, St. Petersburg Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Bc5 10. Nbd2 +C83 Ruy Lopez: Open, Breslau Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Be7 10. Re1 O-O 11. Nd4 Nxe5 +C83 Ruy Lopez: Open, Classical Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Be7 +C83 Ruy Lopez: Open, Classical Defense, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 Be7 7. Re1 b5 8. Bb3 d5 9. dxe5 Be6 10. c3 +C83 Ruy Lopez: Open, Malkin Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Be7 10. Nbd2 O-O 11. Qe2 +C83 Ruy Lopez: Open, Tarrasch Trap 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Nxe4 6. d4 b5 7. Bb3 d5 8. dxe5 Be6 9. c3 Be7 10. Re1 O-O 11. Nd4 Qd7 12. Nxe6 fxe6 13. Rxe4 +C84 Ruy Lopez: Closed 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 +C84 Ruy Lopez: Closed, Basque Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. d4 exd4 7. e5 Ne4 8. c3 +C84 Ruy Lopez: Closed, Center Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. d4 +C84 Ruy Lopez: Closed, Center Attack, Basque Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. d4 exd4 7. e5 Ne4 8. c3 dxc3 +C84 Ruy Lopez: Closed, Martinez Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. d3 +C84 Ruy Lopez: Closed, Morphy Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Nc3 +C85 Ruy Lopez: Closed, Delayed Exchange 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Bxc6 +C86 Ruy Lopez: Closed, Worrall Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Qe2 +C86 Ruy Lopez: Closed, Worrall Attack, Castling Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Qe2 b5 7. Bb3 O-O +C86 Ruy Lopez: Closed, Worrall Attack, Delayed Castling Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Qe2 b5 7. Bb3 d6 +C87 Ruy Lopez: Closed, Averbakh Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 d6 +C88 Ruy Lopez: Closed 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 +C88 Ruy Lopez: Closed 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O +C88 Ruy Lopez: Closed, Alekhine Gambit 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 Na5 9. Bc2 c5 10. d4 Qc7 11. Nbd2 O-O 12. Nf1 Bg4 13. Ne3 Bxf3 14. Qxf3 +C88 Ruy Lopez: Closed, Anti-Marshall 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. a4 +C88 Ruy Lopez: Closed, Balla Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 Na5 9. Bc2 c5 10. d4 Qc7 11. a4 +C88 Ruy Lopez: Closed, Leonhardt Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 Na5 9. Bc2 c5 10. d4 Qc7 11. h3 Nc6 12. d5 Nb8 13. Nbd2 g5 +C88 Ruy Lopez: Closed, Rosen Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. d4 +C88 Ruy Lopez: Closed, Trajkovic Counterattack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 Bb7 +C88 Ruy Lopez: Noah's Ark Trap 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. d4 Nxd4 9. Nxd4 exd4 10. Qxd4 c5 +C89 Ruy Lopez: Marshall Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 +C89 Ruy Lopez: Marshall Attack, Main Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 9. exd5 Nxd5 10. Nxe5 Nxe5 11. Rxe5 c6 12. d4 +C89 Ruy Lopez: Marshall Attack, Main Line, Spassky Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 9. exd5 Nxd5 10. Nxe5 Nxe5 11. Rxe5 c6 12. d4 Bd6 13. Re1 Qh4 14. g3 Qh3 15. Be3 Bg4 16. Qd3 Rae8 17. Nd2 Re6 18. a4 Qh5 +C89 Ruy Lopez: Marshall Attack, Modern Main Line 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 9. exd5 Nxd5 10. Nxe5 Nxe5 11. Rxe5 c6 12. d4 Bd6 13. Re1 Qh4 14. g3 Qh3 +C89 Ruy Lopez: Marshall Attack, Modern Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 9. exd5 Nxd5 10. Nxe5 Nxe5 11. Rxe5 c6 +C89 Ruy Lopez: Marshall Attack, Original Marshall Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 9. exd5 Nxd5 10. Nxe5 Nxe5 11. Rxe5 Nf6 +C89 Ruy Lopez: Marshall Attack, Re3 Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 9. exd5 Nxd5 10. Nxe5 Nxe5 11. Rxe5 c6 12. Bxd5 cxd5 13. d4 Bd6 14. Re3 +C89 Ruy Lopez: Marshall Attack, Steiner Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. c3 d5 9. exd5 e4 +C90 Ruy Lopez: Closed 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O +C90 Ruy Lopez: Closed, Lutikov Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. Bc2 +C90 Ruy Lopez: Closed, Pilnik Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 O-O 8. d3 d6 9. c3 +C90 Ruy Lopez: Closed, Suetin Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. a3 +C91 Ruy Lopez: Closed, Bogoljubov Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. d4 Bg4 +C91 Ruy Lopez: Closed, Yates Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. d4 +C91 Ruy Lopez: Closed, Yates Variation, Short Attack 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. d4 Bg4 10. a4 +C92 Ruy Lopez: Closed 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 +C92 Ruy Lopez: Closed, Flohr System 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Bb7 +C92 Ruy Lopez: Closed, Karpov Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nd7 +C92 Ruy Lopez: Closed, Kholmov Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Be6 +C92 Ruy Lopez: Closed, Smyslov-Breyer-Zaitsev Hybrid 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Bb7 10. d4 Re8 11. Nbd2 Bf8 12. a3 h6 +C92 Ruy Lopez: Closed, Zaitsev System 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Re8 +C93 Ruy Lopez: Closed, Smyslov Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 h6 +C94 Ruy Lopez: Closed, Breyer Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 +C94 Ruy Lopez: Closed, Breyer Defense, Quiet Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d3 +C95 Ruy Lopez: Closed, Breyer 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 +C95 Ruy Lopez: Closed, Breyer Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 11. Nbd2 Bb7 12. Bc2 c5 +C95 Ruy Lopez: Closed, Breyer Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 11. Nh4 +C95 Ruy Lopez: Closed, Breyer Defense, Zaitsev Hybrid 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 +C96 Ruy Lopez: Closed, Borisenko Variation 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Nc6 +C96 Ruy Lopez: Closed, Chigorin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 +C96 Ruy Lopez: Closed, Chigorin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 +C96 Ruy Lopez: Closed, Keres Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Nd7 +C96 Ruy Lopez: Closed, Rossolimo Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c6 11. d4 Qc7 +C97 Ruy Lopez: Closed, Chigorin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 +C97 Ruy Lopez: Closed, Chigorin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Qc7 +C97 Ruy Lopez: Closed, Chigorin, Yugoslav System 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Qc7 12. Nbd2 Bd7 13. Nf1 Rfe8 14. Ne3 g6 +C98 Ruy Lopez: Closed, Chigorin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Qc7 12. Nbd2 Nc6 +C98 Ruy Lopez: Closed, Chigorin Defense 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Qc7 12. Nbd2 Nc6 13. dxc5 +C99 Ruy Lopez: Closed, Chigorin Defense, Panov System 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Qc7 12. Nbd2 cxd4 13. cxd4 diff --git a/projectexample/openingtrainer/chessopeningtrainer/openings/d.tsv b/projectexample/openingtrainer/chessopeningtrainer/openings/d.tsv new file mode 100644 index 00000000..d5dd04dd --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/openings/d.tsv @@ -0,0 +1,512 @@ +eco name pgn +D00 Amazon Attack 1. d4 d5 2. Qd3 +D00 Blackmar-Diemer Gambit 1. d4 d5 2. e4 +D00 Blackmar-Diemer Gambit 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 +D00 Blackmar-Diemer Gambit Accepted 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 +D00 Blackmar-Diemer Gambit Accepted: Bogoljubow Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 g6 +D00 Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Kloss Attack 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 g6 6. Bc4 Bg7 7. O-O O-O 8. Kh1 +D00 Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Mad Dog Attack 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 g6 6. Bc4 Bg7 7. h4 +D00 Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Nimzowitsch Attack 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 g6 6. Bc4 Bg7 7. Ne5 +D00 Blackmar-Diemer Gambit Accepted: Bogoljubow Defense, Studier Attack 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 g6 6. Bc4 Bg7 7. O-O O-O 8. Qe1 +D00 Blackmar-Diemer Gambit Accepted: Euwe Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 e6 +D00 Blackmar-Diemer Gambit Accepted: Euwe Defense, Zilbermints Gambit 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 e6 6. Bg5 Be7 7. Bd3 Nc6 8. O-O Nxd4 9. Kh1 +D00 Blackmar-Diemer Gambit Accepted: Gunderam Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Bf5 +D00 Blackmar-Diemer Gambit Accepted: Gunderam Defense, Stader Variation 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Bf5 6. Ne5 e6 7. g4 Be4 +D00 Blackmar-Diemer Gambit Accepted: Holwell Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Qd6 +D00 Blackmar-Diemer Gambit Accepted: Kaulich Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 c5 +D00 Blackmar-Diemer Gambit Accepted: Pietrowsky Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Nc6 +D00 Blackmar-Diemer Gambit Accepted: Ritter Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 b6 +D00 Blackmar-Diemer Gambit Accepted: Ryder Gambit 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Qxf3 +D00 Blackmar-Diemer Gambit Accepted: Schlutter Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Nbd7 +D00 Blackmar-Diemer Gambit Accepted: Teichmann Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Bg4 +D00 Blackmar-Diemer Gambit Accepted: Teichmann Defense, Ciesielski Variation 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Bg4 6. h3 Bxf3 7. Qxf3 c6 8. Qf2 +D00 Blackmar-Diemer Gambit Accepted: Teichmann Defense, Classical Variation 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Bg4 6. h3 Bxf3 7. Qxf3 c6 8. Be3 +D00 Blackmar-Diemer Gambit Accepted: Teichmann Defense, Seidel-Hall Attack 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 Bg4 6. h3 Bxf3 7. Qxf3 c6 8. g4 +D00 Blackmar-Diemer Gambit Accepted: Ziegler Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 exf3 5. Nxf3 c6 +D00 Blackmar-Diemer Gambit Declined: Brombacher Countergambit 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 c5 +D00 Blackmar-Diemer Gambit Declined: Elbert Countergambit 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 e5 +D00 Blackmar-Diemer Gambit Declined: Gedult Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 a6 +D00 Blackmar-Diemer Gambit Declined: Lamb Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 Nc6 +D00 Blackmar-Diemer Gambit Declined: Langeheinicke Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 e3 +D00 Blackmar-Diemer Gambit Declined: O'Kelly Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 c6 +D00 Blackmar-Diemer Gambit Declined: Vienna Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 Bf5 +D00 Blackmar-Diemer Gambit Declined: Weinsbach Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. f3 e6 +D00 Blackmar-Diemer Gambit: Blackmar Gambit 1. d4 d5 2. e4 dxe4 3. f3 +D00 Blackmar-Diemer Gambit: Diemer-Rosenberg Attack 1. d4 d5 2. e4 dxe4 3. Be3 +D00 Blackmar-Diemer Gambit: Fritz Attack 1. d4 d5 2. e4 dxe4 3. Bc4 +D00 Blackmar-Diemer Gambit: Lemberger Countergambit 1. d4 d5 2. e4 dxe4 3. Nc3 e5 +D00 Blackmar-Diemer Gambit: Lemberger Countergambit, Endgame Variation 1. d4 d5 2. e4 dxe4 3. Nc3 e5 4. dxe5 +D00 Blackmar-Diemer Gambit: Lemberger Countergambit, Lange Gambit 1. d4 d5 2. e4 dxe4 3. Nc3 e5 4. Nxe4 +D00 Blackmar-Diemer Gambit: Lemberger Countergambit, Rasmussen Attack 1. d4 d5 2. e4 dxe4 3. Nc3 e5 4. Nge2 +D00 Blackmar-Diemer Gambit: Lemberger Countergambit, Sneiders Attack 1. d4 d5 2. e4 dxe4 3. Nc3 e5 4. Qh5 +D00 Blackmar-Diemer Gambit: Lemberger Countergambit, Soller Attack 1. d4 d5 2. e4 dxe4 3. Nc3 e5 4. Be3 +D00 Blackmar-Diemer Gambit: Netherlands Variation 1. d4 d5 2. e4 dxe4 3. Nc3 f5 +D00 Blackmar-Diemer Gambit: Rasa-Studier Gambit 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. Be3 +D00 Blackmar-Diemer Gambit: Reversed Albin Countergambit 1. d4 d5 2. e4 dxe4 3. Nc3 c5 +D00 Blackmar-Diemer Gambit: Zeller Defense 1. d4 d5 2. e4 dxe4 3. Nc3 Bf5 +D00 Blackmar-Diemer Gambit: Zeller Defense, Soller Attack 1. d4 d5 2. e4 dxe4 3. Nc3 Bf5 4. f3 Nf6 5. Bc4 +D00 Blackmar-Diemer Gambit: von Popiel Gambit 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. Bg5 +D00 Blackmar-Diemer Gambit: von Popiel Gambit, Zilbermints Variation 1. d4 d5 2. e4 dxe4 3. Nc3 Nf6 4. Bg5 Bf5 5. Bxf6 exf6 6. g4 Bg6 7. Qe2 Bb4 8. Qb5+ +D00 Queen's Pawn Game 1. d4 d5 +D00 Queen's Pawn Game 1. d4 d5 2. e3 +D00 Queen's Pawn Game 1. d4 d5 2. e3 Nf6 +D00 Queen's Pawn Game: Accelerated London System 1. d4 d5 2. Bf4 +D00 Queen's Pawn Game: Accelerated London System, Steinitz Countergambit 1. d4 d5 2. Bf4 c5 +D00 Queen's Pawn Game: Accelerated London System, Steinitz Countergambit Accepted 1. d4 d5 2. Bf4 c5 3. dxc5 +D00 Queen's Pawn Game: Accelerated London System, Steinitz Countergambit, Morris Countergambit 1. d4 d5 2. Bf4 c5 3. e4 +D00 Queen's Pawn Game: Accelerated London System, Steinitz Countergambit, Morris Countergambit Accepted 1. d4 d5 2. Bf4 c5 3. e4 dxe4 +D00 Queen's Pawn Game: Chigorin Variation 1. d4 d5 2. Nc3 +D00 Queen's Pawn Game: Chigorin Variation, Alburt Defense 1. d4 d5 2. Nc3 Bf5 +D00 Queen's Pawn Game: Chigorin Variation, Anti-Veresov 1. d4 d5 2. Nc3 Bg4 +D00 Queen's Pawn Game: Chigorin Variation, Fianchetto Defense 1. d4 g6 2. Nf3 Bg7 3. Nc3 d5 +D00 Queen's Pawn Game: Chigorin Variation, Irish Gambit 1. d4 d5 2. Nc3 c5 +D00 Queen's Pawn Game: Chigorin Variation, Shaviliuk Gambit 1. d4 d5 2. Nc3 e5 +D00 Queen's Pawn Game: Chigorin Variation, Shropshire Defense 1. d4 d5 2. Nc3 h5 +D00 Queen's Pawn Game: Hübsch Gambit 1. d4 Nf6 2. Nc3 d5 3. e4 +D00 Queen's Pawn Game: Levitsky Attack 1. d4 d5 2. Bg5 +D00 Queen's Pawn Game: Levitsky Attack, Welling Variation 1. d4 d5 2. Bg5 Bg4 +D00 Queen's Pawn Game: Mason Attack 1. d4 d5 2. f4 +D00 Queen's Pawn Game: Stonewall Attack 1. d4 d5 2. e3 Nf6 3. Bd3 +D00 Queen's Pawn Game: Zurich Gambit 1. d4 d5 2. g4 +D01 Rapport-Jobava System 1. d4 d5 2. Nc3 Nf6 3. Bf4 +D01 Richter-Veresov Attack 1. d4 Nf6 2. Nc3 d5 3. Bg5 +D01 Richter-Veresov Attack 1. d4 Nf6 2. Nc3 d5 3. Bg5 Bf5 +D01 Richter-Veresov Attack: Boyce Defense 1. d4 Nf6 2. Nc3 d5 3. Bg5 Ne4 +D01 Richter-Veresov Attack: Malich Gambit 1. d4 Nf6 2. Nc3 d5 3. Bg5 c5 4. Bxf6 gxf6 5. e4 dxe4 6. d5 +D01 Richter-Veresov Attack: Richter Variation 1. d4 Nf6 2. Nc3 d5 3. Bg5 Bf5 4. f3 +D01 Richter-Veresov Attack: Two Knights System 1. d4 Nf6 2. Nc3 d5 3. Bg5 Nbd7 4. Nf3 +D01 Richter-Veresov Attack: Two Knights System, Grünfeld Defense 1. d4 Nf6 2. Nc3 d5 3. Bg5 Nbd7 4. Nf3 g6 +D01 Richter-Veresov Attack: Veresov Variation 1. d4 Nf6 2. Nc3 d5 3. Bg5 Bf5 4. Bxf6 +D02 London System: Poisoned Pawn Variation 1. d4 Nf6 2. Nf3 d5 3. Bf4 c5 4. e3 Qb6 5. Nc3 +D02 Queen's Gambit Declined: Baltic Defense, Pseudo-Slav 1. d4 d5 2. Nf3 Bf5 3. c4 e6 4. Nc3 c6 +D02 Queen's Pawn Game: Anti-Torre 1. Nf3 d5 2. d4 Bg4 +D02 Queen's Pawn Game: Chandler Gambit 1. d4 d5 2. Nf3 c5 3. g3 cxd4 4. Bg2 +D02 Queen's Pawn Game: Chigorin Variation 1. d4 d5 2. Nf3 Nc6 +D02 Queen's Pawn Game: Krause Variation 1. d4 d5 2. Nf3 c5 +D02 Queen's Pawn Game: Levitsky Attack, Euwe Variation, Modern Line 1. d4 d5 2. Nf3 c6 3. Bg5 h6 4. Bh4 Qb6 +D02 Queen's Pawn Game: London System 1. d4 d5 2. Nf3 Nf6 3. Bf4 +D02 Queen's Pawn Game: London System, Pterodactyl Variation 1. d4 g6 2. Nf3 Bg7 3. Bf4 c5 4. c3 cxd4 5. cxd4 Qa5+ +D02 Queen's Pawn Game: Symmetrical Variation 1. d4 d5 2. Nf3 Nf6 +D02 Queen's Pawn Game: Symmetrical Variation, Pseudo-Catalan 1. d4 d5 2. Nf3 Nf6 3. g3 +D02 Queen's Pawn Game: Zilbermints Countergambit 1. d4 d5 2. Nf3 Nf6 3. c4 b5 +D02 Queen's Pawn Game: Zukertort Variation 1. d4 d5 2. Nf3 +D03 Queen's Pawn Game: Torre Attack 1. d4 d5 2. Nf3 Nf6 3. Bg5 +D03 Queen's Pawn Game: Torre Attack, Gossip Variation 1. d4 d5 2. Nf3 Nf6 3. Bg5 Ne4 +D03 Queen's Pawn Game: Torre Attack, Grünfeld Variation 1. d4 d5 2. Nf3 Nf6 3. Bg5 g6 +D04 Queen's Pawn Game: Colle System 1. d4 d5 2. Nf3 Nf6 3. e3 +D04 Queen's Pawn Game: Colle System, Anti-Colle 1. d4 d5 2. Nf3 Nf6 3. e3 Bf5 +D04 Queen's Pawn Game: Colle System, Grünfeld Formation 1. d4 d5 2. Nf3 Nf6 3. e3 g6 4. Bd3 Bg7 +D05 Queen's Pawn Game: Colle System 1. d4 d5 2. Nf3 Nf6 3. e3 e6 +D05 Queen's Pawn Game: Colle System 1. d4 d5 2. Nf3 Nf6 3. e3 e6 4. Bd3 +D05 Queen's Pawn Game: Colle System, Traditional Colle 1. d4 Nf6 2. Nf3 e6 3. e3 c5 4. Bd3 d5 5. c3 +D05 Queen's Pawn Game: Zukertort Variation 1. d4 d5 2. Nf3 c5 3. e3 Nf6 4. Nbd2 e6 5. b3 +D05 Rubinstein Opening 1. d4 Nf6 2. Nf3 e6 3. e3 c5 4. Bd3 d5 5. b3 +D05 Rubinstein Opening: Bogoljubov Defense 1. d4 Nf6 2. Nf3 e6 3. e3 c5 4. Bd3 d5 5. b3 Nc6 6. O-O Bd6 7. Bb2 O-O +D05 Rubinstein Opening: Classical Defense 1. d4 Nf6 2. Nf3 e6 3. e3 c5 4. Bd3 d5 5. b3 Nc6 6. O-O Be7 7. Bb2 O-O +D05 Rubinstein Opening: Semi-Slav Defense 1. d4 d5 2. Nf3 Nf6 3. e3 e6 4. Bd3 Bd6 5. O-O O-O 6. b3 Nbd7 7. Bb2 +D06 Queen's Gambit 1. d4 d5 2. c4 +D06 Queen's Gambit Declined: Austrian Attack, Salvio Countergambit 1. d4 d5 2. c4 c5 3. dxc5 d4 +D06 Queen's Gambit Declined: Austrian Defense 1. d4 d5 2. c4 c5 +D06 Queen's Gambit Declined: Austrian Defense, Gusev Countergambit 1. d4 d5 2. c4 c5 3. cxd5 Nf6 +D06 Queen's Gambit Declined: Austrian Defense, Haberditz Variation 1. d4 d5 2. c4 c5 3. cxd5 Nf6 4. e4 Nxe4 5. dxc5 Qa5+ +D06 Queen's Gambit Declined: Baltic Defense 1. d4 d5 2. c4 Bf5 +D06 Queen's Gambit Declined: Baltic Defense, Argentinian Gambit 1. d4 d5 2. c4 Bf5 3. cxd5 Bxb1 4. Qa4+ c6 5. dxc6 Nxc6 +D06 Queen's Gambit Declined: Baltic Defense, Pseudo-Chigorin 1. d4 d5 2. c4 Bf5 3. Nc3 e6 4. Nf3 Nc6 +D06 Queen's Gambit Declined: Baltic Defense, Queen Attack 1. d4 d5 2. c4 Bf5 3. Qb3 +D06 Queen's Gambit Declined: Baltic Defense, Queen Attack Deferred 1. d4 d5 2. c4 Bf5 3. Nc3 e6 4. Qb3 +D06 Queen's Gambit Declined: Marshall Defense 1. d4 d5 2. c4 Nf6 +D06 Queen's Gambit Declined: Marshall Defense, Tan Gambit 1. d4 d5 2. c4 Nf6 3. cxd5 c6 +D06 Queen's Gambit Declined: Zilbermints Gambit 1. d4 d5 2. c4 b5 +D07 Queen's Gambit Declined: Chigorin Defense 1. d4 d5 2. c4 Nc6 +D07 Queen's Gambit Declined: Chigorin Defense 1. d4 d5 2. c4 Nc6 3. Nc3 +D07 Queen's Gambit Declined: Chigorin Defense 1. d4 d5 2. c4 Nc6 3. Nc3 dxc4 +D07 Queen's Gambit Declined: Chigorin Defense, Exchange Variation 1. d4 d5 2. c4 Nc6 3. cxd5 Qxd5 +D07 Queen's Gambit Declined: Chigorin Defense, Exchange Variation, Costa's Line 1. d4 d5 2. c4 Nc6 3. cxd5 Qxd5 4. e3 e5 5. Nc3 Bb4 6. Bd2 Bxc3 7. Bxc3 exd4 8. Ne2 +D07 Queen's Gambit Declined: Chigorin Defense, Janowski Variation 1. d4 d5 2. c4 Nc6 3. Nc3 dxc4 4. Nf3 +D07 Queen's Gambit Declined: Chigorin Defense, Lazard Gambit 1. d4 d5 2. c4 Nc6 3. Nf3 e5 +D07 Queen's Gambit Declined: Chigorin Defense, Main Line 1. d4 d5 2. c4 Nc6 3. Nf3 Bg4 +D07 Queen's Gambit Declined: Chigorin Defense, Main Line, Alekhine Variation 1. d4 d5 2. c4 Nc6 3. Nf3 Bg4 4. Qa4 +D07 Queen's Gambit Declined: Chigorin Defense, Modern Gambit 1. d4 d5 2. c4 Nc6 3. Nc3 dxc4 4. Nf3 Nf6 +D07 Queen's Gambit Declined: Chigorin Defense, Tartakower Gambit 1. d4 d5 2. c4 Nc6 3. Nc3 e5 +D08 Queen's Gambit Declined: Albin Countergambit 1. d4 d5 2. c4 e5 +D08 Queen's Gambit Declined: Albin Countergambit, Balogh Variation 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. Nbd2 Qe7 +D08 Queen's Gambit Declined: Albin Countergambit, Janowski Variation 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. Nbd2 f6 +D08 Queen's Gambit Declined: Albin Countergambit, Krenosz Variation 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. Nbd2 Bg4 6. h3 Bxf3 7. Nxf3 Bb4+ 8. Bd2 Qe7 +D08 Queen's Gambit Declined: Albin Countergambit, Lasker Trap 1. d4 d5 2. c4 e5 3. dxe5 d4 4. e3 Bb4+ 5. Bd2 dxe3 +D08 Queen's Gambit Declined: Albin Countergambit, Modern Line 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. Nbd2 +D08 Queen's Gambit Declined: Albin Countergambit, Normal Line 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 +D08 Queen's Gambit Declined: Albin Countergambit, Tartakower Defense 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 c5 +D09 Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. g3 +D09 Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation, Be6 Line 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. g3 Be6 +D09 Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation, Bf5 Line 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. g3 Bf5 +D09 Queen's Gambit Declined: Albin Countergambit, Fianchetto Variation, Bg4 Line 1. d4 d5 2. c4 e5 3. dxe5 d4 4. Nf3 Nc6 5. g3 Bg4 +D10 Slav Defense 1. d4 d5 2. c4 c6 +D10 Slav Defense 1. d4 d5 2. c4 c6 3. Nc3 +D10 Slav Defense 1. d4 d5 2. c4 c6 3. Nc3 dxc4 +D10 Slav Defense: Diemer Gambit 1. d4 d5 2. c4 c6 3. e4 +D10 Slav Defense: Exchange Variation 1. d4 d5 2. c4 c6 3. cxd5 +D10 Slav Defense: Exchange Variation, Boor Attack 1. d4 d5 2. c4 c6 3. cxd5 cxd5 4. Nc3 Nf6 5. f3 +D10 Slav Defense: Slav Gambit, Alekhine Attack 1. d4 d5 2. c4 c6 3. Nc3 dxc4 4. e4 +D10 Slav Defense: Winawer Countergambit 1. d4 d5 2. c4 c6 3. Nc3 e5 +D10 Slav Defense: Winawer Countergambit, Anti-Winawer Gambit 1. d4 d5 2. c4 c6 3. Nc3 e5 4. e4 +D11 Slav Defense: Bonet Gambit 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Bg5 +D11 Slav Defense: Breyer Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nbd2 +D11 Slav Defense: Modern Line 1. d4 d5 2. c4 c6 3. Nf3 +D11 Slav Defense: Quiet Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 +D11 Slav Defense: Quiet Variation, Pin Defense 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 Bg4 +D12 Slav Defense: Quiet Variation, Amsterdam Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 Bf5 5. cxd5 cxd5 6. Nc3 e6 7. Ne5 Nfd7 +D12 Slav Defense: Quiet Variation, Landau Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 Bf5 5. cxd5 cxd5 6. Qb3 Qc8 7. Bd2 e6 8. Na3 +D12 Slav Defense: Quiet Variation, Schallopp Defense 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 Bf5 +D13 Slav Defense: Exchange Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. cxd5 cxd5 +D13 Slav Defense: Exchange Variation, Schallopp Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 Bf5 5. cxd5 cxd5 6. Nc3 +D14 Slav Defense: Exchange Variation, Symmetrical Line 1. d4 d5 2. c4 c6 3. cxd5 cxd5 4. Nc3 Nf6 5. Nf3 Nc6 6. Bf4 Bf5 +D14 Slav Defense: Exchange Variation, Trifunovic Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. cxd5 cxd5 5. Nc3 Nc6 6. Bf4 Bf5 7. e3 e6 8. Qb3 Bb4 +D15 Slav Defense: Alekhine Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. e3 +D15 Slav Defense: Chameleon Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 a6 +D15 Slav Defense: Chameleon Variation, Advance System 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 a6 5. c5 +D15 Slav Defense: Geller Gambit 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. e4 +D15 Slav Defense: Geller Gambit 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. e4 b5 6. e5 +D15 Slav Defense: Schlechter Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 g6 +D15 Slav Defense: Süchting Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 Qb6 +D15 Slav Defense: Three Knights Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 +D15 Slav Defense: Two Knights Attack 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 +D16 Slav Defense: Alapin Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 +D16 Slav Defense: Smyslov Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Na6 +D16 Slav Defense: Soultanbeieff Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 e6 +D16 Slav Defense: Steiner Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bg4 +D17 Slav Defense: Czech Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 +D17 Slav Defense: Czech Variation, Bled Attack 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Nh4 +D17 Slav Defense: Czech Variation, Carlsbad Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Ne5 Nbd7 7. Nxc4 Qc7 8. g3 e5 +D17 Slav Defense: Czech Variation, Carlsbad Variation, Morozevich Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Ne5 Nbd7 7. Nxc4 Qc7 8. g3 e5 9. dxe5 Nxe5 10. Bf4 Nfd7 11. Bg2 g5 +D17 Slav Defense: Czech Variation, Krause Attack 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Ne5 +D17 Slav Defense: Czech Variation, Krause Attack, Fazekas Gambit 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Ne5 Na6 7. e4 +D17 Slav Defense: Czech Variation, Wiesbaden Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Ne5 e6 +D17 Slav Defense: Czech Variation, Wiesbaden Variation, Sharp Line 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Ne5 e6 7. f3 Bb4 8. e4 +D18 Slav Defense: Czech Variation, Classical System 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. e3 +D18 Slav Defense: Czech Variation, Lasker Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. e3 Na6 +D19 Slav Defense: Czech Variation, Classical System, Main Line 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. e3 e6 7. Bxc4 Bb4 8. O-O O-O 9. Qe2 +D19 Slav Defense: Czech Variation, Dutch Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. e3 e6 7. Bxc4 Bb4 8. O-O +D19 Slav Defense: Czech Variation, Dutch Variation, Sämisch Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. e3 e6 7. Bxc4 Bb4 8. O-O O-O 9. Qe2 Ne4 10. g4 +D20 Queen's Gambit Accepted 1. d4 d5 2. c4 dxc4 +D20 Queen's Gambit Accepted: Accelerated Mannheim Variation 1. d4 d5 2. c4 dxc4 3. Qa4+ +D20 Queen's Gambit Accepted: Central Variation, Alekhine System 1. d4 d5 2. c4 dxc4 3. e4 Nf6 +D20 Queen's Gambit Accepted: Central Variation, Greco Variation 1. d4 d5 2. c4 dxc4 3. e4 b5 +D20 Queen's Gambit Accepted: Central Variation, McDonnell Defense 1. d4 d5 2. c4 dxc4 3. e4 e5 +D20 Queen's Gambit Accepted: Central Variation, McDonnell Defense, Somov Gambit 1. d4 d5 2. c4 dxc4 3. e4 e5 4. Bxc4 +D20 Queen's Gambit Accepted: Central Variation, Modern Defense 1. d4 d5 2. c4 dxc4 3. e4 Nc6 +D20 Queen's Gambit Accepted: Central Variation, Rubinstein Defense 1. d4 d5 2. c4 dxc4 3. e4 c5 +D20 Queen's Gambit Accepted: Central Variation, Rubinstein Defense, Yefimov Gambit 1. d4 d5 2. c4 dxc4 3. e4 c5 4. d5 b5 +D20 Queen's Gambit Accepted: Linares Variation 1. d4 d5 2. c4 dxc4 3. e4 c5 4. d5 Nf6 5. Nc3 b5 +D20 Queen's Gambit Accepted: Old Variation 1. d4 d5 2. c4 dxc4 3. e3 +D20 Queen's Gambit Accepted: Old Variation, Billinger Gambit 1. d4 d5 2. c4 dxc4 3. e3 e5 4. Bxc4 exd4 5. Qb3 Qe7 6. a3 +D20 Queen's Gambit Accepted: Old Variation, Christensen Gambit 1. d4 d5 2. c4 dxc4 3. e3 e5 4. Bxc4 exd4 5. Qb3 Qe7 6. Nf3 +D20 Queen's Gambit Accepted: Old Variation, Korchnoi Gambit 1. d4 d5 2. c4 dxc4 3. e3 e5 4. Bxc4 exd4 5. Qb3 Qe7 6. Kf1 +D20 Queen's Gambit Accepted: Old Variation, Novikov Gambit 1. d4 d5 2. c4 dxc4 3. e3 e5 4. Bxc4 exd4 5. Qb3 Qe7 6. Nd2 +D20 Queen's Gambit Accepted: Saduleto Variation 1. d4 d5 2. c4 dxc4 3. e4 +D20 Queen's Gambit Accepted: Schwartz Defense 1. d4 d5 2. c4 dxc4 3. e4 f5 +D21 Queen's Gambit Accepted: Alekhine Defense, Borisenko-Furman Variation 1. d4 d5 2. c4 dxc4 3. Nf3 a6 4. e4 +D21 Queen's Gambit Accepted: Godes Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nd7 +D21 Queen's Gambit Accepted: Gunsberg Defense 1. d4 d5 2. c4 dxc4 3. Nf3 c5 +D21 Queen's Gambit Accepted: Normal Variation 1. d4 d5 2. c4 dxc4 3. Nf3 +D21 Queen's Gambit Accepted: Rosenthal Variation 1. d4 d5 2. c4 dxc4 3. Nf3 e6 +D21 Queen's Gambit Accepted: Slav Gambit 1. d4 d5 2. c4 dxc4 3. Nf3 b5 +D22 Queen's Gambit Accepted: Alekhine Defense 1. d4 d5 2. c4 dxc4 3. Nf3 a6 +D22 Queen's Gambit Accepted: Alekhine Defense, Alatortsev Variation 1. d4 d5 2. c4 dxc4 3. Nf3 a6 4. e3 Bg4 5. Bxc4 e6 6. d5 +D22 Queen's Gambit Accepted: Alekhine Defense, Haberditz Variation 1. d4 d5 2. c4 dxc4 3. Nf3 a6 4. e3 b5 +D23 Queen's Gambit Accepted 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 +D23 Queen's Gambit Accepted: Mannheim Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. Qa4+ +D24 Queen's Gambit Accepted: Bogoljubov Defense 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. Nc3 a6 5. e4 +D24 Queen's Gambit Accepted: Gunsberg Defense, Prianishenmo Gambit 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. Nc3 c5 5. d5 e6 6. e4 exd5 7. e5 +D24 Queen's Gambit Accepted: Showalter Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. Nc3 +D25 Queen's Gambit Accepted: Janowski-Larsen Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 Bg4 +D25 Queen's Gambit Accepted: Normal Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 +D25 Queen's Gambit Accepted: Smyslov Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 g6 +D25 Queen's Gambit Accepted: Winawer Defense 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 Be6 +D26 Queen's Gambit Accepted: Classical Defense 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 +D26 Queen's Gambit Accepted: Classical Defense, Normal Line 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O +D26 Queen's Gambit Accepted: Classical Defense, Steinitz Variation, Development Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O Nc6 +D26 Queen's Gambit Accepted: Classical Defense, Steinitz Variation, Exchange Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O cxd4 +D26 Queen's Gambit Accepted: Classical, Furman Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. Qe2 a6 7. dxc5 Bxc5 8. O-O Nc6 9. e4 b5 10. e5 +D26 Queen's Gambit Accepted: Normal Variation, Traditional System 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 +D27 Queen's Gambit Accepted: Classical Defense, Main Line 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 +D27 Queen's Gambit Accepted: Classical Defense, Rubinstein Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 7. a4 +D27 Queen's Gambit Accepted: Classical Defense, Russian Gambit 1. d4 d5 2. c4 dxc4 3. e3 Nf6 4. Bxc4 e6 5. Nf3 c5 6. O-O a6 7. e4 +D27 Queen's Gambit Accepted: Furman Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 7. dxc5 Bxc5 +D28 Queen's Gambit Accepted: Classical Defense, Alekhine System 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 7. Qe2 +D28 Queen's Gambit Accepted: Classical Defense, Alekhine System 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 7. Qe2 b5 +D28 Queen's Gambit Accepted: Classical, Flohr Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 7. Qe2 b5 8. Bb3 Nc6 9. Rd1 c4 10. Bc2 Nb4 11. Nc3 Nxc2 12. Qxc2 Bb7 13. d5 Qc7 +D29 Queen's Gambit Accepted: Classical Defense, Alekhine System, Main Line 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 7. Qe2 b5 8. Bb3 Bb7 +D29 Queen's Gambit Accepted: Classical Defense, Alekhine System, Smyslov Variation 1. d4 d5 2. c4 dxc4 3. Nf3 Nf6 4. e3 e6 5. Bxc4 c5 6. O-O a6 7. Qe2 b5 8. Bb3 Bb7 9. Rd1 Nbd7 10. Nc3 Bd6 +D30 Queen's Gambit Declined 1. d4 d5 2. c4 e6 +D30 Queen's Gambit Declined: Capablanca Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Bg5 h6 +D30 Queen's Gambit Declined: Capablanca Variation 1. d4 Nf6 2. Nf3 e6 3. c4 d5 4. Bg5 c6 5. Nbd2 Nbd7 6. e3 +D30 Queen's Gambit Declined: Semmering Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 e6 5. Nbd2 Nbd7 6. Bd3 c5 +D30 Queen's Gambit Declined: Spielmann Variation 1. d4 d5 2. c4 e6 3. Nf3 Nf6 4. e3 c6 5. Nbd2 g6 +D30 Queen's Gambit Declined: Stonewall Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 e6 5. Nbd2 Ne4 6. Bd3 f5 +D30 Queen's Gambit Declined: Tarrasch Defense, Pseudo-Tarrasch 1. d4 d5 2. c4 e6 3. Nf3 c5 +D30 Queen's Gambit Declined: Tarrasch Defense, Pseudo-Tarrasch Bishop Attack 1. d4 d5 2. c4 e6 3. Nf3 c5 4. cxd5 exd5 5. Bg5 +D30 Queen's Gambit Declined: Traditional Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Bg5 +D30 Queen's Gambit Declined: Vienna Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Bg5 Bb4+ +D30 Semi-Slav Defense: Quiet Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 e6 5. Nbd2 +D30 Semi-Slav Defense: Quiet Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. e3 e6 5. Nbd2 Nbd7 +D31 Queen's Gambit Declined: Alapin Variation 1. d4 e6 2. c4 b6 3. Nc3 d5 +D31 Queen's Gambit Declined: Charousek Variation 1. d4 d5 2. c4 e6 3. Nc3 Be7 +D31 Queen's Gambit Declined: Charousek Variation, Miladinovic Gambit 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. e4 dxe4 5. f3 +D31 Queen's Gambit Declined: Janowski Variation 1. d4 d5 2. c4 e6 3. Nc3 a6 +D31 Queen's Gambit Declined: Queen's Knight Variation 1. d4 d5 2. c4 e6 3. Nc3 +D31 Queen's Gambit Declined: Semi-Slav, Abrahams Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 dxc4 5. a4 Bb4 6. e3 b5 7. Bd2 a5 +D31 Queen's Gambit Declined: Semi-Slav, Junge Variation 1. d4 d5 2. c4 e6 3. Nf3 c6 4. Nc3 dxc4 5. a4 Bb4 6. e3 b5 7. Bd2 Qb6 +D31 Queen's Gambit Declined: Semi-Slav, Koomen Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 dxc4 5. e3 b5 6. a4 Bb4 7. Bd2 Qe7 +D31 Queen's Gambit Declined: Uhlmann Variation 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bg5 h6 6. Bh4 O-O 7. Rc1 dxc4 +D31 Semi-Slav Defense: Accelerated Move Order 1. d4 d5 2. c4 e6 3. Nc3 c6 +D31 Semi-Slav Defense: Anti-Noteboom, Stonewall Variation, Portisch Gambit 1. d4 d5 2. c4 e6 3. Nc3 c6 4. e3 f5 5. g4 +D31 Semi-Slav Defense: Gunderam Gambit 1. d4 d5 2. c4 e6 3. Nc3 c6 4. e4 dxe4 5. f3 +D31 Semi-Slav Defense: Marshall Gambit 1. d4 d5 2. c4 e6 3. Nc3 c6 4. e4 +D31 Semi-Slav Defense: Marshall Gambit, Forgotten Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. e4 dxe4 5. Nxe4 Bb4+ 6. Nc3 +D31 Semi-Slav Defense: Marshall Gambit, Main Line 1. d4 d5 2. c4 e6 3. Nc3 c6 4. e4 dxe4 5. Nxe4 Bb4+ 6. Bd2 +D31 Semi-Slav Defense: Marshall Gambit, Tolush Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. e4 dxe4 5. Nxe4 Bb4+ 6. Bd2 Qxd4 7. Bxb4 Qxe4+ 8. Be2 c5 9. Bxc5 Qxg2 +D31 Semi-Slav Defense: Noteboom Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 dxc4 +D31 Semi-Slav Defense: Noteboom Variation, Abrahams Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 dxc4 5. a4 Bb4 6. e3 Bxc3+ 7. bxc3 b5 8. axb5 cxb5 +D31 Semi-Slav Defense: Noteboom Variation, Anti-Noteboom Gambit 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 dxc4 5. g3 +D31 Semi-Slav Defense: Noteboom Variation, Anti-Noteboom Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 dxc4 5. Bg5 +D31 Semi-Slav Defense: Noteboom Variation, Anti-Noteboom Variation, Belyavsky Line 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 dxc4 5. Bg5 f6 +D32 Queen's Gambit Declined: Tarrasch Defense 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 +D32 Tarrasch Defense 1. d4 d5 2. c4 e6 3. Nc3 c5 +D32 Tarrasch Defense: Grünfeld Gambit 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. dxc5 d4 7. Na4 b5 +D32 Tarrasch Defense: Marshall Gambit 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. e4 +D32 Tarrasch Defense: Schara Gambit 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 cxd4 +D32 Tarrasch Defense: Symmetrical Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. e3 Nf6 5. Nf3 Nc6 +D32 Tarrasch Defense: Tarrasch Gambit 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. dxc5 d4 6. Na4 b5 +D32 Tarrasch Defense: Two Knights Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 +D32 Tarrasch Defense: von Hennig Gambit 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 cxd4 5. Qxd4 Nc6 6. Qd1 exd5 7. Qxd5 Be6 +D33 Tarrasch Defense: Dubov Tarrasch 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 cxd4 8. Nxd4 Bc5 +D33 Tarrasch Defense: Prague Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 +D33 Tarrasch Defense: Rubinstein System 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 +D33 Tarrasch Defense: Swedish Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 c4 +D33 Tarrasch Defense: Swedish Variation, Central Break 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 c4 7. e4 +D33 Tarrasch Defense: Wagner Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Bg4 +D34 Queen's Gambit Declined: Tarrasch Defense, Stoltz Variation 1. d4 d5 2. c4 e6 3. Nf3 c5 4. cxd5 exd5 5. g3 Nc6 6. Bg2 Nf6 7. O-O Be7 8. Nc3 O-O 9. Bg5 Be6 10. Rc1 b6 +D34 Tarrasch Defense: Classical Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O +D34 Tarrasch Defense: Classical Variation, Advance Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. Bg5 c4 +D34 Tarrasch Defense: Classical Variation, Bogoljubov Variation 1. d4 Nf6 2. c4 e6 3. Nc3 c5 4. Nf3 d5 5. cxd5 exd5 6. g3 Nc6 7. Bg2 Be7 8. O-O O-O 9. Bg5 Be6 10. Rc1 c4 +D34 Tarrasch Defense: Classical Variation, Carlsbad Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. Bg5 +D34 Tarrasch Defense: Classical Variation, Chandler Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. Bg5 cxd4 10. Nxd4 h6 11. Be3 Re8 12. Rc1 Be6 +D34 Tarrasch Defense: Classical Variation, Classical Tarrasch Gambit 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. dxc5 d4 +D34 Tarrasch Defense: Classical Variation, Endgame Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. Bg5 Be6 +D34 Tarrasch Defense: Classical Variation, Main Line 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. Bg5 cxd4 10. Nxd4 h6 11. Be3 Re8 +D34 Tarrasch Defense: Classical Variation, Petursson Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. Bg5 cxd4 10. Nxd4 Re8 +D34 Tarrasch Defense: Classical Variation, Réti Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. dxc5 Bxc5 10. Na4 +D34 Tarrasch Defense: Classical Variation, Spassky Variation 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 8. O-O O-O 9. Bg5 cxd4 10. Nxd4 h6 11. Be3 Bg4 +D34 Tarrasch Defense: Prague Variation, Main Line 1. d4 d5 2. c4 e6 3. Nc3 c5 4. cxd5 exd5 5. Nf3 Nc6 6. g3 Nf6 7. Bg2 Be7 +D35 Queen's Gambit Declined: Exchange Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. cxd5 +D35 Queen's Gambit Declined: Exchange Variation, Chameleon Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. cxd5 exd5 5. Bg5 Be7 6. e3 O-O 7. Bd3 Nbd7 8. Qc2 Re8 9. Nge2 Nf8 10. O-O-O +D35 Queen's Gambit Declined: Exchange Variation, Positional Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. cxd5 exd5 5. Bg5 +D35 Queen's Gambit Declined: Exchange Variation, Positional Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. cxd5 exd5 5. Bg5 c6 +D35 Queen's Gambit Declined: Exchange Variation, Sämisch Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Nbd7 5. cxd5 exd5 6. Bf4 +D35 Queen's Gambit Declined: Harrwitz Attack 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bf4 +D35 Queen's Gambit Declined: Normal Defense 1. d4 d5 2. c4 e6 3. Nc3 Nf6 +D36 Queen's Gambit Declined: Exchange Variation, Reshevsky Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. cxd5 exd5 5. Bg5 c6 6. Qc2 +D37 Queen's Gambit Declined: Barmen Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Nbd7 +D37 Queen's Gambit Declined: Harrwitz Attack 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bf4 +D37 Queen's Gambit Declined: Harrwitz Attack 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bf4 O-O 6. e3 c5 7. dxc5 Bxc5 8. Qc2 Nc6 9. Rd1 Qa5 10. a3 +D37 Queen's Gambit Declined: Harrwitz Attack 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bf4 O-O 6. e3 c5 7. dxc5 Bxc5 8. Qc2 Nc6 9. a3 Qa5 10. O-O-O +D37 Queen's Gambit Declined: Harrwitz Attack, Fianchetto Defense 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bf4 O-O 6. e3 b6 +D37 Queen's Gambit Declined: Harrwitz Attack, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bf4 O-O 6. e3 c5 7. dxc5 Bxc5 +D37 Queen's Gambit Declined: Harrwitz Attack, Orthodox Defense 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Nf3 Be7 5. Bf4 O-O 6. e3 c6 +D37 Queen's Gambit Declined: Harrwitz Attack, Two Knights Defense 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bf4 O-O 6. e3 Nbd7 +D37 Queen's Gambit Declined: Harrwitz Attack, Two Knights Defense, Blockade Line 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. Nf3 Be7 5. Bf4 O-O 6. e3 Nbd7 7. c5 +D37 Queen's Gambit Declined: Knight Defense, Alekhine Gambit 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Nbd7 5. Bg5 h6 6. Bh4 dxc4 +D37 Queen's Gambit Declined: Miles Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. Qc2 +D37 Queen's Gambit Declined: Three Knights Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 +D37 Queen's Gambit Declined: Three Knights, Vienna Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 dxc4 +D37 Queen's Gambit Declined: Vienna Variation, Quiet Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 dxc4 5. e3 +D38 Queen's Gambit Declined: Ragozin Defense 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Bb4 +D38 Queen's Gambit Declined: Ragozin Defense, Alekhine Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Bb4 5. Qa4+ +D38 Queen's Gambit Declined: Westphalian Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Bb4 5. Bg5 Nbd7 6. e3 c5 +D39 Queen's Gambit Declined: Ragozin Defense, Vienna Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Bb4 5. Bg5 dxc4 +D40 Queen's Gambit Declined: Semi-Tarrasch Defense 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c5 +D40 Queen's Gambit Declined: Semi-Tarrasch Defense, Levenfish Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Nf3 c5 5. e3 Nc6 6. Bd3 Bd6 7. O-O O-O 8. Qe2 Qe7 9. dxc5 Bxc5 10. e4 +D40 Queen's Gambit Declined: Semi-Tarrasch Defense, Pillsbury Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Nf3 c5 5. Bg5 +D40 Queen's Gambit Declined: Semi-Tarrasch Defense, Symmetrical Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Nf3 c5 5. e3 Nc6 6. Bd3 Bd6 7. O-O O-O +D41 Queen's Gambit Declined: Semi-Tarrasch Defense 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c5 5. cxd5 +D41 Queen's Gambit Declined: Semi-Tarrasch Defense, Exchange Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c5 5. cxd5 Nxd5 6. e4 +D41 Queen's Gambit Declined: Semi-Tarrasch Defense, Kmoch Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Nf3 c5 5. cxd5 Nxd5 6. e4 Nxc3 7. bxc3 cxd4 8. cxd4 Bb4+ 9. Bd2 Bxd2+ 10. Qxd2 O-O 11. Bb5 +D41 Queen's Gambit Declined: Semi-Tarrasch Defense, Pillsbury Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c5 5. cxd5 Nxd5 6. e3 +D41 Queen's Gambit Declined: Semi-Tarrasch Defense, San Sebastian Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 c5 7. Nf3 cxd4 8. cxd4 Bb4+ 9. Bd2 Qa5 +D42 Queen's Gambit Declined: Semi-Tarrasch Defense, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c5 5. cxd5 Nxd5 6. e3 Nc6 7. Bd3 +D43 Queen's Gambit Declined: Hastings Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 h6 6. Bxf6 Qxf6 7. Qb3 +D43 Semi-Slav Defense 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 +D43 Semi-Slav Defense: Anti-Moscow Gambit 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 h6 6. Bh4 +D44 Semi-Slav Defense Accepted 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 dxc4 +D44 Semi-Slav Defense: Botvinnik Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 dxc4 6. e4 +D44 Semi-Slav Defense: Botvinnik Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 dxc4 6. e4 b5 7. e5 h6 8. Bh4 g5 9. Nxg5 +D44 Semi-Slav Defense: Botvinnik Variation, Alatortsev System 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c6 5. Bg5 dxc4 6. e4 b5 7. e5 h6 8. Bh4 g5 9. Nxg5 Nd5 +D44 Semi-Slav Defense: Botvinnik Variation, Ekstrom Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 dxc4 6. e4 b5 7. e5 h6 8. Bh4 g5 9. exf6 gxh4 10. Ne5 +D44 Semi-Slav Defense: Botvinnik Variation, Lilienthal Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 dxc4 6. e4 b5 7. e5 h6 8. Bh4 g5 9. Nxg5 hxg5 10. Bxg5 Nbd7 11. g3 +D44 Semi-Slav Defense: Botvinnik Variation, Szabo Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 c6 5. Bg5 dxc4 6. e4 b5 7. e5 h6 8. Bh4 g5 9. Nxg5 hxg5 10. Bxg5 Nbd7 11. Qf3 +D45 Semi-Slav Defense: Accelerated Meran Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 a6 +D45 Semi-Slav Defense: Main Line 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 +D45 Semi-Slav Defense: Normal Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 +D45 Semi-Slav Defense: Rubinstein System 1. d4 d5 2. c4 e6 3. Nc3 c6 4. Nf3 Nf6 5. e3 Nbd7 6. Ne5 +D45 Semi-Slav Defense: Stoltz Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Qc2 +D45 Semi-Slav Defense: Stoltz Variation, Center Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. e3 Nbd7 6. Qc2 Bd6 7. e4 +D45 Semi-Slav Defense: Stoltz Variation, Center Variation, Mikhalchishin Line 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. e3 Nbd7 6. Qc2 Bd6 7. e4 dxe4 8. Nxe4 Nxe4 9. Qxe4 e5 10. dxe5 +D45 Semi-Slav Defense: Stoltz Variation, Shabalov Attack 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. e3 Nbd7 6. Qc2 Bd6 7. g4 +D45 Semi-Slav Defense: Stonewall Defense 1. d4 d5 2. Nf3 Nf6 3. c4 c6 4. Nc3 e6 5. e3 Ne4 6. Bd3 f5 +D46 Semi-Slav Defense: Bogoljubov Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 Be7 +D46 Semi-Slav Defense: Chigorin Defense 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 Bd6 +D46 Semi-Slav Defense: Main Line 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 +D46 Semi-Slav Defense: Romih Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 Bb4 +D47 Semi-Slav Defense: Meran Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 +D47 Semi-Slav Defense: Meran Variation, Lundin Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. e3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 b4 +D47 Semi-Slav Defense: Meran Variation, Wade Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 Bb7 +D47 Semi-Slav Defense: Meran Variation, Wade Variation, Kaidanov Gambit 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 Bb7 9. e4 b4 10. Na4 c5 11. e5 Nd5 12. O-O cxd4 13. Nxd4 +D47 Semi-Slav Defense: Meran Variation, Wade Variation, Larsen Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 Bb7 9. e4 b4 10. Na4 c5 11. e5 Nd5 +D47 Semi-Slav Defense: Semi-Meran Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 +D48 Semi-Slav Defense: Meran Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 +D48 Semi-Slav Defense: Meran Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 +D48 Semi-Slav Defense: Meran Variation, Old Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. e5 +D48 Semi-Slav Defense: Meran Variation, Pirc Variation 1. d4 d5 2. c4 e6 3. Nc3 c6 4. e3 Nf6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 b4 +D48 Semi-Slav Defense: Meran Variation, Reynolds' Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. e3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. d5 +D49 Semi-Slav Defense: Meran Variation, Blumenfeld Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. e5 cxd4 11. Nxb5 +D49 Semi-Slav Defense: Meran Variation, Rabinovich Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. e5 cxd4 11. Nxb5 Ng4 +D49 Semi-Slav Defense: Meran Variation, Rellstab Attack 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. Nf3 e6 5. e3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. e5 cxd4 11. Nxb5 Nxe5 12. Nxe5 axb5 13. O-O Qd5 14. Qe2 Ba6 15. Bg5 +D49 Semi-Slav Defense: Meran Variation, Sozin Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. e3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. e5 cxd4 11. Nxb5 Nxe5 +D49 Semi-Slav Defense: Meran Variation, Sozin Variation 1. d4 d5 2. Nf3 Nf6 3. c4 c6 4. Nc3 e6 5. e3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. e5 cxd4 11. Nxb5 Nxe5 12. Nxe5 axb5 13. O-O +D49 Semi-Slav Defense: Meran Variation, Stahlberg Variation 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 e6 5. Nf3 Nbd7 6. Bd3 dxc4 7. Bxc4 b5 8. Bd3 a6 9. e4 c5 10. e5 cxd4 11. Nxb5 Nxe5 12. Nxe5 axb5 13. Qf3 +D50 Queen's Gambit Declined: Been-Koomen Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 c5 +D50 Queen's Gambit Declined: Modern Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 +D50 Queen's Gambit Declined: Pseudo-Tarrasch Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 c5 5. cxd5 +D50 Queen's Gambit Declined: Pseudo-Tarrasch Variation, Canal Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 c5 5. cxd5 Qb6 +D50 Queen's Gambit Declined: Pseudo-Tarrasch Variation, Primitive Pillsbury Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 c5 5. Nf3 cxd4 6. Qxd4 +D50 Queen's Gambit Declined: Semi-Tarrasch Defense, Krause Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 c5 5. Nf3 cxd4 6. Nxd4 e5 7. Ndb5 a6 8. Qa4 +D51 Queen's Gambit Declined: Alekhine Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. Nf3 c6 6. e4 +D51 Queen's Gambit Declined: Capablanca Variation, Anti-Cambridge Springs Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. e3 c6 6. a3 +D51 Queen's Gambit Declined: Manhattan Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. e3 Bb4 +D51 Queen's Gambit Declined: Modern Variation, Knight Defense 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 +D51 Queen's Gambit Declined: Modern Variation, Knight Defense 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. e3 +D51 Queen's Gambit Declined: Modern Variation, Knight Defense 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. e3 c6 +D51 Queen's Gambit Declined: Rochlin Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. Nf3 c6 6. Rc1 Qa5 7. Bd2 +D52 Queen's Gambit Declined 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 Nbd7 6. e3 +D52 Queen's Gambit Declined: Cambridge Springs Defense 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 Nbd7 6. e3 Qa5 +D52 Queen's Gambit Declined: Cambridge Springs Defense 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 Nbd7 6. e3 Qa5 7. cxd5 +D52 Queen's Gambit Declined: Cambridge Springs Defense, Argentine Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. e3 c6 6. Nf3 Qa5 7. Nd2 Bb4 8. Qc2 O-O 9. Bh4 +D52 Queen's Gambit Declined: Cambridge Springs Defense, Bogoljubov Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 Nbd7 6. e3 Qa5 7. Nd2 Bb4 8. Qc2 +D52 Queen's Gambit Declined: Cambridge Springs Defense, Capablanca Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Nbd7 5. e3 c6 6. Nf3 Qa5 7. Bxf6 +D52 Queen's Gambit Declined: Cambridge Springs Defense, Rubinstein Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 Nbd7 6. e3 Qa5 7. Nd2 dxc4 +D52 Queen's Gambit Declined: Cambridge Springs Defense, Yugoslav Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 e6 5. Bg5 Nbd7 6. e3 Qa5 7. cxd5 Nxd5 +D53 Queen's Gambit Declined 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 +D53 Queen's Gambit Declined: Lasker Defense 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. Bg5 Be7 5. e3 Ne4 +D53 Queen's Gambit Declined: Modern Variation, Heral Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. Bxf6 +D54 Queen's Gambit Declined: Neo-Orthodox Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. Bg5 Be7 5. e3 O-O 6. Rc1 +D55 Queen's Gambit Declined: Anti-Tartakower Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 h6 7. Bxf6 +D55 Queen's Gambit Declined: Anti-Tartakower Variation, Petrosian Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 h6 6. Bxf6 Bxf6 7. e3 O-O 8. Rc1 c6 9. Bd3 Nd7 10. O-O dxc4 11. Bxc4 +D55 Queen's Gambit Declined: Modern Variation, Normal Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 +D55 Queen's Gambit Declined: Neo-Orthodox Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 h6 +D55 Queen's Gambit Declined: Neo-Orthodox Variation, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 h6 6. Bh4 O-O 7. e3 +D55 Queen's Gambit Declined: Pillsbury Attack 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Nc3 d5 5. cxd5 exd5 6. Bg5 Be7 7. e3 O-O 8. Bd3 Bb7 9. Ne5 +D56 Queen's Gambit Declined: Lasker Defense 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bg5 h6 6. Bh4 O-O 7. e3 Ne4 +D56 Queen's Gambit Declined: Lasker Defense, Russian Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 h6 7. Bh4 Ne4 8. Bxe7 Qxe7 9. Qc2 Nf6 10. Bd3 dxc4 11. Bxc4 c5 12. O-O Nc6 13. Rfd1 Bd7 +D56 Queen's Gambit Declined: Lasker Defense, Teichmann Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 h6 6. Bh4 O-O 7. e3 Ne4 8. Bxe7 Qxe7 9. Qc2 +D57 Queen's Gambit Declined: Lasker Defense, Bernstein Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. Bg5 Be7 5. e3 h6 6. Bh4 O-O 7. Nf3 Ne4 8. Bxe7 Qxe7 9. cxd5 Nxc3 10. bxc3 exd5 11. Qb3 Qd6 +D57 Queen's Gambit Declined: Lasker Defense, Bernstein Variation, Mar del Plata Gambit 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 h6 7. Bh4 Ne4 8. Bxe7 Qxe7 9. cxd5 Nxc3 10. bxc3 exd5 11. Qb3 Rd8 12. c4 Be6 +D57 Queen's Gambit Declined: Lasker Defense, Main Line 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bg5 h6 6. Bh4 O-O 7. e3 Ne4 8. Bxe7 Qxe7 9. cxd5 Nxc3 10. bxc3 +D58 Queen's Gambit Declined: Tartakower Defense 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 h6 6. Bh4 O-O 7. e3 b6 +D58 Queen's Gambit Declined: Tartakower Defense, Exchange Variation 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bg5 h6 6. Bh4 O-O 7. e3 b6 8. cxd5 exd5 +D59 Queen's Gambit Declined: Tartakower Defense 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bg5 h6 6. Bh4 O-O 7. e3 b6 8. cxd5 Nxd5 9. Bxe7 Qxe7 10. Nxd5 exd5 11. Rc1 Be6 +D59 Queen's Gambit Declined: Tartakower Defense, Makogonov Exchange Variation 1. d4 d5 2. c4 e6 3. Nc3 Be7 4. Nf3 Nf6 5. Bg5 h6 6. Bh4 O-O 7. e3 b6 8. cxd5 Nxd5 +D60 Queen's Gambit Declined: Orthodox Defense 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 +D60 Queen's Gambit Declined: Orthodox Defense, Botvinnik Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Bd3 +D60 Queen's Gambit Declined: Orthodox Defense, Rauzer Variation 1. d4 d5 2. Nf3 Nf6 3. c4 e6 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Qb3 +D61 Queen's Gambit Declined: Orthodox Defense, Rubinstein Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Qc2 +D62 Queen's Gambit Declined: Orthodox Defense, Rubinstein Variation, Flohr Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Qc2 c5 8. cxd5 +D63 Queen's Gambit Declined: Orthodox Defense, Capablanca Variation 1. Nf3 d5 2. d4 Nf6 3. c4 e6 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 b6 8. cxd5 exd5 9. Bb5 +D63 Queen's Gambit Declined: Orthodox Defense, Henneberger Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 a6 +D63 Queen's Gambit Declined: Orthodox Defense, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 +D63 Queen's Gambit Declined: Orthodox Defense, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 +D63 Queen's Gambit Declined: Orthodox Defense, Pillsbury Variation 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 b6 8. cxd5 exd5 9. Bd3 +D63 Queen's Gambit Declined: Orthodox Defense, Swiss, Karlsbad Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 a6 8. cxd5 +D64 Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack 1. d4 Nf6 2. c4 e6 3. Nc3 d5 4. Nf3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. a3 a6 9. Qc2 +D64 Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. Qc2 +D64 Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. Qc2 a6 +D64 Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack 1. Nf3 d5 2. d4 Nf6 3. c4 e6 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. Qc2 Ne4 +D65 Queen's Gambit Declined: Orthodox Defense, Rubinstein Attack 1. d4 d5 2. Nf3 Nf6 3. c4 e6 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. Qc2 a6 9. cxd5 +D66 Queen's Gambit Declined: Orthodox Defense, Bd3 Line 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 c6 8. Bd3 +D66 Queen's Gambit Declined: Orthodox Defense, Fianchetto Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 c6 5. Nf3 Be7 6. e3 Nbd7 7. Rc1 O-O 8. Bd3 dxc4 9. Bxc4 b5 +D67 Queen's Gambit Declined: Orthodox Defense, Alekhine Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. Bxe7 Qxe7 11. Ne4 +D67 Queen's Gambit Declined: Orthodox Defense, Bd3 Line 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. Bxe7 Qxe7 +D67 Queen's Gambit Declined: Orthodox Defense, Capablanca System 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 +D67 Queen's Gambit Declined: Orthodox Defense, Janowski Variation 1. d4 d5 2. Nf3 Nf6 3. c4 e6 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. h4 +D67 Queen's Gambit Declined: Orthodox Defense, Main Line 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. Bxe7 Qxe7 11. O-O +D68 Queen's Gambit Declined: Orthodox Defense, Classical Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. Bxe7 Qxe7 11. O-O Nxc3 12. Rxc3 e5 +D68 Queen's Gambit Declined: Orthodox Defense, Classical Variation 1. d4 d5 2. c4 e6 3. Nf3 Nf6 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. Bxe7 Qxe7 11. O-O Nxc3 12. Rxc3 e5 13. Qb1 +D68 Queen's Gambit Declined: Orthodox Defense, Classical Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Be7 5. Bg5 O-O 6. e3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. Bxe7 Qxe7 11. O-O Nxc3 12. Rxc3 e5 13. Qc2 +D69 Queen's Gambit Declined: Orthodox Defense, Classical Variation 1. d4 d5 2. c4 e6 3. Nc3 Nf6 4. Bg5 Be7 5. e3 O-O 6. Nf3 Nbd7 7. Rc1 c6 8. Bd3 dxc4 9. Bxc4 Nd5 10. Bxe7 Qxe7 11. O-O Nxc3 12. Rxc3 e5 13. dxe5 Nxe5 14. Nxe5 Qxe5 +D70 Neo-Grünfeld Defense: Goglidze Attack 1. d4 Nf6 2. c4 g6 3. f3 d5 +D70 Neo-Grünfeld Defense: with Nf3 1. d4 Nf6 2. c4 g6 3. Nf3 d5 +D70 Neo-Grünfeld Defense: with g3 1. d4 Nf6 2. c4 g6 3. g3 d5 +D71 Neo-Grünfeld Defense: Exchange Variation 1. d4 Nf6 2. c4 g6 3. g3 Bg7 4. Bg2 d5 5. cxd5 Nxd5 +D74 Neo-Grünfeld Defense: Delayed Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d5 6. cxd5 Nxd5 7. O-O +D75 Neo-Grünfeld Defense: Delayed Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 O-O 5. g3 d5 6. cxd5 Nxd5 7. Bg2 c5 8. O-O +D75 Neo-Grünfeld Defense: Delayed Exchange Variation 1. d4 Nf6 2. Nf3 g6 3. c4 Bg7 4. g3 O-O 5. Bg2 d5 6. cxd5 Nxd5 7. O-O c5 8. dxc5 +D76 Neo-Grünfeld Defense: Delayed Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d5 6. cxd5 Nxd5 7. O-O Nb6 +D77 Neo-Grünfeld Defense: Classical Variation 1. d4 Nf6 2. Nf3 g6 3. g3 Bg7 4. Bg2 O-O 5. O-O d5 6. c4 +D77 Neo-Grünfeld Defense: Classical Variation, Modern Defense 1. d4 Nf6 2. Nf3 g6 3. g3 Bg7 4. Bg2 O-O 5. O-O d5 6. c4 dxc4 +D77 Neo-Grünfeld Defense: Classical Variation, Polgar Variation 1. d4 Nf6 2. Nf3 g6 3. g3 Bg7 4. Bg2 O-O 5. O-O d5 6. c4 Nc6 +D78 Neo-Grünfeld Defense: Classical Variation, Original Defense 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 c6 6. O-O d5 +D79 Neo-Grünfeld Defense: Ultra-Delayed Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 c6 6. O-O d5 7. cxd5 cxd5 +D80 Grünfeld Defense 1. d4 Nf6 2. c4 g6 3. Nc3 d5 +D80 Grünfeld Defense: Gibbon Gambit 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. g4 +D80 Grünfeld Defense: Lundin Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bg5 Ne4 5. Nxe4 dxe4 6. Qd2 c5 +D80 Grünfeld Defense: Lutikov Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. f3 +D80 Grünfeld Defense: Lutikov Variation, Murrey Attack 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. f3 c5 5. cxd5 Nxd5 6. Na4 +D80 Grünfeld Defense: Stockholm Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bg5 +D80 Grünfeld Defense: Zaitsev Gambit 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. h4 +D81 Grünfeld Defense: Russian Variation, Accelerated Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Qb3 +D82 Grünfeld Defense: Brinckmann Attack 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bf4 +D83 Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bf4 Bg7 5. e3 O-O +D83 Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit, Botvinnik Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bf4 Bg7 5. e3 O-O 6. Rc1 c5 7. dxc5 Be6 +D83 Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit, Capablanca Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bf4 Bg7 5. e3 O-O 6. Rc1 +D83 Grünfeld Defense: Brinckmann Attack, Reshevsky Gambit 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bf4 Bg7 5. Rc1 O-O 6. e3 c5 7. dxc5 Qa5 +D84 Grünfeld Defense: Brinckmann Attack, Grünfeld Gambit Accepted 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Bf4 Bg7 5. e3 O-O 6. cxd5 Nxd5 7. Nxd5 Qxd5 8. Bxc7 +D85 Grünfeld Defense: Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 +D85 Grünfeld Defense: Exchange Variation, Modern Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Nf3 +D85 Grünfeld Defense: Exchange Variation, Modern Exchange Variation, Kramnik's Line 1. d4 Nf6 2. Nf3 g6 3. c4 Bg7 4. Nc3 d5 5. cxd5 Nxd5 6. e4 Nxc3 7. bxc3 c5 8. h3 +D85 Grünfeld Defense: Exchange Variation, Modern Exchange Variation, Pawn Grab Line 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Nf3 c5 8. Rb1 O-O 9. Be2 Nc6 10. d5 Bxc3+ +D85 Grünfeld Defense: Exchange Variation, Nadanian Attack 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. Na4 +D86 Grünfeld Defense: Exchange Variation, Classical Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 +D86 Grünfeld Defense: Exchange Variation, Larsen Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 O-O 8. Ne2 Qd7 +D86 Grünfeld Defense: Exchange Variation, Larsen Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 O-O 8. Ne2 Qd7 9. O-O b6 +D86 Grünfeld Defense: Exchange Variation, Simagin's Improved Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 O-O 8. Ne2 Nc6 +D86 Grünfeld Defense: Exchange Variation, Simagin's Lesser Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 O-O 8. Ne2 b6 +D87 Grünfeld Defense: Exchange Variation, Seville Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 c5 8. Ne2 Nc6 9. Be3 O-O 10. O-O Bg4 11. f3 Na5 12. Bxf7+ +D87 Grünfeld Defense: Exchange Variation, Spassky Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 c5 8. Ne2 O-O +D88 Grünfeld Defense: Exchange Variation, Spassky Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 c5 8. Ne2 Nc6 9. Be3 O-O 10. O-O cxd4 11. cxd4 +D89 Grünfeld Defense: Exchange Variation, Sokolsky Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 c5 8. Ne2 O-O 9. O-O Nc6 10. Be3 Bg4 11. f3 Na5 12. Bd3 cxd4 13. cxd4 Be6 14. d5 +D89 Grünfeld Defense: Exchange Variation, Spassky Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. cxd5 Nxd5 5. e4 Nxc3 6. bxc3 Bg7 7. Bc4 c5 8. Ne2 Nc6 9. Be3 O-O 10. O-O Bg4 11. f3 Na5 12. Bd3 cxd4 13. cxd4 Be6 +D90 Grünfeld Defense: Flohr Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qa4+ +D90 Grünfeld Defense: Three Knights Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 +D90 Grünfeld Defense: Three Knights Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 +D91 Grünfeld Defense: Three Knights Variation, Petrosian System 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Bg5 +D92 Grünfeld Defense: Three Knights Variation, Hungarian Attack 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Bf4 +D93 Grünfeld Defense: Three Knights Variation, Hungarian Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Bf4 O-O 6. e3 +D94 Grünfeld Defense: Flohr Defense 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 g6 5. Nf3 Bg7 6. Bd3 O-O 7. O-O Bf5 +D94 Grünfeld Defense: Makogonov Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. e3 O-O 6. b4 +D94 Grünfeld Defense: Opocensky Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. e3 O-O 6. Bd2 +D94 Grünfeld Defense: Smyslov Defense 1. d4 d5 2. c4 c6 3. Nc3 Nf6 4. e3 g6 5. Nf3 Bg7 6. Bd3 O-O 7. O-O Bg4 +D94 Grünfeld Defense: Three Knights Variation, Burille Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. e3 +D94 Grünfeld Defense: Three Knights Variation, Paris Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. e3 O-O 6. Bd3 +D95 Grünfeld Defense: Botvinnik Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. e3 O-O 6. Qb3 e6 +D95 Grünfeld Defense: Pachman Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. e3 Bg7 5. Qb3 dxc4 6. Bxc4 O-O 7. Nf3 Nbd7 8. Ng5 +D95 Grünfeld Defense: Three Knights Variation, Vienna Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. e3 O-O 6. Qb3 +D96 Grünfeld Defense: Russian Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 +D97 Grünfeld Defense: Russian Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 +D97 Grünfeld Defense: Russian Variation, Byrne Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 Nc6 +D97 Grünfeld Defense: Russian Variation, Hungarian Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 a6 +D97 Grünfeld Defense: Russian Variation, Levenfish Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 b6 +D97 Grünfeld Defense: Russian Variation, Prins Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 Na6 +D97 Grünfeld Defense: Russian Variation, Szabo Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 c6 +D98 Grünfeld Defense: Russian Variation, Keres Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 Bg4 8. Be3 Nfd7 9. Be2 Nb6 10. Qd3 Nc6 11. O-O-O +D98 Grünfeld Defense: Russian Variation, Smyslov Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 Bg4 +D99 Grünfeld Defense: Russian Variation, Smyslov Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 Bg4 8. Be3 Nfd7 9. Qb3 +D99 Grünfeld Defense: Russian Variation, Yugoslav Variation 1. d4 Nf6 2. c4 g6 3. Nc3 d5 4. Nf3 Bg7 5. Qb3 dxc4 6. Qxc4 O-O 7. e4 Bg4 8. Be3 Nfd7 9. Qb3 c5 diff --git a/projectexample/openingtrainer/chessopeningtrainer/openings/e.tsv b/projectexample/openingtrainer/chessopeningtrainer/openings/e.tsv new file mode 100644 index 00000000..d1893cca --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/openings/e.tsv @@ -0,0 +1,291 @@ +eco name pgn +E00 Catalan Opening 1. d4 Nf6 2. c4 e6 3. g3 +E00 Catalan Opening 1. d4 Nf6 2. c4 e6 3. g3 d5 +E00 Catalan Opening: Hungarian Gambit 1. d4 Nf6 2. c4 e6 3. g3 e5 +E00 Indian Defense 1. d4 Nf6 2. c4 e6 3. Qb3 +E00 Indian Defense: Devin Gambit 1. d4 Nf6 2. c4 e6 3. g4 +E00 Indian Defense: Seirawan Attack 1. d4 Nf6 2. c4 e6 3. Bg5 +E01 Catalan Opening: Closed 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 +E02 Catalan Opening: Open Defense 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 dxc4 +E03 Catalan Opening: Open Defense 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 dxc4 5. Qa4+ Nbd7 6. Qxc4 +E03 Catalan Opening: Open Defense, Alekhine Variation 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 dxc4 5. Qa4+ Nbd7 6. Qxc4 a6 7. Qc2 +E04 Catalan Opening: Open Defense 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 dxc4 5. Nf3 +E04 Catalan Opening: Open Defense, Modern Sharp Variation 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 dxc4 5. Nf3 Nc6 6. Qa4 Bb4+ +E05 Catalan Opening: Open Defense, Classical Line 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 dxc4 5. Nf3 Be7 +E06 Catalan Opening: Closed 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 5. Nf3 +E07 Catalan Opening: Closed 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 5. Nf3 O-O 6. O-O Nbd7 +E07 Catalan Opening: Closed, Botvinnik Variation 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 5. Nf3 O-O 6. O-O Nbd7 7. Nc3 c6 8. Qd3 +E08 Catalan Opening: Closed 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 5. Nf3 O-O 6. O-O Nbd7 7. Qc2 c6 8. b3 +E08 Catalan Opening: Closed 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 5. Nf3 O-O 6. O-O Nbd7 7. Qc2 +E08 Catalan Opening: Closed, Spassky Gambit 1. d4 Nf6 2. c4 e6 3. g3 Be7 4. Bg2 d5 5. Nf3 O-O 6. O-O Nbd7 7. Qc2 c6 8. b3 b6 9. Rd1 Bb7 10. Nc3 b5 +E08 Catalan Opening: Closed, Zagoryansky Variation 1. d4 e6 2. c4 Nf6 3. Nf3 d5 4. g3 Be7 5. Bg2 O-O 6. O-O Nbd7 7. Qc2 c6 8. Rd1 b6 9. a4 +E09 Catalan Opening: Closed Variation, Rabinovich Variation 1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Qc2 e6 5. Nbd2 Be7 6. g3 Nbd7 7. Bg2 O-O 8. O-O b5 +E09 Catalan Opening: Closed Variation, Traditional Variation 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. g3 Be7 5. Bg2 O-O 6. O-O Nbd7 7. Qc2 c6 8. Nbd2 b6 +E09 Catalan Opening: Closed, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. g3 Be7 5. Bg2 O-O 6. O-O Nbd7 7. Qc2 c6 8. Nbd2 +E09 Catalan Opening: Closed, Sokolsky Variation 1. d4 Nf6 2. c4 e6 3. g3 d5 4. Bg2 Be7 5. Nf3 O-O 6. O-O Nbd7 7. Qc2 c6 8. Nbd2 b6 9. b3 a5 10. Bb2 Ba6 +E10 Blumenfeld Countergambit 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 b5 +E10 Blumenfeld Countergambit Accepted 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 b5 5. dxe6 fxe6 6. cxb5 d5 +E10 Blumenfeld Countergambit: Dus-Khotimirsky Variation 1. d4 Nf6 2. c4 e6 3. Nf3 c5 4. d5 b5 5. Bg5 +E10 Blumenfeld Countergambit: Spielmann Variation 1. d4 Nf6 2. Nf3 e6 3. c4 c5 4. d5 b5 5. Bg5 exd5 6. cxd5 h6 +E10 Indian Defense: Anti-Nimzo-Indian 1. d4 Nf6 2. c4 e6 3. Nf3 +E10 Indian Defense: Dzindzi-Indian Defense 1. d4 Nf6 2. c4 e6 3. Nf3 a6 +E10 Indian Defense: Döry Indian 1. d4 Nf6 2. c4 e6 3. Nf3 Ne4 +E11 Bogo-Indian Defense 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ +E11 Bogo-Indian Defense: Exchange Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Bd2 Bxd2+ +E11 Bogo-Indian Defense: Grünfeld Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Nbd2 +E11 Bogo-Indian Defense: Haiti Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Bd2 Nc6 +E11 Bogo-Indian Defense: Monticelli Trap 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Bb4+ 6. Bd2 Bxd2+ 7. Qxd2 O-O 8. Nc3 Ne4 9. Qc2 Nxc3 10. Ng5 +E11 Bogo-Indian Defense: New England Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Nfd2 +E11 Bogo-Indian Defense: Nimzowitsch Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Bd2 Qe7 +E11 Bogo-Indian Defense: Retreat Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Bd2 Be7 +E11 Bogo-Indian Defense: Vitolins Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Bd2 c5 +E11 Bogo-Indian Defense: Wade-Smyslov Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Bd2 a5 +E12 Nimzo-Indian Defense: Three Knights Variation, Duchamp Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Nc3 Bb4 +E12 Nimzo-Indian Defense: Three Knights Variation, Duchamp Variation, Modern Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Nc3 Bb4 5. Bg5 Bb7 6. Nd2 +E12 Queen's Indian Defense 1. d4 Nf6 2. c4 e6 3. Nf3 b6 +E12 Queen's Indian Defense: Kasparov Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Nc3 +E12 Queen's Indian Defense: Kasparov Variation, Botvinnik Attack 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Nc3 Bb7 5. Bg5 h6 6. Bh4 g5 7. Bg3 Nh5 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Andersson Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 Ne4 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Classical Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 d5 6. cxd5 exd5 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Hedgehog Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 g6 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Kasparov Attack 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 d5 6. cxd5 Nxd5 7. Qc2 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 d5 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Marco Defense 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 Be7 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Modern Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 d5 6. cxd5 Nxd5 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Petrosian Attack 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 d5 6. cxd5 Nxd5 7. e3 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Polovodin Gambit 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Nc3 Bb7 5. a3 d5 6. cxd5 Nxd5 7. e4 +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Rashkovsky Attack 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 d5 6. cxd5 Nxd5 7. Qa4+ +E12 Queen's Indian Defense: Kasparov-Petrosian Variation, Romanishin Attack 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Bb7 5. Nc3 d5 6. cxd5 Nxd5 7. Bd2 +E12 Queen's Indian Defense: Miles Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Bf4 +E12 Queen's Indian Defense: Petrosian Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 +E12 Queen's Indian Defense: Petrosian Variation, Farago Defense 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. a3 Ba6 5. Qc2 Bb7 +E13 Queen's Indian Defense: Kasparov Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. Nc3 Bb4 5. Bg5 h6 6. Bh4 Bb7 +E14 Queen's Indian Defense: Averbakh Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. e3 Bb7 5. Bd3 c5 6. O-O Be7 7. b3 O-O 8. Bb2 cxd4 9. Nxd4 +E14 Queen's Indian Defense: Spassky System 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. e3 +E15 Queen's Indian Defense: Buerger Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 c5 6. d5 exd5 7. Ng5 +E15 Queen's Indian Defense: Fianchetto Traditional 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 +E15 Queen's Indian Defense: Fianchetto Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 +E15 Queen's Indian Defense: Fianchetto Variation, Check Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. b3 Bb4+ +E15 Queen's Indian Defense: Fianchetto Variation, Check Variation, Intermezzo Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. b3 Bb4+ 6. Bd2 Be7 +E15 Queen's Indian Defense: Fianchetto Variation, Check Variation, Modern Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. b3 Bb4+ 6. Bd2 Qe7 +E15 Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 +E15 Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation, Nimzowitsch Attack 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. Qa4 +E15 Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation, Quiet Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. b3 +E15 Queen's Indian Defense: Fianchetto Variation, Nimzowitsch Variation, Timman's Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. Qb3 +E15 Queen's Indian Defense: Fianchetto Variation, Rubinstein Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 c5 6. d5 exd5 7. Nh4 +E15 Queen's Indian Defense: Fianchetto Variation, Sämisch Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 c5 +E16 Queen's Indian Defense: Capablanca Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Bb4+ +E16 Queen's Indian Defense: Riumin Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Bb4+ 6. Bd2 Be7 +E16 Queen's Indian Defense: Yates Variation 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Bd2 a5 5. g3 b6 6. Bg2 Bb7 +E17 Queen's Indian Defense: Anti-Queen's Indian System 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. Nc3 +E17 Queen's Indian Defense: Classical Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O +E17 Queen's Indian Defense: Classical Variation, Polugaevsky Gambit 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. d5 exd5 8. Nh4 +E17 Queen's Indian Defense: Classical Variation, Taimanov Gambit 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. d5 exd5 8. Nd4 +E17 Queen's Indian Defense: Euwe Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. b3 +E17 Queen's Indian Defense: Fianchetto Variation, Kramnik Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. Re1 +E17 Queen's Indian Defense: Opocensky Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. Nc3 Ne4 7. Bd2 +E17 Queen's Indian Defense: Traditional Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 +E18 Queen's Indian Defense: Classical Variation, Tiviakov Defense 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. Nc3 Na6 +E18 Queen's Indian Defense: Classical Variation, Traditional Variation 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. Nc3 +E18 Queen's Indian Defense: Classical Variation, Traditional Variation, Nimzowitsch Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. Nc3 d5 +E19 Queen's Indian Defense: Classical Variation, Traditional Variation, Main Line 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. Nc3 Ne4 8. Qc2 Nxc3 9. Qxc3 +E20 Nimzo-Indian Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 +E20 Nimzo-Indian Defense: Kmoch Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. f3 +E20 Nimzo-Indian Defense: Mikenas Attack 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qd3 +E20 Nimzo-Indian Defense: Romanishin Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. g3 +E20 Nimzo-Indian Defense: Romanishin Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Nf3 c5 5. g3 O-O 6. Bg2 +E20 Nimzo-Indian Defense: Romanishin Variation, English Hybrid 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Nf3 c5 5. g3 cxd4 6. Nxd4 O-O 7. Bg2 d5 8. cxd5 Nxd5 +E21 Nimzo-Indian Defense: Three Knights Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Nf3 +E21 Nimzo-Indian Defense: Three Knights Variation, Euwe Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Nf3 c5 5. d5 Ne4 +E21 Nimzo-Indian Defense: Three Knights Variation, Korchnoi Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Nf3 c5 5. d5 +E21 Nimzo-Indian Defense: Three Knights Variation, Shocron Gambit 1. d4 Nf6 2. c4 e6 3. Nf3 Bb4+ 4. Nc3 c5 5. d5 b5 +E22 Nimzo-Indian Defense: Spielmann Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qb3 +E23 Nimzo-Indian Defense: Spielmann Variation, Karlsbad Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qb3 c5 5. dxc5 Nc6 6. Nf3 Ne4 7. Bd2 Nxd2 +E23 Nimzo-Indian Defense: Spielmann Variation, Romanovsky Gambit 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qb3 c5 5. dxc5 Nc6 +E23 Nimzo-Indian Defense: Spielmann Variation, Stahlberg Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qb3 c5 5. dxc5 Nc6 6. Nf3 Ne4 7. Bd2 Nxc5 +E23 Nimzo-Indian Defense: Spielmann Variation, Stahlberg Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qb3 c5 5. dxc5 Nc6 6. Nf3 Ne4 7. Bd2 Nxc5 8. Qc2 f5 9. g3 +E24 Nimzo-Indian Defense: Sämisch Variation, Accelerated 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. a3 Bxc3+ 5. bxc3 +E24 Nimzo-Indian Defense: Sämisch Variation, Botvinnik Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. f3 d5 5. a3 Bxc3+ 6. bxc3 c5 7. e3 O-O 8. cxd5 Nxd5 +E25 Nimzo-Indian Defense: Sämisch Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. f3 d5 5. a3 Bxc3+ 6. bxc3 c5 7. cxd5 +E25 Nimzo-Indian Defense: Sämisch Variation, Keres Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. f3 d5 5. a3 Bxc3+ 6. bxc3 c5 7. cxd5 Nxd5 8. dxc5 +E25 Nimzo-Indian Defense: Sämisch Variation, Romanovsky Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. f3 d5 5. a3 Bxc3+ 6. bxc3 c5 7. cxd5 Nxd5 8. dxc5 f5 +E26 Nimzo-Indian Defense: Sämisch Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. a3 Bxc3+ 5. bxc3 c5 6. e3 +E26 Nimzo-Indian Defense: Sämisch Variation, O'Kelly Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. a3 Bxc3+ 5. bxc3 c5 6. e3 b6 +E27 Nimzo-Indian Defense: Sämisch Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. a3 Bxc3+ 5. bxc3 O-O +E28 Nimzo-Indian Defense: Sämisch Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. a3 Bxc3+ 6. bxc3 +E29 Nimzo-Indian Defense: Sämisch Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 5. Bd3 Nc6 6. a3 Bxc3+ 7. bxc3 O-O +E29 Nimzo-Indian Defense: Sämisch Variation, Capablanca Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 5. Bd3 Nc6 6. a3 Bxc3+ 7. bxc3 O-O 8. Ne2 b6 9. e4 Ne8 +E30 Nimzo-Indian Defense: Leningrad Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Bg5 +E30 Nimzo-Indian Defense: Leningrad Variation, Averbakh Gambit 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Bg5 h6 5. Bh4 c5 6. d5 b5 +E31 Nimzo-Indian Defense: Leningrad Variation, Benoni Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Bg5 h6 5. Bh4 c5 6. d5 d6 +E32 Nimzo-Indian Defense: Classical Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 +E32 Nimzo-Indian Defense: Classical Variation, Keres Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 O-O 5. a3 Bxc3+ 6. Qxc3 b6 +E32 Nimzo-Indian Defense: Classical Variation, Vitolins-Adorjan Gambit 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 O-O 5. a3 Bxc3+ 6. Qxc3 b5 +E33 Nimzo-Indian Defense: Classical Variation, Milner-Barry Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 Nc6 5. Nf3 d6 +E33 Nimzo-Indian Defense: Classical Variation, Zurich Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 Nc6 +E34 Nimzo-Indian Defense: Classical Variation, Belyavsky Gambit 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 5. cxd5 Qxd5 6. Nf3 Qf5 7. Qd1 e5 +E34 Nimzo-Indian Defense: Classical Variation, Noa Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 +E35 Nimzo-Indian Defense: Classical Variation, Noa Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 5. cxd5 exd5 +E36 Nimzo-Indian Defense: Classical Variation, Noa Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 5. a3 +E36 Nimzo-Indian Defense: Classical Variation, Noa Variation, Botvinnik Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 5. a3 Bxc3+ 6. Qxc3 Nc6 +E36 Nimzo-Indian Defense: Classical Variation, Noa Variation, Main Line 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 5. a3 Bxc3+ 6. Qxc3 Ne4 +E37 Nimzo-Indian Defense: Classical Variation, Noa Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 5. a3 Bxc3+ 6. Qxc3 Ne4 7. Qc2 +E37 Nimzo-Indian Defense: Classical Variation, Noa Variation, San Remo Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 d5 5. a3 Bxc3+ 6. Qxc3 Ne4 7. Qc2 Nc6 8. e3 e5 +E38 Nimzo-Indian Defense: Classical Variation, Berlin Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 c5 +E38 Nimzo-Indian Defense: Classical Variation, Berlin Variation, Steiner Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 c5 5. dxc5 Bxc3+ +E39 Nimzo-Indian Defense: Classical Variation, Berlin Variation, Macieja System 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 c5 5. dxc5 O-O 6. a3 Bxc5 7. Nf3 b6 8. Bf4 +E39 Nimzo-Indian Defense: Classical Variation, Berlin Variation, Pirc Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. Qc2 c5 5. dxc5 O-O +E40 Nimzo-Indian Defense: Normal Line 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 +E40 Nimzo-Indian Defense: Normal Variation, Taimanov Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 Nc6 +E41 Nimzo-Indian Defense: Hübner Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 +E41 Nimzo-Indian Defense: Hübner Variation, Main Line 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 5. Bd3 Nc6 6. Nf3 Bxc3+ 7. bxc3 d6 +E41 Nimzo-Indian Defense: Normal Variation, Hübner Deferred 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 5. Nf3 O-O +E42 Nimzo-Indian Defense: Hübner Variation, Rubinstein Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 5. Ne2 +E42 Nimzo-Indian Defense: Hübner Variation, Rubinstein Variation, Main Line 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 5. Ne2 cxd4 6. exd4 O-O 7. a3 +E42 Nimzo-Indian Defense: Hübner Variation, Rubinstein Variation, Sherbakov Attack 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 c5 5. Ne2 cxd4 6. exd4 O-O 7. c5 +E43 Nimzo-Indian Defense: St. Petersburg Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 b6 +E44 Nimzo-Indian Defense: Fischer Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 b6 5. Ne2 +E45 Nimzo-Indian Defense: Normal Variation, Bronstein (Byrne) Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 b6 5. Ne2 Ba6 +E46 Nimzo-Indian Defense: Normal Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O +E46 Nimzo-Indian Defense: Reshevsky Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Ne2 +E46 Nimzo-Indian Defense: Simagin Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Ne2 d5 6. a3 Bd6 +E47 Nimzo-Indian Defense: Normal Variation, Bishop Attack 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 +E48 Nimzo-Indian Defense: Normal Variation, Bishop Attack, Classical Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 +E48 Nimzo-Indian Defense: Ragozin Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 Nc6 7. O-O +E49 Nimzo-Indian Defense: Normal Variation, Botvinnik System 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. a3 Bxc3+ 7. bxc3 +E50 Nimzo-Indian Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Nf3 +E51 Nimzo-Indian Defense: Normal Variation, Ragozin Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Nf3 d5 +E51 Nimzo-Indian Defense: Normal Variation, Sämisch Deferred 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Nf3 d5 6. a3 +E51 Nimzo-Indian Defense: Ragozin Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 Nc6 7. O-O dxc4 +E52 Nimzo-Indian Defense: Normal Variation, Schlechter Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 b6 +E53 Nimzo-Indian Defense: Normal Variation, Gligoric System 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 +E53 Nimzo-Indian Defense: Normal Variation, Gligoric System 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O Nbd7 +E53 Nimzo-Indian Defense: Normal Variation, Gligoric System, Keres Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O b6 +E54 Nimzo-Indian Defense: Normal Variation, Gligoric System, Exchange Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O dxc4 8. Bxc4 +E54 Nimzo-Indian Defense: Normal Variation, Gligoric System, Smyslov Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O dxc4 8. Bxc4 Qe7 +E55 Nimzo-Indian Defense: Normal Variation, Gligoric System, Bronstein Variation 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O dxc4 8. Bxc4 Nbd7 +E56 Nimzo-Indian Defense: Normal Variation, Gligoric System, Bernstein Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O Nc6 +E58 Nimzo-Indian Defense: Normal Variation, Bernstein Defense, Exchange Line 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O Nc6 8. a3 Bxc3 9. bxc3 +E59 Nimzo-Indian Defense: Normal Variation, Bernstein Defense 1. d4 Nf6 2. c4 e6 3. Nc3 Bb4 4. e3 O-O 5. Bd3 d5 6. Nf3 c5 7. O-O Nc6 8. a3 Bxc3 9. bxc3 dxc4 10. Bxc4 +E60 Grünfeld Defense: Counterthrust Variation 1. d4 Nf6 2. c4 g6 3. g3 Bg7 4. Bg2 d5 +E60 Indian Defense: Anti-Grünfeld, Adorjan Gambit 1. d4 Nf6 2. c4 g6 3. d5 b5 +E60 Indian Defense: Anti-Grünfeld, Advance Variation 1. d4 Nf6 2. c4 g6 3. d5 +E60 Indian Defense: Anti-Grünfeld, Alekhine Variation 1. d4 Nf6 2. c4 g6 3. f3 +E60 Indian Defense: Anti-Grünfeld, Alekhine Variation, Leko Gambit 1. d4 Nf6 2. c4 g6 3. f3 e5 +E60 Indian Defense: Anti-Grünfeld, Basman-Williams Attack 1. d4 Nf6 2. c4 g6 3. h4 +E60 Indian Defense: King's Indian Variation, Fianchetto Variation 1. d4 Nf6 2. c4 g6 3. g3 Bg7 4. Bg2 +E60 Indian Defense: West Indian Defense 1. d4 Nf6 2. c4 g6 +E60 King's Indian Defense: Fianchetto Variation, Immediate Fianchetto 1. d4 Nf6 2. c4 g6 3. g3 +E60 King's Indian Defense: Fianchetto Variation, Pterodactyl Variation 1. d4 Nf6 2. Nf3 g6 3. c4 Bg7 4. g3 c5 5. Bg2 Qa5+ +E60 King's Indian Defense: Fianchetto Variation, Yugoslav System 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O c5 +E60 King's Indian Defense: Normal Variation, King's Knight Variation 1. d4 Nf6 2. Nf3 g6 3. c4 +E60 King's Indian Defense: Santasiere Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. b4 +E60 King's Indian Defense: Semi-Classical Variation, Benoni Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 O-O 5. e3 d6 6. Be2 c6 +E60 King's Indian Defense: Semi-Classical Variation, Hollywood Variation 1. d4 Nf6 2. Nf3 g6 3. c4 Bg7 4. Nc3 O-O 5. e3 d6 6. Be2 Nc6 +E60 Queen's Pawn, Mengarini Attack 1. d4 Nf6 2. c4 g6 3. Qc2 +E61 King's Indian Defense 1. d4 Nf6 2. c4 g6 3. Nc3 +E61 King's Indian Defense: Fianchetto Variation, Benjamin Defense 1. d4 Nf6 2. Nf3 g6 3. g3 Bg7 4. Bg2 O-O 5. O-O d6 6. c4 c6 7. Nc3 Qb6 +E61 King's Indian Defense: Semi-Classical Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 O-O 5. e3 d6 6. Be2 +E61 King's Indian Defense: Semi-Classical Variation, Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 O-O 5. e3 d6 6. Be2 Nbd7 7. O-O e5 8. dxe5 dxe5 +E61 King's Indian Defense: Semi-Classical Variation, Queenside Storm Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 O-O 5. e3 d6 6. Be2 Nbd7 7. O-O e5 8. b4 +E61 King's Indian Defense: Smyslov Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 d6 5. Bg5 +E62 King's Indian Defense: Fianchetto Variation, Delayed Fianchetto 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 d6 5. g3 +E62 King's Indian Defense: Fianchetto Variation, Karlsbad Variation 1. d4 Nf6 2. c4 g6 3. g3 Bg7 4. Bg2 O-O 5. Nc3 d6 6. Nf3 Nc6 +E62 King's Indian Defense: Fianchetto Variation, Kavalek Defense 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O c6 7. Nc3 Qa5 +E62 King's Indian Defense: Fianchetto Variation, Larsen Defense 1. d4 Nf6 2. Nf3 g6 3. c4 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O c6 7. Nc3 Bf5 +E62 King's Indian Defense: Fianchetto Variation, Lesser Simagin (Spassky) 1. d4 Nf6 2. c4 g6 3. g3 Bg7 4. Bg2 O-O 5. Nc3 d6 6. Nf3 Nc6 7. O-O Bf5 +E62 King's Indian Defense: Fianchetto Variation, Simagin Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. Nf3 d6 5. g3 O-O 6. Bg2 Nc6 7. O-O Bg4 +E62 King's Indian Defense: Fianchetto Variation, Uhlmann-Szabo System 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nc6 7. Nc3 e5 +E63 King's Indian Defense: Fianchetto Variation, Panno Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nc6 7. Nc3 a6 +E63 King's Indian Defense: Fianchetto Variation, Panno Variation, Blockade Line 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nc6 7. Nc3 a6 8. d5 Na5 9. Nd2 c5 10. Qc2 e5 +E63 King's Indian Defense: Fianchetto Variation, Panno Variation, Donner Line 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nc6 7. Nc3 a6 8. d5 Na5 9. Nd2 c5 10. Qc2 Rb8 11. b3 b5 12. Bb2 bxc4 13. bxc4 Bh6 +E63 King's Indian Defense: Fianchetto Variation, Panno Variation, Korchnoi Line 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nc6 7. Nc3 a6 8. h3 Rb8 9. Be3 b5 10. Nd2 +E64 King's Indian Defense: Fianchetto Variation, Yugoslav Variation, Rare Line 1. d4 Nf6 2. c4 g6 3. g3 Bg7 4. Bg2 O-O 5. Nc3 d6 6. Nf3 c5 +E65 King's Indian Defense: Fianchetto Variation, Yugoslav Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O c5 7. Nc3 +E65 King's Indian Defense: Fianchetto Variation, Yugoslav Variation, Exchange Line 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O c5 7. Nc3 Nc6 8. dxc5 dxc5 +E66 King's Indian Defense: Fianchetto Variation, Yugoslav Variation, Advance Line 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O c5 7. Nc3 Nc6 8. d5 +E67 King's Indian Defense: Fianchetto Variation, Classical Fianchetto 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nbd7 7. Nc3 e5 +E67 King's Indian Defense: Fianchetto Variation, Debrecen Defense 1. d4 Nf6 2. c4 g6 3. g3 Bg7 4. Bg2 O-O 5. Nc3 d6 6. Nf3 Nbd7 +E67 King's Indian Defense: Fianchetto Variation, Double Fianchetto Attack 1. d4 Nf6 2. Nf3 g6 3. g3 Bg7 4. Bg2 O-O 5. O-O d6 6. c4 Nbd7 7. Nc3 e5 8. b3 +E67 King's Indian Defense: Fianchetto Variation, Hungarian Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nbd7 7. Nc3 a6 +E68 King's Indian Defense: Fianchetto Variation, Classical Variation 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nbd7 7. Nc3 e5 8. e4 +E68 King's Indian Defense: Fianchetto Variation, Long Variation 1. d4 Nf6 2. Nf3 g6 3. c4 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nbd7 7. Nc3 e5 8. e4 exd4 9. Nxd4 Re8 10. h3 Nc5 11. Re1 a5 +E69 King's Indian Defense: Fianchetto Variation, Classical Main Line 1. d4 Nf6 2. c4 g6 3. Nf3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nbd7 7. Nc3 e5 8. e4 c6 9. h3 +E70 King's Indian Defense: Accelerated Averbakh Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Bg5 +E70 King's Indian Defense: Kramer Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nge2 +E70 King's Indian Defense: Normal Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 +E70 King's Indian Defense: Normal Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 +E71 King's Indian Defense: Makogonov Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. h3 +E72 King's Indian Defense: Normal Variation, Deferred Fianchetto 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. g3 +E72 King's Indian Defense: Pomar System 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. g3 O-O 6. Bg2 e5 7. Nge2 +E73 King's Indian Defense: Averbakh Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 +E73 King's Indian Defense: Averbakh Variation, Flexible Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 h6 +E73 King's Indian Defense: Averbakh Variation, Geller Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 Nbd7 +E73 King's Indian Defense: Averbakh Variation, Modern Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 Na6 +E73 King's Indian Defense: Averbakh Variation, Modern Defense, Burgess Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 Na6 7. Qd2 c6 +E73 King's Indian Defense: Averbakh Variation, Nc6 Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 Nc6 +E73 King's Indian Defense: Averbakh Variation, Spanish Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 a6 +E73 King's Indian Defense: Normal Variation, Standard Development 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 +E73 King's Indian Defense: Semi-Averbakh System 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Be3 +E74 King's Indian Defense: Averbakh Variation, Benoni Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 c5 +E74 King's Indian Defense: Averbakh Variation, Benoni Defense, Advance Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 c5 7. d5 +E74 King's Indian Defense: Averbakh Variation, Benoni Defense, Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 c5 7. dxc5 +E75 King's Indian Defense: Averbakh Variation, Main Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. Bg5 c5 7. d5 e6 +E76 King's Indian Defense: Four Pawns Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 +E76 King's Indian Defense: Four Pawns Attack, Dynamic Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 O-O 6. Nf3 c5 7. d5 +E76 King's Indian Defense: Four Pawns Attack, Modern Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 Na6 +E77 King's Indian Defense: Four Pawns Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Be2 O-O 6. f4 +E77 King's Indian Defense: Four Pawns Attack, Florentine Gambit 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 O-O 6. Nf3 c5 7. d5 e6 8. Be2 exd5 9. e5 +E77 King's Indian Defense: Four Pawns Attack, Normal Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 O-O 6. Nf3 c5 7. d5 e6 8. Be2 +E77 King's Indian Defense: Six Pawns Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 O-O 6. Be2 c5 7. d5 e6 8. dxe6 fxe6 9. g4 Nc6 10. h4 +E78 King's Indian Defense: Four Pawns Attack, Fluid Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 O-O 6. Nf3 c5 7. Be2 +E79 King's Indian Defense: Four Pawns Attack, Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f4 O-O 6. Nf3 c5 7. Be2 cxd4 8. Nxd4 Nc6 9. Be3 +E80 King's Indian Defense: Sämisch Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 +E81 King's Indian Defense: Steiner Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Bg5 +E81 King's Indian Defense: Sämisch Variation, Bobotsov-Korchnoi-Petrosian Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Nge2 +E81 King's Indian Defense: Sämisch Variation, Byrne Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 c6 7. Bd3 a6 +E81 King's Indian Defense: Sämisch Variation, Normal Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O +E81 King's Indian Defense: Sämisch Variation, Sämisch Gambit 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 c5 +E82 King's Indian Defense: Sämisch Variation, Double Fianchetto 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 b6 +E83 King's Indian Defense: Sämisch Variation, Panno Formation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 Nc6 7. Nge2 a6 +E83 King's Indian Defense: Sämisch Variation, Ruban Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 Nc6 7. Nge2 Rb8 +E83 King's Indian Defense: Sämisch Variation, Yates Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 Nc6 +E84 King's Indian Defense: Sämisch Variation, Panno Main Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 Nc6 7. Nge2 a6 8. Qd2 Rb8 +E85 King's Indian Defense: Sämisch Variation, Orthodox Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 e5 +E86 King's Indian Defense: Sämisch Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 e5 7. Nge2 c6 +E87 King's Indian Defense: Sämisch Variation, Bronstein Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 e5 7. d5 Nh5 8. Qd2 Qh4+ 9. g3 Nxg3 10. Qf2 Nxf1 11. Qxh4 Nxe3 12. Ke2 +E87 King's Indian Defense: Sämisch Variation, Closed Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 e5 7. d5 +E87 King's Indian Defense: Sämisch Variation, Orthodox Variation, Bronstein Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 e5 7. d5 Nh5 8. Qd2 Qh4+ 9. g3 Nxg3 10. Qf2 Nxf1 11. Qxh4 Nxe3 12. Ke2 Nxc4 +E89 King's Indian Defense: Sämisch Variation, Closed Variation, Main Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. f3 O-O 6. Be3 e5 7. Nge2 c6 8. d5 cxd5 +E90 King's Indian Defense: Larsen Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be3 +E90 King's Indian Defense: Normal Variation, Rare Defenses 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 +E90 King's Indian Defense: Zinnowitz Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Bg5 +E91 King's Indian Defense: Kazakh Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 Na6 +E91 King's Indian Defense: Orthodox Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 +E92 King's Indian Defense: Exchange Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. dxe5 +E92 King's Indian Defense: Orthodox Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 +E92 King's Indian Defense: Orthodox Variation, Gligoric-Taimanov System 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. Be3 +E92 King's Indian Defense: Petrosian Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. d5 +E92 King's Indian Defense: Petrosian Variation, Stein Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. d5 a5 +E93 King's Indian Defense: Petrosian Variation, Keres Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. d5 Nbd7 8. Bg5 h6 9. Bh4 g5 10. Bg3 Nh5 11. h4 +E93 King's Indian Defense: Petrosian Variation, Normal Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. d5 Nbd7 +E94 King's Indian Defense: Orthodox Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O +E94 King's Indian Defense: Orthodox Variation, Donner Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O c6 +E94 King's Indian Defense: Orthodox Variation, Glek Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Na6 +E94 King's Indian Defense: Orthodox Variation, Positional Defense 1. d4 Nf6 2. c4 d6 3. Nc3 Nbd7 4. e4 e5 5. Nf3 g6 6. Be2 Bg7 7. O-O O-O +E94 King's Indian Defense: Orthodox Variation, Positional Defense, Closed Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 Nbd7 7. O-O e5 8. d5 +E94 King's Indian Defense: Orthodox Variation, Ukrainian Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O a5 +E95 King's Indian Defense: Orthodox Variation 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nbd7 8. Re1 +E96 King's Indian Defense: Orthodox Variation, Positional Defense, Main Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nbd7 8. Re1 c6 9. Bf1 a5 +E97 King's Indian Defense: Orthodox Variation, Aronin-Taimanov Defense 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 +E97 King's Indian Defense: Orthodox Variation, Bayonet Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. b4 +E97 King's Indian Defense: Orthodox Variation, Bayonet Attack, Sokolov's Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. b4 Nh5 10. Re1 +E97 King's Indian Defense: Orthodox Variation, Bayonet Attack, Yepishin's Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. b4 Nh5 10. Qc2 +E97 King's Indian Defense: Orthodox Variation, Korchnoi Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. Bd2 +E97 King's Indian Defense: Orthodox Variation, Modern System 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. Nd2 +E98 King's Indian Defense: Orthodox Variation, Classical System 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. Ne1 +E98 King's Indian Defense: Orthodox Variation, Classical System, Kozul Gambit 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. Ne1 Nd7 10. Be3 f5 11. f3 f4 12. Bf2 g5 13. Rc1 Ng6 14. c5 +E98 King's Indian Defense: Orthodox Variation, Classical System, Neo-Classical Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. Ne1 Nd7 10. Be3 +E99 King's Indian Defense: Orthodox Variation, Classical System, Benko Attack 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. Ne1 Nd7 10. f3 f5 11. g4 +E99 King's Indian Defense: Orthodox Variation, Classical System, Traditional Line 1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. O-O Nc6 8. d5 Ne7 9. Ne1 Nd7 10. f3 f5 diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/CHANGELOG.md b/projectexample/openingtrainer/chessopeningtrainer/static/CHANGELOG.md new file mode 100644 index 00000000..c0c6b2fe --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/CHANGELOG.md @@ -0,0 +1,32 @@ +# chessboard.js Change Log + +All notable changes to this project will be documented in this file. + +## [1.0.0] - 2019-06-11 +- Orientation methods now return current orientation. [Issue #64] +- Drop support for IE8 +- Do not check for `window.JSON` (Error #1004) +- Rename `ChessBoard` to `Chessboard` (`ChessBoard` is still supported, however) +- id query selectors are now supported as the first argument to `Chessboard()` +- Remove Error #1002 +- Format code according to [StandardJS] +- Bump minimum jQuery version to 1.8.3 +- Throttle piece drag functions + +## [0.3.0] - 2013-08-10 +- Added `appearSpeed` animation config property +- Added `onSnapbackEnd` event +- Added `onMoveEnd` event + +## [0.2.0] - 2013-08-05 +- Added `onMouseoverSquare` and `onMouseoutSquare` events +- Added `onSnapEnd` event +- Added square code as CSS class on the squares +- Added [chess.js] integration examples + +## [0.1.0] - 2013-05-21 +- Initial release + +[chess.js]:https://github.com/jhlywa/chess.js +[Issue #64]:https://github.com/oakmac/chessboardjs/issues/64 +[StandardJS]:https://standardjs.com/ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/LICENSE.md b/projectexample/openingtrainer/chessopeningtrainer/static/LICENSE.md new file mode 100644 index 00000000..20b7d615 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/LICENSE.md @@ -0,0 +1,20 @@ +Copyright 2019 Chris Oakman + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/README.md b/projectexample/openingtrainer/chessopeningtrainer/static/README.md new file mode 100644 index 00000000..60c8997e --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/README.md @@ -0,0 +1,82 @@ +# chessboard.js + +chessboard.js is a JavaScript chessboard component. It depends on [jQuery]. + +Please see [chessboardjs.com] for documentation and examples. + +## What is chessboard.js? + +chessboard.js is a JavaScript chessboard component with a flexible "just a +board" API that + +chessboard.js is a standalone JavaScript Chess Board. It is designed to be "just +a board" and expose a powerful API so that it can be used in different ways. +Here's a non-exhaustive list of things you can do with chessboard.js: + +- Use chessboard.js to show game positions alongside your expert commentary. +- Use chessboard.js to have a tactics website where users have to guess the best + move. +- Integrate chessboard.js and [chess.js] with a PGN database and allow people to + search and playback games (see [Example 5000]) +- Build a chess server and have users play their games out using the + chessboard.js board. + +chessboard.js is flexible enough to handle any of these situations with relative +ease. + +## What can chessboard.js **not** do? + +The scope of chessboard.js is limited to "just a board." This is intentional and +makes chessboard.js flexible for handling a multitude of chess-related problems. + +This is a common source of confusion for new users. [remove?] + +Specifically, chessboard.js does not understand anything about how the game of +chess is played: how a knight moves, who's turn is it, is White in check?, etc. + +Fortunately, the powerful [chess.js] library deals with exactly this sort of +problem domain and plays nicely with chessboard.js's flexible API. Some examples +of chessboard.js combined with chess.js: 5000, 5001, 5002 + +Please see the powerful [chess.js] library for an API to deal with these sorts +of questions. + + +This logic is distinct from the logic of the board. Please see the powerful +[chess.js] library for this aspect of your application. + + + +Here is a list of things that chessboard.js is **not**: + +- A chess engine +- A legal move validator +- A PGN parser + +chessboard.js is designed to work well with any of those things, but the idea +behind chessboard.js is that the logic that controls the board should be +independent of those other problems. + +## Docs and Examples + +- Docs - +- Examples - + +## Developer Tools + +```sh +# create a build in the build/ directory +npm run build + +# re-build the website +npm run website +``` + +## License + +[MIT License](LICENSE.md) + +[jQuery]:https://jquery.com/ +[chessboardjs.com]:http://chessboardjs.com +[chess.js]:https://github.com/jhlywa/chess.js +[Example 5000]:http://chessboardjs.com/examples#5000 diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/css/chessboard-1.0.0.css b/projectexample/openingtrainer/chessopeningtrainer/static/css/chessboard-1.0.0.css new file mode 100644 index 00000000..507b6f13 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/css/chessboard-1.0.0.css @@ -0,0 +1,54 @@ +/*! chessboard.js v1.0.0 | (c) 2019 Chris Oakman | MIT License chessboardjs.com/license */ + +.clearfix-7da63 { + clear: both; +} + +.board-b72b1 { + border: 2px solid #404040; + box-sizing: content-box; +} + +.square-55d63 { + float: left; + position: relative; + + /* disable any native browser highlighting */ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.white-1e1d7 { + background-color: #f0d9b5; + color: #b58863; +} + +.black-3c85d { + background-color: #b58863; + color: #f0d9b5; +} + +.highlight1-32417, .highlight2-9c5d2 { + box-shadow: inset 0 0 3px 3px yellow; +} + +.notation-322f9 { + cursor: default; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + position: absolute; +} + +.alpha-d2270 { + bottom: 1px; + right: 3px; +} + +.numeric-fc462 { + top: 2px; + left: 2px; +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/css/chessboard-1.0.0.min.css b/projectexample/openingtrainer/chessopeningtrainer/static/css/chessboard-1.0.0.min.css new file mode 100644 index 00000000..73f844a8 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/css/chessboard-1.0.0.min.css @@ -0,0 +1,2 @@ +/*! chessboard.js v1.0.0 | (c) 2019 Chris Oakman | MIT License chessboardjs.com/license */ +.clearfix-7da63{clear:both}.board-b72b1{border:2px solid #404040;box-sizing:content-box}.square-55d63{float:left;position:relative;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.white-1e1d7{background-color:#f0d9b5;color:#b58863}.black-3c85d{background-color:#b58863;color:#f0d9b5}.highlight1-32417,.highlight2-9c5d2{box-shadow:inset 0 0 3px 3px #ff0}.notation-322f9{cursor:default;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;position:absolute}.alpha-d2270{bottom:1px;right:3px}.numeric-fc462{top:2px;left:2px} \ No newline at end of file diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/css/main.css b/projectexample/openingtrainer/chessopeningtrainer/static/css/main.css new file mode 100644 index 00000000..66e4b299 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/css/main.css @@ -0,0 +1,49 @@ + .openinglist { + list-style: none; + padding: 0; + margin: 0; + border-collapse: collapse; + border: 2px solid black; + text-align: left; + } + + .openinglist li { + margin-bottom: 10px; + } + + + .openinglist li span { + display: table-cell; + padding: 5px; + border-left: 1px solid black; + } + + .searchfilter { + width: 100%; /* Full-width */ + font-size: 16px; /* Increase font-size */ + padding: 12px 20px 12px 40px; /* Add some padding */ + border: 1px solid #ddd; /* Add a grey border */ + margin-bottom: 12px; /* Add some space below the input */ + } + + #reset { + background-color: #4CAF50; /* Green */ + border: none; + color: white; + padding: 15px 32px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + } + + #undo { + background-color: #4CAF50; /* Green */ + border: none; + color: white; + padding: 15px 32px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + } \ No newline at end of file diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bB.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bB.png new file mode 100644 index 00000000..be3007dd Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bB.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bK.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bK.png new file mode 100644 index 00000000..de9880ce Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bK.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bN.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bN.png new file mode 100644 index 00000000..e31a6d02 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bN.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bP.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bP.png new file mode 100644 index 00000000..afa0c9d4 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bP.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bQ.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bQ.png new file mode 100644 index 00000000..4649bb8b Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bQ.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bR.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bR.png new file mode 100644 index 00000000..c7eb127a Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/bR.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wB.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wB.png new file mode 100644 index 00000000..70e0e140 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wB.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wK.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wK.png new file mode 100644 index 00000000..bbf56649 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wK.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wN.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wN.png new file mode 100644 index 00000000..237250c1 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wN.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wP.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wP.png new file mode 100644 index 00000000..5f9315c7 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wP.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wQ.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wQ.png new file mode 100644 index 00000000..c3dfc15e Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wQ.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wR.png b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wR.png new file mode 100644 index 00000000..cc697603 Binary files /dev/null and b/projectexample/openingtrainer/chessopeningtrainer/static/img/chesspieces/wikipedia/wR.png differ diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.eslintrc.cjs b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.eslintrc.cjs new file mode 100644 index 00000000..c5db25fc --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.eslintrc.cjs @@ -0,0 +1,32 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint'], + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], + + rules: { + // allow while(true) loops + 'no-constant-condition': ['error', { checkLoops: false }], + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: ['default'], + format: ['strictCamelCase'], + leadingUnderscore: 'allow', + }, + { + selector: ['variable'], + format: ['strictCamelCase', 'UPPER_CASE'], + }, + { + selector: ['objectLiteralProperty'], + format: ['strictCamelCase', 'UPPER_CASE'], + }, + { + selector: ['typeLike'], + format: ['PascalCase'], + }, + ], + 'multiline-comment-style': ['error', 'starred-block'] + }, +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.prettierignore b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.prettierignore new file mode 100644 index 00000000..af52f192 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.prettierignore @@ -0,0 +1,2 @@ +coverage/ +package-lock.json diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.prettierrc b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.prettierrc new file mode 100644 index 00000000..16be68d1 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/.prettierrc @@ -0,0 +1,21 @@ +{ + "semi": false, + "singleQuote": true, + "overrides": [ + { + "files": "**/*.md", + "options": { + "parser": "markdown", + "printWidth": 80, + "proseWrap": "always" + } + }, + { + "files": "**/*.json", + "options": { + "parser": "json", + "tabWidth": 2 + } + } + ] +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/LICENSE b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/LICENSE new file mode 100644 index 00000000..ea8033d4 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2023, Jeff Hlywa (jhlywa@gmail.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/README.md b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/README.md new file mode 100644 index 00000000..9a546e5e --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/README.md @@ -0,0 +1,850 @@ +# chess.js + +![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/jhlywa/chess.js/node.js.yml) +![npm](https://img.shields.io/npm/v/chess.js?color=blue) +![npm](https://img.shields.io/npm/dm/chess.js) + +chess.js is a TypeScript chess library used for chess move +generation/validation, piece placement/movement, and check/checkmate/stalemate +detection - basically everything but the AI. + +chess.js has been extensively tested in node.js and most modern browsers. + +## Installation + +Run the following command to install the most recent version of chess.js from +NPM: + +```sh +npm install chess.js +``` + +## Example Code + +The code below plays a random game of chess: + +```ts +import { Chess } from 'chess.js' + +const chess = new Chess() + +while (!chess.isGameOver()) { + const moves = chess.moves() + const move = moves[Math.floor(Math.random() * moves.length)] + chess.move(move) +} +console.log(chess.pgn()) +``` + +## User Interface + +By design chess.js is a headless library and does not include user interface +elements. Many developers have successfully integrated chess.js with the +[chessboard.js](http://chessboardjs.com) library. See +[chessboard.js - Random vs Random](http://chessboardjs.com/examples#5002) for an +example. + +## Move & PGN Parsers + +This library includes two parsers (`permissive` and `strict`) which are used to +parse different forms of chess move notation. The `permissive` parser (the +default) is able to handle many derivates of algebraic notation (e.g. `Nf3`, +`g1f3`, `g1-f3`, `Ng1f3`, `Ng1-f3`, `Ng1xf3`). The `strict` parser only accepts +moves in Standard Algebraic Notation and requires that they strictly adhere to +the specification. The `strict` parser runs slightly faster but is much less +forgiving of non-standard notation. + +## API + +### Constructor: Chess([ fen ]) + +The Chess() constructor takes an optional parameter which specifies the board +configuration in +[Forsyth-Edwards Notation (FEN)](http://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation). +Throws an exception if an invalid FEN string is provided. + +```ts +// board defaults to the starting position when called with no parameters +const chess = new Chess() + +// pass in a FEN string to load a particular position +const chess = new Chess( + 'r1k4r/p2nb1p1/2b4p/1p1n1p2/2PP4/3Q1NB1/1P3PPP/R5K1 b - - 0 19' +) +``` + +### .ascii() + +Returns a string containing an ASCII diagram of the current position. + +```ts +const chess = new Chess() + +// make some moves +chess.move('e4') +chess.move('e5') +chess.move('f4') + +chess.ascii() +// -> ' +------------------------+ +// 8 | r n b q k b n r | +// 7 | p p p p . p p p | +// 6 | . . . . . . . . | +// 5 | . . . . p . . . | +// 4 | . . . . P P . . | +// 3 | . . . . . . . . | +// 2 | P P P P . . P P | +// 1 | R N B Q K B N R | +// +------------------------+ +// a b c d e f g h' +``` + +### .board() + +Returns an 2D array representation of the current position. Empty squares are +represented by `null`. + +```ts +const chess = new Chess() + +chess.board() +// -> [[{square: 'a8', type: 'r', color: 'b'}, + {square: 'b8', type: 'n', color: 'b'}, + {square: 'c8', type: 'b', color: 'b'}, + {square: 'd8', type: 'q', color: 'b'}, + {square: 'e8', type: 'k', color: 'b'}, + {square: 'f8', type: 'b', color: 'b'}, + {square: 'g8', type: 'n', color: 'b'}, + {square: 'h8', type: 'r', color: 'b'}], + [...], + [...], + [...], + [...], + [...], + [{square: 'a1', type: 'r', color: 'w'}, + {square: 'b1', type: 'n', color: 'w'}, + {square: 'c1', type: 'b', color: 'w'}, + {square: 'd1', type: 'q', color: 'w'}, + {square: 'e1', type: 'k', color: 'w'}, + {square: 'f1', type: 'b', color: 'w'}, + {square: 'g1', type: 'n', color: 'w'}, + {square: 'h1', type: 'r', color: 'w'}]] +``` + +### .clear() + +Clears the board. + +```ts +chess.clear() +chess.fen() +// -> '8/8/8/8/8/8/8/8 w - - 0 1' <- empty board +``` + +### .deleteComment() + +Delete and return the comment for the current position, if it exists. + +```ts +const chess = new Chess() + +chess.loadPgn('1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 {giuoco piano} *') + +chess.getComment() +// -> "giuoco piano" + +chess.deleteComment() +// -> "giuoco piano" + +chess.getComment() +// -> undefined +``` + +### .deleteComments() + +Delete and return comments for all positions. + +```ts +const chess = new Chess() + +chess.loadPgn( + "1. e4 e5 {king's pawn opening} 2. Nf3 Nc6 3. Bc4 Bc5 {giuoco piano} *" +) + +chess.deleteComments() +// -> [ +// { +// fen: "rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2", +// comment: "king's pawn opening" +// }, +// { +// fen: "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3", +// comment: "giuoco piano" +// } +// ] + +chess.getComments() +// -> [] +``` + +### .fen() + +Returns the FEN string for the current position. Note, the en passant square is +only included if the side-to-move can legally capture en passant. + +```ts +const chess = new Chess() + +// make some moves +chess.move('e4') +chess.move('e5') +chess.move('f4') + +chess.fen() +// -> 'rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2' +``` + +### .get(square) + +Returns the piece on the square: + +```ts +chess.clear() +chess.put({ type: chess.PAWN, color: chess.BLACK }, 'a5') // put a black pawn on a5 + +chess.get('a5') +// -> { type: 'p', color: 'b' }, +chess.get('a6') +// -> null +``` + +### .getComment() + +Retrieve the comment for the current position, if it exists. + +```ts +const chess = new Chess() + +chess.loadPgn('1. e4 e5 2. Nf3 Nc6 3. Bc4 Bc5 {giuoco piano} *') + +chess.getComment() +// -> "giuoco piano" +``` + +### .getComments() + +Retrieve comments for all positions. + +```ts +const chess = new Chess() + +chess.loadPgn( + "1. e4 e5 {king's pawn opening} 2. Nf3 Nc6 3. Bc4 Bc5 {giuoco piano} *" +) + +chess.getComments() +// -> [ +// { +// fen: "rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2", +// comment: "king's pawn opening" +// }, +// { +// fen: "r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3", +// comment: "giuoco piano" +// } +// ] +``` + +### .header() + +Allows header information to be added to PGN output. Any number of key/value +pairs can be passed to .header(). + +```ts +chess.header('White', 'Robert James Fischer') +chess.header('Black', 'Mikhail Tal') + +// or + +chess.header('White', 'Morphy', 'Black', 'Anderssen', 'Date', '1858-??-??') +``` + +Calling .header() without any arguments returns the header information as an +object. + +```ts +chess.header() +// -> { White: 'Morphy', Black: 'Anderssen', Date: '1858-??-??' } +``` + +### .history([ options ]) + +Returns a list containing the moves of the current game. Options is an optional +parameter which may contain a 'verbose' flag. See .moves() for a description of +the verbose move fields. A FEN string of the position _prior_ to the move being +made is added to the verbose history output. + +```ts +const chess = new Chess() +chess.move('e4') +chess.move('e5') +chess.move('f4') +chess.move('exf4') + +chess.history() +// -> ['e4', 'e5', 'f4', 'exf4'] + +chess.history({ verbose: true }) +// --> +// [ +// { +// before: 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1', +// after: 'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1', +// color: 'w', +// piece: 'p', +// from: 'e2', +// to: 'e4', +// san: 'e4', +// lan: 'e2e4', +// flags: 'b' +// }, +// { +// before: 'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1', +// after: 'rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2', +// color: 'b', +// piece: 'p', +// from: 'e7', +// to: 'e5', +// san: 'e5', +// lan: 'e7e5', +// flags: 'b' +// }, +// { +// before: 'rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2', +// after: 'rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2', +// color: 'w', +// piece: 'p', +// from: 'f2', +// to: 'f4', +// san: 'f4', +// lan: 'f2f4', +// flags: 'b' +// }, +// { +// before: 'rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2', +// after: 'rnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3', +// color: 'b', +// piece: 'p', +// from: 'e5', +// to: 'f4', +// san: 'exf4', +// lan: 'e5f4', +// flags: 'c', +// captured: 'p' +// } +// ] +``` + +### .inCheck() + +Returns true or false if the side to move is in check. + +```ts +const chess = new Chess( + 'rnb1kbnr/pppp1ppp/8/4p3/5PPq/8/PPPPP2P/RNBQKBNR w KQkq - 1 3' +) +chess.inCheck() +// -> true +``` + +### .isAttacked(square, color) + +Returns true if the square is attacked by any piece of the given color. + +```ts +const chess = new Chess() +chess.isAttacked('f3', Chess.WHITE) +// -> true (we can attack empty squares) + +chess.isAttacked('f6', Chess.BLACK) +// -> true (side to move (e.g. the value returned by .turn) is ignored) + +chess.load(Chess.DEFAULT_POSITION) +chess.isAttacked('e2', Chess.WHITE) +// -> true (we can attack our own pieces) + +chess.load('4k3/4n3/8/8/8/8/4R3/4K3 w - - 0 1') +chess.isAttacked('c6', Chess.BLACK) +// -> true (pieces still attack a square if even they are pinned) +``` + +### .isCheckmate() + +Returns true or false if the side to move has been checkmated. + +```ts +const chess = new Chess( + 'rnb1kbnr/pppp1ppp/8/4p3/5PPq/8/PPPPP2P/RNBQKBNR w KQkq - 1 3' +) +chess.isCheckmate() +// -> true +``` + +### .isDraw() + +Returns true or false if the game is drawn (50-move rule or insufficient +material). + +```ts +const chess = new Chess('4k3/4P3/4K3/8/8/8/8/8 b - - 0 78') +chess.isDraw() +// -> true +``` + +### .isInsufficientMaterial() + +Returns true if the game is drawn due to insufficient material (K vs. K, K vs. +KB, or K vs. KN) otherwise false. + +```ts +const chess = new Chess('k7/8/n7/8/8/8/8/7K b - - 0 1') +chess.isInsufficientMaterial() +// -> true +``` + +### .isGameOver() + +Returns true if the game has ended via checkmate, stalemate, draw, threefold +repetition, or insufficient material. Otherwise, returns false. + +```ts +const chess = new Chess() +chess.isGameOver() +// -> false + +// stalemate +chess.load('4k3/4P3/4K3/8/8/8/8/8 b - - 0 78') +chess.isGameOver() +// -> true + +// checkmate +chess.load('rnb1kbnr/pppp1ppp/8/4p3/5PPq/8/PPPPP2P/RNBQKBNR w KQkq - 1 3') +chess.isGameOver() +// -> true +``` + +### .isStalemate() + +Returns true or false if the side to move has been stalemated. + +```ts +const chess = new Chess('4k3/4P3/4K3/8/8/8/8/8 b - - 0 78') +chess.isStalemate() +// -> true +``` + +### .isThreefoldRepetition() + +Returns true or false if the current board position has occurred three or more +times. + +```ts +const chess = new Chess('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1') +// -> true +// rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq occurs 1st time +chess.isThreefoldRepetition() +// -> false + +chess.move('Nf3') chess.move('Nf6') chess.move('Ng1') chess.move('Ng8') +// rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq occurs 2nd time +chess.isThreefoldRepetition() +// -> false + +chess.move('Nf3') chess.move('Nf6') chess.move('Ng1') chess.move('Ng8') +// rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq occurs 3rd time +chess.isThreefoldRepetition() +// -> true +``` + +### .load(fen) + +Clears the board and loads the provided FEN string. The castling rights, en +passant square and move numbers are defaulted to `- - 0 1` if ommitted. Throws +an exception if the FEN is invalid. + +```ts +const chess = new Chess() +chess.load('4r3/8/2p2PPk/1p6/pP2p1R1/P1B5/2P2K2/3r4 w - - 1 45') + +try { + chess.load('4r3/8/X12XPk/1p6/pP2p1R1/P1B5/2P2K2/3r4 w - - 1 45') +} catch (e) { + console.log(e) +} +// -> Error: Invalid FEN: piece data is invalid (invalid piece) +``` + +### .loadPgn(pgn, [ options ]) + +Load the moves of a game stored in +[Portable Game Notation](http://en.wikipedia.org/wiki/Portable_Game_Notation). +`pgn` should be a string. Options is an optional object which may contain a +string `newlineChar` and a boolean `strict`. + +The `newlineChar` is a string representation of a valid RegExp fragment and is +used to process the PGN. It defaults to `\r?\n`. Special characters should not +be pre-escaped, but any literal special characters should be escaped as is +normal for a RegExp. Keep in mind that backslashes in JavaScript strings must +themselves be escaped (see `sloppyPgn` example below). Avoid using a +`newlineChar` that may occur elsewhere in a PGN, such as `.` or `x`, as this +will result in unexpected behavior. + +The `strict` flag is a boolean (default: `false`) that instructs chess.js to +only parse moves in Standard Algebraic Notation form. See `.move` documentation +for more information about non-SAN notations. + +The method will throw and exception if the PGN fails to parse. + +```ts +const chess = new Chess() +const pgn = [ + '[Event "Casual Game"]', + '[Site "Berlin GER"]', + '[Date "1852.??.??"]', + '[EventDate "?"]', + '[Round "?"]', + '[Result "1-0"]', + '[White "Adolf Anderssen"]', + '[Black "Jean Dufresne"]', + '[ECO "C52"]', + '[WhiteElo "?"]', + '[BlackElo "?"]', + '[PlyCount "47"]', + '', + '1.e4 e5 2.Nf3 Nc6 3.Bc4 Bc5 4.b4 Bxb4 5.c3 Ba5 6.d4 exd4 7.O-O', + 'd3 8.Qb3 Qf6 9.e5 Qg6 10.Re1 Nge7 11.Ba3 b5 12.Qxb5 Rb8 13.Qa4', + 'Bb6 14.Nbd2 Bb7 15.Ne4 Qf5 16.Bxd3 Qh5 17.Nf6+ gxf6 18.exf6', + 'Rg8 19.Rad1 Qxf3 20.Rxe7+ Nxe7 21.Qxd7+ Kxd7 22.Bf5+ Ke8', + '23.Bd7+ Kf8 24.Bxe7# 1-0', +] + +chess.loadPgn(pgn.join('\n')) + +chess.ascii() +// -> ' +------------------------+ +// 8 | . r . . . k r . | +// 7 | p b p B B p . p | +// 6 | . b . . . P . . | +// 5 | . . . . . . . . | +// 4 | . . . . . . . . | +// 3 | . . P . . q . . | +// 2 | P . . . . P P P | +// 1 | . . . R . . K . | +// +------------------------+ +// a b c d e f g h' + +// Parse non-standard move formats and unusual line separators +const sloppyPgn = [ + '[Event "Wijk aan Zee (Netherlands)"]', + '[Date "1971.01.26"]', + '[Result "1-0"]', + '[White "Tigran Vartanovich Petrosian"]', + '[Black "Hans Ree"]', + '[ECO "A29"]', + '', + '1. Pc2c4 Pe7e5', // non-standard + '2. Nc3 Nf6', + '3. Nf3 Nc6', + '4. g2g3 Bb4', // non-standard + '5. Nd5 Nxd5', + '6. c4xd5 e5-e4', // non-standard + '7. dxc6 exf3', + '8. Qb3 1-0', +].join(':') + +chess.loadPgn(sloppyPgn, { newlineChar: ':' }) +// works by default + +chess.loadPgn(sloppyPgn, { newlineChar: ':', strict: true }) +// Error: Invalid move in PGN: Pc2c4 +``` + +### .move(move, [ options ]) + +Makes a move on the board and returns a move object if the move was legal. The +move argument can be either a string in Standard Algebraic Notation (SAN) or a +move object. Throws an 'Illegal move' exception if the move was illegal. + +#### .move() - Standard Algebraic Notation (SAN) + +```ts +const chess = new Chess() + +chess.move('e4') +// -> { color: 'w', from: 'e2', to: 'e4', flags: 'b', piece: 'p', san: 'e4' } + +chess.move('nf6') // SAN is case sensitive!! +// Error: Invalid move: nf6 + +chess.move('Nf6') +// -> { color: 'b', from: 'g8', to: 'f6', flags: 'n', piece: 'n', san: 'Nf6' } +``` + +#### .move() - Object Notation + +A move object contains `to`, `from` and, `promotion` (only when necessary) +fields. + +```ts +const chess = new Chess() + +chess.move({ from: 'g2', to: 'g3' }) +// -> { color: 'w', from: 'g2', to: 'g3', flags: 'n', piece: 'p', san: 'g3' } +``` + +#### .move() - Permissive Parser + +The permissive (default) move parser can be used to parse a variety of +non-standard move notations. Users may specify an `{ strict: true }` flag to +verify that all supplied moves adhere to the Standard Algebraic Notation +specification. + +```ts +const chess = new Chess() + +// permissive parser accepts various forms of algebraic notation +chess.move('e2e4') +chess.move('e7-e5') +chess.move('Pf2-f4') +chess.move('ef4') // missing 'x' in capture +chess.move('Ng1-f3') +chess.move('d7xd6') // ignore 'x' when not a capture +chess.move('d4') + +// correctly parses incorrectly disambiguated moves +chess.load('r2qkbnr/ppp2ppp/2n5/1B2pQ2/4P3/8/PPP2PPP/RNB1K2R b KQkq - 3 7') + +chess.move('Nge7') // Ne7 is unambiguous because the knight on c6 is pinned +chess.undo() +chess.move('Nge7', { strict: true }) // strict SAN requires Ne7 +// Error: Invalid move: Nge7 +``` + +### .moves({ piece?: Piece, square?: Square, verbose?: Boolean }?) + +Returns a list of legal moves from the current position. This function takes an +optional object which can be used to generate detailed move objects or to +restrict the move generator to specific squares or pieces. + +```ts +const chess = new Chess() +chess.moves() +// -> ['a3', 'a4', 'b3', 'b4', 'c3', 'c4', 'd3', 'd4', 'e3', 'e4', +// 'f3', 'f4', 'g3', 'g4', 'h3', 'h4', 'Na3', 'Nc3', 'Nf3', 'Nh3'] + +chess.moves({ square: 'e2' }) // single square move generation +// -> ['e3', 'e4'] + +chess.moves({ piece: 'n' }) // generate moves for piece type +// ['Na3', 'Nc3', 'Nf3', 'Nh3'] + +chess.moves({ verbose: true }) // return verbose moves +// -> [{ color: 'w', from: 'a2', to: 'a3', +// flags: 'n', piece: 'p', +// san 'a3', 'lan', 'a2a3', +// before: 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1' +// after: 'rnbqkbnr/pppppppp/8/8/8/P7/1PPPPPPP/RNBQKBNR b KQkq - 0 1' +// # a `captured` field is included when the move is a capture +// # a `promotion` field is included when the move is a promotion +// }, +// ... +// ] +``` + +#### Move Objects (e.g. when { verbose: true }) + +The `color` field indicates the color of the moving piece (`w` or `b`). + +The `from` and `to` fields are from and to squares in algebraic notation. + +The `piece`, `captured`, and `promotion` fields contain the lowercase +representation of the applicable piece (`pnbrqk`). The `captured` and +`promotion` fields are only present when the move is a valid capture or +promotion. + +The `san` field is the move in Standard Algebraic Notation (SAN). The `lan` +field is the move in Long Algebraic Notation (LAN). + +The `before` and `after` keys contain the FEN of the position before and after +the move. + +The `flags` field contains one or more of the string values: + +- `n` - a non-capture +- `b` - a pawn push of two squares +- `e` - an en passant capture +- `c` - a standard capture +- `p` - a promotion +- `k` - kingside castling +- `q` - queenside castling + +A `flags` value of `pc` would mean that a pawn captured a piece on the 8th rank +and promoted. + +### .pgn([ options ]) + +Returns the game in PGN format. Options is an optional parameter which may +include max width and/or a newline character settings. + +```ts +const chess = new Chess() +chess.header('White', 'Plunky', 'Black', 'Plinkie') +chess.move('e4') +chess.move('e5') +chess.move('Nc3') +chess.move('Nc6') + +chess.pgn({ maxWidth: 5, newline: '
' }) +// -> '[White "Plunky"]
[Black "Plinkie"]

1. e4 e5
2. Nc3 Nc6' +``` + +### .put(piece, square) + +Place a piece on the square where piece is an object with the form { type: ..., +color: ... }. Returns true if the piece was successfully placed, otherwise, the +board remains unchanged and false is returned. `put()` will fail when passed an +invalid piece or square, or when two or more kings of the same color are placed. + +```ts +chess.clear() + +chess.put({ type: chess.PAWN, color: chess.BLACK }, 'a5') // put a black pawn on a5 +// -> true +chess.put({ type: 'k', color: 'w' }, 'h1') // shorthand +// -> true + +chess.fen() +// -> '8/8/8/p7/8/8/8/7K w - - 0 0' + +chess.put({ type: 'z', color: 'w' }, 'a1') // invalid piece +// -> false + +chess.clear() + +chess.put({ type: 'k', color: 'w' }, 'a1') +// -> true + +chess.put({ type: 'k', color: 'w' }, 'h1') // fail - two kings +// -> false +``` + +### .remove(square) + +Remove and return the piece on _square_. + +```ts +chess.clear() +chess.put({ type: chess.PAWN, color: chess.BLACK }, 'a5') // put a black pawn on a5 +chess.put({ type: chess.KING, color: chess.WHITE }, 'h1') // put a white king on h1 + +chess.remove('a5') +// -> { type: 'p', color: 'b' }, +chess.remove('h1') +// -> { type: 'k', color: 'w' }, +chess.remove('e1') +// -> null +``` + +### .reset() + +Reset the board to the initial starting position. + +### .setComment(comment) + +Comment on the current position. + +```ts +const chess = new Chess() + +chess.move('e4') +chess.setComment("king's pawn opening") + +chess.pgn() +// -> "1. e4 {king's pawn opening}" +``` + +### .squareColor(square) + +Returns the color of the square ('light' or 'dark'). + +```ts +const chess = Chess() +chess.squareColor('h1') +// -> 'light' +chess.squareColor('a7') +// -> 'dark' +chess.squareColor('bogus square') +// -> null +``` + +### .turn() + +Returns the current side to move. + +```ts +chess.load('rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1') +chess.turn() +// -> 'b' +``` + +### .undo() + +Takeback the last half-move, returning a move object if successful, otherwise +null. + +```ts +const chess = new Chess() + +chess.fen() +// -> 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1' +chess.move('e4') +chess.fen() +// -> 'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1' + +chess.undo() +// { +// color: 'w', +// piece: 'p', +// from: 'e2', +// to: 'e4', +// san: 'e4', +// flags: 'b', +// lan: 'e2e4', +// before: 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1', +// after: 'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1' +// } + +chess.fen() +// -> 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1' +chess.undo() +// -> null +``` + +### .validateFen(fen): + +Returns a validation object specifying validity or the errors found within the +FEN string. + +```ts +chess.validateFen('2n1r3/p1k2pp1/B1p3b1/P7/5bP1/2N1B3/1P2KP2/2R5 b - - 4 25') +// -> { ok: true } + +chess.validateFen('4r3/8/X12XPk/1p6/pP2p1R1/P1B5/2P2K2/3r4 w - - 1 45') +// -> { ok: false, +// error: '1st field (piece positions) is invalid [invalid piece].' } +``` + +## BUGS + +- The en passant square and castling flags aren't adjusted when using the + put/remove functions (workaround: use .load() instead) diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/jest.config.cjs b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/jest.config.cjs new file mode 100644 index 00000000..9b49078d --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/jest.config.cjs @@ -0,0 +1,7 @@ +/** @type {import('@ts-jest/dist/types').InitialOptionsTsJest} */ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + setupFilesAfterEnv: ['jest-extended/all'], + testRegex: '/__tests__/.*(\\.|/)(test|spec)\\.[jt]sx?$', +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/package.json b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/package.json new file mode 100644 index 00000000..3eabb354 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/package.json @@ -0,0 +1,29 @@ +{ + "name": "chess.js", + "version": "1.0.0-beta.5", + "license": "BSD-2-Clause", + "main": "dist/chess.js", + "types": "dist/chess.d.ts", + "homepage": "https://github.com/jhlywa/chess.js", + "author": "Jeff Hlywa ", + "scripts": { + "test": "jest", + "lint": "eslint src/ --ext .ts", + "build": "tsc --build", + "clean": "tsc --build --clean" + }, + "repository": { + "type": "git", + "url": "https://github.com/jhlywa/chess.js" + }, + "devDependencies": { + "@types/jest": "^27.4.1", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "jest": "^27.0.6", + "jest-extended": "^2.0.0", + "ts-jest": "^27.0.4", + "typescript": "^4.6.3" + } +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/src/chess.ts b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/src/chess.ts new file mode 100644 index 00000000..0521b98b --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/src/chess.ts @@ -0,0 +1,2236 @@ +/** + * @license + * Copyright (c) 2023, Jeff Hlywa (jhlywa@gmail.com) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +export const WHITE = 'w' +export const BLACK = 'b' + +export const PAWN = 'p' +export const KNIGHT = 'n' +export const BISHOP = 'b' +export const ROOK = 'r' +export const QUEEN = 'q' +export const KING = 'k' + +export type Color = 'w' | 'b' +export type PieceSymbol = 'p' | 'n' | 'b' | 'r' | 'q' | 'k' + +// prettier-ignore +export type Square = + 'a8' | 'b8' | 'c8' | 'd8' | 'e8' | 'f8' | 'g8' | 'h8' | + 'a7' | 'b7' | 'c7' | 'd7' | 'e7' | 'f7' | 'g7' | 'h7' | + 'a6' | 'b6' | 'c6' | 'd6' | 'e6' | 'f6' | 'g6' | 'h6' | + 'a5' | 'b5' | 'c5' | 'd5' | 'e5' | 'f5' | 'g5' | 'h5' | + 'a4' | 'b4' | 'c4' | 'd4' | 'e4' | 'f4' | 'g4' | 'h4' | + 'a3' | 'b3' | 'c3' | 'd3' | 'e3' | 'f3' | 'g3' | 'h3' | + 'a2' | 'b2' | 'c2' | 'd2' | 'e2' | 'f2' | 'g2' | 'h2' | + 'a1' | 'b1' | 'c1' | 'd1' | 'e1' | 'f1' | 'g1' | 'h1' + +export const DEFAULT_POSITION = + 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1' + +export type Piece = { + color: Color + type: PieceSymbol +} + +type InternalMove = { + color: Color + from: number + to: number + piece: PieceSymbol + captured?: PieceSymbol + promotion?: PieceSymbol + flags: number +} + +interface History { + move: InternalMove + kings: Record + turn: Color + castling: Record + epSquare: number + halfMoves: number + moveNumber: number +} + +export type Move = { + color: Color + from: Square + to: Square + piece: PieceSymbol + captured?: PieceSymbol + promotion?: PieceSymbol + flags: string + san: string + lan: string + before: string + after: string +} + +const EMPTY = -1 + +const FLAGS: Record = { + NORMAL: 'n', + CAPTURE: 'c', + BIG_PAWN: 'b', + EP_CAPTURE: 'e', + PROMOTION: 'p', + KSIDE_CASTLE: 'k', + QSIDE_CASTLE: 'q', +} + +// prettier-ignore +export const SQUARES: Square[] = [ + 'a8', 'b8', 'c8', 'd8', 'e8', 'f8', 'g8', 'h8', + 'a7', 'b7', 'c7', 'd7', 'e7', 'f7', 'g7', 'h7', + 'a6', 'b6', 'c6', 'd6', 'e6', 'f6', 'g6', 'h6', + 'a5', 'b5', 'c5', 'd5', 'e5', 'f5', 'g5', 'h5', + 'a4', 'b4', 'c4', 'd4', 'e4', 'f4', 'g4', 'h4', + 'a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3', 'h3', + 'a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2', + 'a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1' +] + +const BITS: Record = { + NORMAL: 1, + CAPTURE: 2, + BIG_PAWN: 4, + EP_CAPTURE: 8, + PROMOTION: 16, + KSIDE_CASTLE: 32, + QSIDE_CASTLE: 64, +} + +/* + * NOTES ABOUT 0x88 MOVE GENERATION ALGORITHM + * ---------------------------------------------------------------------------- + * From https://github.com/jhlywa/chess.js/issues/230 + * + * A lot of people are confused when they first see the internal representation + * of chess.js. It uses the 0x88 Move Generation Algorithm which internally + * stores the board as an 8x16 array. This is purely for efficiency but has a + * couple of interesting benefits: + * + * 1. 0x88 offers a very inexpensive "off the board" check. Bitwise AND (&) any + * square with 0x88, if the result is non-zero then the square is off the + * board. For example, assuming a knight square A8 (0 in 0x88 notation), + * there are 8 possible directions in which the knight can move. These + * directions are relative to the 8x16 board and are stored in the + * PIECE_OFFSETS map. One possible move is A8 - 18 (up one square, and two + * squares to the left - which is off the board). 0 - 18 = -18 & 0x88 = 0x88 + * (because of two-complement representation of -18). The non-zero result + * means the square is off the board and the move is illegal. Take the + * opposite move (from A8 to C7), 0 + 18 = 18 & 0x88 = 0. A result of zero + * means the square is on the board. + * + * 2. The relative distance (or difference) between two squares on a 8x16 board + * is unique and can be used to inexpensively determine if a piece on a + * square can attack any other arbitrary square. For example, let's see if a + * pawn on E7 can attack E2. The difference between E7 (20) - E2 (100) is + * -80. We add 119 to make the ATTACKS array index non-negative (because the + * worst case difference is A8 - H1 = -119). The ATTACKS array contains a + * bitmask of pieces that can attack from that distance and direction. + * ATTACKS[-80 + 119=39] gives us 24 or 0b11000 in binary. Look at the + * PIECE_MASKS map to determine the mask for a given piece type. In our pawn + * example, we would check to see if 24 & 0x1 is non-zero, which it is + * not. So, naturally, a pawn on E7 can't attack a piece on E2. However, a + * rook can since 24 & 0x8 is non-zero. The only thing left to check is that + * there are no blocking pieces between E7 and E2. That's where the RAYS + * array comes in. It provides an offset (in this case 16) to add to E7 (20) + * to check for blocking pieces. E7 (20) + 16 = E6 (36) + 16 = E5 (52) etc. + */ + +// prettier-ignore +// eslint-disable-next-line +const Ox88: Record = { + a8: 0, b8: 1, c8: 2, d8: 3, e8: 4, f8: 5, g8: 6, h8: 7, + a7: 16, b7: 17, c7: 18, d7: 19, e7: 20, f7: 21, g7: 22, h7: 23, + a6: 32, b6: 33, c6: 34, d6: 35, e6: 36, f6: 37, g6: 38, h6: 39, + a5: 48, b5: 49, c5: 50, d5: 51, e5: 52, f5: 53, g5: 54, h5: 55, + a4: 64, b4: 65, c4: 66, d4: 67, e4: 68, f4: 69, g4: 70, h4: 71, + a3: 80, b3: 81, c3: 82, d3: 83, e3: 84, f3: 85, g3: 86, h3: 87, + a2: 96, b2: 97, c2: 98, d2: 99, e2: 100, f2: 101, g2: 102, h2: 103, + a1: 112, b1: 113, c1: 114, d1: 115, e1: 116, f1: 117, g1: 118, h1: 119 +} + +const PAWN_OFFSETS = { + b: [16, 32, 17, 15], + w: [-16, -32, -17, -15], +} + +const PIECE_OFFSETS = { + n: [-18, -33, -31, -14, 18, 33, 31, 14], + b: [-17, -15, 17, 15], + r: [-16, 1, 16, -1], + q: [-17, -16, -15, 1, 17, 16, 15, -1], + k: [-17, -16, -15, 1, 17, 16, 15, -1], +} + +// prettier-ignore +const ATTACKS = [ + 20, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0,20, 0, + 0,20, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,20, 0, 0, + 0, 0,20, 0, 0, 0, 0, 24, 0, 0, 0, 0,20, 0, 0, 0, + 0, 0, 0,20, 0, 0, 0, 24, 0, 0, 0,20, 0, 0, 0, 0, + 0, 0, 0, 0,20, 0, 0, 24, 0, 0,20, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,20, 2, 24, 2,20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2,53, 56, 53, 2, 0, 0, 0, 0, 0, 0, + 24,24,24,24,24,24,56, 0, 56,24,24,24,24,24,24, 0, + 0, 0, 0, 0, 0, 2,53, 56, 53, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,20, 2, 24, 2,20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,20, 0, 0, 24, 0, 0,20, 0, 0, 0, 0, 0, + 0, 0, 0,20, 0, 0, 0, 24, 0, 0, 0,20, 0, 0, 0, 0, + 0, 0,20, 0, 0, 0, 0, 24, 0, 0, 0, 0,20, 0, 0, 0, + 0,20, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,20, 0, 0, + 20, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0,20 +]; + +// prettier-ignore +const RAYS = [ + 17, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 15, 0, + 0, 17, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 15, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 16, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 16, 0, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 16, 15, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 0, -1, -1, -1,-1, -1, -1, -1, 0, + 0, 0, 0, 0, 0, 0,-15,-16,-17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,-15, 0,-16, 0,-17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,-15, 0, 0,-16, 0, 0,-17, 0, 0, 0, 0, 0, + 0, 0, 0,-15, 0, 0, 0,-16, 0, 0, 0,-17, 0, 0, 0, 0, + 0, 0,-15, 0, 0, 0, 0,-16, 0, 0, 0, 0,-17, 0, 0, 0, + 0,-15, 0, 0, 0, 0, 0,-16, 0, 0, 0, 0, 0,-17, 0, 0, + -15, 0, 0, 0, 0, 0, 0,-16, 0, 0, 0, 0, 0, 0,-17 +]; + +const PIECE_MASKS = { p: 0x1, n: 0x2, b: 0x4, r: 0x8, q: 0x10, k: 0x20 } + +const SYMBOLS = 'pnbrqkPNBRQK' + +const PROMOTIONS: PieceSymbol[] = [KNIGHT, BISHOP, ROOK, QUEEN] + +const RANK_1 = 7 +const RANK_2 = 6 +/* + * const RANK_3 = 5 + * const RANK_4 = 4 + * const RANK_5 = 3 + * const RANK_6 = 2 + */ +const RANK_7 = 1 +const RANK_8 = 0 + +const ROOKS = { + w: [ + { square: Ox88.a1, flag: BITS.QSIDE_CASTLE }, + { square: Ox88.h1, flag: BITS.KSIDE_CASTLE }, + ], + b: [ + { square: Ox88.a8, flag: BITS.QSIDE_CASTLE }, + { square: Ox88.h8, flag: BITS.KSIDE_CASTLE }, + ], +} + +const SECOND_RANK = { b: RANK_7, w: RANK_2 } + +const TERMINATION_MARKERS = ['1-0', '0-1', '1/2-1/2', '*'] + +// Extracts the zero-based rank of an 0x88 square. +function rank(square: number): number { + return square >> 4 +} + +// Extracts the zero-based file of an 0x88 square. +function file(square: number): number { + return square & 0xf +} + +function isDigit(c: string): boolean { + return '0123456789'.indexOf(c) !== -1 +} + +// Converts a 0x88 square to algebraic notation. +function algebraic(square: number): Square { + const f = file(square) + const r = rank(square) + return ('abcdefgh'.substring(f, f + 1) + + '87654321'.substring(r, r + 1)) as Square +} + +function swapColor(color: Color): Color { + return color === WHITE ? BLACK : WHITE +} + +export function validateFen(fen: string) { + // 1st criterion: 6 space-seperated fields? + const tokens = fen.split(/\s+/) + if (tokens.length !== 6) { + return { + ok: false, + error: 'Invalid FEN: must contain six space-delimited fields', + } + } + + // 2nd criterion: move number field is a integer value > 0? + const moveNumber = parseInt(tokens[5], 10) + if (isNaN(moveNumber) || moveNumber <= 0) { + return { + ok: false, + error: 'Invalid FEN: move number must be a positive integer', + } + } + + // 3rd criterion: half move counter is an integer >= 0? + const halfMoves = parseInt(tokens[4], 10) + if (isNaN(halfMoves) || halfMoves < 0) { + return { + ok: false, + error: + 'Invalid FEN: half move counter number must be a non-negative integer', + } + } + + // 4th criterion: 4th field is a valid e.p.-string? + if (!/^(-|[abcdefgh][36])$/.test(tokens[3])) { + return { ok: false, error: 'Invalid FEN: en-passant square is invalid' } + } + + // 5th criterion: 3th field is a valid castle-string? + if (/[^kKqQ-]/.test(tokens[2])) { + return { ok: false, error: 'Invalid FEN: castling availability is invalid' } + } + + // 6th criterion: 2nd field is "w" (white) or "b" (black)? + if (!/^(w|b)$/.test(tokens[1])) { + return { ok: false, error: 'Invalid FEN: side-to-move is invalid' } + } + + // 7th criterion: 1st field contains 8 rows? + const rows = tokens[0].split('/') + if (rows.length !== 8) { + return { + ok: false, + error: "Invalid FEN: piece data does not contain 8 '/'-delimited rows", + } + } + + // 8th criterion: every row is valid? + for (let i = 0; i < rows.length; i++) { + // check for right sum of fields AND not two numbers in succession + let sumFields = 0 + let previousWasNumber = false + + for (let k = 0; k < rows[i].length; k++) { + if (isDigit(rows[i][k])) { + if (previousWasNumber) { + return { + ok: false, + error: 'Invalid FEN: piece data is invalid (consecutive number)', + } + } + sumFields += parseInt(rows[i][k], 10) + previousWasNumber = true + } else { + if (!/^[prnbqkPRNBQK]$/.test(rows[i][k])) { + return { + ok: false, + error: 'Invalid FEN: piece data is invalid (invalid piece)', + } + } + sumFields += 1 + previousWasNumber = false + } + } + if (sumFields !== 8) { + return { + ok: false, + error: 'Invalid FEN: piece data is invalid (too many squares in rank)', + } + } + } + + if ( + (tokens[3][1] == '3' && tokens[1] == 'w') || + (tokens[3][1] == '6' && tokens[1] == 'b') + ) { + return { ok: false, error: 'Invalid FEN: illegal en-passant square' } + } + + const kings = [ + { color: 'white', regex: /K/g }, + { color: 'black', regex: /k/g }, + ] + + for (const { color, regex } of kings) { + if (!regex.test(tokens[0])) { + return { ok: false, error: `Invalid FEN: missing ${color} king` } + } + + if ((tokens[0].match(regex) || []).length > 1) { + return { ok: false, error: `Invalid FEN: too many ${color} kings` } + } + } + + return { ok: true } +} + +// this function is used to uniquely identify ambiguous moves +function getDisambiguator(move: InternalMove, moves: InternalMove[]) { + const from = move.from + const to = move.to + const piece = move.piece + + let ambiguities = 0 + let sameRank = 0 + let sameFile = 0 + + for (let i = 0, len = moves.length; i < len; i++) { + const ambigFrom = moves[i].from + const ambigTo = moves[i].to + const ambigPiece = moves[i].piece + + /* + * if a move of the same piece type ends on the same to square, we'll need + * to add a disambiguator to the algebraic notation + */ + if (piece === ambigPiece && from !== ambigFrom && to === ambigTo) { + ambiguities++ + + if (rank(from) === rank(ambigFrom)) { + sameRank++ + } + + if (file(from) === file(ambigFrom)) { + sameFile++ + } + } + } + + if (ambiguities > 0) { + if (sameRank > 0 && sameFile > 0) { + /* + * if there exists a similar moving piece on the same rank and file as + * the move in question, use the square as the disambiguator + */ + return algebraic(from) + } else if (sameFile > 0) { + /* + * if the moving piece rests on the same file, use the rank symbol as the + * disambiguator + */ + return algebraic(from).charAt(1) + } else { + // else use the file symbol + return algebraic(from).charAt(0) + } + } + + return '' +} + +function addMove( + moves: InternalMove[], + color: Color, + from: number, + to: number, + piece: PieceSymbol, + captured: PieceSymbol | undefined = undefined, + flags: number = BITS.NORMAL +) { + const r = rank(to) + + if (piece === PAWN && (r === RANK_1 || r === RANK_8)) { + for (let i = 0; i < PROMOTIONS.length; i++) { + const promotion = PROMOTIONS[i] + moves.push({ + color, + from, + to, + piece, + captured, + promotion, + flags: flags | BITS.PROMOTION, + }) + } + } else { + moves.push({ + color, + from, + to, + piece, + captured, + flags, + }) + } +} + +function inferPieceType(san: string) { + let pieceType = san.charAt(0) + if (pieceType >= 'a' && pieceType <= 'h') { + const matches = san.match(/[a-h]\d.*[a-h]\d/) + if (matches) { + return undefined + } + return PAWN + } + pieceType = pieceType.toLowerCase() + if (pieceType === 'o') { + return KING + } + return pieceType as PieceSymbol +} + +// parses all of the decorators out of a SAN string +function strippedSan(move: string) { + return move.replace(/=/, '').replace(/[+#]?[?!]*$/, '') +} + +export class Chess { + private _board = new Array(128) + private _turn: Color = WHITE + private _header: Record = {} + private _kings: Record = { w: EMPTY, b: EMPTY } + private _epSquare = -1 + private _halfMoves = 0 + private _moveNumber = 0 + private _history: History[] = [] + private _comments: Record = {} + private _castling: Record = { w: 0, b: 0 } + + constructor(fen = DEFAULT_POSITION) { + this.load(fen) + } + + clear(keepHeaders = false) { + this._board = new Array(128) + this._kings = { w: EMPTY, b: EMPTY } + this._turn = WHITE + this._castling = { w: 0, b: 0 } + this._epSquare = EMPTY + this._halfMoves = 0 + this._moveNumber = 1 + this._history = [] + this._comments = {} + this._header = keepHeaders ? this._header : {} + this._updateSetup(this.fen()) + } + + removeHeader(key: string) { + if (key in this._header) { + delete this._header[key] + } + } + + load(fen: string, keepHeaders = false) { + let tokens = fen.split(/\s+/) + + // append commonly omitted fen tokens + if (tokens.length >= 2 && tokens.length < 6) { + const adjustments = ['-', '-', '0', '1'] + fen = tokens.concat(adjustments.slice(-(6 - tokens.length))).join(' ') + } + + tokens = fen.split(/\s+/) + + const { ok, error } = validateFen(fen) + if (!ok) { + throw new Error(error) + } + + const position = tokens[0] + let square = 0 + + this.clear(keepHeaders) + + for (let i = 0; i < position.length; i++) { + const piece = position.charAt(i) + + if (piece === '/') { + square += 8 + } else if (isDigit(piece)) { + square += parseInt(piece, 10) + } else { + const color = piece < 'a' ? WHITE : BLACK + this.put( + { type: piece.toLowerCase() as PieceSymbol, color }, + algebraic(square) + ) + square++ + } + } + + this._turn = tokens[1] as Color + + if (tokens[2].indexOf('K') > -1) { + this._castling.w |= BITS.KSIDE_CASTLE + } + if (tokens[2].indexOf('Q') > -1) { + this._castling.w |= BITS.QSIDE_CASTLE + } + if (tokens[2].indexOf('k') > -1) { + this._castling.b |= BITS.KSIDE_CASTLE + } + if (tokens[2].indexOf('q') > -1) { + this._castling.b |= BITS.QSIDE_CASTLE + } + + this._epSquare = tokens[3] === '-' ? EMPTY : Ox88[tokens[3] as Square] + this._halfMoves = parseInt(tokens[4], 10) + this._moveNumber = parseInt(tokens[5], 10) + + this._updateSetup(this.fen()) + } + + fen() { + let empty = 0 + let fen = '' + + for (let i = Ox88.a8; i <= Ox88.h1; i++) { + if (this._board[i]) { + if (empty > 0) { + fen += empty + empty = 0 + } + const { color, type: piece } = this._board[i] + + fen += color === WHITE ? piece.toUpperCase() : piece.toLowerCase() + } else { + empty++ + } + + if ((i + 1) & 0x88) { + if (empty > 0) { + fen += empty + } + + if (i !== Ox88.h1) { + fen += '/' + } + + empty = 0 + i += 8 + } + } + + let castling = '' + if (this._castling[WHITE] & BITS.KSIDE_CASTLE) { + castling += 'K' + } + if (this._castling[WHITE] & BITS.QSIDE_CASTLE) { + castling += 'Q' + } + if (this._castling[BLACK] & BITS.KSIDE_CASTLE) { + castling += 'k' + } + if (this._castling[BLACK] & BITS.QSIDE_CASTLE) { + castling += 'q' + } + + // do we have an empty castling flag? + castling = castling || '-' + + let epSquare = '-' + /* + * only print the ep square if en passant is a valid move (pawn is present + * and ep capture is not pinned) + */ + if (this._epSquare !== EMPTY) { + const bigPawnSquare = this._epSquare + (this._turn === WHITE ? 16 : -16) + const squares = [bigPawnSquare + 1, bigPawnSquare - 1] + + for (const square of squares) { + // is the square off the board? + if (square & 0x88) { + continue + } + + const color = this._turn + + // is there a pawn that can capture the epSquare? + if ( + this._board[square]?.color === color && + this._board[square]?.type === PAWN + ) { + // if the pawn makes an ep capture, does it leave it's king in check? + this._makeMove({ + color, + from: square, + to: this._epSquare, + piece: PAWN, + captured: PAWN, + flags: BITS.EP_CAPTURE, + }) + const isLegal = !this._isKingAttacked(color) + this._undoMove() + + // if ep is legal, break and set the ep square in the FEN output + if (isLegal) { + epSquare = algebraic(this._epSquare) + break + } + } + } + } + + return [ + fen, + this._turn, + castling, + epSquare, + this._halfMoves, + this._moveNumber, + ].join(' ') + } + + /* + * Called when the initial board setup is changed with put() or remove(). + * modifies the SetUp and FEN properties of the header object. If the FEN + * is equal to the default position, the SetUp and FEN are deleted the setup + * is only updated if history.length is zero, ie moves haven't been made. + */ + private _updateSetup(fen: string) { + if (this._history.length > 0) return + + if (fen !== DEFAULT_POSITION) { + this._header['SetUp'] = '1' + this._header['FEN'] = fen + } else { + delete this._header['SetUp'] + delete this._header['FEN'] + } + } + + reset() { + this.load(DEFAULT_POSITION) + } + + get(square: Square) { + return this._board[Ox88[square]] || false + } + + put({ type, color }: { type: PieceSymbol; color: Color }, square: Square) { + // check for piece + if (SYMBOLS.indexOf(type.toLowerCase()) === -1) { + return false + } + + // check for valid square + if (!(square in Ox88)) { + return false + } + + const sq = Ox88[square] + + // don't let the user place more than one king + if ( + type == KING && + !(this._kings[color] == EMPTY || this._kings[color] == sq) + ) { + return false + } + + this._board[sq] = { type: type as PieceSymbol, color: color as Color } + + if (type === KING) { + this._kings[color] = sq + } + + this._updateSetup(this.fen()) + + return true + } + + remove(square: Square) { + const piece = this.get(square) + delete this._board[Ox88[square]] + if (piece && piece.type === KING) { + this._kings[piece.color] = EMPTY + } + + this._updateSetup(this.fen()) + + return piece + } + + _attacked(color: Color, square: number) { + for (let i = Ox88.a8; i <= Ox88.h1; i++) { + // did we run off the end of the board + if (i & 0x88) { + i += 7 + continue + } + + // if empty square or wrong color + if (this._board[i] === undefined || this._board[i].color !== color) { + continue + } + + const piece = this._board[i] + const difference = i - square + + // skip - to/from square are the same + if (difference === 0) { + continue + } + + const index = difference + 119 + + if (ATTACKS[index] & PIECE_MASKS[piece.type]) { + if (piece.type === PAWN) { + if (difference > 0) { + if (piece.color === WHITE) return true + } else { + if (piece.color === BLACK) return true + } + continue + } + + // if the piece is a knight or a king + if (piece.type === 'n' || piece.type === 'k') return true + + const offset = RAYS[index] + let j = i + offset + + let blocked = false + while (j !== square) { + if (this._board[j] != null) { + blocked = true + break + } + j += offset + } + + if (!blocked) return true + } + } + + return false + } + + private _isKingAttacked(color: Color) { + const square = this._kings[color] + return square === -1 ? false : this._attacked(swapColor(color), square) + } + + isAttacked(square: Square, attackedBy: Color) { + return this._attacked(attackedBy, Ox88[square]) + } + + isCheck() { + return this._isKingAttacked(this._turn) + } + + inCheck() { + return this.isCheck() + } + + isCheckmate() { + return this.isCheck() && this._moves().length === 0 + } + + isStalemate() { + return !this.isCheck() && this._moves().length === 0 + } + + isInsufficientMaterial() { + /* + * k.b. vs k.b. (of opposite colors) with mate in 1: + * 8/8/8/8/1b6/8/B1k5/K7 b - - 0 1 + * + * k.b. vs k.n. with mate in 1: + * 8/8/8/8/1n6/8/B7/K1k5 b - - 2 1 + */ + const pieces: Record = { + b: 0, + n: 0, + r: 0, + q: 0, + k: 0, + p: 0, + } + const bishops = [] + let numPieces = 0 + let squareColor = 0 + + for (let i = Ox88.a8; i <= Ox88.h1; i++) { + squareColor = (squareColor + 1) % 2 + if (i & 0x88) { + i += 7 + continue + } + + const piece = this._board[i] + if (piece) { + pieces[piece.type] = piece.type in pieces ? pieces[piece.type] + 1 : 1 + if (piece.type === BISHOP) { + bishops.push(squareColor) + } + numPieces++ + } + } + + // k vs. k + if (numPieces === 2) { + return true + } else if ( + // k vs. kn .... or .... k vs. kb + numPieces === 3 && + (pieces[BISHOP] === 1 || pieces[KNIGHT] === 1) + ) { + return true + } else if (numPieces === pieces[BISHOP] + 2) { + // kb vs. kb where any number of bishops are all on the same color + let sum = 0 + const len = bishops.length + for (let i = 0; i < len; i++) { + sum += bishops[i] + } + if (sum === 0 || sum === len) { + return true + } + } + + return false + } + + isThreefoldRepetition() { + const moves = [] + const positions: Record = {} + let repetition = false + + while (true) { + const move = this._undoMove() + if (!move) break + moves.push(move) + } + + while (true) { + /* + * remove the last two fields in the FEN string, they're not needed when + * checking for draw by rep + */ + const fen = this.fen().split(' ').slice(0, 4).join(' ') + + // has the position occurred three or move times + positions[fen] = fen in positions ? positions[fen] + 1 : 1 + if (positions[fen] >= 3) { + repetition = true + } + + const move = moves.pop() + + if (!move) { + break + } else { + this._makeMove(move) + } + } + + return repetition + } + + isDraw() { + return ( + this._halfMoves >= 100 || // 50 moves per side = 100 half moves + this.isStalemate() || + this.isInsufficientMaterial() || + this.isThreefoldRepetition() + ) + } + + isGameOver() { + return this.isCheckmate() || this.isStalemate() || this.isDraw() + } + + moves(): string[] + moves({ square }: { square: Square }): string[] + moves({ piece }: { piece: PieceSymbol }): string[] + + moves({ square, piece }: { square: Square; piece: PieceSymbol }): string[] + + moves({ verbose, square }: { verbose: true; square?: Square }): Move[] + moves({ verbose, square }: { verbose: false; square?: Square }): string[] + moves({ + verbose, + square, + }: { + verbose?: boolean + square?: Square + }): string[] | Move[] + + moves({ verbose, piece }: { verbose: true; piece?: PieceSymbol }): Move[] + moves({ verbose, piece }: { verbose: false; piece?: PieceSymbol }): string[] + moves({ + verbose, + piece, + }: { + verbose?: boolean + piece?: PieceSymbol + }): string[] | Move[] + + moves({ + verbose, + square, + piece, + }: { + verbose: true + square?: Square + piece?: PieceSymbol + }): Move[] + moves({ + verbose, + square, + piece, + }: { + verbose: false + square?: Square + piece?: PieceSymbol + }): string[] + moves({ + verbose, + square, + piece, + }: { + verbose?: boolean + square?: Square + piece?: PieceSymbol + }): string[] | Move[] + + moves({ square, piece }: { square?: Square; piece?: PieceSymbol }): Move[] + + moves({ + verbose = false, + square = undefined, + piece = undefined, + }: { verbose?: boolean; square?: Square; piece?: PieceSymbol } = {}) { + const moves = this._moves({ square, piece }) + + if (verbose) { + return moves.map((move) => this._makePretty(move)) + } else { + return moves.map((move) => this._moveToSan(move, moves)) + } + } + + _moves({ + legal = true, + piece = undefined, + square = undefined, + }: { + legal?: boolean + piece?: PieceSymbol + square?: Square + } = {}) { + const forSquare = square ? (square.toLowerCase() as Square) : undefined + const forPiece = piece?.toLowerCase() + + const moves: InternalMove[] = [] + const us = this._turn + const them = swapColor(us) + + let firstSquare = Ox88.a8 + let lastSquare = Ox88.h1 + let singleSquare = false + + // are we generating moves for a single square? + if (forSquare) { + // illegal square, return empty moves + if (!(forSquare in Ox88)) { + return [] + } else { + firstSquare = lastSquare = Ox88[forSquare] + singleSquare = true + } + } + + for (let from = firstSquare; from <= lastSquare; from++) { + // did we run off the end of the board + if (from & 0x88) { + from += 7 + continue + } + + // empty square or opponent, skip + if (!this._board[from] || this._board[from].color === them) { + continue + } + const { type } = this._board[from] + + let to: number + if (type === PAWN) { + if (forPiece && forPiece !== type) continue + + // single square, non-capturing + to = from + PAWN_OFFSETS[us][0] + if (!this._board[to]) { + addMove(moves, us, from, to, PAWN) + + // double square + to = from + PAWN_OFFSETS[us][1] + if (SECOND_RANK[us] === rank(from) && !this._board[to]) { + addMove(moves, us, from, to, PAWN, undefined, BITS.BIG_PAWN) + } + } + + // pawn captures + for (let j = 2; j < 4; j++) { + to = from + PAWN_OFFSETS[us][j] + if (to & 0x88) continue + + if (this._board[to]?.color === them) { + addMove( + moves, + us, + from, + to, + PAWN, + this._board[to].type, + BITS.CAPTURE + ) + } else if (to === this._epSquare) { + addMove(moves, us, from, to, PAWN, PAWN, BITS.EP_CAPTURE) + } + } + } else { + if (forPiece && forPiece !== type) continue + + for (let j = 0, len = PIECE_OFFSETS[type].length; j < len; j++) { + const offset = PIECE_OFFSETS[type][j] + to = from + + while (true) { + to += offset + if (to & 0x88) break + + if (!this._board[to]) { + addMove(moves, us, from, to, type) + } else { + // own color, stop loop + if (this._board[to].color === us) break + + addMove( + moves, + us, + from, + to, + type, + this._board[to].type, + BITS.CAPTURE + ) + break + } + + /* break, if knight or king */ + if (type === KNIGHT || type === KING) break + } + } + } + } + + /* + * check for castling if we're: + * a) generating all moves, or + * b) doing single square move generation on the king's square + */ + + if (forPiece === undefined || forPiece === KING) { + if (!singleSquare || lastSquare === this._kings[us]) { + // king-side castling + if (this._castling[us] & BITS.KSIDE_CASTLE) { + const castlingFrom = this._kings[us] + const castlingTo = castlingFrom + 2 + + if ( + !this._board[castlingFrom + 1] && + !this._board[castlingTo] && + !this._attacked(them, this._kings[us]) && + !this._attacked(them, castlingFrom + 1) && + !this._attacked(them, castlingTo) + ) { + addMove( + moves, + us, + this._kings[us], + castlingTo, + KING, + undefined, + BITS.KSIDE_CASTLE + ) + } + } + + // queen-side castling + if (this._castling[us] & BITS.QSIDE_CASTLE) { + const castlingFrom = this._kings[us] + const castlingTo = castlingFrom - 2 + + if ( + !this._board[castlingFrom - 1] && + !this._board[castlingFrom - 2] && + !this._board[castlingFrom - 3] && + !this._attacked(them, this._kings[us]) && + !this._attacked(them, castlingFrom - 1) && + !this._attacked(them, castlingTo) + ) { + addMove( + moves, + us, + this._kings[us], + castlingTo, + KING, + undefined, + BITS.QSIDE_CASTLE + ) + } + } + } + } + + /* + * return all pseudo-legal moves (this includes moves that allow the king + * to be captured) + */ + if (!legal || this._kings[us] === -1) { + return moves + } + + // filter out illegal moves + const legalMoves = [] + + for (let i = 0, len = moves.length; i < len; i++) { + this._makeMove(moves[i]) + if (!this._isKingAttacked(us)) { + legalMoves.push(moves[i]) + } + this._undoMove() + } + + return legalMoves + } + + move( + move: string | { from: string; to: string; promotion?: string }, + { strict = false }: { strict?: boolean } = {} + ) { + /* + * The move function can be called with in the following parameters: + * + * .move('Nxb7') <- argument is a case-sensitive SAN string + * + * .move({ from: 'h7', <- argument is a move object + * to :'h8', + * promotion: 'q' }) + * + * + * An optional strict argument may be supplied to tell chess.js to + * strictly follow the SAN specification. + */ + + let moveObj = null + + if (typeof move === 'string') { + moveObj = this._moveFromSan(move, strict) + } else if (typeof move === 'object') { + const moves = this._moves() + + // convert the pretty move object to an ugly move object + for (let i = 0, len = moves.length; i < len; i++) { + if ( + move.from === algebraic(moves[i].from) && + move.to === algebraic(moves[i].to) && + (!('promotion' in moves[i]) || move.promotion === moves[i].promotion) + ) { + moveObj = moves[i] + break + } + } + } + + // failed to find move + if (!moveObj) { + if (typeof move === 'string') { + throw new Error(`Invalid move: ${move}`) + } else { + throw new Error(`Invalid move: ${JSON.stringify(move)}`) + } + } + + /* + * need to make a copy of move because we can't generate SAN after the move + * is made + */ + const prettyMove = this._makePretty(moveObj) + + this._makeMove(moveObj) + + return prettyMove + } + + _push(move: InternalMove) { + this._history.push({ + move, + kings: { b: this._kings.b, w: this._kings.w }, + turn: this._turn, + castling: { b: this._castling.b, w: this._castling.w }, + epSquare: this._epSquare, + halfMoves: this._halfMoves, + moveNumber: this._moveNumber, + }) + } + + private _makeMove(move: InternalMove) { + const us = this._turn + const them = swapColor(us) + this._push(move) + + this._board[move.to] = this._board[move.from] + delete this._board[move.from] + + // if ep capture, remove the captured pawn + if (move.flags & BITS.EP_CAPTURE) { + if (this._turn === BLACK) { + delete this._board[move.to - 16] + } else { + delete this._board[move.to + 16] + } + } + + // if pawn promotion, replace with new piece + if (move.promotion) { + this._board[move.to] = { type: move.promotion, color: us } + } + + // if we moved the king + if (this._board[move.to].type === KING) { + this._kings[us] = move.to + + // if we castled, move the rook next to the king + if (move.flags & BITS.KSIDE_CASTLE) { + const castlingTo = move.to - 1 + const castlingFrom = move.to + 1 + this._board[castlingTo] = this._board[castlingFrom] + delete this._board[castlingFrom] + } else if (move.flags & BITS.QSIDE_CASTLE) { + const castlingTo = move.to + 1 + const castlingFrom = move.to - 2 + this._board[castlingTo] = this._board[castlingFrom] + delete this._board[castlingFrom] + } + + // turn off castling + this._castling[us] = 0 + } + + // turn off castling if we move a rook + if (this._castling[us]) { + for (let i = 0, len = ROOKS[us].length; i < len; i++) { + if ( + move.from === ROOKS[us][i].square && + this._castling[us] & ROOKS[us][i].flag + ) { + this._castling[us] ^= ROOKS[us][i].flag + break + } + } + } + + // turn off castling if we capture a rook + if (this._castling[them]) { + for (let i = 0, len = ROOKS[them].length; i < len; i++) { + if ( + move.to === ROOKS[them][i].square && + this._castling[them] & ROOKS[them][i].flag + ) { + this._castling[them] ^= ROOKS[them][i].flag + break + } + } + } + + // if big pawn move, update the en passant square + if (move.flags & BITS.BIG_PAWN) { + if (us === BLACK) { + this._epSquare = move.to - 16 + } else { + this._epSquare = move.to + 16 + } + } else { + this._epSquare = EMPTY + } + + // reset the 50 move counter if a pawn is moved or a piece is captured + if (move.piece === PAWN) { + this._halfMoves = 0 + } else if (move.flags & (BITS.CAPTURE | BITS.EP_CAPTURE)) { + this._halfMoves = 0 + } else { + this._halfMoves++ + } + + if (us === BLACK) { + this._moveNumber++ + } + + this._turn = them + } + + undo() { + const move = this._undoMove() + return move ? this._makePretty(move) : null + } + + private _undoMove() { + const old = this._history.pop() + if (old === undefined) { + return null + } + + const move = old.move + + this._kings = old.kings + this._turn = old.turn + this._castling = old.castling + this._epSquare = old.epSquare + this._halfMoves = old.halfMoves + this._moveNumber = old.moveNumber + + const us = this._turn + const them = swapColor(us) + + this._board[move.from] = this._board[move.to] + this._board[move.from].type = move.piece // to undo any promotions + delete this._board[move.to] + + if (move.captured) { + if (move.flags & BITS.EP_CAPTURE) { + // en passant capture + let index: number + if (us === BLACK) { + index = move.to - 16 + } else { + index = move.to + 16 + } + this._board[index] = { type: PAWN, color: them } + } else { + // regular capture + this._board[move.to] = { type: move.captured, color: them } + } + } + + if (move.flags & (BITS.KSIDE_CASTLE | BITS.QSIDE_CASTLE)) { + let castlingTo: number, castlingFrom: number + if (move.flags & BITS.KSIDE_CASTLE) { + castlingTo = move.to + 1 + castlingFrom = move.to - 1 + } else { + castlingTo = move.to - 2 + castlingFrom = move.to + 1 + } + + this._board[castlingTo] = this._board[castlingFrom] + delete this._board[castlingFrom] + } + + return move + } + + pgn({ + newline = '\n', + maxWidth = 0, + }: { newline?: string; maxWidth?: number } = {}) { + /* + * using the specification from http://www.chessclub.com/help/PGN-spec + * example for html usage: .pgn({ max_width: 72, newline_char: "
" }) + */ + + const result: string[] = [] + let headerExists = false + + /* add the PGN header information */ + for (const i in this._header) { + /* + * TODO: order of enumerated properties in header object is not + * guaranteed, see ECMA-262 spec (section 12.6.4) + */ + result.push('[' + i + ' "' + this._header[i] + '"]' + newline) + headerExists = true + } + + if (headerExists && this._history.length) { + result.push(newline) + } + + const appendComment = (moveString: string) => { + const comment = this._comments[this.fen()] + if (typeof comment !== 'undefined') { + const delimiter = moveString.length > 0 ? ' ' : '' + moveString = `${moveString}${delimiter}{${comment}}` + } + return moveString + } + + // pop all of history onto reversed_history + const reversedHistory = [] + while (this._history.length > 0) { + reversedHistory.push(this._undoMove()) + } + + const moves = [] + let moveString = '' + + // special case of a commented starting position with no moves + if (reversedHistory.length === 0) { + moves.push(appendComment('')) + } + + // build the list of moves. a move_string looks like: "3. e3 e6" + while (reversedHistory.length > 0) { + moveString = appendComment(moveString) + const move = reversedHistory.pop() + + // make TypeScript stop complaining about move being undefined + if (!move) { + break + } + + // if the position started with black to move, start PGN with #. ... + if (!this._history.length && move.color === 'b') { + const prefix = `${this._moveNumber}. ...` + // is there a comment preceding the first move? + moveString = moveString ? `${moveString} ${prefix}` : prefix + } else if (move.color === 'w') { + // store the previous generated move_string if we have one + if (moveString.length) { + moves.push(moveString) + } + moveString = this._moveNumber + '.' + } + + moveString = + moveString + ' ' + this._moveToSan(move, this._moves({ legal: true })) + this._makeMove(move) + } + + // are there any other leftover moves? + if (moveString.length) { + moves.push(appendComment(moveString)) + } + + // is there a result? + if (typeof this._header.Result !== 'undefined') { + moves.push(this._header.Result) + } + + /* + * history should be back to what it was before we started generating PGN, + * so join together moves + */ + if (maxWidth === 0) { + return result.join('') + moves.join(' ') + } + + // TODO (jah): huh? + const strip = function () { + if (result.length > 0 && result[result.length - 1] === ' ') { + result.pop() + return true + } + return false + } + + // NB: this does not preserve comment whitespace. + const wrapComment = function (width: number, move: string) { + for (const token of move.split(' ')) { + if (!token) { + continue + } + if (width + token.length > maxWidth) { + while (strip()) { + width-- + } + result.push(newline) + width = 0 + } + result.push(token) + width += token.length + result.push(' ') + width++ + } + if (strip()) { + width-- + } + return width + } + + // wrap the PGN output at max_width + let currentWidth = 0 + for (let i = 0; i < moves.length; i++) { + if (currentWidth + moves[i].length > maxWidth) { + if (moves[i].includes('{')) { + currentWidth = wrapComment(currentWidth, moves[i]) + continue + } + } + // if the current move will push past max_width + if (currentWidth + moves[i].length > maxWidth && i !== 0) { + // don't end the line with whitespace + if (result[result.length - 1] === ' ') { + result.pop() + } + + result.push(newline) + currentWidth = 0 + } else if (i !== 0) { + result.push(' ') + currentWidth++ + } + result.push(moves[i]) + currentWidth += moves[i].length + } + + return result.join('') + } + + header(...args: string[]) { + for (let i = 0; i < args.length; i += 2) { + if (typeof args[i] === 'string' && typeof args[i + 1] === 'string') { + this._header[args[i]] = args[i + 1] + } + } + return this._header + } + + loadPgn( + pgn: string, + { + strict = false, + newlineChar = '\r?\n', + }: { strict?: boolean; newlineChar?: string } = {} + ) { + function mask(str: string): string { + return str.replace(/\\/g, '\\') + } + + function parsePgnHeader(header: string): { [key: string]: string } { + const headerObj: Record = {} + const headers = header.split(new RegExp(mask(newlineChar))) + let key = '' + let value = '' + + for (let i = 0; i < headers.length; i++) { + const regex = /^\s*\[\s*([A-Za-z]+)\s*"(.*)"\s*\]\s*$/ + key = headers[i].replace(regex, '$1') + value = headers[i].replace(regex, '$2') + if (key.trim().length > 0) { + headerObj[key] = value + } + } + + return headerObj + } + + // strip whitespace from head/tail of PGN block + pgn = pgn.trim() + + /* + * RegExp to split header. Takes advantage of the fact that header and movetext + * will always have a blank line between them (ie, two newline_char's). Handles + * case where movetext is empty by matching newlineChar until end of string is + * matched - effectively trimming from the end extra newlineChar. + * + * With default newline_char, will equal: + * /^(\[((?:\r?\n)|.)*\])((?:\s*\r?\n){2}|(?:\s*\r?\n)*$)/ + */ + const headerRegex = new RegExp( + '^(\\[((?:' + + mask(newlineChar) + + ')|.)*\\])' + + '((?:\\s*' + + mask(newlineChar) + + '){2}|(?:\\s*' + + mask(newlineChar) + + ')*$)' + ) + + // If no header given, begin with moves. + const headerRegexResults = headerRegex.exec(pgn) + const headerString = headerRegexResults + ? headerRegexResults.length >= 2 + ? headerRegexResults[1] + : '' + : '' + + // Put the board in the starting position + this.reset() + + // parse PGN header + const headers = parsePgnHeader(headerString) + let fen = '' + + for (const key in headers) { + // check to see user is including fen (possibly with wrong tag case) + if (key.toLowerCase() === 'fen') { + fen = headers[key] + } + + this.header(key, headers[key]) + } + + /* + * the permissive parser should attempt to load a fen tag, even if it's the + * wrong case and doesn't include a corresponding [SetUp "1"] tag + */ + if (!strict) { + if (fen) { + this.load(fen, true) + } + } else { + /* + * strict parser - load the starting position indicated by [Setup '1'] + * and [FEN position] + */ + if (headers['SetUp'] === '1') { + if (!('FEN' in headers)) { + throw new Error( + 'Invalid PGN: FEN tag must be supplied with SetUp tag' + ) + } + // second argument to load: don't clear the headers + this.load(headers['FEN'], true) + } + } + + /* + * NB: the regexes below that delete move numbers, recursive annotations, + * and numeric annotation glyphs may also match text in comments. To + * prevent this, we transform comments by hex-encoding them in place and + * decoding them again after the other tokens have been deleted. + * + * While the spec states that PGN files should be ASCII encoded, we use + * {en,de}codeURIComponent here to support arbitrary UTF8 as a convenience + * for modern users + */ + + function toHex(s: string): string { + return Array.from(s) + .map(function (c) { + /* + * encodeURI doesn't transform most ASCII characters, so we handle + * these ourselves + */ + return c.charCodeAt(0) < 128 + ? c.charCodeAt(0).toString(16) + : encodeURIComponent(c).replace(/%/g, '').toLowerCase() + }) + .join('') + } + + function fromHex(s: string): string { + return s.length == 0 + ? '' + : decodeURIComponent('%' + (s.match(/.{1,2}/g) || []).join('%')) + } + + const encodeComment = function (s: string) { + s = s.replace(new RegExp(mask(newlineChar), 'g'), ' ') + return `{${toHex(s.slice(1, s.length - 1))}}` + } + + const decodeComment = function (s: string) { + if (s.startsWith('{') && s.endsWith('}')) { + return fromHex(s.slice(1, s.length - 1)) + } + } + + // delete header to get the moves + let ms = pgn + .replace(headerString, '') + .replace( + // encode comments so they don't get deleted below + new RegExp(`({[^}]*})+?|;([^${mask(newlineChar)}]*)`, 'g'), + function (_match, bracket, semicolon) { + return bracket !== undefined + ? encodeComment(bracket) + : ' ' + encodeComment(`{${semicolon.slice(1)}}`) + } + ) + .replace(new RegExp(mask(newlineChar), 'g'), ' ') + + // delete recursive annotation variations + const ravRegex = /(\([^()]+\))+?/g + while (ravRegex.test(ms)) { + ms = ms.replace(ravRegex, '') + } + + // delete move numbers + ms = ms.replace(/\d+\.(\.\.)?/g, '') + + // delete ... indicating black to move + ms = ms.replace(/\.\.\./g, '') + + /* delete numeric annotation glyphs */ + ms = ms.replace(/\$\d+/g, '') + + // trim and get array of moves + let moves = ms.trim().split(new RegExp(/\s+/)) + + // delete empty entries + moves = moves.filter((move) => move !== '') + + let result = '' + + for (let halfMove = 0; halfMove < moves.length; halfMove++) { + const comment = decodeComment(moves[halfMove]) + if (comment !== undefined) { + this._comments[this.fen()] = comment + continue + } + + const move = this._moveFromSan(moves[halfMove], strict) + + // invalid move + if (move == null) { + // was the move an end of game marker + if (TERMINATION_MARKERS.indexOf(moves[halfMove]) > -1) { + result = moves[halfMove] + } else { + throw new Error(`Invalid move in PGN: ${moves[halfMove]}`) + } + } else { + // reset the end of game marker if making a valid move + result = '' + this._makeMove(move) + } + } + + /* + * Per section 8.2.6 of the PGN spec, the Result tag pair must match match + * the termination marker. Only do this when headers are present, but the + * result tag is missing + */ + + if (result && Object.keys(this._header).length && !this._header['Result']) { + this.header('Result', result) + } + } + + /* + * Convert a move from 0x88 coordinates to Standard Algebraic Notation + * (SAN) + * + * @param {boolean} strict Use the strict SAN parser. It will throw errors + * on overly disambiguated moves (see below): + * + * r1bqkbnr/ppp2ppp/2n5/1B1pP3/4P3/8/PPPP2PP/RNBQK1NR b KQkq - 2 4 + * 4. ... Nge7 is overly disambiguated because the knight on c6 is pinned + * 4. ... Ne7 is technically the valid SAN + */ + + private _moveToSan(move: InternalMove, moves: InternalMove[]) { + let output = '' + + if (move.flags & BITS.KSIDE_CASTLE) { + output = 'O-O' + } else if (move.flags & BITS.QSIDE_CASTLE) { + output = 'O-O-O' + } else { + if (move.piece !== PAWN) { + const disambiguator = getDisambiguator(move, moves) + output += move.piece.toUpperCase() + disambiguator + } + + if (move.flags & (BITS.CAPTURE | BITS.EP_CAPTURE)) { + if (move.piece === PAWN) { + output += algebraic(move.from)[0] + } + output += 'x' + } + + output += algebraic(move.to) + + if (move.promotion) { + output += '=' + move.promotion.toUpperCase() + } + } + + this._makeMove(move) + if (this.isCheck()) { + if (this.isCheckmate()) { + output += '#' + } else { + output += '+' + } + } + this._undoMove() + + return output + } + + // convert a move from Standard Algebraic Notation (SAN) to 0x88 coordinates + private _moveFromSan(move: string, strict = false): InternalMove | null { + // strip off any move decorations: e.g Nf3+?! becomes Nf3 + const cleanMove = strippedSan(move) + + let pieceType = inferPieceType(cleanMove) + let moves = this._moves({ legal: true, piece: pieceType }) + + // strict parser + for (let i = 0, len = moves.length; i < len; i++) { + if (cleanMove === strippedSan(this._moveToSan(moves[i], moves))) { + return moves[i] + } + } + + // the strict parser failed + if (strict) { + return null + } + + let piece = undefined + let matches = undefined + let from = undefined + let to = undefined + let promotion = undefined + + /* + * The default permissive (non-strict) parser allows the user to parse + * non-standard chess notations. This parser is only run after the strict + * Standard Algebraic Notation (SAN) parser has failed. + * + * When running the permissive parser, we'll run a regex to grab the piece, the + * to/from square, and an optional promotion piece. This regex will + * parse common non-standard notation like: Pe2-e4, Rc1c4, Qf3xf7, + * f7f8q, b1c3 + * + * NOTE: Some positions and moves may be ambiguous when using the permissive + * parser. For example, in this position: 6k1/8/8/B7/8/8/8/BN4K1 w - - 0 1, + * the move b1c3 may be interpreted as Nc3 or B1c3 (a disambiguated bishop + * move). In these cases, the permissive parser will default to the most + * basic interpretation (which is b1c3 parsing to Nc3). + */ + + let overlyDisambiguated = false + + matches = cleanMove.match( + /([pnbrqkPNBRQK])?([a-h][1-8])x?-?([a-h][1-8])([qrbnQRBN])?/ + // piece from to promotion + ) + + if (matches) { + piece = matches[1] + from = matches[2] as Square + to = matches[3] as Square + promotion = matches[4] + + if (from.length == 1) { + overlyDisambiguated = true + } + } else { + /* + * The [a-h]?[1-8]? portion of the regex below handles moves that may be + * overly disambiguated (e.g. Nge7 is unnecessary and non-standard when + * there is one legal knight move to e7). In this case, the value of + * 'from' variable will be a rank or file, not a square. + */ + + matches = cleanMove.match( + /([pnbrqkPNBRQK])?([a-h]?[1-8]?)x?-?([a-h][1-8])([qrbnQRBN])?/ + ) + + if (matches) { + piece = matches[1] + from = matches[2] as Square + to = matches[3] as Square + promotion = matches[4] + + if (from.length == 1) { + overlyDisambiguated = true + } + } + } + + pieceType = inferPieceType(cleanMove) + moves = this._moves({ + legal: true, + piece: piece ? (piece as PieceSymbol) : pieceType, + }) + + if (!to) { + return null; + } + + for (let i = 0, len = moves.length; i < len; i++) { + if (!from) { + // if there is no from square, it could be just 'x' missing from a capture + if (cleanMove === strippedSan(this._moveToSan(moves[i], moves)).replace('x', '')) { + return moves[i]; + } + // hand-compare move properties with the results from our permissive regex + } else if ( + (!piece || piece.toLowerCase() == moves[i].piece) && + Ox88[from] == moves[i].from && + Ox88[to] == moves[i].to && + (!promotion || promotion.toLowerCase() == moves[i].promotion) + ) { + return moves[i] + } else if (overlyDisambiguated) { + /* + * SPECIAL CASE: we parsed a move string that may have an unneeded + * rank/file disambiguator (e.g. Nge7). The 'from' variable will + */ + + const square = algebraic(moves[i].from) + if ( + (!piece || piece.toLowerCase() == moves[i].piece) && + Ox88[to] == moves[i].to && + (from == square[0] || from == square[1]) && + (!promotion || promotion.toLowerCase() == moves[i].promotion) + ) { + return moves[i] + } + } + } + + return null + } + + ascii() { + let s = ' +------------------------+\n' + for (let i = Ox88.a8; i <= Ox88.h1; i++) { + // display the rank + if (file(i) === 0) { + s += ' ' + '87654321'[rank(i)] + ' |' + } + + if (this._board[i]) { + const piece = this._board[i].type + const color = this._board[i].color + const symbol = + color === WHITE ? piece.toUpperCase() : piece.toLowerCase() + s += ' ' + symbol + ' ' + } else { + s += ' . ' + } + + if ((i + 1) & 0x88) { + s += '|\n' + i += 8 + } + } + s += ' +------------------------+\n' + s += ' a b c d e f g h' + + return s + } + + perft(depth: number) { + const moves = this._moves({ legal: false }) + let nodes = 0 + const color = this._turn + + for (let i = 0, len = moves.length; i < len; i++) { + this._makeMove(moves[i]) + if (!this._isKingAttacked(color)) { + if (depth - 1 > 0) { + nodes += this.perft(depth - 1) + } else { + nodes++ + } + } + this._undoMove() + } + + return nodes + } + + // pretty = external move object + private _makePretty(uglyMove: InternalMove): Move { + const { color, piece, from, to, flags, captured, promotion } = uglyMove + + let prettyFlags = '' + + for (const flag in BITS) { + if (BITS[flag] & flags) { + prettyFlags += FLAGS[flag] + } + } + + const fromAlgebraic = algebraic(from) + const toAlgebraic = algebraic(to) + + const move: Move = { + color, + piece, + from: fromAlgebraic, + to: toAlgebraic, + san: this._moveToSan(uglyMove, this._moves({ legal: true })), + flags: prettyFlags, + lan: fromAlgebraic + toAlgebraic, + before: this.fen(), + after: '', + } + + // generate the FEN for the 'after' key + this._makeMove(uglyMove) + move.after = this.fen() + this._undoMove() + + if (captured) { + move.captured = captured + } + if (promotion) { + move.promotion = promotion + move.lan += promotion + } + + return move + } + + turn() { + return this._turn + } + + board() { + const output = [] + let row = [] + + for (let i = Ox88.a8; i <= Ox88.h1; i++) { + if (this._board[i] == null) { + row.push(null) + } else { + row.push({ + square: algebraic(i), + type: this._board[i].type, + color: this._board[i].color, + }) + } + if ((i + 1) & 0x88) { + output.push(row) + row = [] + i += 8 + } + } + + return output + } + + squareColor(square: Square) { + if (square in Ox88) { + const sq = Ox88[square] + return (rank(sq) + file(sq)) % 2 === 0 ? 'light' : 'dark' + } + + return null + } + + history(): string[] + history({ verbose }: { verbose: true }): Move[] + history({ verbose }: { verbose: false }): string[] + history({ verbose }: { verbose: boolean }): string[] | Move[] + history({ verbose = false }: { verbose?: boolean } = {}) { + const reversedHistory = [] + const moveHistory = [] + + while (this._history.length > 0) { + reversedHistory.push(this._undoMove()) + } + + while (true) { + const move = reversedHistory.pop() + if (!move) { + break + } + + if (verbose) { + moveHistory.push(this._makePretty(move)) + } else { + moveHistory.push(this._moveToSan(move, this._moves())) + } + this._makeMove(move) + } + + return moveHistory + } + + private _pruneComments() { + const reversedHistory = [] + const currentComments: Record = {} + + const copyComment = (fen: string) => { + if (fen in this._comments) { + currentComments[fen] = this._comments[fen] + } + } + + while (this._history.length > 0) { + reversedHistory.push(this._undoMove()) + } + + copyComment(this.fen()) + + while (true) { + const move = reversedHistory.pop() + if (!move) { + break + } + this._makeMove(move) + copyComment(this.fen()) + } + this._comments = currentComments + } + + getComment() { + return this._comments[this.fen()] + } + + setComment(comment: string) { + this._comments[this.fen()] = comment.replace('{', '[').replace('}', ']') + } + + deleteComment() { + const comment = this._comments[this.fen()] + delete this._comments[this.fen()] + return comment + } + + getComments() { + this._pruneComments() + return Object.keys(this._comments).map((fen: string) => { + return { fen: fen, comment: this._comments[fen] } + }) + } + + deleteComments() { + this._pruneComments() + return Object.keys(this._comments).map((fen) => { + const comment = this._comments[fen] + delete this._comments[fen] + return { fen: fen, comment: comment } + }) + } +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/tsconfig.json b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/tsconfig.json new file mode 100644 index 00000000..1e5d464d --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chess.js/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "declaration": true, + "esModuleInterop": true, + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./dist", + "removeComments": false, + "sourceMap": true, + "strict": true, + "target": "es2017" + }, + "include": ["src/**/*"] +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chessboard-1.0.0.js b/projectexample/openingtrainer/chessopeningtrainer/static/js/chessboard-1.0.0.js new file mode 100644 index 00000000..f3fc6f56 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chessboard-1.0.0.js @@ -0,0 +1,1823 @@ +// chessboard.js v@VERSION +// https://github.com/oakmac/chessboardjs/ +// +// Copyright (c) 2019, Chris Oakman +// Released under the MIT license +// https://github.com/oakmac/chessboardjs/blob/master/LICENSE.md + +// start anonymous scope +;(function () { + 'use strict' + + var $ = window['jQuery'] + + // --------------------------------------------------------------------------- + // Constants + // --------------------------------------------------------------------------- + + var COLUMNS = 'abcdefgh'.split('') + var DEFAULT_DRAG_THROTTLE_RATE = 20 + var ELLIPSIS = '…' + var MINIMUM_JQUERY_VERSION = '1.8.3' + var RUN_ASSERTS = true + var START_FEN = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' + var START_POSITION = fenToObj(START_FEN) + + // default animation speeds + var DEFAULT_APPEAR_SPEED = 200 + var DEFAULT_MOVE_SPEED = 200 + var DEFAULT_SNAPBACK_SPEED = 60 + var DEFAULT_SNAP_SPEED = 30 + var DEFAULT_TRASH_SPEED = 100 + + // use unique class names to prevent clashing with anything else on the page + // and simplify selectors + // NOTE: these should never change + var CSS = {} + CSS['alpha'] = 'alpha-d2270' + CSS['black'] = 'black-3c85d' + CSS['board'] = 'board-b72b1' + CSS['chessboard'] = 'chessboard-63f37' + CSS['clearfix'] = 'clearfix-7da63' + CSS['highlight1'] = 'highlight1-32417' + CSS['highlight2'] = 'highlight2-9c5d2' + CSS['notation'] = 'notation-322f9' + CSS['numeric'] = 'numeric-fc462' + CSS['piece'] = 'piece-417db' + CSS['row'] = 'row-5277c' + CSS['sparePieces'] = 'spare-pieces-7492f' + CSS['sparePiecesBottom'] = 'spare-pieces-bottom-ae20f' + CSS['sparePiecesTop'] = 'spare-pieces-top-4028b' + CSS['square'] = 'square-55d63' + CSS['white'] = 'white-1e1d7' + + // --------------------------------------------------------------------------- + // Misc Util Functions + // --------------------------------------------------------------------------- + + function throttle (f, interval, scope) { + var timeout = 0 + var shouldFire = false + var args = [] + + var handleTimeout = function () { + timeout = 0 + if (shouldFire) { + shouldFire = false + fire() + } + } + + var fire = function () { + timeout = window.setTimeout(handleTimeout, interval) + f.apply(scope, args) + } + + return function (_args) { + args = arguments + if (!timeout) { + fire() + } else { + shouldFire = true + } + } + } + + // function debounce (f, interval, scope) { + // var timeout = 0 + // return function (_args) { + // window.clearTimeout(timeout) + // var args = arguments + // timeout = window.setTimeout(function () { + // f.apply(scope, args) + // }, interval) + // } + // } + + function uuid () { + return 'xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'.replace(/x/g, function (c) { + var r = (Math.random() * 16) | 0 + return r.toString(16) + }) + } + + function deepCopy (thing) { + return JSON.parse(JSON.stringify(thing)) + } + + function parseSemVer (version) { + var tmp = version.split('.') + return { + major: parseInt(tmp[0], 10), + minor: parseInt(tmp[1], 10), + patch: parseInt(tmp[2], 10) + } + } + + // returns true if version is >= minimum + function validSemanticVersion (version, minimum) { + version = parseSemVer(version) + minimum = parseSemVer(minimum) + + var versionNum = (version.major * 100000 * 100000) + + (version.minor * 100000) + + version.patch + var minimumNum = (minimum.major * 100000 * 100000) + + (minimum.minor * 100000) + + minimum.patch + + return versionNum >= minimumNum + } + + function interpolateTemplate (str, obj) { + for (var key in obj) { + if (!obj.hasOwnProperty(key)) continue + var keyTemplateStr = '{' + key + '}' + var value = obj[key] + while (str.indexOf(keyTemplateStr) !== -1) { + str = str.replace(keyTemplateStr, value) + } + } + return str + } + + if (RUN_ASSERTS) { + console.assert(interpolateTemplate('abc', {a: 'x'}) === 'abc') + console.assert(interpolateTemplate('{a}bc', {}) === '{a}bc') + console.assert(interpolateTemplate('{a}bc', {p: 'q'}) === '{a}bc') + console.assert(interpolateTemplate('{a}bc', {a: 'x'}) === 'xbc') + console.assert(interpolateTemplate('{a}bc{a}bc', {a: 'x'}) === 'xbcxbc') + console.assert(interpolateTemplate('{a}{a}{b}', {a: 'x', b: 'y'}) === 'xxy') + } + + // --------------------------------------------------------------------------- + // Predicates + // --------------------------------------------------------------------------- + + function isString (s) { + return typeof s === 'string' + } + + function isFunction (f) { + return typeof f === 'function' + } + + function isInteger (n) { + return typeof n === 'number' && + isFinite(n) && + Math.floor(n) === n + } + + function validAnimationSpeed (speed) { + if (speed === 'fast' || speed === 'slow') return true + if (!isInteger(speed)) return false + return speed >= 0 + } + + function validThrottleRate (rate) { + return isInteger(rate) && + rate >= 1 + } + + function validMove (move) { + // move should be a string + if (!isString(move)) return false + + // move should be in the form of "e2-e4", "f6-d5" + var squares = move.split('-') + if (squares.length !== 2) return false + + return validSquare(squares[0]) && validSquare(squares[1]) + } + + function validSquare (square) { + return isString(square) && square.search(/^[a-h][1-8]$/) !== -1 + } + + if (RUN_ASSERTS) { + console.assert(validSquare('a1')) + console.assert(validSquare('e2')) + console.assert(!validSquare('D2')) + console.assert(!validSquare('g9')) + console.assert(!validSquare('a')) + console.assert(!validSquare(true)) + console.assert(!validSquare(null)) + console.assert(!validSquare({})) + } + + function validPieceCode (code) { + return isString(code) && code.search(/^[bw][KQRNBP]$/) !== -1 + } + + if (RUN_ASSERTS) { + console.assert(validPieceCode('bP')) + console.assert(validPieceCode('bK')) + console.assert(validPieceCode('wK')) + console.assert(validPieceCode('wR')) + console.assert(!validPieceCode('WR')) + console.assert(!validPieceCode('Wr')) + console.assert(!validPieceCode('a')) + console.assert(!validPieceCode(true)) + console.assert(!validPieceCode(null)) + console.assert(!validPieceCode({})) + } + + function validFen (fen) { + if (!isString(fen)) return false + + // cut off any move, castling, etc info from the end + // we're only interested in position information + fen = fen.replace(/ .+$/, '') + + // expand the empty square numbers to just 1s + fen = expandFenEmptySquares(fen) + + // FEN should be 8 sections separated by slashes + var chunks = fen.split('/') + if (chunks.length !== 8) return false + + // check each section + for (var i = 0; i < 8; i++) { + if (chunks[i].length !== 8 || + chunks[i].search(/[^kqrnbpKQRNBP1]/) !== -1) { + return false + } + } + + return true + } + + if (RUN_ASSERTS) { + console.assert(validFen(START_FEN)) + console.assert(validFen('8/8/8/8/8/8/8/8')) + console.assert(validFen('r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R')) + console.assert(validFen('3r3r/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1')) + console.assert(!validFen('3r3z/1p4pp/2nb1k2/pP3p2/8/PB2PN2/p4PPP/R4RK1 b - - 0 1')) + console.assert(!validFen('anbqkbnr/8/8/8/8/8/PPPPPPPP/8')) + console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/')) + console.assert(!validFen('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBN')) + console.assert(!validFen('888888/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR')) + console.assert(!validFen('888888/pppppppp/74/8/8/8/PPPPPPPP/RNBQKBNR')) + console.assert(!validFen({})) + } + + function validPositionObject (pos) { + if (!$.isPlainObject(pos)) return false + + for (var i in pos) { + if (!pos.hasOwnProperty(i)) continue + + if (!validSquare(i) || !validPieceCode(pos[i])) { + return false + } + } + + return true + } + + if (RUN_ASSERTS) { + console.assert(validPositionObject(START_POSITION)) + console.assert(validPositionObject({})) + console.assert(validPositionObject({e2: 'wP'})) + console.assert(validPositionObject({e2: 'wP', d2: 'wP'})) + console.assert(!validPositionObject({e2: 'BP'})) + console.assert(!validPositionObject({y2: 'wP'})) + console.assert(!validPositionObject(null)) + console.assert(!validPositionObject('start')) + console.assert(!validPositionObject(START_FEN)) + } + + function isTouchDevice () { + return 'ontouchstart' in document.documentElement + } + + function validJQueryVersion () { + return typeof window.$ && + $.fn && + $.fn.jquery && + validSemanticVersion($.fn.jquery, MINIMUM_JQUERY_VERSION) + } + + // --------------------------------------------------------------------------- + // Chess Util Functions + // --------------------------------------------------------------------------- + + // convert FEN piece code to bP, wK, etc + function fenToPieceCode (piece) { + // black piece + if (piece.toLowerCase() === piece) { + return 'b' + piece.toUpperCase() + } + + // white piece + return 'w' + piece.toUpperCase() + } + + // convert bP, wK, etc code to FEN structure + function pieceCodeToFen (piece) { + var pieceCodeLetters = piece.split('') + + // white piece + if (pieceCodeLetters[0] === 'w') { + return pieceCodeLetters[1].toUpperCase() + } + + // black piece + return pieceCodeLetters[1].toLowerCase() + } + + // convert FEN string to position object + // returns false if the FEN string is invalid + function fenToObj (fen) { + if (!validFen(fen)) return false + + // cut off any move, castling, etc info from the end + // we're only interested in position information + fen = fen.replace(/ .+$/, '') + + var rows = fen.split('/') + var position = {} + + var currentRow = 8 + for (var i = 0; i < 8; i++) { + var row = rows[i].split('') + var colIdx = 0 + + // loop through each character in the FEN section + for (var j = 0; j < row.length; j++) { + // number / empty squares + if (row[j].search(/[1-8]/) !== -1) { + var numEmptySquares = parseInt(row[j], 10) + colIdx = colIdx + numEmptySquares + } else { + // piece + var square = COLUMNS[colIdx] + currentRow + position[square] = fenToPieceCode(row[j]) + colIdx = colIdx + 1 + } + } + + currentRow = currentRow - 1 + } + + return position + } + + // position object to FEN string + // returns false if the obj is not a valid position object + function objToFen (obj) { + if (!validPositionObject(obj)) return false + + var fen = '' + + var currentRow = 8 + for (var i = 0; i < 8; i++) { + for (var j = 0; j < 8; j++) { + var square = COLUMNS[j] + currentRow + + // piece exists + if (obj.hasOwnProperty(square)) { + fen = fen + pieceCodeToFen(obj[square]) + } else { + // empty space + fen = fen + '1' + } + } + + if (i !== 7) { + fen = fen + '/' + } + + currentRow = currentRow - 1 + } + + // squeeze the empty numbers together + fen = squeezeFenEmptySquares(fen) + + return fen + } + + if (RUN_ASSERTS) { + console.assert(objToFen(START_POSITION) === START_FEN) + console.assert(objToFen({}) === '8/8/8/8/8/8/8/8') + console.assert(objToFen({a2: 'wP', 'b2': 'bP'}) === '8/8/8/8/8/8/Pp6/8') + } + + function squeezeFenEmptySquares (fen) { + return fen.replace(/11111111/g, '8') + .replace(/1111111/g, '7') + .replace(/111111/g, '6') + .replace(/11111/g, '5') + .replace(/1111/g, '4') + .replace(/111/g, '3') + .replace(/11/g, '2') + } + + function expandFenEmptySquares (fen) { + return fen.replace(/8/g, '11111111') + .replace(/7/g, '1111111') + .replace(/6/g, '111111') + .replace(/5/g, '11111') + .replace(/4/g, '1111') + .replace(/3/g, '111') + .replace(/2/g, '11') + } + + // returns the distance between two squares + function squareDistance (squareA, squareB) { + var squareAArray = squareA.split('') + var squareAx = COLUMNS.indexOf(squareAArray[0]) + 1 + var squareAy = parseInt(squareAArray[1], 10) + + var squareBArray = squareB.split('') + var squareBx = COLUMNS.indexOf(squareBArray[0]) + 1 + var squareBy = parseInt(squareBArray[1], 10) + + var xDelta = Math.abs(squareAx - squareBx) + var yDelta = Math.abs(squareAy - squareBy) + + if (xDelta >= yDelta) return xDelta + return yDelta + } + + // returns the square of the closest instance of piece + // returns false if no instance of piece is found in position + function findClosestPiece (position, piece, square) { + // create array of closest squares from square + var closestSquares = createRadius(square) + + // search through the position in order of distance for the piece + for (var i = 0; i < closestSquares.length; i++) { + var s = closestSquares[i] + + if (position.hasOwnProperty(s) && position[s] === piece) { + return s + } + } + + return false + } + + // returns an array of closest squares from square + function createRadius (square) { + var squares = [] + + // calculate distance of all squares + for (var i = 0; i < 8; i++) { + for (var j = 0; j < 8; j++) { + var s = COLUMNS[i] + (j + 1) + + // skip the square we're starting from + if (square === s) continue + + squares.push({ + square: s, + distance: squareDistance(square, s) + }) + } + } + + // sort by distance + squares.sort(function (a, b) { + return a.distance - b.distance + }) + + // just return the square code + var surroundingSquares = [] + for (i = 0; i < squares.length; i++) { + surroundingSquares.push(squares[i].square) + } + + return surroundingSquares + } + + // given a position and a set of moves, return a new position + // with the moves executed + function calculatePositionFromMoves (position, moves) { + var newPosition = deepCopy(position) + + for (var i in moves) { + if (!moves.hasOwnProperty(i)) continue + + // skip the move if the position doesn't have a piece on the source square + if (!newPosition.hasOwnProperty(i)) continue + + var piece = newPosition[i] + delete newPosition[i] + newPosition[moves[i]] = piece + } + + return newPosition + } + + // TODO: add some asserts here for calculatePositionFromMoves + + // --------------------------------------------------------------------------- + // HTML + // --------------------------------------------------------------------------- + + function buildContainerHTML (hasSparePieces) { + var html = '
' + + if (hasSparePieces) { + html += '
' + } + + html += '
' + + if (hasSparePieces) { + html += '
' + } + + html += '
' + + return interpolateTemplate(html, CSS) + } + + // --------------------------------------------------------------------------- + // Config + // --------------------------------------------------------------------------- + + function expandConfigArgumentShorthand (config) { + if (config === 'start') { + config = {position: deepCopy(START_POSITION)} + } else if (validFen(config)) { + config = {position: fenToObj(config)} + } else if (validPositionObject(config)) { + config = {position: deepCopy(config)} + } + + // config must be an object + if (!$.isPlainObject(config)) config = {} + + return config + } + + // validate config / set default options + function expandConfig (config) { + // default for orientation is white + if (config.orientation !== 'black') config.orientation = 'white' + + // default for showNotation is true + if (config.showNotation !== false) config.showNotation = true + + // default for draggable is false + if (config.draggable !== true) config.draggable = false + + // default for dropOffBoard is 'snapback' + if (config.dropOffBoard !== 'trash') config.dropOffBoard = 'snapback' + + // default for sparePieces is false + if (config.sparePieces !== true) config.sparePieces = false + + // draggable must be true if sparePieces is enabled + if (config.sparePieces) config.draggable = true + + // default piece theme is wikipedia + if (!config.hasOwnProperty('pieceTheme') || + (!isString(config.pieceTheme) && !isFunction(config.pieceTheme))) { + config.pieceTheme = 'img/chesspieces/wikipedia/{piece}.png' + } + + // animation speeds + if (!validAnimationSpeed(config.appearSpeed)) config.appearSpeed = DEFAULT_APPEAR_SPEED + if (!validAnimationSpeed(config.moveSpeed)) config.moveSpeed = DEFAULT_MOVE_SPEED + if (!validAnimationSpeed(config.snapbackSpeed)) config.snapbackSpeed = DEFAULT_SNAPBACK_SPEED + if (!validAnimationSpeed(config.snapSpeed)) config.snapSpeed = DEFAULT_SNAP_SPEED + if (!validAnimationSpeed(config.trashSpeed)) config.trashSpeed = DEFAULT_TRASH_SPEED + + // throttle rate + if (!validThrottleRate(config.dragThrottleRate)) config.dragThrottleRate = DEFAULT_DRAG_THROTTLE_RATE + + return config + } + + // --------------------------------------------------------------------------- + // Dependencies + // --------------------------------------------------------------------------- + + // check for a compatible version of jQuery + function checkJQuery () { + if (!validJQueryVersion()) { + var errorMsg = 'Chessboard Error 1005: Unable to find a valid version of jQuery. ' + + 'Please include jQuery ' + MINIMUM_JQUERY_VERSION + ' or higher on the page' + + '\n\n' + + 'Exiting' + ELLIPSIS + window.alert(errorMsg) + return false + } + + return true + } + + // return either boolean false or the $container element + function checkContainerArg (containerElOrString) { + if (containerElOrString === '') { + var errorMsg1 = 'Chessboard Error 1001: ' + + 'The first argument to Chessboard() cannot be an empty string.' + + '\n\n' + + 'Exiting' + ELLIPSIS + window.alert(errorMsg1) + return false + } + + // convert containerEl to query selector if it is a string + if (isString(containerElOrString) && + containerElOrString.charAt(0) !== '#') { + containerElOrString = '#' + containerElOrString + } + + // containerEl must be something that becomes a jQuery collection of size 1 + var $container = $(containerElOrString) + if ($container.length !== 1) { + var errorMsg2 = 'Chessboard Error 1003: ' + + 'The first argument to Chessboard() must be the ID of a DOM node, ' + + 'an ID query selector, or a single DOM node.' + + '\n\n' + + 'Exiting' + ELLIPSIS + window.alert(errorMsg2) + return false + } + + return $container + } + + // --------------------------------------------------------------------------- + // Constructor + // --------------------------------------------------------------------------- + + function constructor (containerElOrString, config) { + // first things first: check basic dependencies + if (!checkJQuery()) return null + var $container = checkContainerArg(containerElOrString) + if (!$container) return null + + // ensure the config object is what we expect + config = expandConfigArgumentShorthand(config) + config = expandConfig(config) + + // DOM elements + var $board = null + var $draggedPiece = null + var $sparePiecesTop = null + var $sparePiecesBottom = null + + // constructor return object + var widget = {} + + // ------------------------------------------------------------------------- + // Stateful + // ------------------------------------------------------------------------- + + var boardBorderSize = 2 + var currentOrientation = 'white' + var currentPosition = {} + var draggedPiece = null + var draggedPieceLocation = null + var draggedPieceSource = null + var isDragging = false + var sparePiecesElsIds = {} + var squareElsIds = {} + var squareElsOffsets = {} + var squareSize = 16 + + // ------------------------------------------------------------------------- + // Validation / Errors + // ------------------------------------------------------------------------- + + function error (code, msg, obj) { + // do nothing if showErrors is not set + if ( + config.hasOwnProperty('showErrors') !== true || + config.showErrors === false + ) { + return + } + + var errorText = 'Chessboard Error ' + code + ': ' + msg + + // print to console + if ( + config.showErrors === 'console' && + typeof console === 'object' && + typeof console.log === 'function' + ) { + console.log(errorText) + if (arguments.length >= 2) { + console.log(obj) + } + return + } + + // alert errors + if (config.showErrors === 'alert') { + if (obj) { + errorText += '\n\n' + JSON.stringify(obj) + } + window.alert(errorText) + return + } + + // custom function + if (isFunction(config.showErrors)) { + config.showErrors(code, msg, obj) + } + } + + function setInitialState () { + currentOrientation = config.orientation + + // make sure position is valid + if (config.hasOwnProperty('position')) { + if (config.position === 'start') { + currentPosition = deepCopy(START_POSITION) + } else if (validFen(config.position)) { + currentPosition = fenToObj(config.position) + } else if (validPositionObject(config.position)) { + currentPosition = deepCopy(config.position) + } else { + error( + 7263, + 'Invalid value passed to config.position.', + config.position + ) + } + } + } + + // ------------------------------------------------------------------------- + // DOM Misc + // ------------------------------------------------------------------------- + + // calculates square size based on the width of the container + // got a little CSS black magic here, so let me explain: + // get the width of the container element (could be anything), reduce by 1 for + // fudge factor, and then keep reducing until we find an exact mod 8 for + // our square size + function calculateSquareSize () { + var containerWidth = parseInt($container.width(), 10) + + // defensive, prevent infinite loop + if (!containerWidth || containerWidth <= 0) { + return 0 + } + + // pad one pixel + var boardWidth = containerWidth - 1 + + while (boardWidth % 8 !== 0 && boardWidth > 0) { + boardWidth = boardWidth - 1 + } + + return boardWidth / 8 + } + + // create random IDs for elements + function createElIds () { + // squares on the board + for (var i = 0; i < COLUMNS.length; i++) { + for (var j = 1; j <= 8; j++) { + var square = COLUMNS[i] + j + squareElsIds[square] = square + '-' + uuid() + } + } + + // spare pieces + var pieces = 'KQRNBP'.split('') + for (i = 0; i < pieces.length; i++) { + var whitePiece = 'w' + pieces[i] + var blackPiece = 'b' + pieces[i] + sparePiecesElsIds[whitePiece] = whitePiece + '-' + uuid() + sparePiecesElsIds[blackPiece] = blackPiece + '-' + uuid() + } + } + + // ------------------------------------------------------------------------- + // Markup Building + // ------------------------------------------------------------------------- + + function buildBoardHTML (orientation) { + if (orientation !== 'black') { + orientation = 'white' + } + + var html = '' + + // algebraic notation / orientation + var alpha = deepCopy(COLUMNS) + var row = 8 + if (orientation === 'black') { + alpha.reverse() + row = 1 + } + + var squareColor = 'white' + for (var i = 0; i < 8; i++) { + html += '
' + for (var j = 0; j < 8; j++) { + var square = alpha[j] + row + + html += '
' + + if (config.showNotation) { + // alpha notation + if ((orientation === 'white' && row === 1) || + (orientation === 'black' && row === 8)) { + html += '
' + alpha[j] + '
' + } + + // numeric notation + if (j === 0) { + html += '
' + row + '
' + } + } + + html += '
' // end .square + + squareColor = (squareColor === 'white') ? 'black' : 'white' + } + html += '
' + + squareColor = (squareColor === 'white') ? 'black' : 'white' + + if (orientation === 'white') { + row = row - 1 + } else { + row = row + 1 + } + } + + return interpolateTemplate(html, CSS) + } + + function buildPieceImgSrc (piece) { + if (isFunction(config.pieceTheme)) { + return config.pieceTheme(piece) + } + + if (isString(config.pieceTheme)) { + return interpolateTemplate(config.pieceTheme, {piece: piece}) + } + + // NOTE: this should never happen + error(8272, 'Unable to build image source for config.pieceTheme.') + return '' + } + + function buildPieceHTML (piece, hidden, id) { + var html = '' + + return interpolateTemplate(html, CSS) + } + + function buildSparePiecesHTML (color) { + var pieces = ['wK', 'wQ', 'wR', 'wB', 'wN', 'wP'] + if (color === 'black') { + pieces = ['bK', 'bQ', 'bR', 'bB', 'bN', 'bP'] + } + + var html = '' + for (var i = 0; i < pieces.length; i++) { + html += buildPieceHTML(pieces[i], false, sparePiecesElsIds[pieces[i]]) + } + + return html + } + + // ------------------------------------------------------------------------- + // Animations + // ------------------------------------------------------------------------- + + function animateSquareToSquare (src, dest, piece, completeFn) { + // get information about the source and destination squares + var $srcSquare = $('#' + squareElsIds[src]) + var srcSquarePosition = $srcSquare.offset() + var $destSquare = $('#' + squareElsIds[dest]) + var destSquarePosition = $destSquare.offset() + + // create the animated piece and absolutely position it + // over the source square + var animatedPieceId = uuid() + $('body').append(buildPieceHTML(piece, true, animatedPieceId)) + var $animatedPiece = $('#' + animatedPieceId) + $animatedPiece.css({ + display: '', + position: 'absolute', + top: srcSquarePosition.top, + left: srcSquarePosition.left + }) + + // remove original piece from source square + $srcSquare.find('.' + CSS.piece).remove() + + function onFinishAnimation1 () { + // add the "real" piece to the destination square + $destSquare.append(buildPieceHTML(piece)) + + // remove the animated piece + $animatedPiece.remove() + + // run complete function + if (isFunction(completeFn)) { + completeFn() + } + } + + // animate the piece to the destination square + var opts = { + duration: config.moveSpeed, + complete: onFinishAnimation1 + } + $animatedPiece.animate(destSquarePosition, opts) + } + + function animateSparePieceToSquare (piece, dest, completeFn) { + var srcOffset = $('#' + sparePiecesElsIds[piece]).offset() + var $destSquare = $('#' + squareElsIds[dest]) + var destOffset = $destSquare.offset() + + // create the animate piece + var pieceId = uuid() + $('body').append(buildPieceHTML(piece, true, pieceId)) + var $animatedPiece = $('#' + pieceId) + $animatedPiece.css({ + display: '', + position: 'absolute', + left: srcOffset.left, + top: srcOffset.top + }) + + // on complete + function onFinishAnimation2 () { + // add the "real" piece to the destination square + $destSquare.find('.' + CSS.piece).remove() + $destSquare.append(buildPieceHTML(piece)) + + // remove the animated piece + $animatedPiece.remove() + + // run complete function + if (isFunction(completeFn)) { + completeFn() + } + } + + // animate the piece to the destination square + var opts = { + duration: config.moveSpeed, + complete: onFinishAnimation2 + } + $animatedPiece.animate(destOffset, opts) + } + + // execute an array of animations + function doAnimations (animations, oldPos, newPos) { + if (animations.length === 0) return + + var numFinished = 0 + function onFinishAnimation3 () { + // exit if all the animations aren't finished + numFinished = numFinished + 1 + if (numFinished !== animations.length) return + + drawPositionInstant() + + // run their onMoveEnd function + if (isFunction(config.onMoveEnd)) { + config.onMoveEnd(deepCopy(oldPos), deepCopy(newPos)) + } + } + + for (var i = 0; i < animations.length; i++) { + var animation = animations[i] + + // clear a piece + if (animation.type === 'clear') { + $('#' + squareElsIds[animation.square] + ' .' + CSS.piece) + .fadeOut(config.trashSpeed, onFinishAnimation3) + + // add a piece with no spare pieces - fade the piece onto the square + } else if (animation.type === 'add' && !config.sparePieces) { + $('#' + squareElsIds[animation.square]) + .append(buildPieceHTML(animation.piece, true)) + .find('.' + CSS.piece) + .fadeIn(config.appearSpeed, onFinishAnimation3) + + // add a piece with spare pieces - animate from the spares + } else if (animation.type === 'add' && config.sparePieces) { + animateSparePieceToSquare(animation.piece, animation.square, onFinishAnimation3) + + // move a piece from squareA to squareB + } else if (animation.type === 'move') { + animateSquareToSquare(animation.source, animation.destination, animation.piece, onFinishAnimation3) + } + } + } + + // calculate an array of animations that need to happen in order to get + // from pos1 to pos2 + function calculateAnimations (pos1, pos2) { + // make copies of both + pos1 = deepCopy(pos1) + pos2 = deepCopy(pos2) + + var animations = [] + var squaresMovedTo = {} + + // remove pieces that are the same in both positions + for (var i in pos2) { + if (!pos2.hasOwnProperty(i)) continue + + if (pos1.hasOwnProperty(i) && pos1[i] === pos2[i]) { + delete pos1[i] + delete pos2[i] + } + } + + // find all the "move" animations + for (i in pos2) { + if (!pos2.hasOwnProperty(i)) continue + + var closestPiece = findClosestPiece(pos1, pos2[i], i) + if (closestPiece) { + animations.push({ + type: 'move', + source: closestPiece, + destination: i, + piece: pos2[i] + }) + + delete pos1[closestPiece] + delete pos2[i] + squaresMovedTo[i] = true + } + } + + // "add" animations + for (i in pos2) { + if (!pos2.hasOwnProperty(i)) continue + + animations.push({ + type: 'add', + square: i, + piece: pos2[i] + }) + + delete pos2[i] + } + + // "clear" animations + for (i in pos1) { + if (!pos1.hasOwnProperty(i)) continue + + // do not clear a piece if it is on a square that is the result + // of a "move", ie: a piece capture + if (squaresMovedTo.hasOwnProperty(i)) continue + + animations.push({ + type: 'clear', + square: i, + piece: pos1[i] + }) + + delete pos1[i] + } + + return animations + } + + // ------------------------------------------------------------------------- + // Control Flow + // ------------------------------------------------------------------------- + + function drawPositionInstant () { + // clear the board + $board.find('.' + CSS.piece).remove() + + // add the pieces + for (var i in currentPosition) { + if (!currentPosition.hasOwnProperty(i)) continue + + $('#' + squareElsIds[i]).append(buildPieceHTML(currentPosition[i])) + } + } + + function drawBoard () { + $board.html(buildBoardHTML(currentOrientation, squareSize, config.showNotation)) + drawPositionInstant() + + if (config.sparePieces) { + if (currentOrientation === 'white') { + $sparePiecesTop.html(buildSparePiecesHTML('black')) + $sparePiecesBottom.html(buildSparePiecesHTML('white')) + } else { + $sparePiecesTop.html(buildSparePiecesHTML('white')) + $sparePiecesBottom.html(buildSparePiecesHTML('black')) + } + } + } + + function setCurrentPosition (position) { + var oldPos = deepCopy(currentPosition) + var newPos = deepCopy(position) + var oldFen = objToFen(oldPos) + var newFen = objToFen(newPos) + + // do nothing if no change in position + if (oldFen === newFen) return + + // run their onChange function + if (isFunction(config.onChange)) { + config.onChange(oldPos, newPos) + } + + // update state + currentPosition = position + } + + function isXYOnSquare (x, y) { + for (var i in squareElsOffsets) { + if (!squareElsOffsets.hasOwnProperty(i)) continue + + var s = squareElsOffsets[i] + if (x >= s.left && + x < s.left + squareSize && + y >= s.top && + y < s.top + squareSize) { + return i + } + } + + return 'offboard' + } + + // records the XY coords of every square into memory + function captureSquareOffsets () { + squareElsOffsets = {} + + for (var i in squareElsIds) { + if (!squareElsIds.hasOwnProperty(i)) continue + + squareElsOffsets[i] = $('#' + squareElsIds[i]).offset() + } + } + + function removeSquareHighlights () { + $board + .find('.' + CSS.square) + .removeClass(CSS.highlight1 + ' ' + CSS.highlight2) + } + + function snapbackDraggedPiece () { + // there is no "snapback" for spare pieces + if (draggedPieceSource === 'spare') { + trashDraggedPiece() + return + } + + removeSquareHighlights() + + // animation complete + function complete () { + drawPositionInstant() + $draggedPiece.css('display', 'none') + + // run their onSnapbackEnd function + if (isFunction(config.onSnapbackEnd)) { + config.onSnapbackEnd( + draggedPiece, + draggedPieceSource, + deepCopy(currentPosition), + currentOrientation + ) + } + } + + // get source square position + var sourceSquarePosition = $('#' + squareElsIds[draggedPieceSource]).offset() + + // animate the piece to the target square + var opts = { + duration: config.snapbackSpeed, + complete: complete + } + $draggedPiece.animate(sourceSquarePosition, opts) + + // set state + isDragging = false + } + + function trashDraggedPiece () { + removeSquareHighlights() + + // remove the source piece + var newPosition = deepCopy(currentPosition) + delete newPosition[draggedPieceSource] + setCurrentPosition(newPosition) + + // redraw the position + drawPositionInstant() + + // hide the dragged piece + $draggedPiece.fadeOut(config.trashSpeed) + + // set state + isDragging = false + } + + function dropDraggedPieceOnSquare (square) { + removeSquareHighlights() + + // update position + var newPosition = deepCopy(currentPosition) + delete newPosition[draggedPieceSource] + newPosition[square] = draggedPiece + setCurrentPosition(newPosition) + + // get target square information + var targetSquarePosition = $('#' + squareElsIds[square]).offset() + + // animation complete + function onAnimationComplete () { + drawPositionInstant() + $draggedPiece.css('display', 'none') + + // execute their onSnapEnd function + if (isFunction(config.onSnapEnd)) { + config.onSnapEnd(draggedPieceSource, square, draggedPiece) + } + } + + // snap the piece to the target square + var opts = { + duration: config.snapSpeed, + complete: onAnimationComplete + } + $draggedPiece.animate(targetSquarePosition, opts) + + // set state + isDragging = false + } + + function beginDraggingPiece (source, piece, x, y) { + // run their custom onDragStart function + // their custom onDragStart function can cancel drag start + if (isFunction(config.onDragStart) && + config.onDragStart(source, piece, deepCopy(currentPosition), currentOrientation) === false) { + return + } + + // set state + isDragging = true + draggedPiece = piece + draggedPieceSource = source + + // if the piece came from spare pieces, location is offboard + if (source === 'spare') { + draggedPieceLocation = 'offboard' + } else { + draggedPieceLocation = source + } + + // capture the x, y coords of all squares in memory + captureSquareOffsets() + + // create the dragged piece + $draggedPiece.attr('src', buildPieceImgSrc(piece)).css({ + display: '', + position: 'absolute', + left: x - squareSize / 2, + top: y - squareSize / 2 + }) + + if (source !== 'spare') { + // highlight the source square and hide the piece + $('#' + squareElsIds[source]) + .addClass(CSS.highlight1) + .find('.' + CSS.piece) + .css('display', 'none') + } + } + + function updateDraggedPiece (x, y) { + // put the dragged piece over the mouse cursor + $draggedPiece.css({ + left: x - squareSize / 2, + top: y - squareSize / 2 + }) + + // get location + var location = isXYOnSquare(x, y) + + // do nothing if the location has not changed + if (location === draggedPieceLocation) return + + // remove highlight from previous square + if (validSquare(draggedPieceLocation)) { + $('#' + squareElsIds[draggedPieceLocation]).removeClass(CSS.highlight2) + } + + // add highlight to new square + if (validSquare(location)) { + $('#' + squareElsIds[location]).addClass(CSS.highlight2) + } + + // run onDragMove + if (isFunction(config.onDragMove)) { + config.onDragMove( + location, + draggedPieceLocation, + draggedPieceSource, + draggedPiece, + deepCopy(currentPosition), + currentOrientation + ) + } + + // update state + draggedPieceLocation = location + } + + function stopDraggedPiece (location) { + // determine what the action should be + var action = 'drop' + if (location === 'offboard' && config.dropOffBoard === 'snapback') { + action = 'snapback' + } + if (location === 'offboard' && config.dropOffBoard === 'trash') { + action = 'trash' + } + + // run their onDrop function, which can potentially change the drop action + if (isFunction(config.onDrop)) { + var newPosition = deepCopy(currentPosition) + + // source piece is a spare piece and position is off the board + // if (draggedPieceSource === 'spare' && location === 'offboard') {...} + // position has not changed; do nothing + + // source piece is a spare piece and position is on the board + if (draggedPieceSource === 'spare' && validSquare(location)) { + // add the piece to the board + newPosition[location] = draggedPiece + } + + // source piece was on the board and position is off the board + if (validSquare(draggedPieceSource) && location === 'offboard') { + // remove the piece from the board + delete newPosition[draggedPieceSource] + } + + // source piece was on the board and position is on the board + if (validSquare(draggedPieceSource) && validSquare(location)) { + // move the piece + delete newPosition[draggedPieceSource] + newPosition[location] = draggedPiece + } + + var oldPosition = deepCopy(currentPosition) + + var result = config.onDrop( + draggedPieceSource, + location, + draggedPiece, + newPosition, + oldPosition, + currentOrientation + ) + if (result === 'snapback' || result === 'trash') { + action = result + } + } + + // do it! + if (action === 'snapback') { + snapbackDraggedPiece() + } else if (action === 'trash') { + trashDraggedPiece() + } else if (action === 'drop') { + dropDraggedPieceOnSquare(location) + } + } + + // ------------------------------------------------------------------------- + // Public Methods + // ------------------------------------------------------------------------- + + // clear the board + widget.clear = function (useAnimation) { + widget.position({}, useAnimation) + } + + // remove the widget from the page + widget.destroy = function () { + // remove markup + $container.html('') + $draggedPiece.remove() + + // remove event handlers + $container.unbind() + } + + // shorthand method to get the current FEN + widget.fen = function () { + return widget.position('fen') + } + + // flip orientation + widget.flip = function () { + return widget.orientation('flip') + } + + // move pieces + // TODO: this method should be variadic as well as accept an array of moves + widget.move = function () { + // no need to throw an error here; just do nothing + // TODO: this should return the current position + if (arguments.length === 0) return + + var useAnimation = true + + // collect the moves into an object + var moves = {} + for (var i = 0; i < arguments.length; i++) { + // any "false" to this function means no animations + if (arguments[i] === false) { + useAnimation = false + continue + } + + // skip invalid arguments + if (!validMove(arguments[i])) { + error(2826, 'Invalid move passed to the move method.', arguments[i]) + continue + } + + var tmp = arguments[i].split('-') + moves[tmp[0]] = tmp[1] + } + + // calculate position from moves + var newPos = calculatePositionFromMoves(currentPosition, moves) + + // update the board + widget.position(newPos, useAnimation) + + // return the new position object + return newPos + } + + widget.orientation = function (arg) { + // no arguments, return the current orientation + if (arguments.length === 0) { + return currentOrientation + } + + // set to white or black + if (arg === 'white' || arg === 'black') { + currentOrientation = arg + drawBoard() + return currentOrientation + } + + // flip orientation + if (arg === 'flip') { + currentOrientation = currentOrientation === 'white' ? 'black' : 'white' + drawBoard() + return currentOrientation + } + + error(5482, 'Invalid value passed to the orientation method.', arg) + } + + widget.position = function (position, useAnimation) { + // no arguments, return the current position + if (arguments.length === 0) { + return deepCopy(currentPosition) + } + + // get position as FEN + if (isString(position) && position.toLowerCase() === 'fen') { + return objToFen(currentPosition) + } + + // start position + if (isString(position) && position.toLowerCase() === 'start') { + position = deepCopy(START_POSITION) + } + + // convert FEN to position object + if (validFen(position)) { + position = fenToObj(position) + } + + // validate position object + if (!validPositionObject(position)) { + error(6482, 'Invalid value passed to the position method.', position) + return + } + + // default for useAnimations is true + if (useAnimation !== false) useAnimation = true + + if (useAnimation) { + // start the animations + var animations = calculateAnimations(currentPosition, position) + doAnimations(animations, currentPosition, position) + + // set the new position + setCurrentPosition(position) + } else { + // instant update + setCurrentPosition(position) + drawPositionInstant() + } + } + + widget.resize = function () { + // calulate the new square size + squareSize = calculateSquareSize() + + // set board width + $board.css('width', squareSize * 8 + 'px') + + // set drag piece size + $draggedPiece.css({ + height: squareSize, + width: squareSize + }) + + // spare pieces + if (config.sparePieces) { + $container + .find('.' + CSS.sparePieces) + .css('paddingLeft', squareSize + boardBorderSize + 'px') + } + + // redraw the board + drawBoard() + } + + // set the starting position + widget.start = function (useAnimation) { + widget.position('start', useAnimation) + } + + // ------------------------------------------------------------------------- + // Browser Events + // ------------------------------------------------------------------------- + + function stopDefault (evt) { + evt.preventDefault() + } + + function mousedownSquare (evt) { + // do nothing if we're not draggable + if (!config.draggable) return + + // do nothing if there is no piece on this square + var square = $(this).attr('data-square') + if (!validSquare(square)) return + if (!currentPosition.hasOwnProperty(square)) return + + beginDraggingPiece(square, currentPosition[square], evt.pageX, evt.pageY) + } + + function touchstartSquare (e) { + // do nothing if we're not draggable + if (!config.draggable) return + + // do nothing if there is no piece on this square + var square = $(this).attr('data-square') + if (!validSquare(square)) return + if (!currentPosition.hasOwnProperty(square)) return + + e = e.originalEvent + beginDraggingPiece( + square, + currentPosition[square], + e.changedTouches[0].pageX, + e.changedTouches[0].pageY + ) + } + + function mousedownSparePiece (evt) { + // do nothing if sparePieces is not enabled + if (!config.sparePieces) return + + var piece = $(this).attr('data-piece') + + beginDraggingPiece('spare', piece, evt.pageX, evt.pageY) + } + + function touchstartSparePiece (e) { + // do nothing if sparePieces is not enabled + if (!config.sparePieces) return + + var piece = $(this).attr('data-piece') + + e = e.originalEvent + beginDraggingPiece( + 'spare', + piece, + e.changedTouches[0].pageX, + e.changedTouches[0].pageY + ) + } + + function mousemoveWindow (evt) { + if (isDragging) { + updateDraggedPiece(evt.pageX, evt.pageY) + } + } + + var throttledMousemoveWindow = throttle(mousemoveWindow, config.dragThrottleRate) + + function touchmoveWindow (evt) { + // do nothing if we are not dragging a piece + if (!isDragging) return + + // prevent screen from scrolling + evt.preventDefault() + + updateDraggedPiece(evt.originalEvent.changedTouches[0].pageX, + evt.originalEvent.changedTouches[0].pageY) + } + + var throttledTouchmoveWindow = throttle(touchmoveWindow, config.dragThrottleRate) + + function mouseupWindow (evt) { + // do nothing if we are not dragging a piece + if (!isDragging) return + + // get the location + var location = isXYOnSquare(evt.pageX, evt.pageY) + + stopDraggedPiece(location) + } + + function touchendWindow (evt) { + // do nothing if we are not dragging a piece + if (!isDragging) return + + // get the location + var location = isXYOnSquare(evt.originalEvent.changedTouches[0].pageX, + evt.originalEvent.changedTouches[0].pageY) + + stopDraggedPiece(location) + } + + function mouseenterSquare (evt) { + // do not fire this event if we are dragging a piece + // NOTE: this should never happen, but it's a safeguard + if (isDragging) return + + // exit if they did not provide a onMouseoverSquare function + if (!isFunction(config.onMouseoverSquare)) return + + // get the square + var square = $(evt.currentTarget).attr('data-square') + + // NOTE: this should never happen; defensive + if (!validSquare(square)) return + + // get the piece on this square + var piece = false + if (currentPosition.hasOwnProperty(square)) { + piece = currentPosition[square] + } + + // execute their function + config.onMouseoverSquare(square, piece, deepCopy(currentPosition), currentOrientation) + } + + function mouseleaveSquare (evt) { + // do not fire this event if we are dragging a piece + // NOTE: this should never happen, but it's a safeguard + if (isDragging) return + + // exit if they did not provide an onMouseoutSquare function + if (!isFunction(config.onMouseoutSquare)) return + + // get the square + var square = $(evt.currentTarget).attr('data-square') + + // NOTE: this should never happen; defensive + if (!validSquare(square)) return + + // get the piece on this square + var piece = false + if (currentPosition.hasOwnProperty(square)) { + piece = currentPosition[square] + } + + // execute their function + config.onMouseoutSquare(square, piece, deepCopy(currentPosition), currentOrientation) + } + + // ------------------------------------------------------------------------- + // Initialization + // ------------------------------------------------------------------------- + + function addEvents () { + // prevent "image drag" + $('body').on('mousedown mousemove', '.' + CSS.piece, stopDefault) + + // mouse drag pieces + $board.on('mousedown', '.' + CSS.square, mousedownSquare) + $container.on('mousedown', '.' + CSS.sparePieces + ' .' + CSS.piece, mousedownSparePiece) + + // mouse enter / leave square + $board + .on('mouseenter', '.' + CSS.square, mouseenterSquare) + .on('mouseleave', '.' + CSS.square, mouseleaveSquare) + + // piece drag + var $window = $(window) + $window + .on('mousemove', throttledMousemoveWindow) + .on('mouseup', mouseupWindow) + + // touch drag pieces + if (isTouchDevice()) { + $board.on('touchstart', '.' + CSS.square, touchstartSquare) + $container.on('touchstart', '.' + CSS.sparePieces + ' .' + CSS.piece, touchstartSparePiece) + $window + .on('touchmove', throttledTouchmoveWindow) + .on('touchend', touchendWindow) + } + } + + function initDOM () { + // create unique IDs for all the elements we will create + createElIds() + + // build board and save it in memory + $container.html(buildContainerHTML(config.sparePieces)) + $board = $container.find('.' + CSS.board) + + if (config.sparePieces) { + $sparePiecesTop = $container.find('.' + CSS.sparePiecesTop) + $sparePiecesBottom = $container.find('.' + CSS.sparePiecesBottom) + } + + // create the drag piece + var draggedPieceId = uuid() + $('body').append(buildPieceHTML('wP', true, draggedPieceId)) + $draggedPiece = $('#' + draggedPieceId) + + // TODO: need to remove this dragged piece element if the board is no + // longer in the DOM + + // get the border size + boardBorderSize = parseInt($board.css('borderLeftWidth'), 10) + + // set the size and draw the board + widget.resize() + } + + // ------------------------------------------------------------------------- + // Initialization + // ------------------------------------------------------------------------- + + setInitialState() + initDOM() + addEvents() + + // return the widget object + return widget + } // end constructor + + // TODO: do module exports here + window['Chessboard'] = constructor + + // support legacy ChessBoard name + window['ChessBoard'] = window['Chessboard'] + + // expose util functions + window['Chessboard']['fenToObj'] = fenToObj + window['Chessboard']['objToFen'] = objToFen +})() // end anonymous wrapper + +/* export Chessboard object if using node or any other CommonJS compatible + * environment */ +if (typeof exports !== 'undefined') { + exports.Chessboard = window.Chessboard +} \ No newline at end of file diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/chessboard-1.0.0.min.js b/projectexample/openingtrainer/chessopeningtrainer/static/js/chessboard-1.0.0.min.js new file mode 100644 index 00000000..73ea2870 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/chessboard-1.0.0.min.js @@ -0,0 +1,2 @@ +/*! chessboard.js v1.0.0 | (c) 2019 Chris Oakman | MIT License chessboardjs.com/license */ +!function(){"use strict";var z=window.jQuery,F="abcdefgh".split(""),r=20,A="…",W="1.8.3",e="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",G=pe(e),n=200,t=200,o=60,a=30,i=100,H={};function V(e,r,n){function t(){o=0,a&&(a=!1,s())}var o=0,a=!1,i=[],s=function(){o=window.setTimeout(t,r),e.apply(n,i)};return function(e){i=arguments,o?a=!0:s()}}function Z(){return"xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx".replace(/x/g,function(e){return(16*Math.random()|0).toString(16)})}function _(e){return JSON.parse(JSON.stringify(e))}function s(e){var r=e.split(".");return{major:parseInt(r[0],10),minor:parseInt(r[1],10),patch:parseInt(r[2],10)}}function ee(e,r){for(var n in r)if(r.hasOwnProperty(n))for(var t="{"+n+"}",o=r[n];-1!==e.indexOf(t);)e=e.replace(t,o);return e}function re(e){return"string"==typeof e}function ne(e){return"function"==typeof e}function p(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function c(e){return"fast"===e||"slow"===e||!!p(e)&&0<=e}function te(e){if(!re(e))return!1;var r=e.split("-");return 2===r.length&&(oe(r[0])&&oe(r[1]))}function oe(e){return re(e)&&-1!==e.search(/^[a-h][1-8]$/)}function u(e){return re(e)&&-1!==e.search(/^[bw][KQRNBP]$/)}function ae(e){if(!re(e))return!1;var r=(e=function(e){return e.replace(/8/g,"11111111").replace(/7/g,"1111111").replace(/6/g,"111111").replace(/5/g,"11111").replace(/4/g,"1111").replace(/3/g,"111").replace(/2/g,"11")}(e=e.replace(/ .+$/,""))).split("/");if(8!==r.length)return!1;for(var n=0;n<8;n++)if(8!==r[n].length||-1!==r[n].search(/[^kqrnbpKQRNBP1]/))return!1;return!0}function ie(e){if(!z.isPlainObject(e))return!1;for(var r in e)if(e.hasOwnProperty(r)&&(!oe(r)||!u(e[r])))return!1;return!0}function se(){return typeof window.$&&z.fn&&z.fn.jquery&&function(e,r){e=s(e),r=s(r);var n=1e5*e.major*1e5+1e5*e.minor+e.patch;return 1e5*r.major*1e5+1e5*r.minor+r.patch<=n}(z.fn.jquery,W)}function pe(e){if(!ae(e))return!1;for(var r,n=(e=e.replace(/ .+$/,"")).split("/"),t={},o=8,a=0;a<8;a++){for(var i=n[a].split(""),s=0,p=0;p';for(var i=0;i<8;i++){var s=n[i]+t;r+='
',f.showNotation&&(("white"===e&&1===t||"black"===e&&8===t)&&(r+='
'+n[i]+"
"),0===i&&(r+='
'+t+"
")),r+="
",o="white"===o?"black":"white"}r+='
',o="white"===o?"black":"white","white"===e?t-=1:t+=1}return ee(r,H)}(p,f.showNotation)),T(),f.sparePieces&&("white"===p?(t.html(x("black")),o.html(x("white"))):(t.html(x("white")),o.html(x("black"))))}function k(e){var r=_(c),n=_(e);ce(r)!==ce(n)&&(ne(f.onChange)&&f.onChange(r,n),c=e)}function E(e,r){for(var n in w)if(w.hasOwnProperty(n)){var t=w[n];if(e>=t.left&&e=t.top&&r -1) { + li[i].style.display = ""; + } else { + li[i].style.display = "none"; + } + } + } diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/js/opening_detail.js b/projectexample/openingtrainer/chessopeningtrainer/static/js/opening_detail.js new file mode 100644 index 00000000..7ecdfd7d --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/js/opening_detail.js @@ -0,0 +1,142 @@ +// used from making only legal moves example in chessboard.js examples, https://chessboardjs.com/examples#5000 +var board = null +var $status = $('#status') +var $fen = $('#fen') +var $pgn = $('#pgn') + +function onDragStart (source, piece, position, orientation) { + // do not pick up pieces if the game is over + if (game.isGameOver()) return false + + // only pick up pieces for the side to move + if ((game.turn() === 'w' && piece.search(/^b/) !== -1) || + (game.turn() === 'b' && piece.search(/^w/) !== -1)) { + return false + } + } + + function onDrop(source, target) { + try { + var move = game.move({ + from: source, + to: target, + promotion: 'q' + }); + + if (move === null) { + throw new Error('Invalid move'); + } else { + moves.push(move.san); + i++; + } + } catch (error) { + return 'snapback' + } + + updateStatus() + } + + // update the board position after the piece snap + // for castling, en passant, pawn promotion + function onSnapEnd () { + board.position(game.fen()) + } + // resets the board to a move-by-move chessboard until the PGN till the relevant openings + // hence the use of original moves + function reset() { + game = new Chess(); + board.position('start'); + i = 0; + playNextMove(original_moves); + moves = [...original_moves] + updateStatus(); + } + + // undoes the last move and removes it from the shallow copy moves + function takeBack() { + if (moves.length > 0) { + game.undo() + moves.pop() + i--; + console.log(i) + board.position(game.fen()) + updateStatus() + } + } + + function updateStatus () { + var status = '' + + var moveColor = 'White' + if (game.turn() === 'b') { + moveColor = 'Black' + } + + // checkmate? + if (game.isCheckmate()) { + status = 'Game over, ' + moveColor + ' is in checkmate.' + } + + // draw? + else if (game.isDraw()) { + status = 'Game over, drawn position' + } + + // game still on + else { + status = moveColor + ' to move' + + // check? + if (game.inCheck()) { + status += ', ' + moveColor + ' is in check' + } + } + + $status.html(status) + $fen.html(game.fen()) + $pgn.html(game.pgn()) + }; + +var game = new Chess() +var config= { + draggable: true, + dropOffBoard: 'snapback', + sparePieces: true, + position: 'start', + onDragStart: onDragStart, + onDrop: onDrop, + onSnapEnd: onSnapEnd, + pieceTheme: "/static/img/chesspieces/wikipedia/{piece}.png" +}; + +board = Chessboard('board', config) +var gamePgn = pgndata +var pgnDataString = pgndata.toString() +var original_moves = gamePgn.split(/\d+\.|\s+/).filter(Boolean) //using regional expressions and then a filter to get the necessary format to carry out a for loop +game.loadPgn(gamePgn); +var original_fen = game.fen() //making original copy to not interfere with game.fen() used in later functions +game.reset() +var moves = [...original_moves] //shallow copy to not interfere with use of original_moves +var i=0 +function playNextMove(moves) { + if (i >= moves.length) { + return; + } + + var move = moves[i]; + var moveObj = game.move(move); + + if (moveObj === null) { + alert('Invalid move: ' + move); + return; + } + + i++; + board.position(game.fen()); + setTimeout(function() { + playNextMove(moves); + }, 500); +} + +playNextMove(moves); + diff --git a/projectexample/openingtrainer/chessopeningtrainer/static/package.json b/projectexample/openingtrainer/chessopeningtrainer/static/package.json new file mode 100644 index 00000000..bf071a30 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/static/package.json @@ -0,0 +1,29 @@ +{ + "author": "Chris Oakman (http://chrisoakman.com/)", + "name": "@chrisoakman/chessboardjs", + "description": "JavaScript chessboard widget", + "homepage": "https://chessboardjs.com", + "license": "MIT", + "version": "1.0.0", + "repository": { + "type": "git", + "url": "git://github.com/oakmac/chessboardjs.git" + }, + "files": ["dist/"], + "dependencies": { + "jquery": ">=3.4.1" + }, + "devDependencies": { + "csso": "3.5.1", + "fs-plus": "3.1.1", + "kidif": "1.1.0", + "mustache": "2.3.0", + "standard": "10.0.2", + "uglify-js": "3.6.0" + }, + "scripts": { + "build": "standard lib/chessboard.js && node scripts/build.js", + "standard": "standard --fix lib/*.js website/js/*.js", + "website": "node scripts/website.js" + } +} diff --git a/projectexample/openingtrainer/chessopeningtrainer/templates/base.html b/projectexample/openingtrainer/chessopeningtrainer/templates/base.html new file mode 100644 index 00000000..9be5ae1f --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/templates/base.html @@ -0,0 +1,32 @@ +{% load static %} + + + + + + {% block title %} Chess Opening Trainer {% endblock %} + + + + + +
+ +
+
+ {% block content %} + {% endblock %} +
+ {% block scripts%} + + + + + + {% endblock %} + {% block extrascripts%} {% endblock %} + + \ No newline at end of file diff --git a/projectexample/openingtrainer/chessopeningtrainer/templates/opening_detail.html b/projectexample/openingtrainer/chessopeningtrainer/templates/opening_detail.html new file mode 100644 index 00000000..39cf31fb --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/templates/opening_detail.html @@ -0,0 +1,25 @@ +{% extends 'base.html' %} +{% load static %} +{% block title %}Opening Detail{% endblock %} +{% block extrascripts%} + + + +{% endblock %} +{% block content %} +
+

{{ opening.name }}

+

{{ opening.pgn }}

+ + +
+ +
+
+
+
+
+{% endblock %} + + + diff --git a/projectexample/openingtrainer/chessopeningtrainer/templates/opening_list.html b/projectexample/openingtrainer/chessopeningtrainer/templates/opening_list.html new file mode 100644 index 00000000..81c377ac --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/templates/opening_list.html @@ -0,0 +1,17 @@ +{% extends 'base.html' %} +{% load static %} +{% block content %} +

Openings

+ +
    + {% for opening in openings %} +
  1. + + {{opening.id}}. + {{ opening.eco }}: + {{ opening.name }} + +
  2. + {% endfor %} +
+{% endblock %} \ No newline at end of file diff --git a/projectexample/openingtrainer/chessopeningtrainer/tests.py b/projectexample/openingtrainer/chessopeningtrainer/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/projectexample/openingtrainer/chessopeningtrainer/views.py b/projectexample/openingtrainer/chessopeningtrainer/views.py new file mode 100644 index 00000000..89832a00 --- /dev/null +++ b/projectexample/openingtrainer/chessopeningtrainer/views.py @@ -0,0 +1,16 @@ +from django.shortcuts import render, get_object_or_404 +from django.http import HttpResponse +from chessopeningtrainer.models import Opening +from django.shortcuts import redirect + +def opening_list(request): + openings = Opening.objects.all() + return render(request, 'opening_list.html', {'openings': openings}) + +def opening_detail(request, opening_id): + opening = get_object_or_404(Opening, pk=opening_id) + return render(request, 'opening_detail.html', {'opening': opening}) + +def opening_redirect(request): + return redirect('/openings/') +# Create your views here. diff --git a/projectexample/openingtrainer/db.sqlite3 b/projectexample/openingtrainer/db.sqlite3 new file mode 100644 index 00000000..7a530d97 Binary files /dev/null and b/projectexample/openingtrainer/db.sqlite3 differ diff --git a/projectexample/openingtrainer/manage.py b/projectexample/openingtrainer/manage.py new file mode 100644 index 00000000..00244d67 --- /dev/null +++ b/projectexample/openingtrainer/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'openingtrainer.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/projectexample/openingtrainer/openingtrainer/__init__.py b/projectexample/openingtrainer/openingtrainer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/projectexample/openingtrainer/openingtrainer/__pycache__/__init__.cpython-311.pyc b/projectexample/openingtrainer/openingtrainer/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 00000000..be1dc81b Binary files /dev/null and b/projectexample/openingtrainer/openingtrainer/__pycache__/__init__.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/openingtrainer/__pycache__/settings.cpython-311.pyc b/projectexample/openingtrainer/openingtrainer/__pycache__/settings.cpython-311.pyc new file mode 100644 index 00000000..bc96c425 Binary files /dev/null and b/projectexample/openingtrainer/openingtrainer/__pycache__/settings.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/openingtrainer/__pycache__/urls.cpython-311.pyc b/projectexample/openingtrainer/openingtrainer/__pycache__/urls.cpython-311.pyc new file mode 100644 index 00000000..8a558ad4 Binary files /dev/null and b/projectexample/openingtrainer/openingtrainer/__pycache__/urls.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/openingtrainer/__pycache__/wsgi.cpython-311.pyc b/projectexample/openingtrainer/openingtrainer/__pycache__/wsgi.cpython-311.pyc new file mode 100644 index 00000000..18f43575 Binary files /dev/null and b/projectexample/openingtrainer/openingtrainer/__pycache__/wsgi.cpython-311.pyc differ diff --git a/projectexample/openingtrainer/openingtrainer/asgi.py b/projectexample/openingtrainer/openingtrainer/asgi.py new file mode 100644 index 00000000..414cdce8 --- /dev/null +++ b/projectexample/openingtrainer/openingtrainer/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for openingtrainer project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'openingtrainer.settings') + +application = get_asgi_application() diff --git a/projectexample/openingtrainer/openingtrainer/settings.py b/projectexample/openingtrainer/openingtrainer/settings.py new file mode 100644 index 00000000..4510a1ca --- /dev/null +++ b/projectexample/openingtrainer/openingtrainer/settings.py @@ -0,0 +1,126 @@ +""" +Django settings for openingtrainer project. + +Generated by 'django-admin startproject' using Django 4.2. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +from pathlib import Path +import os + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-$swr2-1_e!a-sppj!47j@#@)=8n2uho4t4r&5xfu=d!zj)yza1' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'chessopeningtrainer' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'openingtrainer.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'openingtrainer.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = 'static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'static') + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/projectexample/openingtrainer/openingtrainer/urls.py b/projectexample/openingtrainer/openingtrainer/urls.py new file mode 100644 index 00000000..f113e8bb --- /dev/null +++ b/projectexample/openingtrainer/openingtrainer/urls.py @@ -0,0 +1,26 @@ +""" +URL configuration for openingtrainer1 project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path +from chessopeningtrainer.views import opening_detail, opening_list, opening_redirect + +urlpatterns = [ + path('', opening_redirect), + path('admin/', admin.site.urls), + path('openings/', opening_list, name='opening_list'), + path('openings//', opening_detail, name='opening_detail'), +] diff --git a/projectexample/openingtrainer/openingtrainer/wsgi.py b/projectexample/openingtrainer/openingtrainer/wsgi.py new file mode 100644 index 00000000..f49d0b7a --- /dev/null +++ b/projectexample/openingtrainer/openingtrainer/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for openingtrainer1 project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'openingtrainer.settings') + +application = get_wsgi_application() diff --git a/projectexample/openingtrainer/package-lock.json b/projectexample/openingtrainer/package-lock.json new file mode 100644 index 00000000..0691f8cc --- /dev/null +++ b/projectexample/openingtrainer/package-lock.json @@ -0,0 +1,21 @@ +{ + "name": "openingtrainer", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "openingtrainer", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "chess.js": "^1.0.0-beta.5" + } + }, + "node_modules/chess.js": { + "version": "1.0.0-beta.5", + "resolved": "https://registry.npmjs.org/chess.js/-/chess.js-1.0.0-beta.5.tgz", + "integrity": "sha512-ZmSBraFoGrLCiC7m5vwPax02KoKFjC+3uQrlDYKoORUi8MY+7qceDXQW1ho0Gt6pylGCzTTTBa6gy55bOXp2Jw==" + } + } +} diff --git a/projectexample/openingtrainer/package.json b/projectexample/openingtrainer/package.json new file mode 100644 index 00000000..6e31b92f --- /dev/null +++ b/projectexample/openingtrainer/package.json @@ -0,0 +1,14 @@ +{ + "name": "openingtrainer", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "chess.js": "^1.0.0-beta.5" + } +}