Workshop pre Košice IT Valley

PRVÝ PROJEKT

  • Katalóg archetypov pre JPAZ2: http://jpaz2.ics.upjs.sk/maven/archetype-catalog.xml
  • Zodpovedajte na otázky:
    • Z koľkých tried sa skladá projekt?
    • Na čo slúži metóda main v triede Launcher?
    • Čo spravia jednotlivé príkazy v metóde main triedy Launcher?
  • S využitím objektu triedy ObjectInspector preskúmajte kresliacu plochu referencovanú premennou sandbox (čo znamená, že premenná referencuje objekt?):
    • Na čo slúži vlasnosť resizable ?
    • Aké iné zaujímavé vlastnosti a metódy majú objekty triedy AnimatedWinPane?
  • Preskúmajte niektoré z metód triedy SmartTurtle, resp. Turtle.
    • Aký je rozdiel medzi moveTo a setPosition?
    • Na čo slúži vlastnosť penDown? Aké hodnoty môže nadobúdať?
    • Na čo slúžia metódy stamp, directionTowards a distanceTo?
    • Aký je rozdiel medzi metódami dot a circle?
    • Aký je rozdiel medzi vlastnosťami penColor a fillColor?
  • Do metódy main pridajte príkazy, ktoré korytnačku referencovanú premennou franklin presunú na súradnice (X: 100, Y: 150) a nastavia farbu kresliaceho pera na modrú.
  • Do metódy main pridajte príkazy a príslušné premenné, ktoré zabezpečia, že sa vytvorí korytnačka triedy Turtle umiestnená v kresliacej ploche na pozícii (X: 200, Y: 150) a referencovaná premennou cecil. Táto korytnačka nech má nastavenú červenú farbu kresliaceho pera a nech je skúmaná ObjectInspector-om.
  • Do metódy main pridajte príkazy a príslušné premenné, ktoré zabezpečia, že sa vytvorí korytnačka triedy SmartTurtle umiestnená v kresliacej ploche a referencovaná premennou albert.
  • Rozdiskutujte otázky:
    • Aký je rozdiel medzi metódami a vlastnosťami objektov referencovaných premennými franklin, cecil a albert?
    • Aký je vzťah medzi triedou SmartTurtle a triedou Turtle?
    • Čím sa z hľadiska použitia líši trieda SmartTurtle a Launcher?
  • Do metódy main pridajte príkazy, ktoré zabezpečia, že modrá korytnačka hneď po spustení programu nakreslí modrý štvorec s dĺžkou strany 75.

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.

  • Naučte korytnačky triedy SmartTurtle metódu square (bez parametrov) na nakreslenie štvorca s dĺžkou strany 75.

1
2
3
public void square() {

}
  • Rozdiskutujte otázku:
    • Aký je rozdiel medzi metódami a vlastnosťami objektov referencovaných premennými franklin, cecil a albert?
  • Naučte korytnačky triedy SmartTurtle metódu triangle, ktorá nakreslí rovnostranný trojuholník so zadanou dĺžkou strany (parameter size).

1
2
3
public void triangle(double size) {

}
  • Naučte korytnačky triedy SmartTurtle 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á.

1
2
3
public void rgbTriangle(double size) {

}
  • Naučte korytnačky triedy SmartTurtle metódy na namaľovanie štvorca a obdĺžnika. Zvoľte si vhodné parametre pre jednotlivé metódy.
  • Naučte korytnačky triedy SmartTurtle metódu na namaľovanie domčeka zadaného rozmeru. Využite už vytvorené metódy triangle a square.

1
2
3
public void house(double size) {

}

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


1
2
3
public void dashDotDash(double length) {

}

„Opakovačky“

  • Naučte korytnačky triedy SmartTurtle metódu chain, ktorá nakreslí retiazku z modrých korálov. Retiazka sa skladá z parametrom určeného počtu korálov (beadCount) zadaného polomeru (beadRadius).

1
public void chain(int beadCount, double beadRadius)

  • Naučte korytnačky triedy SmartTurtle metódu nStar, ktorá nakreslí n-cípu hviezdu.

1
2
3
 public void nStar(int n, double rayLength) {

}
  • Naučte korytnačky triedy SmartTurtle metódu ngon, ktorá nakreslí pravidelný n-uholník so zadanou dĺžkou strany. Diskutujte na cvičení o tom, ako matematicky vypočítať uhol, o ktorý sa má korytnačka pri kreslení otáčať.

