So das ist mein erstes Spiel und dazu noch gleich in AWT und das beste ist, das ich es selber geschrieben habe, mit dem Wissen was ich in der Zeit gerlernt habe!
Die Variante die nicht funktioniert hat, habe ich auskommentiert. Ich habe eine globale Variable String deklariert und wollte dass er mir die nach der Überprüfung unten in die new Button() als String reinschreibt. Hat aber irgendwie nicht funktioniert. Warum?
Was mich noch interessieren würde, ob ich das Programm gut oder schlecht geschrieben habe. Dass es funktioniert, heisst nicht dass ich es gut gemacht habe. Vieleicht kann man das besser schreiben? Bin für jeden Tipp dankbar.
Danke
package random;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RandomNumber extends Frame {
RandomNumber() {
setLayout(new FlowLayout(200));
setSize(300, 300);
add(label);
add(field);
add(button);
add(label2);
button.addActionListener(new Erreignis());
setVisible(true);
}
String meldung;
Button button = new Button("Raten!");
TextField field = new TextField(20);
Label label = new Label("Geben Sie ein Zahl von 0 bis 10 ein.");
Label label2 = new Label(/*meldung*/);
class Erreignis implements ActionListener {
public void actionPerformed(ActionEvent e) {
new Ueberprufung();
}
}
class Ueberprufung {
Ueberprufung() {
int zufallszahl = (int) Math.round(Math.random() * 10);
String eingabe = field.getText();
if (zufallszahl == Integer.parseInt(eingabe)) {
//meldung = "Sie haben gewonnen!";
label2.setText("Sie haben gewonnen!");
} else {
//meldung = "Sie haben verloren";
label2.setText("Sie haben verloren!");
}
}
}
}
package random;
public class Start {
public static void main(String[] args) {
RandomNumber number = new RandomNumber();
}
}
das geht aus dem einfachen Grund nicht
meldung deklarierst du nur und initialisierst sie nicht deshalb geht es schonmal nicht, außerdem wird meldung doch bei der Übergabe kopiert außerdem woher soll das Label wissen das sich der Text ändert?
So nach x versuchen, habe ich es geschafft, dieses Spiel bisschen zu verbessern, so dass man hier 3 Versuche hat die Zahl zu erraten und erst dann wird die Zufallszahl neu generiert. Ich wollte fragen, ob es noch leichter geht, als ich es gemacht habe.
package random;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RandomNumber extends Frame {
RandomNumber() {
setLayout(new GridLayout(4, 1));
setSize(300, 300);
add(label);
add(field);
add(button);
add(label2);
button.addActionListener(new Erreignis());
setVisible(true);
}
String meldung;
int zufallszahl = (int) Math.round(Math.random() * 10);
int i = 3;
Button button = new Button("Raten!");
TextField field = new TextField(20);
Label label = new Label("Geben Sie ein Zahl von 0 bis 10 ein.");
Label label2 = new Label();
class Erreignis implements ActionListener {
public void actionPerformed(ActionEvent e) {
ueberprufung();
label2.setText(meldung);
}
}
void ueberprufung() {
if (i == 3) {
zufallszahl = (int) Math.round(Math.random() * 10);
}
System.out.println(zufallszahl);
try {
String eingabe = field.getText();
if (zufallszahl == Integer.parseInt(eingabe)) {
meldung = "Gewonnen!";
i = 3;
} else {
meldung = "noch " + (i - 1) + " Versuche...";
i--;
System.out.println(i);
}
if (i == 0) {
meldung = "Leider verloren!";
i = 3;
}
} catch (NumberFormatException e) {
meldung = "Falsche Eingabe!";
}
}
}
package random;
public class Start {
public static void main(String[] args) {
RandomNumber number = new RandomNumber();
}
}
ich wuerde es nicht viel anders machen, ein paar Kleinigkeiten
public class Test extends Frame {
private int i = 3;
private int zufallszahl;
private TextField field = new TextField(20);
private Label label2 = new Label();
public Test() {
Button button = new Button("Raten!");
setLayout(new GridLayout(4, 1));
setSize(300, 300);
add(new Label("Geben Sie ein Zahl von 0 bis 10 ein."));
add(field);
add(button);
add(label2);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ueberprufung();
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
setVisible(true);
}
private void ueberprufung() {
if (i == 3) {
zufallszahl = (int) Math.round(Math.random() * 10);
} else {
try {
int input = Integer.parseInt(field.getText().trim());
if (zufallszahl == input) {
label2.setText("Gewonnen!");
i = 3;
} else {
label2.setText("noch " + (--i) + " Versuche...");
field.setText("");
if (i == 0) {
label2.setText("Leider verloren ! Die Zahl waere "
+ zufallszahl + " gewesen !");
i = 3;
}
}
} catch (NumberFormatException e) {
label2.setText("Falsche Eingabe!");
}
}
}
public static void main(String[] args) {
new Test();
}
}```
zum einen einen WindowListener hinzufuegen, damit man durch das kleine x-chen das Fenster schliessen kann
Zum anderen wird die Eingabe im Feld geleert wenn ich auf 'Raten' gedrueckt habe
und zu guter letzt will auch auch die verdammte Zahl sehen die ich nicht erraten habe ;-)
Ich beginne gerade mich in die Objektorientierte Programmierung einzuarbeiten, und habe ua. deswegen mit Java begonnen. Bis jetzt habe ich nur simple Konsolenausgaben erstellt, möchte aber einmal von den echten Vorteilen der OOP in einer praktischen Anwendung gebrauch machen.
Kann mir wer eine kleine Aufgabenstellung geben um erstmal mein hheoretisches Wissen in der Praxis anwenden kann?
Thx, im Voraus
hmm probiere dich an grafischer Programmierung weil da ist viel OOP dabei und dann haste auch schneller Übungen, z.b. kannste da kleine Tools schreiben wie Taschenrechner oder andere kleine Teile
Kann dir auch das empfehlen was dir Eagle empfohlen hat. Ich habe auch vor kurzem erst damit angefangen. Ich kann dir aber eine Aufgabe für Kosole geben(OOP).
Programm Kontoführung.
Erstelle eine Superklasse und definiere dort paar Methoden und Eigenschaften. Leite von dieser Superklasse paar neue Klassen ab und definiere dort auch paar neue Methoden und Eigenschaften.
Z.B. Superklasse Person. Abgeleitete Klassen Mitarbeiter, Kunden, Boss. Mainklasse - wo z.b man bestimmte Methoden wie Kontostand etc abfragen kannst.
Sodala, ich hab jetzt mal mit eine OOP-Projekt begonnen. Ich habs mal bei einer simplen Funktion belassen, in der die Chef-Klasse eine Person einstellt und schließlich als String ausgibt:
String werBinIch() {
return "Christoph";
}
String Abteilung(String Mitarbeiter) {
Chef Boss = new Chef();
return Boss.Verkuende(Mitarbeiter, "Marketing");
}
}
class Chef {
String einstellenMitarbeiter(String Mitarbeiter) {
Person person01 = new Person();
return person01.Abteilung(Mitarbeiter);
}
String Verkuende(String a, String b) {
return "Mein Name ist "+a+" und ich bin im "+b+" taetig!";
}
}
public class Arbeit {
public static void main(String[] args) {
Person person01 = new Person();
Chef Boss = new Chef();
System.out.print(Boss.einstellenMitarbeiter(person01.werBinIch()));
}
}```
Im Endeffekt wird der String **Mein Name ist Christoph und ich bin im Marketing taetig!** ausgegeben.
Jetzt meine Frage an euch: Entspricht das hier überhaupt schon (zumindest ansatzweise) dem Prinzip der Objektorientierung?
Für mich ist das noch absolutes Neuland, ich muss diese Art der Logik erst begreifen! :p
naja vom prinzip her schon aber die Umsetzung ist nich so gut
hier mal eine kleine Ausarbeitung von deinem
public class Person {
private String name;
public Person(String name){
this.name = name;
}
String werBinIch() {
return name;
}
}
public class Chef extends Mitarbeiter {
public Chef(String name)
super(name);
}
//weiß jetzt nicht was man noch reinschreiben kann
}
public class Abteilung{
private Chef chef;
private Vector mitarbeiter = new Vector();
pulic void setChef(Chef chef){
this.chef = chef;
}
public void addMitarbeiter(Mitarbeiter mit){
mitarbeiter.add(mit);
}
public void print(){
System.out.println("Chef"+chef.werBinIch());
for(int i=0;i!=mitarbeiter.size();i++)
System.out.println("Mitarbeiter "+i+": "+((Mitarbeiter)mitarbeiter.get(i)).werBinIch());
}
}
public class Arbeit {
public static void main(String[] args) {
Abteiung ab = new Abteilung();
ab.setChef(new Chef("ich"));
ab.addMitarbeiter(new Mitarbeiter("du"));
ab.addMitarbeiter(new Mitarbeiter("1"));
ab.addMitarbeiter(new Mitarbeiter("2"));
ab.addMitarbeiter(new Mitarbeiter("3"));
ab.print();
}
}
nein musste nicht gleich auskennen.
kleiner Tipp das ist kein Script sondern sind Klassen
und Eclipse wird meckern weil man kann nur eine public class in einer Datei haben, d.h. du musst dann mehere Dateien nehmen oder die public rausnehmen