diff --git a/chess.apkg b/chess.apkg
index fc6f71d..859e8fe 100644
Binary files a/chess.apkg and b/chess.apkg differ
diff --git a/generate_deck.py b/generate_deck.py
index ef130b1..117f320 100755
--- a/generate_deck.py
+++ b/generate_deck.py
@@ -18,21 +18,19 @@ deck = genanki.Deck(
)
model= genanki.Model(
- 614661503,
- 'Simple Model',
+ 1120858226,
+ 'Chess Model',
fields=[
- {'name': 'Slug'},
- {'name': 'Square'},
- {'name': 'Piece'},
+ {'name': 'guid'},
{'name': 'Question'},
{'name': 'Answer'},
{'name': 'Board'},
],
templates=[
{
- 'name': 'Card 1',
- 'qfmt': '{{Question}} {{Square}}',
- 'afmt': '{{FrontSide}}
{{Answer}} {{Board}}
',
+ 'name': 'Base Card with SVG board in answer',
+ 'qfmt': '{{Question}}',
+ 'afmt': '{{FrontSide}}
{{Answer}} {{Board}}',
},
]
)
@@ -41,34 +39,39 @@ class ChessNote(genanki.Note):
@property
def guid(self):
# slug-square-piece
- return genanki.guid_for(self.fields[0], self.fields[1], self.fields[2])
+ return genanki.guid_for(self.fields[0])
-board = chess.BaseBoard()
-board.clear_board()
-
-notes = []
-for sq_name in chess.SQUARE_NAMES:
- # square colors
+def square_color(sq_name):
sq_id = chess.parse_square(sq_name)
sq_file = chess.square_file(sq_id)
sq_rank = chess.square_rank(sq_id)
- sq_color = 'black' if (sq_file+sq_rank) % 2 == 0 else 'white'
- board_svg = chess.svg.board(
- board,
- squares=chess.SquareSet([sq_id]),
- )
- note = ChessNote(
- model=model,
- fields=[
- 'color',
- sq_name,
- '',
- 'What is the color of square',
- sq_color,
- board_svg,
- ],
- )
- notes.append(note)
+
+ guid = f'{sq_name}-color'
+ question = f'What is the color of square {sq_name}?'
+ answer = 'black' if (sq_file+sq_rank) % 2 == 0 else 'white'
+ board_svg = chess.svg.board(None, squares=sq_id)
+ return ChessNote(model, [guid, question, answer, board_svg])
+
+def knight_moves(sq_name):
+ board = chess.Board().empty()
+ sq_id = chess.parse_square(sq_name)
+ board.set_piece_at(sq_id, chess.Piece(chess.KNIGHT, chess.WHITE))
+ attacks = board.attacks(sq_id)
+
+ guid = f'{sq_name}-knight-moves' #guid
+ question = f'Where can the knight move from square {sq_name}?'
+ answer = ', '.join(chess.SQUARE_NAMES[sq] for sq in list(attacks))
+ board_svg = chess.svg.board(board, fill=dict.fromkeys(attacks, "#cc0000cc"))
+ # return ChessNote(model, [guid, question, answer, board_svg])
+ return ChessNote(model, [guid,question,answer,board_svg])
+
+def notes():
+ # square colors
+ for sq_name in chess.SQUARE_NAMES:
+ yield square_color(sq_name)
+ yield knight_moves(sq_name)
+
+notes = list(notes())
# randomize the order of the notes
random.shuffle(notes)
@@ -76,4 +79,4 @@ for note in notes:
deck.add_note(note)
genanki.Package(deck).write_to_file('chess.apkg')
-print('Deck generated: chess.apkg')
+print(f'Created deck chess.apkg with {len(deck.notes)} notes')