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..919a0c2 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')