Cvičenia: 1. týždeň

Cieľom cvičení:

  • zautomatizovať vytváranie projektu a nových tried v prostredí Eclipse,
  • naučiť sa vytvárať objekty (inštancie) triedy v metóde main triedy Spustac (vrátane volania metód nad vytvorenými objektmi),
  • vyskúšať si prácu s ObjectInspector-om a základy korytnačej grafiky,
  • naučiť sa vytvárať nové (vlastné) triedy, ktoré rozširujú existujúce triedy o nové metódy.

Pokiaľ to nie je explicitne uvedené, nepredpokladajte, že sa korytnačka nachádza v strede kresliacej plochy (t.j. nepoužívajte center v metódach vytváraných tried - okrem metódy main). Rovnako nepredpokladajte konkrétnu farbu pozadia kresliacej plochy (napr. bielu). Pri riešení úloh použite len konštrukcie, ktoré boli obsahom prvej prednášky.

Kam to celé smeruje...

  • Pozrite si ukážky záverečných projektov z minulých rokov.

Prvý projekt v Eclipse

Podľa videotutoriálu vytvorte jednoduchý projekt v Eclipse:

Vytvorenie projektu s JPAZ2 (videotutoriál)

Upozornenie: Pri vytváraní nového projektu je treba zvoliť projektový layout "Create separate folders for ...". Predídete tak automatickému vytvoreniu balíčka (package), čo je téma až poslednej tretiny semestra (a teda sa riešeniu a vysvetľovaniu týchto vecí chceme v úplnom úvode radšej vyhnúť).

Experimenty

Experiment č. 1:

  • Vytvorte (napr. podľa návodu v študijnom texte) triedu Spustac so spúšťacou metódou "main". V nej napíšte príkazy na vytvorenie objektu triedy WinPane (referencovaný z premennej plocha), triedy ObjectInspector (referencovaný z premennej oi). Pridajte príkaz, ktorým ObjectInspector-u poviete, aby skúmal kresliacu plochu:
    • Na čo slúži vlasnosť resizable ?
    • Aké iné zaujímavé vlastnosti a metódy majú objekty triedy WinPane ?
  • Do metódy main pridajte príkazy (a premenné), ktoré vytvoria 2 korytnačky skúmané ObjectInspector-om. Prvá z nich nech je umiestnená na súradniciach (X = 100, Y = 150), má nastavené kresliace pero na červenú farbu a referencovaná nech je z premennej zofka. Druhá nech je na súradniciach (200, 150), jej kresliace pero nech je modré a referencovaná nech je z premennej jozko.
    • Preskúmajte niektoré z metód triedy Turtle. Na čo slúžia metódy stamp, directionTowards a distanceTo ?
    • Aký je rozdiel medzi moveTo a setPosition ?
    • Na čo slúži vlastnosť penDown? Aké hodnoty môže nadobúdať?
  • Do metódy main pridajte príkazy, ktoré zabezpečia, že modrá korytnačka hneď po spustení programu spomalene nakreslí modrý štvorec (spomalene = po každej strane si na sekundu oddýchne). Na spomalenie využitie príkaz (JPAZUtilities.delay(1000);).

Experiment č. 2 (v nasledujúcich úlohách využívajte formulku for na opakovanie skupiny príkazov všade, kde sa len dá; nepoužívajte metódy center a setPosition):

  • Vytvorte (napr. podľa návodu v študijnom texte) triedu ChytraTurtle, ktorá bude rozširovať ("vylepšovať") triedu Turtle. Upravte metódu main v triede Spustac tak, aby sa okrem dvoch korytnačiek triedy Turtle vytvorila aj jedna korytnačka triedy ChytraTurtle, ktorá je umiestnená v strede kresliacej plochy, je referencovaná z premennej albert a je skúmaná ObjectInspector-om.
    • Po spustení triedy Spustac porovnajte zoznam metód všetkých troch korytnačiek.
  • Naučte korytnačky triedy ChytraTurtle metódu spomalenyStvorec (bez parametrov) na spomalené nakreslenie štvorca. Dĺžka strany štvorca nech je 70.
    • Po spustení triedy Spustac porovnajte zoznam metód všetkých troch korytnačiek.
public void spomalenyStvorec() {

}
  • Naučte korytnačky triedy ChytraTurtle metódu trojuholnik, ktorá nakreslí rovnostranný trojuholník so zadanou dĺžkou strany.
public void trojuholnik(double dlzkaStrany) {

}
  • Naučte korytnačky triedy ChytraTurtle metódu rgbTrojuholnik, ktorá nakreslí rovnostranný rgb-trojuholník so zadanou dĺžkou strany. rgb-trojuholník je trojuholník nakreslený kresliacim perom hrúbky 2, pričom jedna jeho strana je červená, druhá zelená a posledná tretia je modrá.
public void rgbTrojuholnik(double dlzkaStrany) {

}
  • Naučte korytnačky triedy ChytraTurtle metódy na namaľovanie štvorca a obdĺžnika. Zvoľte si vhodné parametre pre jednotlivé metódy.
  • Naučte korytnačky triedy ChytraTurtle metódu na namaľovanie domčeka zadaného rozmeru. Využite už vytvorené metódy trojuholnik a stvorec.
