![]() Ласло Краус |
Објектно програмирање 2 - колоквијуми Други колоквијум 19. 1. 2013 |
|---|
Написати на језику Java следећи пакет класа:
Canvas) за исцртавање фигура и може да садржи произвољан број фигура. Може да се дода и да се избаци задата фигура и да се затражи исцртавање садржаних фигура.
VK_UP, VK_DOWN, VK_LEFT и VK_RIGHT у класи KeyEvent.

ispitx (x је број радне станице за којим се ради). Лозинка на свакој радној станици је student.Z:
// Platno.java
package zmija;
import java.awt.*;
public class Platno extends Canvas {
private Elem prvi, posl;
private class Elem{
Figura fig; Elem sled;
Elem(Figura f) {
fig = f;
if (prvi == null) prvi = this; else posl.sled = this;
posl = this;
}
}
public synchronized void dodaj(Figura f) { new Elem(f); }
public synchronized void izbaci(Figura f) {
Elem tek = prvi, pret = null;
while (tek!=null && tek.fig!=f) { pret = tek; tek = tek.sled; }
if (tek != null) {
tek = tek.sled;
if (pret == null) prvi = tek; else pret.sled = tek;
if (tek == null) posl = pret;
}
}
public synchronized void paint(Graphics g) {
for(Elem tek=prvi; tek!=null; tek=tek.sled) tek.fig.crtaj();
}
public void crtaj() { repaint(); }
}
// Figura.java
package zmija;
public abstract class Figura {
protected Platno platno;
public Figura(Platno pl) { (platno = pl).dodaj(this); }
public void unisti() { platno.izbaci(this); }
public abstract void crtaj();
}
// Zmija.java
package zmija;
import java.awt.*;
public class Zmija extends Figura implements Runnable {
private Thread nit = new Thread(this);
private int d;
private Color boja;
private Elem prvi, posl;
private int smer = DESNO;
public static final int GORE = 0, DOLE = 1, LEVO = 2, DESNO = 3;
private class Elem {
Point poz; Elem sled;
Elem(Point p) {
poz = p;
if (prvi == null) prvi = this; else posl.sled = this;
posl = this;
}
}
public Zmija(int duz, Platno pl, Point p, int dd, Color b) {
super(pl); d = dd; boja = b;
int x = p.x, y = p.y;
for (int i=0; i<duz; i++) { new Elem (new Point(x,y)); x += d; }
nit.start();
}
public void smer(int s) { smer = s; }
public void run() {
try {
int r = d / 2;
while (!Thread.interrupted()) {
Point p = posl.poz;
int sir=platno.getWidth(), vis=platno.getHeight();
int x = p.x, y = p.y;
switch (smer) {
case GORE: y += d; break;
case DOLE: y -= d; break;
case LEVO: x -= d; break;
case DESNO: x += d; break;
}
if (x-r<0 || x+r&=sir || y-r<0 || y+r&=vis) break;
p = new Point(x, y);
new Elem(p);
prvi = prvi.sled;
platno.crtaj();
Thread.sleep(100);
}
} catch (InterruptedException g) {}
unisti();
}
public void prekini() { nit.interrupt(); }
public void crtaj() {
int vis = platno.getHeight();
Graphics g = platno.getGraphics();
g.setColor(boja);
int r = d / 2;
for (Elem tek=prvi; tek!=null; tek=tek.sled) {
Point t = tek.poz;
if (tek != posl)
g.drawOval(t.x-r, vis-t.y-r, d, d);
else
g.fillOval(t.xr-, vis-t.y-r, d, d);
}
}
}
// Igra.java
package zmija;
import java.awt.*;
import java.awt.event.*;
public class Igra extends Frame {
Platno platno = new Platno();
private Zmija zmija;
private void popuniProzor() {
add(platno, "Center");
platno.crtaj();
setVisible(true);
zmija= new Zmija(10, platno, new Point (50,50), 10, Color.RED);
}
private Igra() {
super("Zmija");
setBounds(100, 100, 250, 200);
popuniProzor();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent d)
{ zmija.prekini(); dispose(); }
});
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent d) {
switch (d.getExtendedKeyCode()) {
case KeyEvent.VK_LEFT: zmija.smer(Zmija.LEVO ); break;
case KeyEvent.VK_RIGHT: zmija.smer(Zmija.DESNO); break;
case KeyEvent.VK_UP: zmija.smer(Zmija.GORE ); break;
case KeyEvent.VK_DOWN: zmija.smer(Zmija.DOLE ); break;
}
}
});
}
public static void main(String[] varg) { new Igra(); }
}
(садржај)
Copyright © 2013, Laslo Kraus
Последња ревизија: 28.11.2013.