Informatika2-2018/Gyakorlat8

A MathWikiből
(Változatok közti eltérés)
a (Sakk)
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
7. sor: 7. sor:
 
* Legyen a leszármazottaknak (King, Pawn) is '''__repr__''' 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)
 
* Legyen a leszármazottaknak (King, Pawn) is '''__repr__''' 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: [https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode]
 
** Érdemes megnézni a sakk figurák unicode kódját: [https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode]
 +
** Vagy az [https://en.wikipedia.org/w/index.php?title=Algebraic_notation_(chess)#Piece_names_in_various_languages 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!
 
* 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!
 
* Definiáljuk a '''PieceMoveError''' osztályt. Ha szabálytalan a lépés, dobjunk egy ilyen exceptiont és kezeljük le!
 
* Definiáljuk a '''PieceMoveError''' osztályt. Ha szabálytalan a lépés, dobjunk egy ilyen exceptiont és kezeljük le!
Legyen most egy '''Board''' osztályunk! Két listát tároljunk: '''white''' és '''black''', a játékosok bábuival!
+
Legyen most egy '''Board''' osztályunk! Tároljuk listában a figurákat!
* 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! Ehhez definiáljuk át a '''King''' és a '''Pawn''' osztályok '''move''' metódusát, hogy paraméterül kapjon egy '''board''' változót, ami a tábla!
+
* 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!
 
** 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!
** Írjuk meg a '''Knight, Rook, Bishop''' és '''Queen''' osztályokat!
+
* Írjuk meg a '''Knight, Rook, Bishop''' és '''Queen''' osztályokat!
*** Kezdjük a '''Rook'''-kal, ez a legegyszerűbb! Ügyeljünk rá, hogy a ne lépjünk át másik bábun, hiszen ez szabálytalan!
+
** Kezdjük a '''Rook'''-kal, ez a legegyszerűbb! Ügyeljünk rá, hogy a ne lépjünk át másik bábun, hiszen ez szabálytalan!
*** Másodikként a '''Knight''' osztályt írjuk meg! A ló ugorhat, tehát a szabályok írásánál ezt nem kell figyelembe venni.
+
** Másodikként a '''Knight''' osztályt írjuk meg! A ló ugorhat, tehát a szabályok írásánál ezt nem kell figyelembe venni.
*** A '''Bishop''' után a '''Queen''' lépését könnyű összerakni.
+
** A '''Bishop''' után a '''Queen''' lépését könnyű összerakni.
** Oldjuk meg, hogy a '''Pawn''' ne állhasson az ellenfél alapvonalán!
+
* A '''Board''' osztályon belül definiáljunk egy '''check''' metódust. Térjen vissza azzal a színnel, amelyik király sakkban áll, vagy üres string-gel ha semelyik.
* A '''Board''' osztályon belül definiáljunk egy '''check''' metódust. Térjen vissza azzal a színnel, amelyik király sakkban áll!
+
 
** Definiáljuk át a lépést, hogy az csak akkor legyen szabályos, ha a lépő játékos királya nem áll sakkban a lépés után!
 
** Definiáljuk át a lépést, hogy az csak akkor legyen szabályos, ha a lépő játékos királya nem áll sakkban a lépés után!
 
* Legyen '''__repr__''' függvénye a '''Board'''-nak!
 
* Legyen '''__repr__''' függvénye a '''Board'''-nak!
25. sor: 27. sor:
 
=== CLI ===
 
=== CLI ===
 
* Játszunk a sakk-kal úgy, hogy <tt>raw_input</tt>-tal kérünk a felhasználótól bemenetet, egyszer a világostól, egyszer a sötéttől és aszerint lép a tábla.
 
* Játszunk a sakk-kal úgy, hogy <tt>raw_input</tt>-tal kérünk a felhasználótól bemenetet, egyszer a világostól, egyszer a sötéttől és aszerint lép a tábla.
** Ehhez érdemes implementálni az <a href="https://en.wikipedia.org/wiki/Algebraic_notation_(chess)">algebrai notációt</a> (Bf5, Qc3, Ne2, Kcd4, Kxd5 stb.) és lépjünk eszerint!  
+
** Ehhez érdemes implementálni az [https://en.wikipedia.org/wiki/Algebraic_notation_(chess) algebrai notációt] (Bf5, Qc3, Ne2, Kcd4, Kxd5 stb.) és lépjünk eszerint!  
 
* Minden lépés után írjuk ki a táblát (ha megírtuk a <tt>__repr__</tt>-et akkor ez csak egy <tt>print</tt>).
 
* Minden lépés után írjuk ki a táblát (ha megírtuk a <tt>__repr__</tt>-et akkor ez csak egy <tt>print</tt>).
 
* Próbáljuk ki parancssorból.
 
* Próbáljuk ki parancssorból.
  
 
[[Informatika2-2018/Gyakorlat7|előző]] [[Informatika2-2018|fel]] [[Informatika2-2018/Gyakorlat9|következő]]
 
[[Informatika2-2018/Gyakorlat7|előző]] [[Informatika2-2018|fel]] [[Informatika2-2018/Gyakorlat9|következő]]

A lap jelenlegi, 2018. április 11., 10:23-kori változata

előző fel következő

8. gyakorlat

Sakk

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 koodinátával, a színét (black/white), illetve a __repr__ írja ki, hogy hol áll (A2, G3 etc.)!

  • Definiáljuk a bábu leszármazottjaként a King és a Pawn osztályokat!
  • Legyen a leszármazottaknak (King, Pawn) is __repr__ 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)
  • 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!
  • Definiáljuk a PieceMoveError osztályt. Ha szabálytalan a lépés, dobjunk egy ilyen exceptiont és kezeljük le!

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!
  • Írjuk meg a Knight, Rook, Bishop és Queen osztályokat!
    • Kezdjük a Rook-kal, ez a legegyszerűbb! Ügyeljünk rá, hogy a ne lépjünk át másik bábun, hiszen ez szabálytalan!
    • Másodikként a Knight osztályt írjuk meg! A ló ugorhat, tehát a szabályok írásánál ezt nem kell figyelembe venni.
    • A Bishop után a Queen lépését könnyű összerakni.
  • A Board osztályon belül definiáljunk egy check metódust. Térjen vissza azzal a színnel, amelyik király sakkban áll, vagy üres string-gel ha semelyik.
    • Definiáljuk át a lépést, hogy az csak akkor legyen szabályos, ha a lépő játékos királya nem áll sakkban a lépés után!
  • Legyen __repr__ függvénye a Board-nak!

Miután mindez megvan, közel állunk ahhoz, hogy tudjunk sakkozni. Definiáljuk a start metódust, ami kezdőállípotba teszi a táblát.

CLI

  • Játszunk a sakk-kal úgy, hogy raw_input-tal kérünk a felhasználótól bemenetet, egyszer a világostól, egyszer a sötéttől és aszerint lép a tábla.
    • Ehhez érdemes implementálni az algebrai notációt (Bf5, Qc3, Ne2, Kcd4, Kxd5 stb.) és lépjünk eszerint!
  • Minden lépés után írjuk ki a táblát (ha megírtuk a __repr__-et akkor ez csak egy print).
  • Próbáljuk ki parancssorból.

előző fel következő

Személyes eszközök