Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| krouzek:uloha:sachy1 [2023/10/17 20:18] – admin | krouzek:uloha:sachy1 [2023/11/15 20:54] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 4: | Řádek 4: | ||
| - vytvořte funkci která pro zadanou pozici detekuje šach | - vytvořte funkci která pro zadanou pozici detekuje šach | ||
| - pozice kdy je šach a všechny tahy vedou do šachu => šach mat (konec hry) | - pozice kdy je šach a všechny tahy vedou do šachu => šach mat (konec hry) | ||
| + | - pozice kdy není šach, ale všechny tahy vedou do šachu => pat (remíza) | ||
| - omezte vygenerované kombinace z 1 = nepovolte žádné tahy, které vedou do šachu | - omezte vygenerované kombinace z 1 = nepovolte žádné tahy, které vedou do šachu | ||
| - | - 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. | + | - 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 zobrazte. |
| + | * Jsou všechny tahy platné? Pokud ne, opravte. | ||
| + | * Končí hra vždy výhrou nějaké strany? | ||
| ==== Architektura programu ==== | ==== Architektura programu ==== | ||
| Řádek 11: | Řádek 14: | ||
| * Můžete svůj program dělat v klasické stránce - výstup můžete rovnou " | * Můžete svůj program dělat v klasické stránce - výstup můžete rovnou " | ||
| - | Můžeme program napsat v NodeJS a potom jeho výstup poslat do klienta (jako JSON). Klient potom výstup zobrazí. | + | **Nejrobustnější**: |
| 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) | 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) | ||
| + | |||
| + | Zajímavou možností pak je rozdělit práci bez problémů na dva programátory = jeden dělá zobrazovadlo a klikadlo, druhý implementuje pravidla šachů - a shodnete se na nějakém rozhraní. | ||
| + | |||
| + | Vygenerovaný příklad takového klient-server rozhraní najdete na konci stránky. | ||
| + | |||
| + | ==== Data Structures ==== | ||
| + | |||
| + | <code json> | ||
| + | - **Game State Object**: | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code json> | ||
| + | - **Active Game List Object**: | ||
| + | { | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | ] | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | This is a basic outline of a RESTful API for a multiplayer chess game. You may need to expand on this depending on your specific requirements, | ||
| Řádek 157: | Řádek 201: | ||
| </ | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Client/ | ||
| + | > Create an interface for a multiplayer chess game between the client (visualizing the game, allowing the players to select next move) and the server (implementing the chess game logic). RESTApi | ||
| + | |||
| + | Poznámky: | ||
| + | * Všimněte si, že návrh vlastně neřeší že hrajeme šachy, ale věnuje se spíš správě herních sessions | ||
| + | * Pravděpodobně by podobná šablona šla použít na libovolnou tahovou hru | ||
| + | * Není řešena autentizace uživatelů, | ||
| + | * Problém který není řešen: endpoint //GET / | ||
| + | |||
| + | ==== Endpoints ==== | ||
| + | |||
| + | 1. **Create a New Game** | ||
| + | - Endpoint: `POST /api/games` | ||
| + | - Description: | ||
| + | - Request: None | ||
| + | - Response: `{" | ||
| + | |||
| + | 2. **Get Game State** | ||
| + | - Endpoint: `GET / | ||
| + | - Description: | ||
| + | - Request: None | ||
| + | - Response: Detailed game state JSON | ||
| + | |||
| + | 3. **Make a Move** | ||
| + | - Endpoint: `POST / | ||
| + | - Description: | ||
| + | - Request: `{ " | ||
| + | - Response: `{" | ||
| + | |||
| + | 4. **List Active Games** | ||
| + | - Endpoint: `GET /api/games` | ||
| + | - Description: | ||
| + | - Request: None | ||
| + | - Response: List of active game objects | ||
| + | |||
| + | 5. **Join a Game** | ||
| + | - Endpoint: `POST / | ||
| + | - Description: | ||
| + | - Request: `{ " | ||
| + | - Response: `{" | ||
| + | |||
| + | 6. **Resign from the Game** | ||
| + | - Endpoint: `POST / | ||
| + | - Description: | ||
| + | - Request: None | ||
| + | - Response: `{" | ||