1
2
3
public void ngon(int n, double sideLength) {

}
  • Naučte korytnačky triedy SmartTurtle metódu dashedLine, ktorá nakreslí prerušovanú čiaru skladajúcu sa zo zadaného počtu úsekov zadanej dĺžky (celková dĺžka čiary je n*segmentLength). Každý úsek začína čiarou dĺžky segmentLength/4, nasleduje medzera dĺžky segmentLength/2 a úsek končí čiarou dĺžky segmentLength/4

1
2
3
public void dashedLine(int n, double segmentLength) {

}
  • Naučte korytnačky triedy SmartTurtle metódu rgbChain, s rovnakými parametrami a výsledkom ako metóda chain, avšak s tým rozdielom, že farby jednotlivých korálov sa postupne striedajú: červená, zelená a modrá. Pozor, počet korálov nemusí byť násobkom čísla 3.

1
public void rgbChain(int beadCount, double beadRadius)

Čo ďalej?

Rozhodnutie je na vás, ktoré úlohy sa vám páčia najviac 😉

Moderné umenie zbesilej korytnačky

Náhodná pochôdzka je proces, kedy sa korytnačka nejakým náhodným spôsobom „túla“ po kresliacej ploche. Ak sa korytnačka pri potulkách dostane mimo definovanú oblasť tak sa ihneď vráti späť.

Schéma:

  1. Uložíme súradnice korytnačky a aktuálne natočenie
  2. Vykonáme požadovaný počet náhodných krokov (viď priložený kód)
  3. Vrátime korytnačku do stavu, v akom bola pred realizovaním náhodnej pochôdzky

1
2
3
4
5
6
7
8
for (int i = 0; i < stepCount; i++) {
    this.turn(Math.random() * 360);
    this.step(5);

    if (jeMimoDefinovanejOblasti) {
        this.step(-5);
        }
}

Naučte korytnačky triedy SmartTurtle nasledujúce metódy:

  • Oblasť pohybu korytnačky je kruh so zadaným polomerom a stredom v začiatočnej pozícii korytnačky.

1
public void circleWalk(int stepCount, double radius)
  • Oblasť pohybu korytnačky je kruh so zadaným polomerom a stredom v začiatočnej pozícii korytnačky. Naviac do vzdialenosti radius/3 od stredu korytnačka nekreslí žiadne čiary, vo vzdialenosti medzi radius/3 a 2*radius/3 kreslí modré čiary a v poslednej tretine červené čiary.

1
public void tripleCircleWalk(int stepCount, double radius)
  • Oblasť pohybu korytnačky je štvorec so zadanou dĺžkou strany a stredom v začiatočnej pozícii korytnačky.

1
public void squareWalk(int stepCount, double sideLength)

Moderné umenie náhodných bodiek

Naučte korytnačky triedy Artist metódu popArt, ktorá namaľuje zarámovaný obraz moderného umenia. V metóde popArt korytnačka pracuje nasledujúcim spôsobom:

    • korytnačka si uloží súradnice a natočenie
    • korytnačka namaľuje rám obrazu – rám obrazu je obdlžník so zadanými rozmermi, ktorého strany sú rovnobežné so stranami kresliacej plochy a ktorého ľavý horný roh je v aktuálnej pozícii korytnačky (každý z rozmerov je aspoň 30)
    • korytnačka nakreslí dotCount náhodných bodiek, pre ktoré platí:
        • bodka má náhodný polomer medzi <2, 7)
      • žiadna časť bodky sa nesmie nachádzať (presahovať) mimo nakreslený rám
      • plochu rámu chceme maximálne využiť – bodka sa môže vygenerovať ľubovoľne blízko hranice rámu – môže sa rámu dokonca až dotýkať
      • farba bodky je červená alebo modrá, pričom farba pre konkrétnu bodku je určená náhodne
    • korytnačka sa presunie na miesto a nastaví si smer, v akom bola na začiatku volania metódy

Upozornenie: toto nie je úloha na náhodnú pochôdzku, ale počas generovania bodiek im treba nejako rozumne (a náhodne) generovať súradnice tak, aby ostali v ráme.

Čas na záhadu

  • Čo nakreslí nižšie uvedená metóda mystery?

1
2
3
4
5
6
7
8
public void mystery() {
        for (int i=0; i<256; i++) {
                Color c = new Color(i, 100, 100);
                this.setPenColor(c);
                this.setPosition(i, 0);
                this.moveTo(i, 150);
        }
}

Nájdite v tejto metóde miesto, kde sa vytvorí objekt triedy Color. Koľko parametrov ma použitý konštruktor? Akého typu je premenná c?

  • Do triedy SmartTurtle pridajte metódu, ktorá nastaví náhodnú farbu kresliaceho pera.

Korytnačie počty

    • V triede SmartTurtle vytvorte nasledujúce metódy:
      • min vráti menšie z čísel cislo1 a cislo2
      • power vypočíta nk