New job: chess puzzles
This commit is contained in:
parent
0e16ea75fb
commit
8d533e891a
71
jobs/chess_puzzle.py
Normal file
71
jobs/chess_puzzle.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import random
|
||||||
|
from .base import Job
|
||||||
|
|
||||||
|
class ChessPuzzleJob(Job):
|
||||||
|
def get_name(self):
|
||||||
|
return "SACHOVE ULOHY"
|
||||||
|
|
||||||
|
def print_body(self, p):
|
||||||
|
# (FEN, Instruction, Solution)
|
||||||
|
puzzles = [
|
||||||
|
("r1bqkb1r/pppp1ppp/2n2n2/4p2Q/2B1P3/8/PPPP1PPP/RNB1K1NR w KQkq - 4 4", "Bily na tahu. Mat 1. tahem.", "Qxf7# (Scholar's Mate)"),
|
||||||
|
("rnb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR b KQkq - 1 3", "Cerny na tahu. Mat 1. tahem.", "Qh4# (Fool's Mate)"),
|
||||||
|
("6k1/5ppp/8/8/8/8/5PPP/4R1K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Re8# (Back Rank Mate)"),
|
||||||
|
("3r2k1/p4ppp/1p6/8/8/8/P4PPP/3R2K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rxd8#"),
|
||||||
|
("6rk/5p1p/3N4/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Nf7# (Smothered Mate)"),
|
||||||
|
("8/4N1pk/8/7R/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh5# (Anastasia's Mate)"),
|
||||||
|
("7k/R7/5N2/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh7# (Arabian Mate)"),
|
||||||
|
("2kr4/1pp5/B7/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Ba6# (Boden's Mate)"),
|
||||||
|
("7k/6pp/6P1/7Q/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qh7#"),
|
||||||
|
("6k1/5p1p/5PpQ/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qg7# (Lolli's Mate)"),
|
||||||
|
("3k4/5ppp/8/6B1/8/8/5PPP/3R2K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rd8# (Opera Mate)"),
|
||||||
|
("6k1/5P2/8/8/8/8/5PPP/6KR w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh8# (Anderssen's Mate)"),
|
||||||
|
("7k/5ppp/8/7Q/8/2B5/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qxh7# (Damiano's Bishop Mate)"),
|
||||||
|
("4k3/8/4K3/8/8/8/8/5Q2 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qf7# (Dovetail Mate)"),
|
||||||
|
("2rkr3/8/2Q5/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qd7# (Swallow's Tail Mate)"),
|
||||||
|
("3rkr2/8/4Q3/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qe6# (Epaulette Mate)"),
|
||||||
|
("7k/6p1/8/8/2B5/8/5PPP/R5K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh1# (Greco's Mate)"),
|
||||||
|
("6k1/5pP1/5N2/8/8/8/5PPP/3R2K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rd8# (Hook Mate)"),
|
||||||
|
("8/8/8/8/8/5K2/6Q1/7k w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qg2#"),
|
||||||
|
("k7/1R6/8/8/8/8/8/R5K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Ra8# (Ladder Mate)")
|
||||||
|
]
|
||||||
|
|
||||||
|
puzzle = random.choice(puzzles)
|
||||||
|
fen, instruction, solution = puzzle
|
||||||
|
|
||||||
|
p.text(f"{instruction}\n\n")
|
||||||
|
self.print_board(p, fen)
|
||||||
|
p.text("\n")
|
||||||
|
|
||||||
|
p.text("Legenda: K=Kral, Q=Dama, R=Vez\n")
|
||||||
|
p.text(" B=Strelec, N=Jezdec, P=Pesec\n")
|
||||||
|
p.text(" (Velka=Bily, mala=Cerny)\n\n")
|
||||||
|
|
||||||
|
p.text("Reseni (naskenuj):\n")
|
||||||
|
p.qr(solution, size=6, native=True)
|
||||||
|
|
||||||
|
def print_board(self, p, fen):
|
||||||
|
board_str = fen.split(' ')[0]
|
||||||
|
rows = board_str.split('/')
|
||||||
|
|
||||||
|
# Center the board
|
||||||
|
p.set(align='center')
|
||||||
|
|
||||||
|
# Top border
|
||||||
|
p.text(" +-----------------+\n")
|
||||||
|
|
||||||
|
for i, row in enumerate(rows):
|
||||||
|
rank = 8 - i
|
||||||
|
line = f"{rank} | "
|
||||||
|
for char in row:
|
||||||
|
if char.isdigit():
|
||||||
|
count = int(char)
|
||||||
|
line += ". " * count
|
||||||
|
else:
|
||||||
|
line += f"{char} "
|
||||||
|
line += "|\n"
|
||||||
|
p.text(line)
|
||||||
|
|
||||||
|
p.text(" +-----------------+\n")
|
||||||
|
p.text(" a b c d e f g h\n")
|
||||||
|
p.set(align='left')
|
||||||
@ -2,6 +2,7 @@ from escpos.printer import Usb, Dummy
|
|||||||
from escpos.exceptions import USBNotFoundError
|
from escpos.exceptions import USBNotFoundError
|
||||||
from jobs.math_homework import MathHomeworkJob
|
from jobs.math_homework import MathHomeworkJob
|
||||||
from jobs.unit_conversion import UnitConversionJob
|
from jobs.unit_conversion import UnitConversionJob
|
||||||
|
from jobs.chess_puzzle import ChessPuzzleJob
|
||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# CONFIGURATION
|
# CONFIGURATION
|
||||||
@ -38,7 +39,8 @@ def get_printer():
|
|||||||
|
|
||||||
JOBS = [
|
JOBS = [
|
||||||
MathHomeworkJob(),
|
MathHomeworkJob(),
|
||||||
UnitConversionJob()
|
UnitConversionJob(),
|
||||||
|
ChessPuzzleJob()
|
||||||
]
|
]
|
||||||
|
|
||||||
def run_tui():
|
def run_tui():
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user