public void domcek(double dlzkaStrany) {

}
  • Naučte korytnačky triedy ChytraTurtle metódu ciarkaBodkaCiarka, ktorá nakreslí nižšie umiestnený obrazec. Metóda nech má jeden parameter dlzka, ktorý určuje vzdialenosť medzi začiatkom prvej a koncom druhej "čiarky". Veľkosť bodky nech je nejako proporcionálna k veľkosti nakresleného obrazca (hodnote dlzka). Pozor, metóda musí fungovať korektne aj v prípade inej farby kresliacej plochy, ako je biela.
public void ciarkaBodkaCiarka(double dlzka) {

}

Ďalšie úlohy

  • Naučte korytnačky triedy ChytraTurtle metódu slniecko, ktorá nakreslí obrázok žltého slnka s oranžovými lúčmi. Slnko sa skladá z kruhu s polomerom zadaným cez parameter. Slnko má 36 lúčov rovnako dlhých ako je polomer slnka. Inšpirujte sa jednoduchou vločkou z prednášky a využite korytnačiu metódu dot.
public void slniecko(double polomer) {

}
  • Naučte korytnačky triedy ChytraKorytnacka metódu vrtulka, ktorá nakreslí jednoduchú 8-lopatkovú vrtuľku so zadanou dĺžkou lopatky. Lopatka sa skladá z rovnej čiary zadanej dĺžky a konca dĺžky 10, ktorý zviera s lopatkou uhol 45 stupňov. Stred vrtuľky je určený pozíciou korytnačky.
public void vrtulka(double dlzka) {

}
  • Naučte korytnačky triedy ChytraKorytnacka metódu kriz, ktorá nakreslí jedným ťahom červený kríž perom hrúbky 2. Kríž sa skladá akoby z 5 štvorcov so zadanou dĺžkou strany.
public void kriz(double strana)
  • S využitím metódy stvorec (túto metódu neupravujte!) naprogramujte metódu obrazec pre objekty triedy ChytraTurtle, ktorá nakreslí nižšie načrtnutý obrazec. Parametrom metódy obrazec nech je rozmer strany štvorca, ktorý tvorí obrazec.
public void stvorec(double dlzkaStrany) {
        for (int i=0; i<4; i++) {
                this.step(dlzkaStrany);
                this.turn(90);
        }
}

public void obrazec(double dlzkaStrany) {

}
  • Vytvorte metódu diamant pre objekty triedy ChytraTurtle, ktorá nakresli kosoštvorec na základe dvoch parametrov: uhla, ktorý zvierajú strany kosoštvorca pri pozícii korytnačky, a dĺžky strany kosoštvorca. Kosoštvorec nech je nakreslený tak, že korytnačka je na začiatku v jednom z jeho vrcholov a natočená je v smere jeho uhlopriečky. Farba kresliaceho pera nech je červená a hrúbka kresliaceho pera nech je 2. S využitím metódy diamant vytvorte metódu mitsubishi, ktorá nakreslí znak tejto spoločnosti.
public void diamant(double uhol, double dlzkaStrany) {

}

public void mitsubishi(double uhol, double dlzkaStrany) {

}
  • Naučte korytnačky triedy ChytraKorytnacka metódu mriezka s jedným parametrom typu double zvaným rozmer. Metóda nakreslí mriežku 8 x 8 pričom jedno políčko mriežky je štvorec s rozmerom rozmer x rozmer. Ľavý horný roh nakreslenej mriežky nech je na pozícii (X:10, Y:10).
  • Naučte korytnačky triedy ChytraKorytnacka metódu hviezda4, ktorá nakreslí 4-cípu hviezdu. Hviezda je určená 2 parametrami: dĺžka cípu hviezdy (dĺžka ramena rovnoramenného trojuholníka tvoriaceho cíp hviezdy) a uhol v cípe hviezdy (uhol zvieraný ramenami rovnoramenného trojuholníka tvoriaceho cíp hviezdy).
public void hviezda4(double dlzkaCipu, double uhol)

Čo nebolo na prednáške (povinné)

Na cvičení sa naučíme aj niečo nové, čo nebolo obsahom prednášok.

Vyplnené polygóny

Korytnačka dokáže okrem kreslenia čiar maľovať aj vyplnené objekty. Postup je nasledovný:

  • zavolá sa metóda korytnačky openPolygon(), ktorou sa aktivuje kreslenie vyplneného objektu
  • vykonávajú sa rôzne metódy korytnačky, ktoré ju premiestňujú (hýbu ňou)
  • zavolá sa metóda korytnačky closePolygon(), ktorou sa na základe predchádzajúcej trajektórie pohybu korytnačky namaľuje vyplnený polygón.
public void vyplnenyStvorec(double strana) {
        this.openPolygon();
        for (int i=0; i<4; i++) {
                this.step(strana);
                this.turn(90);
        }
        this.closePolygon();
}

Pri maľovaní vyplnených objektov je dobré hýbať korytnačku s vypnutým kresliacim perom. V opačnom prípade za ňou môže vzniknúť farebná stopa, ktorá sa neodstráni ani namaľovaním vyplneného objektu.

  • Vytvorte metódu, ktorá nakreslí vyplnený 6-uholník so zadanou dĺžkou strany.

Pravidlá pre pomenovanie

  • Rozdiskutujte a vysvetlite si pravidlá pre správne vytváranie názvov projektov, tried, metód a ich parametrov podľa Pravidlá pre pomenovania.

Pre fajnšmekrov

  • Vytvorte metódy, ktoré nakreslia tieto útvary (stred kvietku nech je aktuálna pozícia korytnačky):

Testovacia úloha - odovzdávanie cez Moodle