Ласло Краус |
ИР2ОО2 Испит 9. 9. 2005. |
---|
Реализовати на језику Java следећи пакет класа (класе изузетака опремити састављањем текста поруке):
(20 поена) Реализовати на језику Java програм с графичком корисничком површи, према приложеној слици, којим може да се игра XoX.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Како се на језику Јава користе имена из неког пакета? Навести примере.
б) Који случајеви постоје и које су последице, када се метода истог имена појављује у више имплементираних интерфејса у једној класи на језику Јава?
в) Да ли се и зашто нека класа на Јави може дефинисати у неком изразу?
г) Како се у Јави спречава неизвесност трке (race hazard)?
д) Шта су делегати на језику C# и за шта се примарно користе?
Реализовати на језику Java следећи пакет класа (класе изузетака опремити састављањем текста поруке):
(
x,
y,
z)
.
T(
x,
y,
z)
.
M[
t0,
t1,…,tn−1]
, где су ti текстуални прикази вектора положаја темена.
// GNeMoze.java package xox; public class GNeMoze extends Exception { public String toString () { return "Nedozvoljen potez!"; } } // Tabla.java package xox; import java.awt.*; import java.awt.event.*; public class Tabla { private Panel ploca; private int pritisnuto; private Dugme[] dugmad = new Dugme [9]; private static class Dugme extends Button { private int indeks; public Dugme (int ind) { super (" "); indeks = ind; } } // class Dugme public Tabla (Panel plo) { (ploca = plo).setLayout (new GridLayout (3, 3)); ploca.setEnabled (false); ActionListener osmatrac = new ActionListener () { public void actionPerformed (ActionEvent d) { Dugme dgm = (Dugme)d.getSource (); pritisnuto = dgm.indeks; dalje (); } }; Font font = new Font (null, Font.BOLD, 24); for (int i=0; i<9; i++) { ploca.add (dugmad[i] = new Dugme (i)); dugmad[i].setFont (font); dugmad[i].addActionListener (osmatrac); } } private synchronized void dalje () { notify (); } public synchronized int uzmiPritisnuto () throws GPrekinuta { ploca.setEnabled (true); try { wait (); } catch (InterruptedException g) { throw new GPrekinuta (); } ploca.setEnabled (false); return pritisnuto; } void postaviOznaku (int polje, String oznaka) throws GNeMoze { if (polje<0 || polje>=9 || !dugmad[polje].getLabel().equals(" ")) throw new GNeMoze (); dugmad[polje].setLabel (oznaka); dugmad[polje].setEnabled (false); } void prazni () { for (int i=0; i<9; i++) { dugmad[i].setLabel (" "); dugmad[i].setEnabled (true); } } public String oznaka (int polje) { return dugmad[polje].getLabel (); } } // GPrekinuta.java package xox; public class GPrekinuta extends Exception { public String toString () { return "Igra je prekinuta!"; } } // Igrac.java package xox; public abstract class Igrac { private String oznaka; protected Tabla tabla; public Igrac (String ozn, Tabla tbl) { oznaka = ozn; tabla = tbl; } public abstract int birajPolje () throws GPrekinuta; public void odigrajPotez () throws GPrekinuta { while (true) { try { tabla.postaviOznaku (birajPolje(), oznaka); return; } catch (GNeMoze g) {} } } } // Covek.java package xox; public class Covek extends Igrac { public Covek (String ozn, Tabla tbl) { super (ozn, tbl); } public int birajPolje () throws GPrekinuta { return tabla.uzmiPritisnuto (); } } // Racunar.java package xox; public class Racunar extends Igrac { public Racunar (String ozn, Tabla tbl) { super (ozn, tbl); } public int birajPolje () { return (int)(Math.random() * 9); } } // Igra.java package xox; import java.awt.*; public class Igra extends Thread { private Igrac[] igraci = new Igrac [2]; private int tekIgrac; private Tabla tabla; private Label oznStanje; public Igra (Tabla tbl, Igrac prvi, Igrac drugi, Label sta) { tabla = tbl; tabla.prazni (); igraci[0] = prvi; igraci[1] = drugi; tekIgrac = 0; oznStanje = sta; oznStanje.setText (" "); start (); } private boolean isto (int a, int b, int c) { return !tabla.oznaka(a).equals(" ") && tabla.oznaka(a).equals(tabla.oznaka(b)) && tabla.oznaka(a).equals(tabla.oznaka(c)) ; } public String stanje () { if (isto (0, 1, 2)) return tabla.oznaka(0); if (isto (3, 4, 5)) return tabla.oznaka(3); if (isto (6, 7, 8)) return tabla.oznaka(6); if (isto (0, 3, 6)) return tabla.oznaka(0); if (isto (1, 4, 7)) return tabla.oznaka(1); if (isto (2, 5, 8)) return tabla.oznaka(2); if (isto (0, 4, 8)) return tabla.oznaka(0); if (isto (2, 4, 6)) return tabla.oznaka(2); for (int i=0; i<9; i++) if (tabla.oznaka(i).equals(" ")) return " "; return "?"; } public void run () { String stanje = " "; try { while (stanje.equals(" ")) { igraci[tekIgrac].odigrajPotez (); tekIgrac = 1 - tekIgrac; stanje = stanje(); } oznStanje.setText ("Pobednik: " + stanje); } catch (GPrekinuta g) {} } public void prekini () { interrupt (); } } // Xox.java import java.awt.*; import java.awt.event.*; import xox.*; public class Xox extends Frame { private Font font = new Font (null, Font.BOLD, 24); private Panel ploTabla = new Panel (); private Tabla tabla = new Tabla (ploTabla); private PloIgrac ploPrvi = new PloIgrac ("X"); private PloIgrac ploDrugi = new PloIgrac ("O"); private Igra igra; private Label stanje = new Label ("", Label.CENTER); private class PloIgrac extends Panel { private Igrac igrac; private CheckboxGroup grupa = new CheckboxGroup (); private Checkbox rdgCovek = new Checkbox ("Covek", true, grupa), rdgRacunar = new Checkbox ("Racunar", false, grupa); private String oznaka; PloIgrac (String ozn) { oznaka = ozn; setLayout (new GridLayout (3,1)); Label lbl = new Label (ozn, Label.CENTER); lbl.setFont( font); add (lbl); ItemListener osmatrac = new ItemListener () { public void itemStateChanged (ItemEvent d) { if ((Checkbox)d.getSource() == rdgCovek) igrac = new Covek (oznaka, tabla); else igrac = new Racunar (oznaka, tabla); } }; rdgCovek.addItemListener (osmatrac); add (rdgCovek); rdgRacunar.addItemListener (osmatrac); add (rdgRacunar); igrac = new Covek (oznaka, tabla); } } // class ploIgrac public Xox () { super ("XoX"); setBounds (100, 100, 300, 200); addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent d) { if (igra!=null) igra.prekini(); dispose(); } }); add (ploTabla, "Center"); add (ploPrvi, "West"); add (ploDrugi, "East"); Button dugme = new Button ("Nova igra"); dugme.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent d) { if (igra != null) igra.prekini (); igra = new Igra (tabla, ploPrvi.igrac, ploDrugi.igrac, stanje); } }); add (dugme, "South"); stanje.setFont (font); add (stanje, "North"); setVisible (true); } public static void main(String[] varg) { new Xox(); } }(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 31.8.2010.