5. Sakk

A feladat lényegében a 8. szerdai gyakorlat és 7. csütörtöki gyakorlat wiki oldalán található szorgalmi feladat. A feladatok végén zárójelben megtaláljátok, hogy melyik feladatrész hány pontot ér. A II. zhra kiváló gyakorlás a feladat, hiszen nagyjából minden előjön benne, amit OOP témakörben tanultunk.

5/1. Piece

Definiáljuk a Piece osztályt.
Ez reprezentál egy sakkbábut, tároljuk a pozícióját a táblán két koordinátával, a színét (black/white), illetve a __str__ írja ki, hogy hol áll (A2, G3 etc.)! (0.5 pont)

5/2. Queen, Knight és Pawn

Definiáljuk a bábu leszármazottjaként a Queen, Knight és Pawn osztályokat!
Legyen a leszármazottaknak is __str__ függvénye úgy, hogy az már a figura típusát is kiírja. (Nem muszáj a leszármazott osztályban megvalósítani, lehet az ősosztályban is)
Érdemes megnézni a sakk figurák unicode kódját vagy az egybetűs angol nevüket.
Minden leszármazottnak legyen egy .move(pos) metódusa, ahol a pos egy sztring (A3, G2 etc.)! Mozgassuk el a bábut, ha szabályos a lépés! Ha a lépés szabályos volt, térjünk vissza True-val, egyébként False-szal! (Típusonként 0.5 pont, összesen 1.5 pont.)

5/3. PieceMoveError

Definiáljuk a PieceMoveError osztályt.
Ha szabálytalan a lépés, dobjunk egy ilyen exceptiont és kezeljük le! (0.5 pont)

5/4. Board

Legyen most egy Board osztályunk!
Tároljuk listában a figurákat!
Implementáljunk egy add metódust amivel hozzá tudunk adni bábúkat a táblához. Legyen a Board osztálynak egy move(player, pos1, pos2) metódusa, ami a pos1 pozícióban álló bábut a pos2 helyre mozgatja, ha a lépés szabályos!
Érdemes először egy .occupied(pos) metódust implementálni a Board osztályban.
A normál szabályok mellett vegyük figyelembe, hogy áll-e ott más bábu! Ha az a bábu sajátunk, a lépés szabálytalan, ha az ellenfél bábuja, akkor távolítsuk el a pályáról, hiszen leütöttük!
Legyen __str__ függvénye a Board'-nak! Rajzolja/Írja ki valamilyen ízléses formában a táblát.
Írjuk meg a Board __iter__ és __next__ metódusait úgy, hogy for ciklus végigmenve egy sakktáblán írja ki A1,A2,...,H8 sorrendben végigmenve a táblán lévő bábukat. (Bábuk pozícióját és típusát is.) (0.5 pont a konstruktor + add metódus, 1 pont a move metódus (occupieddal vagy occupied nélkül is), 0.5 pont a __str__, 0.5 pont az __iter__ + __next__ metódusok, összesen 2.5 pont.)