import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class RateGUIApp extends Frame implements ActionListener, WindowListener {
//Komponente initialisieren
Label labSuche1, labSuche2, labSuche3;
Label labText1, labText2;
TextField tfVersuch1, tfVersuch2, tfVersuch3;
Button bInfo, bVersuch, bNeu;
TextArea taInfo;
Font fntFett, fntHead, fntAusgabe;
Rate spiel;
private String strVersuch1 = "";
private String strVersuch2 = "";
private String strVersuch3 = "";
int ergebnis;
int anzahl;
public RateGUIApp() {
setLayout (null);
setSize (400,400);
addWindowListener(this);
spiel = new Rate();
//Drei Schriftarten erstellen
fntFett = new Font ("SansSerif", 1,14);
fntHead = new Font ("SansSerif", 1,20);
fntAusgabe = new Font ("Monospaces", 0,12);
//Labels (Überschriften)
labText1 = new Label ("Raten Sie die drei Ziffern");
labText1.setFont(fntHead);
labText1.setBounds(20,25,350,25);
add(labText1);
labText2 = new Label ("Loesungen");
labText2.setFont(fntFett);
labText2.setBounds(20,70,120,25);
add(labText2);
//Rate-Text-Felder Beschriftungen
labSuche1 = new Label("X");
labSuche1.setFont(fntHead);
labSuche1.setBounds(175,70,25,25);
add(labSuche1);
labSuche2 = new Label("X");
labSuche2.setFont(fntHead);
labSuche2.setBounds(255,70,25,25);
add(labSuche2);
labSuche3 = new Label("X");
labSuche3.setFont(fntHead);
labSuche3.setBounds(335,70,25,25);
add(labSuche3);
//Textfelder für Eingabe der Ziffern
tfVersuch1 = new TextField ("");
tfVersuch1.setFont(fntFett);
tfVersuch1.setBounds(170,110,25,25);
add(tfVersuch1);
tfVersuch2 = new TextField ("");
tfVersuch2.setFont(fntFett);
tfVersuch2.setBounds(250,110,25,25);
add(tfVersuch2);
tfVersuch3 = new TextField ("");
tfVersuch3.setFont(fntFett);
tfVersuch3.setBounds(330,110,25,25);
add(tfVersuch3);
//3 Buttons
bInfo = new Button ("Info");
bInfo.setFont(fntFett);
bInfo.setBounds(20,160,80,25);
bInfo.addActionListener(this);
add(bInfo);
bNeu = new Button("Neues Spiel");
bNeu.setFont(fntFett);
bNeu.setBounds(140,160,100,25);
bNeu.addActionListener(this);
add(bNeu);
bVersuch = new Button("Versuchen");
bVersuch.setFont(fntFett);
bVersuch.setBounds(280,160,100,25);
bVersuch.addActionListener(this);
add(bVersuch);
//TextArea für SpieleInfos
taInfo = new TextArea();
taInfo.setFont(fntAusgabe);
taInfo.setBounds(20,210,360,140);
add(taInfo);
}
public static void main (String[] args) {
RateGUIApp rate = new RateGUIApp();
}
//Implementierung aller ListenerMethoden (müssen implementiert werden, da die Klasse abstract ist)
//ActionListenet
public void actionPerformed(ActionEvent e) {
if (e.getSource() == bInfo) {
infoClicked();
}
if (e.getSource() == bNeu) {
neuClicked();
}
if (e.getSource() == bVersuch) {
versuchClicked();
}
}
//Listener Methoden
public void windowClosing(WindowEvent e) {
//dispose();
System.exit(0);
}
public void windowClosed( WindowEvent e){}
public void windowOpened( WindowEvent e){}
public void windowActivated( WindowEvent e){}
public void windowDeactivated( WindowEvent e){}
public void windowIconified( WindowEvent e){}
public void windowDeiconified( WindowEvent e){}
public void neuClicked() {
taInfo.append ("\" Neues Spiel\" geklickt \n");
anzahl = 0;
tfVersuch1.setVisible(true);
tfVersuch2.setVisible(true);
tfVersuch3.setVisible(true);
tfVersuch1.setText("");
tfVersuch2.setText("");
tfVersuch3.setText("");
labSuche1.setText("");
labSuche2.setText("");
labSuche3.setText("");
spiel.zufallsWerte();
}
private void versuchClicked () {
anzahl++;
boolean ok = false;
strVersuch1 = tfVersuch1.getText();
strVersuch2 = tfVersuch2.getText();
strVersuch3 = tfVersuch3.getText();
ok = spiel.ueberpruefe(strVersuch1, strVersuch2, strVersuch3);
if (ok) {
ergebnis=spiel.werteAus();
if((ergebnis & 4) ==4){
labSuche1.setText(strVersuch1);
tfVersuch1.setVisible(false);
taInfo.append("1. Feld geraten\n");
}
if ((ergebnis&2)==2) {
labSuche2.setText(strVersuch2);
tfVersuch2.setVisible(false);
taInfo.append("2. Feld geraten\n");
}
if ((ergebnis&1)==1) {
labSuche3.setText(strVersuch3);
tfVersuch3.setVisible(false);
taInfo.append("3. Feld geraten\n");
}
if (ergebnis ==7) {
taInfo.append("Nach "+anzahl+" Versuchen fertig\n");
statistik(anzahl);
}
else taInfo.append("Bitte nochmal probieren\n");
}
}
private void infoClicked() {
//taInfo.append ("\"Info geklickt\n");
/*try {
URL url = new URL (getDocumentBase(), "Rate.html");
taInfo.append ("Protokoll: "+url.getProtocol()+"\n");
taInfo.append ("File: "+url.getFile()+"\n");
taInfo.append ("Host: "+url.getHost()+"\n");
taInfo.append ("URL externe Form als String: "+url.toExternalForm()+"\n");
} catch (MalformedURLException ex) {
taInfo.append ("Fehler in der URL");
}*/
}
public void statistik (int anzahl) {
String filename ="Raten.txt"; //Dateiname
File file = new File (filename); //Dem Konstruktor wird der Dateiname als Pararmeter übergeben
FileOutputStream fos;
DataOutputStream dos;
try {
fos = new FileOutputStream(file);
dos = new DataOutputStream(fos);
dos.writeBytes("Anzahl der Versuche: ");
dos.writeBytes(Integer.toString(anzahl));
dos.flush();
dos.close();
taInfo.append("\nZahl der der Versuche in Datei \n\""+filename+"\"geschrieben\n\n");
}catch (IOException ioe) {
taInfo.append("Fehler beim Schreiben des Files\n");
taInfo.append (ioe.getMessage());
}
}
}