![]() Ласло Краус |
Објектно програмирање 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.