09.03.2014 Views

instrukcja - Transportu

instrukcja - Transportu

instrukcja - Transportu

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Laboratorium z informatyki sem. II/ćw. 5 Wydział <strong>Transportu</strong> PW - 2012/13<br />

INSTRUKCJA DO ĆWICZENIA 5<br />

I Przykład apletu z animacją - tworzenie obrazu wahadła<br />

1. Utwórz nowy projekt typu Java Class Library pod nazwą Aplet3 i zapisz go<br />

w folderze roboczym; dodaj do niego klasę typu JApplet o nazwie Animacja2,<br />

umieszczając ją w pakiecie aplet3.<br />

2. Zmień kolor tła apletu na jasnoszary i ustal rozmiary okna na 500×300.<br />

Odpowiednio zmień wartości parametrów w pliku .html .<br />

3. Dodaj do pakietu aplet3 projektu nową klasę Javy o nazwie Wahadło.<br />

Poniżej nagłówka klasy Wahadło dodaj następujące deklaracje zmiennych:<br />

double t, alfa;<br />

double alfa0 = 30*Math.PI/180;<br />

double dt = 0.004;<br />

int x0, y0;<br />

int d = 250;<br />

// czas i bieżący kąt wychylenia<br />

// początkowy kąt wychylenia<br />

// przyrost czasu<br />

// współrzędne punktu zaczepienia wahadła<br />

// długość nitki<br />

Color k;<br />

4. Utwórz konstruktor o sygnaturze Wahadło(int X0, int Y0, Color K) i w jego treści wpisz instrukcje przypisujące<br />

odpowiednim polom klasy Wahadło wartości początkowe podane jako parametry konstruktora.<br />

x0=X0; y0=Y0; k=K;<br />

5. Utwórz metodę klasy Wahadło , która rysuje wahadło na kanwie obiektu graficznego::<br />

void rysuj(Graphics g){<br />

g.setColor(k);<br />

int x=x0+(int)(d*Math.sin(alfa));<br />

int y=y0+(int)(d*Math.cos(alfa));<br />

g.drawLine(x0, y0, x,y);<br />

g.fillOval(x-10, y-10, 20, 20);<br />

// x, y – współrzędne położenia ciężarka wahadła<br />

// linia od punktu x 0 , y 0 do punktu x, y<br />

// koło o średnicy 20, ze środkiem w punkcie x, y<br />

}<br />

6. Pod nagłówkiem klasy apletu Animacja2 wpisz deklarację obiektu W klasy Wahadło.<br />

7. Na końcu metody init() dodaj instrukcję tworzącą obiekt klasy Wahadło i przypisującą go zmiennej W:<br />

W = new Wahadło(getWidth() / 2, 30, Color.blue);<br />

8. W klasie Animacja2 utwórz metodę paint():<br />

public void paint(Graphics g) {<br />

g.clearRect(0, 0, getWidth(), getHeight() );<br />

g.setColor(Color.BLACK);<br />

g.setFont(new Font("SanSerif", Font.ITALIC, 20));<br />

g.drawString("WAHADŁO MATEMATYCZNE", 10, 20);<br />

W.rysuj(g);<br />

//wywołanie metody rysuj() klasy Wahadło<br />

}<br />

9. Uruchom aplet.<br />

II Symulacja ruchu wahadła<br />

1. W klasie Wahadło dopisz metodę zmiany wychylenia wahadła w zależności od czasu i kąta początkowego:<br />

void wychyl(){<br />

t+=dt;<br />

alfa=alfa0*Math.cos(Math.sqrt(981/d/0.0375)*t);<br />

// przyrost czasu o wartość dt<br />

//równanie wahadła matematycznego<br />

}<br />

2. W klasie apletu, na początku metody paint() dopisz instrukcje, które po przemieszczeniu wahadła metodą<br />

wychyl() wstrzymują wykonanie programu na 10 milisekund, a następnie ponownie odrysowują okno apletu<br />

wywołaniem metody repaint():<br />

W.wychyl();<br />

try {<br />

Thread.sleep(10);<br />

} catch (InterruptedException e) {}<br />

repaint();<br />

3. Uruchom aplet.<br />

