Ласло Краус |
ИР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.