krouzek:uloha:sachy1

Toto je starší verze dokumentu!


Šachy

Pro zadanou šachovnici

  1. vygenerujte všechny kombinace tahů daného hráče v jednoduchém případě (neuvažujte rošády, braní mimochodem, výměnu pěšců za figury)
  2. vytvořte funkci která pro zadanou pozici detekuje šach
  3. pozice kdy je šach a všechny tahy vedou do šachu ⇒ šach mat (konec hry)
  4. omezte vygenerované kombinace z 1 = nepovolte žádné tahy, které vedou do šachu
  5. nechte počítač hrát proti počítači (tj. střídání tahů bílý - černý), zcela náhodné tahy. Nějak si hru vizualizujte.
  • Můžete svůj program dělat v NodeJS - textový vstup a výstup.
  • Můžete svůj program dělat v klasické stránce - výstup můžete rovnou „rendrovat“ na stránku - tj. po každém tahu aktualizovat hodnoty „šachovnice“ - HTML tabulky (nejsnazší)

Můžeme program napsat v NodeJS a potom jeho výstup poslat do klienta (jako JSON). Klient potom výstup zobrazí. Tímto komplikovanějším řešením umožníme budoucí síťovou hru více hráčů proti sobě. Také nás to donutí striktně oddělit logiku (v nodejs projektu) od zobrazení a UI (ve stránce)

Create a JSON formatted example input of a chess solving program. Use all chess figure types in the example.
{
  "board": {
    "a8": "r",
    "b8": "n",
    "c8": "b",
    "d8": "q",
    "e8": "k",
    "f8": "b",
    "g8": "n",
    "h8": "r",
    "a7": "p",
    "b7": "p",
    "c7": "p",
    "d7": "p",
    "e7": "p",
    "f7": "p",
    "g7": "p",
    "h7": "p",
    "a2": "P",
    "b2": "P",
    "c2": "P",
    "d2": "P",
    "e2": "P",
    "f2": "P",
    "g2": "P",
    "h2": "P",
    "a1": "R",
    "b1": "N",
    "c1": "B",
    "d1": "Q",
    "e1": "K",
    "f1": "B",
    "g1": "N",
    "h1": "R"
  },
  "turn": "white",
  "castling_rights": "KQkq",
  "en_passant_target": "e3",
  "halfmove_clock": 25,
  "fullmove_number": 12
}

In this JSON input:

  • The board field represents the current state of the chessboard. Each square is represented by its coordinates (e.g., „a8“ for the square in the bottom-left corner) and the piece occupying it. Lowercase letters represent black pieces, and uppercase letters represent white pieces. Here, „r“ is for a black rook, „n“ for a black knight, „b“ for a black bishop, „q“ for a black queen, „k“ for a black king, „p“ for black pawns, and their uppercase counterparts for white pieces.
  • The turn field indicates whose turn it is to move, which is „white“ in this example.
  • The castling_rights field indicates the available castling rights. „KQkq“ means both white and black can still castle kingside and queenside.
  • The en_passant_target field specifies the target square for en passant captures. In this case, it's „e3“.
  • The halfmove_clock field represents the number of half-moves since the last pawn move or capture.
  • The fullmove_number field indicates the number of the current full move, where a full move consists of both players making a move.
  • castling = rošáda
  • en passant = tah mimochodem

ChatGPT nejspíš vychází z https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation a podobných zdrojů

