codice:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
class AlberoBinStr implements Serializable{
protected String info;
protected AlberoBinStr left,right; // left NO! - right SI!
public AlberoBinStr(String info, AlberoBinStr left, AlberoBinStr right) {
this.info=info;
this.left=left;
this.right=right;
}
}
public class Gioco{
static private int[] punteggio;
static private AlberoBinStr ao;
static private AlberoBinStr co;
static private ArrayList vocaboli;
public Gioco(){
main();
}
public void Gioca() {
main();
}
public static void main() {
File predefinito = new File("Predefinito.abs");
if (predefinito.exists()){
try {
FileInputStream fis = new FileInputStream("Predefinito.abs");
ObjectInputStream ois = new ObjectInputStream(fis);
ao = (AlberoBinStr) (ois.readObject());
vocaboli = (ArrayList) (ois.readObject());
ois.close();
} catch (Exception e1) {
System.out.println("Errore nel caricamento: "+e1);
}
} else {
ao = new AlberoBinStr("E' un mammifero?",new AlberoBinStr("una trota",null,null),new AlberoBinStr("un cane",null,null));
vocaboli = new ArrayList();
vocaboli.add("una trota");
vocaboli.add("un cane");
vocaboli.trimToSize();
try {
FileOutputStream fos1 = new FileOutputStream("Predefinito.abs");
ObjectOutputStream oos1 = new ObjectOutputStream(fos1);
oos1.writeObject(ao);
oos1.writeObject(vocaboli);
oos1.close();
} catch (Exception e) {
System.out.println("Errore nel salvataggio: "+e);
}
}
punteggio = new int[2];
punteggio[0]=0;
punteggio[1]=0;
co = ao;
Frame f = new Frame("Gioco Albero Binario di AutoApprendimento");
f.addWindowListener(new AF());
f.setSize(350,120);
f.setLayout(new GridLayout(3,1));
Panel p = new Panel();
Label lbl_domanda = new Label("Pensa ad un animale! Fatto?");
p.add(lbl_domanda);
f.add(p);
p = new Panel();
p.setLayout(new GridLayout(1,2));
Panel p1 = new Panel();
Choice opt_risposta = new Choice();
opt_risposta.add("Si");
opt_risposta.add("No");
p1.add(opt_risposta);
p.add(p1);
p1 = new Panel();
Button btn_risp = new Button("Rispondi");
p1.add(btn_risp);
p.add(p1);
f.add(p);
p=new Panel();
Label lbl_punteggio = new Label("Computer: "+punteggio[0]+" - Utente: "+punteggio[1]);
p.add(lbl_punteggio);
f.add(p);
btn_risp.addActionListener(new asc_risp(opt_risposta, lbl_domanda, lbl_punteggio, co, punteggio,ao,f,vocaboli));
f.setResizable(false);
f.setVisible(true);
}
public void Contenuto() {
String voctxt = (String) vocaboli.get(0);
int i;
for (i=1;i<vocaboli.size();i++) {
voctxt += ", "+(String) vocaboli.get(i);
}
System.out.println("Il mio database contiene "+vocaboli.size()+" elementi");
System.out.println(voctxt);
}
}
class asc_add implements ActionListener {
TextField domanda;
Label lbl_domanda;
TextField risposta;
AlberoBinStr copy;
AlberoBinStr al_org;
ArrayList vocaboli2;
Frame ftc;
Frame fts;
public asc_add(TextField a,TextField b, AlberoBinStr c, Frame f, Frame ff, AlberoBinStr org, Label l, ArrayList v) { domanda = a; risposta = b; copy = c; ftc=f; fts = ff; al_org = org; lbl_domanda=l; vocaboli2=v; }
public void actionPerformed(ActionEvent e){
if ( ((domanda.getText()).length() > 0 ) && ((risposta.getText()).length() > 0 ) ) {
copy.left=new AlberoBinStr(copy.info,null,null);
copy.info=domanda.getText();
copy.right=new AlberoBinStr(risposta.getText(),null,null);
copy=al_org;
vocaboli2.add(risposta.getText());
vocaboli2.trimToSize();
try {
FileOutputStream fos2 = new FileOutputStream("Predefinito.abs");
ObjectOutputStream oos2 = new ObjectOutputStream(fos2);
oos2.writeObject(al_org);
oos2.writeObject(vocaboli2);
oos2.close();
} catch (Exception e2) {
System.out.println("Errore nel salvataggio: "+e2);
}
lbl_domanda.setText("Pensa ad un altro animale! Fatto?");
fts.setVisible(true);
ftc.dispose();
}
}
}
class asc_risp implements ActionListener {
Label domanda;
Label lbl_punteggio;
int[] punteggio;
Choice risposta;
AlberoBinStr copy;
AlberoBinStr lc;
AlberoBinStr albero_originale;
ArrayList vocaboli1;
Frame ff;
public asc_risp(Choice r,Label d, Label lp, AlberoBinStr c, int[] p, AlberoBinStr org, Frame fff, ArrayList v) { domanda=d; risposta=r; copy=c; lbl_punteggio=lp; lc=c; punteggio=p; albero_originale=org; ff=fff; vocaboli1=v; }
public void actionPerformed(ActionEvent e){
if ((domanda.getText()!="Pensa ad un animale! Fatto?")&&(domanda.getText()!="Pensa ad un altro animale! Fatto?")) {
if (domanda.getText()==albero_originale.info) { copy=albero_originale; lc=albero_originale; }
if (risposta.getSelectedIndex()==0) {
lc = lc.right;
if (lc==null) {
punteggio[0]++;
lbl_punteggio.setText("Computer: "+punteggio[0]+" - Utente: "+punteggio[1]);
copy=albero_originale;
domanda.setText("Pensa ad un altro animale! Fatto?");
} else {
copy=lc;
if (lc.right!=null) {
domanda.setText(copy.info);
} else {
domanda.setText("E' "+copy.info+"?");
}
}
} else {
lc = lc.left;
if (lc==null) {
punteggio[1]++;
lbl_punteggio.setText("Computer: "+punteggio[0]+" - Utente: "+punteggio[1]);
ff.setVisible(false);
getInput();
} else {
copy=lc;
if (lc.right!=null) {
domanda.setText(copy.info);
} else {
domanda.setText("E' "+copy.info+"?");
}
}
}
} else {
if (risposta.getSelectedIndex()==0) {
domanda.setText(albero_originale.info);
}
}
}
private void getInput() {
Frame f = new Frame("AutoApprensione");
f.addWindowListener(new AF());
f.setLayout(new GridLayout(4,1));
Panel p = new Panel();
p.setLayout(new GridLayout(3,1));
p.add(new Label("Inserisci una domanda per la quale \""+copy.info+"\" non può essere"));
p.add(new Label("la risposta mentre l'animale che tu hai pensato può esserlo."));
p.add(new Label("E inserisci anche l'animale che hai pensato."));
f.add(p);
p = new Panel();
p.setLayout(new GridLayout(1,2));
p.add(new Label("Domanda: (es. \"Miagola?\")"));
Panel p1 = new Panel();
TextField txt_domanda = new TextField(21);
p1.add(txt_domanda);
p.add(p1);
f.add(p);
p = new Panel();
p.setLayout(new GridLayout(1,2));
p.add(new Label("Animale: (es. \"una zebra\")"));
p1 = new Panel();
TextField txt_risposta = new TextField(21);
p1.add(txt_risposta);
p.add(p1);
f.add(p);
p = new Panel();
p.setLayout(new GridLayout(1,3));
p.add(new Label(""));
p.add(new Label(""));
p1 = new Panel();
Button btn_add = new Button("Aggiungi");
btn_add.addActionListener(new asc_add(txt_domanda,txt_risposta,copy,f,ff,albero_originale,domanda,vocaboli1));
p1.add(btn_add);
p.add(p1);
f.add(p);
f.setSize(360,200);
f.setResizable(false);
f.setVisible(true);
}
}
class AF extends WindowAdapter{
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}