Cieľom cvičení:
- zautomatizovať vytváranie projektu a nových tried v prostredí IntelliJ IDEA,
- naučiť sa vytvárať objekty (inštancie) triedy v metóde
main
triedy Launcher
(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.
Katalóg archetypov pre JPAZ2: http://jpaz2.ics.upjs.sk/maven/archetype-catalog.xml
Kam to celé smeruje…
Prvý projekt v IntelliJ IDEA
Podľa videa vytvorte mavenovský projekt v IntelliJ IDEA.
Nastavenia projektu môžu byť nasledovné:
- Language – Java
- Build system – Maven
- JDK – 21 (možno je potrebné stiahnúť)
- GroupID – sk.upjs.paz
- ArtifactID – Cvicenia
Nastavenia modulu:
- Name – Cvicenie01
- JDK – Project SDK
- Parent – Cvicenia
- Catalog – JPAZ (ak tam nie je, je potrebné pridať nový katalóg http://jpaz2.ics.upjs.sk/maven/archetype-catalog.xml)
- Archetype – jpaz2-archetype-novice
- 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) {
} |
Ďalšie úlohy
- Naučte korytnačky triedy
SmartTurtle
metódu sun
, ktorá nakreslí obrázok žltého slnka s oranžovými lúčmi. Slnko sa skladá z kruhu s polomerom zadaným cez parameter radius
. 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
.
1 2 3
| public void sun(double radius) {
} |
- Naučte korytnačky triedy
SmartTurtle
metódu pinwheel
, ktorá nakreslí jednoduchú 8-lopatkovú vrtuľku so zadanou dĺžkou lopatky (parameter size
). Lopatka sa skladá z rovnej čiary zadanej dĺžky a konca dĺžky 10, ktorý zviera s lopatkou uhol 45 135 stupňov. Stred vrtuľky je určený pozíciou korytnačky.
1 2 3
| public void pinwheel(double size) {
} |
- Naučte korytnačky triedy
SmartTurtle
metódu cross
, ktorá nakreslí jedným ťahom červený kríž perom hrúbky 2. Kríž sa skladá akoby z 5 štvorcov so zadanou dĺžkou strany.
1
| public void cross(double size) |
- S využitím metódy
square
(túto metódu neupravujte!) naprogramujte metódu squareDrawing
pre objekty triedy SmartTurtle
, ktorá nakreslí nižšie načrtnutý obrazec. Parametrom metódy squareDrawing
nech je rozmer strany štvorca, ktorý tvorí obrazec.
1 2 3 4 5 6 7 8 9 10
| public void square(double size) {
for (int i=0; i<4; i++) {
this.step(size);
this.turn(90);
}
}
public void squareDrawing(double size) {
} |
- Vytvorte metódu
diamond
pre objekty triedy SmartTurtle
, 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 diamond
vytvorte metódu mitsubishi
, ktorá nakreslí znak tejto spoločnosti.
1 2 3 4 5 6 7
| public void diamond(double angle, double sideLength) {
}
public void mitsubishi(double angle, double sideLength) {
} |
- Naučte korytnačky triedy
SmartTurtle
metódu grid
s jedným parametrom typu double
zvaným unitSize
. Metóda nakreslí mriežku 8 x 8 pričom jedno políčko mriežky je štvorec s rozmerom unitSize
x unitSize
. Ľavý horný roh nakreslenej mriežky nech je na pozícii (X:10, Y:10).
- Naučte korytnačky triedy
SmartTurtle
metódu star4
, 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).
1
| public void star4(double sideLength, double angle) |
Č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.
1 2 3 4 5 6 7 8
| public void filledSquare(double size) {
this.openPolygon();
for (int i=0; i<4; i++) {
this.step(size);
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.
Riadky pred triedou
V triede Launcher
aj SmartTurtle
pred hlavičkou triedy si môžete všimnúť riadky, ktoré vyzerajú nasledovne.
1 2 3 4 5
| package sk.paz1a.practicals.task1;
import java.awt.Color;
import sk.upjs.jpaz2.*; |
Experimentujte: Čo sa stane ak zmažeme riadok začínajúci slovom import? Po experimente si zodpovedajte otázky:
- Na čo slúžia tieto riadky?
- Kto ich tam napísal a kedy?
Pravidlá pre pomenovanie
- Rozdiskutujte a vysvetlite si pravidlá pre správne vytváranie názvov projektov, tried, metód a ich parametrov.
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