Informatika2-2016/Gyakorlat8

A MathWikiből
(Változatok közti eltérés)
(Vászon)
(Sakk)
 
(egy szerkesztő 13 közbeeső változata nincs mutatva)
3. sor: 3. sor:
 
[http://www.math.bme.hu/~nyida/info2/e08_16i2.html 8. elõadás]
 
[http://www.math.bme.hu/~nyida/info2/e08_16i2.html 8. elõadás]
  
= Bevezető feladatok =
+
= Feladatok =
 
Nyissuk meg a Sypdert.
 
Nyissuk meg a Sypdert.
== Alakzat ==
+
== Alakzatok a vásznon ==
 +
=== Alakzatok ===
 
Írjunk egy '''Shape''' osztályt.  
 
Írjunk egy '''Shape''' osztályt.  
 
*Legyen '''x''' és '''y''' változója, ezek tárolják az alakzat pozícióját a síkon.  
 
*Legyen '''x''' és '''y''' változója, ezek tárolják az alakzat pozícióját a síkon.  
21. sor: 22. sor:
 
Definiáljuk a '''Canvas''' (vászon) osztályt.  
 
Definiáljuk a '''Canvas''' (vászon) osztályt.  
 
* Egyetlen tagváltozója legyen a '''shapes''', ami alakzatok listáját tárolja.  
 
* Egyetlen tagváltozója legyen a '''shapes''', ami alakzatok listáját tárolja.  
 +
* Definiáljuk egy '''add''' metódust, amivel újabb '''Shape'''-et adunk a vászonhoz!
 
* Oldjuk meg, hogy az osztályunk iterálható legyen! Ehhez definiáljuk az '''__iter__(self)''' metódust, valamit a '''next(self)''' metódust, ahogy az előadáson láttuk.
 
* Oldjuk meg, hogy az osztályunk iterálható legyen! Ehhez definiáljuk az '''__iter__(self)''' metódust, valamit a '''next(self)''' metódust, ahogy az előadáson láttuk.
* Definiáljuk a '''crop''' metódust a következőképp: a bemeneti paraméter két pont koordinátája, ezek egy téglalap bal felső és jobb alsó pontjai. A függvény térjen vissza azon alakzatok listájával, amelyek a vásznon vannak és teljesen beleférnek az így definiált téglalapba
+
* Definiáljuk a '''crop''' metódust a következőképp: a bemeneti paraméter két pont koordinátája, ezek egy téglalap bal felső és jobb alsó pontjai. A függvény térjen vissza azon alakzatok listájával, amelyek a vásznon vannak és teljesen beleférnek az így definiált téglalapba. Ehhez a feladathoz az '''Ellipse''' és a '''Rectangle''' osztálynak is szüksége lesz egy '''box()''' metódusra, ami a legkisebb tartalmazó doboz bal felső és jobb alsó sarkait adja vissza.
 +
 
 +
== Overload ==
 +
# Írjunk egy függvényt, aminek az első argumentuma '''n''', egy '''int''' típusú változó. A függvény térjen vissza '''True'''-val, ha annyi extra paraméterrel hívták meg, mint az első bemeneti paraméter értéke, egyébként térjen vissza '''False'''-szal.
 +
# Definiáljunk egy '''szumma''' függvényt, ami tetszőlegesen sok bemeneti paraméterének összegével tér vissza!
 +
## Kezeljük le a kivételt, ha a paraméterek típusa nem azonos!
 +
# Definiáljunk egy '''print_words''' függvényt, úgy, hogy a megadott (akármennyi) szavakat annyiszor írja ki, amennyit megadunk bemenetnként (szavanként)!
 +
## Kezejük le kivételként, ha a bemeneten nem egész számot adtak meg a szó gyakoriságára!
 +
== Sakk ==
 +
Ha még maradt idő.
 +
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!
 +
* 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!
 +
* 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 a '''Board''' osztálynak egy '''move(player, pos1, pos2)''' metódust, ami a '''pos1''' pozícióban álló bábut a '''pos2''' helyre mozgatja, ha a lépés szabályos!
 +
** A normál szabályok mellett vegyük figyelembe, hogy áll-e ott más bábu! Ha saját bábu áll a mezőn, a lépés szabálytalan, ha ellenfél bábuja, akkor távolítsuk el a pályáról!
 +
** Ha maradt időnk, kezdjük el írni a '''Knight, Rook, Bishop''' és '''Queen''' osztályokat.
 +
** Oldjuk meg, hogy a '''Pawn''' ne állhasson az ellenfél alapvonalán!

A lap jelenlegi, 2016. április 7., 07:52-kori változata

Tartalomjegyzék

Előadás

8. elõadás

Feladatok

Nyissuk meg a Sypdert.

Alakzatok a vásznon

Alakzatok

Írjunk egy Shape osztályt.

  • Legyen x és y változója, ezek tárolják az alakzat pozícióját a síkon.
  • Legyen egy move metódusa, aminek egyetlen v paramétere van, egy kételemű lista, a vektor, amivel el kell mozgatni az alakzatot.

Definiáljuk a Shape osztály leszármazottaiként az

  • Ellipse ellipszis, legyen meg a kis- és nagytengelye (a,b)
  • Rectangle téglalap, legyen meg az oldalak hossza (a,b)

osztályokat. Mindkét esetben a pozíciójuk a súlypontjukat jelentse. Írjunk mindkét osztályhoz egy area függvényt, ami kiszámítja az alakzat területét!

Definiáljuk az Ellipse osztály equation metódusát, ami kiírja az adott ellipszis egyenletét!

Vászon

Definiáljuk a Canvas (vászon) osztályt.

  • Egyetlen tagváltozója legyen a shapes, ami alakzatok listáját tárolja.
  • Definiáljuk egy add metódust, amivel újabb Shape-et adunk a vászonhoz!
  • Oldjuk meg, hogy az osztályunk iterálható legyen! Ehhez definiáljuk az __iter__(self) metódust, valamit a next(self) metódust, ahogy az előadáson láttuk.
  • Definiáljuk a crop metódust a következőképp: a bemeneti paraméter két pont koordinátája, ezek egy téglalap bal felső és jobb alsó pontjai. A függvény térjen vissza azon alakzatok listájával, amelyek a vásznon vannak és teljesen beleférnek az így definiált téglalapba. Ehhez a feladathoz az Ellipse és a Rectangle osztálynak is szüksége lesz egy box() metódusra, ami a legkisebb tartalmazó doboz bal felső és jobb alsó sarkait adja vissza.

Overload

  1. Írjunk egy függvényt, aminek az első argumentuma n, egy int típusú változó. A függvény térjen vissza True-val, ha annyi extra paraméterrel hívták meg, mint az első bemeneti paraméter értéke, egyébként térjen vissza False-szal.
  2. Definiáljunk egy szumma függvényt, ami tetszőlegesen sok bemeneti paraméterének összegével tér vissza!
    1. Kezeljük le a kivételt, ha a paraméterek típusa nem azonos!
  3. Definiáljunk egy print_words függvényt, úgy, hogy a megadott (akármennyi) szavakat annyiszor írja ki, amennyit megadunk bemenetnként (szavanként)!
    1. Kezejük le kivételként, ha a bemeneten nem egész számot adtak meg a szó gyakoriságára!

Sakk

Ha még maradt idő. 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!
  • 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!
  • 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 a Board osztálynak egy move(player, pos1, pos2) metódust, ami a pos1 pozícióban álló bábut a pos2 helyre mozgatja, ha a lépés szabályos!
    • A normál szabályok mellett vegyük figyelembe, hogy áll-e ott más bábu! Ha saját bábu áll a mezőn, a lépés szabálytalan, ha ellenfél bábuja, akkor távolítsuk el a pályáról!
    • Ha maradt időnk, kezdjük el írni a Knight, Rook, Bishop és Queen osztályokat.
    • Oldjuk meg, hogy a Pawn ne állhasson az ellenfél alapvonalán!
Személyes eszközök