III Uruchamianie i zatrzymywanie animacji<br />

1. W klasie Wahadło zadeklaruj zmienną logiczną (typu boolean) o nazwie ruch, która będzie zawierać informację,<br />

czy wahadło jest w ruchu. Umieść treść metody wychyl()wewnątrz instrukcji warunkowej:<br />

if(ruch) {<br />

// dotychczasowa treść metody<br />

}<br />

2. Dopisz w klasie Wahadło metody uruchamiania i zatrzymywania wahadła:<br />

public void start(double Alfa0){<br />

if(!ruch) {<br />

alfa0=Alfa0; ruch=true; t=0;}<br />

}<br />

Materiały do użytku wewnętrznego strona 1


Laboratorium z informatyki sem. II/ćw. 5 Wydział <strong>Transportu</strong> PW - 2012/13<br />

public void stop(){<br />

alfa0=0; alfa=0; ruch=false;<br />

}<br />

3. Aby umożliwić uruchamianie i zatrzymywanie wahadła za pomocą myszy, dodaj do nagłówka apletu słowa<br />

implements MouseListener. Zaimportuj ten interfejs, utwórz wszystkie jego abstrakcyjne metody, usuń w nich<br />

instrukcje throw … wyrzucające wyjątek, a metodę mousePressed() uzupełnij do postaci:<br />

public void mousePressed(MouseEvent e) {<br />

if(e.getButton() == MouseEvent.BUTTON1){<br />

int x=e.getX();<br />

int y=e.getY();<br />

W.start(Math.atan2(x-getWidth()/2, y-30));<br />

}else W.stop();<br />

}<br />

4. Uzupełnij metodę init() instrukcją dodającą nasłuch akcji: addMouseListener(this);<br />

5. Uruchom aplet i sprawdź jego działanie.<br />

// początkowy kąt wychylenia jest wskazany myszą<br />

IV Przykład apletu z animacją – symulacja kuli bilardowej<br />

1. Utwórz nowy projekt typu Java Class Library zapisz go w folderze roboczym<br />

pod nazwą Aplet4. Dodaj do projektu klasę typu JApplet o nazwie Kula.<br />

2. Na początku klasy Kula umieść następujące deklaracje pól:<br />

int x=0, y=0, d=30, dx = 3, dy = 5 , dt=20;<br />

3. W treści metody init() wpisz wywołanie metody ustawiającej kolor tła:<br />

setBackground(Color.green);<br />

4. Utwórz metodę paint(), która na kanwie obiektu graficznego ma rysować kulę jako<br />

czerwone koło wpisane w kwadrat o lewym górnym wierzchołku (x, y) i boku d:<br />

public void paint(Graphics g) {<br />

g.clearRect(0, 0, getWidth(), getHeight());<br />

g.setColor(Color.red);<br />

g.fillOval(x, y, d, d);<br />

}<br />

5. Uruchom aplet, a następnie dopisz na początku metody paint() instrukcje, które spowodują rysowanie kuli<br />

w odstępach czasu dt oraz przesunięcie kuli o wektor (dx, dy) i zmianę kierunku ruchu, jeśli kula dotarła do<br />

brzegu okna:<br />

