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:
- Uložíme súradnice korytnačky a aktuálne natočenie
- Vykonáme požadovaný počet náhodných krokov (viď priložený kód)
- 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