{
   "chess_pieces": [
    { "type": "rook", "color": "black", "position": "a8" },
    { "type": "knight", "color": "black", "position": "b8" },
    { "type": "bishop", "color": "black", "position": "c8" },
    { "type": "queen", "color": "black", "position": "d8" },
    { "type": "king", "color": "black", "position": "e8" },
    { "type": "bishop", "color": "black", "position": "f8" },
    { "type": "knight", "color": "black", "position": "g8" },
    { "type": "rook", "color": "black", "position": "h8" },
    { "type": "pawn", "color": "black", "position": "a7" },
    { "type": "pawn", "color": "black", "position": "b7" },
    { "type": "pawn", "color": "black", "position": "c7" },
    { "type": "pawn", "color": "black", "position": "d7" },
    { "type": "pawn", "color": "black", "position": "e7" },
    { "type": "pawn", "color": "black", "position": "f7" },
    { "type": "pawn", "color": "black", "position": "g7" },
    { "type": "pawn", "color": "black", "position": "h7" },
    { "type": "pawn", "color": "white", "position": "a2" },
    { "type": "pawn", "color": "white", "position": "b2" },
    { "type": "pawn", "color": "white", "position": "c2" },
    { "type": "pawn", "color": "white", "position": "d2" },
    { "type": "pawn", "color": "white", "position": "e2" },
    { "type": "pawn", "color": "white", "position": "f2" },
    { "type": "pawn", "color": "white", "position": "g2" },
    { "type": "pawn", "color": "white", "position": "h2" },
    { "type": "rook", "color": "white", "position": "a1" },
    { "type": "knight", "color": "white", "position": "b1" },
    { "type": "bishop", "color": "white", "position": "c1" },
    { "type": "queen", "color": "white", "position": "d1" },
    { "type": "king", "color": "white", "position": "e1" },
    { "type": "bishop", "color": "white", "position": "f1" },
    { "type": "knight", "color": "white", "position": "g1" },
    { "type": "rook", "color": "white", "position": "h1" }
  ]
}

A ještě lépe parsovatelná pozice:

{
  "chess_pieces": [
    { "type": "rook", "color": "black", "position": { "x": 0, "y": 7 } },
    { "type": "knight", "color": "black", "position": { "x": 1, "y": 7 } },
    { "type": "bishop", "color": "black", "position": { "x": 2, "y": 7 } },
    { "type": "queen", "color": "black", "position": { "x": 3, "y": 7 } },
    { "type": "king", "color": "black", "position": { "x": 4, "y": 7 } },
    { "type": "bishop", "color": "black", "position": { "x": 5, "y": 7 } },
    { "type": "knight", "color": "black", "position": { "x": 6, "y": 7 } },
    { "type": "rook", "color": "black", "position": { "x": 7, "y": 7 } },
    { "type": "pawn", "color": "black", "position": { "x": 0, "y": 6 } },
    { "type": "pawn", "color": "black", "position": { "x": 1, "y": 6 } },
    { "type": "pawn", "color": "black", "position": { "x": 2, "y": 6 } },
    { "type": "pawn", "color": "black", "position": { "x": 3, "y": 6 } },
    { "type": "pawn", "color": "black", "position": { "x": 4, "y": 6 } },
    { "type": "pawn", "color": "black", "position": { "x": 5, "y": 6 } },
    { "type": "pawn", "color": "black", "position": { "x": 6, "y": 6 } },
    { "type": "pawn", "color": "black", "position": { "x": 7, "y": 6 } },
    { "type": "pawn", "color": "white", "position": { "x": 0, "y": 1 } },
    { "type": "pawn", "color": "white", "position": { "x": 1, "y": 1 } },
    { "type": "pawn", "color": "white", "position": { "x": 2, "y": 1 } },
    { "type": "pawn", "color": "white", "position": { "x": 3, "y": 1 } },
    { "type": "pawn", "color": "white", "position": { "x": 4, "y": 1 } },
    { "type": "pawn", "color": "white", "position": { "x": 5, "y": 1 } },
    { "type": "pawn", "color": "white", "position": { "x": 6, "y": 1 } },
    { "type": "pawn", "color": "white", "position": { "x": 7, "y": 1 } },
    { "type": "rook", "color": "white", "position": { "x": 0, "y": 0 } },
    { "type": "knight", "color": "white", "position": { "x": 1, "y": 0 } },
    { "type": "bishop", "color": "white", "position": { "x": 2, "y": 0 } },
    { "type": "queen", "color": "white", "position": { "x": 3, "y": 0 } },
    { "type": "king", "color": "white", "position": { "x": 4, "y": 0 } },
    { "type": "bishop", "color": "white", "position": { "x": 5, "y": 0 } },
    { "type": "knight", "color": "white", "position": { "x": 6, "y": 0 } },
    { "type": "rook", "color": "white", "position": { "x": 7, "y": 0 } }
  ]
}
  • krouzek/uloha/sachy1.1697573918.txt.gz
  • Poslední úprava: 2023/11/15 20:54
  • (upraveno mimo DokuWiki)