public void paint(Graphics g) {<br />

x += dx; y += dy;<br />

if (x >= getWidth()-d || x = getHeight()-d || y


Laboratorium z informatyki sem. II/ćw. 5 Wydział <strong>Transportu</strong> PW - 2012/13<br />

Pliki z obrazkami są czytane za pomocą konstruktora klasy ImageIcon, który umożliwia wczytywanie plików<br />

graficznych GIF, JPG lub PNG. Parametr konstruktora ImageIcon() określa adres URL pliku graficznego.<br />

5. Utwórz metodę paint(), wpisując w niej instrukcje rysowania kolejnego obrazka:<br />

public void paint(Graphics g) {<br />

try {<br />

rys [nr].paintIcon(null, g, 100, 50);<br />

}catch (Exception e) { g.drawString("Błąd grafiki", 100, 100);}<br />

}<br />

6. Uruchom aplet a następnie dopisz w treści metody paint() instrukcje, które w odstępach czasu dt będą rysować<br />

kolejne klatki animacji o numerach od 0 do 16:<br />

public void paint(Graphics g) {<br />

// dotychczasowa treść metody<br />

nr++; // zwiększenie nr o 1<br />

if (nr > 16) {nr = 0;}<br />

// jeżeli nr przekroczył 16, jest ponownie zerowany<br />

try {<br />

Thread.sleep(dt);<br />

} catch (InterruptedException e){}<br />

repaint();<br />

}<br />

7. Uruchom aplet. Spróbuj w ten sam sposób wykonać animację wykorzystując przykładowe obrazki z pakietu JDK,<br />

które znajdziesz w folderze X:\Informatyka\I1\Beans<br />

Zadania do samodzielnego wykonania<br />

1. Zmiana koloru kuli. Zmodyfikuj Aplet4 tak, aby przy odbiciu kuli od krawędzi okna kolor kuli zmieniał się na<br />

losowy odcień czerwieni.<br />

Wskazówka: W klasie Kula zadeklaruj nowe pole klasy Color o nazwie kolor i wartości początkowej Color.RED;<br />

wykorzystaj to pole w metodzie paint(), jako parametr wywołania metody g.setColor().<br />

W metodzie paint() dopisz w odpowiednich miejscach instrukcję zmieniającą wartość pola kolor:<br />

kolor=new Color((int)(256*Math.random()), 0, 0);<br />

2. Wykorzystanie myszy do uruchamiania i zatrzymywania kuli. Zmodyfikuj Aplet4 tak, aby umożliwić uruchamianie<br />

i zatrzymywanie kuli po naciśnięciu lewego lub prawego przycisku myszy w oknie apletu.<br />

Wskazówka: W klasie Kula zadeklaruj nową zmienną typu boolean o nazwie ruch. W metodzie paint() wykorzystaj<br />

tę zmienną, umieszczając instrukcje zmieniające położenie kuli wewnątrz instrukcji warunkowej:<br />

if (ruch) {<br />

x += dx; y += dy;<br />

}<br />

Zaimplementuj interfejs MouseListener, zaimportuj go i utwórz wszystkie jego abstrakcyjne metody, usuń w nich<br />

instrukcje throw wyrzucające wyjątek, a w metodzie mousePressed() wpisz instrukcję zmieniającą wartość zmiennej<br />

ruch na true albo false, zależnie od tego, który przycisk myszy został naciśnięty.<br />

3. Wesoły bałwan. Utwórz nowy aplet z ruchomym bałwankiem, rysowanym na kanwie<br />

graficznej za pomocą kilku elips, odcinka i prostokąta (jak na rysunku obok).<br />

Bałwanek porusza się pionowo od środka dolnej krawędzi okna do połowy wysokości,<br />

po czym zawraca do dołu okna, gdzie rozpoczyna kolejny ruch do góry itd.<br />

Wskazówka: Wzorując się na symulacji kuli bilardowej utwórz nowy aplet lub skopiuj<br />

projekt Aplet4 i zmodyfikuj jego treść. W metodzie rysuj() wpisz instrukcje, które zamiast<br />

jednego koła pozwolą narysować złożoną figurę. Wybierz jeden punkt (x, y), będący<br />

punktem odniesienia dla rysowanych figur. W metodzie paint() odpowiednio zmodyfikuj<br />

warunek zmiany kierunku ruchu.<br />

4. Zmiana kierunku ruchu w animacji poklatkowej.<br />

Zmodyfikuj Aplet5 tak, aby Duke (maskotka Javy) przesuwał się na zmianę raz w lewo, raz w prawo.<br />

Wskazówka: W klasie Obrazki zadeklaruj pole typu boolean o nazwie powrót. W metodzie paint(), wewnątrz instrukcji<br />

if (nr > 16) {…} (po wyświetleniu 17-tu klatek) zmieniaj wartość tego pola na przeciwną instrukcją powrót = !powrót;<br />

W metodzie rysuj(), przy pomocy instrukcji warunkowej, określ numer obrazka wyświetlanego metodą paintIcon() jako<br />

nr, jeżeli pole powrót ma wartość false lub jako 16-nr, jeżeli pole powrót ma wartość true.<br />

Materiały do użytku wewnętrznego strona 3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!