also, ich bin jetzt nen stückchen weiter. habe alles jetzt soweit überarbeitet das ich keine fehlermeldungen mehr bekomme, das programm wird auch kompiliert und lässt sich ausführen. allerdings wird die menübar nicht angezeigt.
so sieht's momentan aus (ich hoffe ich poste nich zu viel quellcode)
so sieht's momentan aus (ich hoffe ich poste nich zu viel quellcode)
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*; // für Dateioperationen
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Hangman extends JPanel {
private static final long serialVersionUID = 1L;
// Globale Variablen
private JMenuBar bar = null;
private JMenu Datei = null;
private JMenu Hilfe = null;
private JMenuItem Nochmal = null;
private JMenuItem Beenden = null;
private JMenuItem Spielregeln = null;
private JLabel text = null;
final static int WND_B=435, WND_H=360;
private static final String EXIT_ON_CLOSE = null;
final int SX=50, SY=50;
RandomAccessFile file;
String myword=null; // das zu erratene wort
char xyword[]; // das ungelöste Wort
char probed[];
char notprobed[];
char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z',
'Ä','Ö','Ü','ß'};
int mistakes=0; // Anzahl der Fehler
int tries=0; // Anzahl der Versuche
KL CONTROL;
char c;
public Hangman() { // Hauptroutine
String stmp=new String();
bar = new JMenuBar();
Datei = new JMenu("Datei");
Hilfe = new JMenu("Hilfe");
Nochmal = new JMenuItem("Spiel neu starten");
Beenden = new JMenuItem("Beenden");
Spielregeln = new JMenuItem("Spielregeln");
text = new JLabel("Diese Anwendung demonstriert die Verwendung von Menüs");
setJMenuBar(bar);
bar.add(Datei);
bar.add(Hilfe);
Datei.add(Nochmal);
Datei.add(Beenden);
Hilfe.add(Spielregeln);
getContentPane().add(text);
Beenden.addActionListener((ActionListener) this);
Spielregeln.addActionListener((ActionListener) this);
Nochmal.addActionListener((ActionListener) this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void setDefaultCloseOperation(String exitOnClose) {
// TODO Auto-generated method stub
}
private void setJMenuBar(JMenuBar bar2) {
// TODO Auto-generated method stub
}
private Container getContentPane() {
// TODO Auto-generated method stub
return null;
}
{
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
String stmp;
while ((stmp=f.readLine())!=null) { // solange das, was wir lesen, noch sichtbar ist
if (stmp.charAt(0) != '#') { // und wenn kein '#' am anfang steht
wordcount++; // zähle es als Wort
}
}
if (wordcount==0) {
System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
System.exit(0);
}
System.out.println("Woerter in Datendatei: "+wordcount); // Statusbericht
while (wordseek==0) { // Solange wordseek noch 0 ist, tue ...
wordseek=(int)(Math.random()*wordcount)+1; // hol' Dir einen Integer-Wert
}
System.out.print("Ausgewaehltes Wort: #"+wordseek); // Statusbericht
f.seek(0); // Position auf Dateianfang setzen
wordcount=0; // Wieder auf NULL
while ((stmp=f.readLine())!=null) { // und das ganze von vorne
if (stmp.charAt(0) != '#') {
wordcount++;
if (wordcount==wordseek) { // wenn an der Position, die wir suchen ...
myword=stmp; // setze myword auf gerade gelesenen String
break;
}
}
}
f.close(); // Datei wieder schließen
}
catch(IOException ioe) { // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
System.out.println("IOException: "+ioe.toString()); // Fehlermeldung
System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
System.exit(0);
}
CONTROL=new KL(); // neuer KeyListener: CONTROL
void addKeyListener(CONTROL]; // hinzufügen
xyword=new char[myword.length()]; // array erstellen
for (int i=0;i<myword.length();i++) { // array initialisieren
xyword[i]='_';
}
probed=new char[alphab.length]; // array erstellen
notprobed=new char[alphab.length];
for (int i=0;i<alphab.length;i++) { // array initialisieren
probed[i]='-';
notprobed[i]=alphab[i];
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g) { // die Grafiken
Toolkit tk=Toolkit.getDefaultToolkit();
// g.drawString("Datensaetze: "+maxdat,40,350);
// g.drawString("Wort: "+myword,40,200);
// g.drawString("Zeichen: "+c,40,230);
g.setColor(Color.black); // Farbe auf Weiß
g.fillRect(0,0,WND_B,WND_H); // Fenster Weiß machen
g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
g.drawString("Wort: "+new String(xyword),40,215);
if (mistakes!=-1) {
g.drawString("Buchstaben: ",40,260);
for (int i=0;i<alphab.length;i++) {
g.drawChars(probed,i,1,118+i*8,260);
g.drawChars(notprobed,i,1,118+i*8,275);
}
g.drawString("Fehler: "+mistakes,40,230);
}
UpdateHangMan(g); // Hangman updaten
}
public void UpdateHangMan(Graphics g) {
Toolkit tk=Toolkit.getDefaultToolkit(); // Toolkit (für Grafikdatei-Support) zuweisen
switch(mistakes) { // CASE mistakes of ...
case 6:
g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
g.setColor(Color.red);
g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
g.setColor(Color.white);
g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
removeKeyListener(CONTROL); // Tastenkontrolle abschalten
break;
case 5:
g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
break;
case 4:
g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
break;
case 3:
g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
break;
case 2:
g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
break;
case 1:
g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
break;
case 0:
g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
break;
case -1:
g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
g.setColor(Color.green);
g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
removeKeyListener(CONTROL);
break;
}
}
class KL implements KeyListener {
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) {
c=e.getKeyChar(); // Taste holen
c=Character.toUpperCase(c); // Buchstabe(?) evtl. GROß machen
int i;
boolean status=false; // Booleans
boolean check=false; // für versch. Status-Werte
for (i=0;i<alphab.length;i++) {
if (c==alphab[i]) { // wenn c = einer der Buchstaben des Alphabets ist ...
if (probed[i]!=c) probed[i]=c; else check=true; // und der noch nicht vorher getippt wurde, dann ... u.s.w.
if (notprobed[i]==c) notprobed[i]='-';
}
}
int underscores=0; // Integer für Anzahl der "_" im bisherigen Wort
for (i=0;i<myword.length();i++) {
if (c==Character.toUpperCase(myword.charAt(i))) {
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_') underscores++;
}
if (!status && !check) mistakes++; // wenn der Buchstabe Falsch ist und nicht schon einmal getippt wurde mistakes+1
if (!check) tries++; // solange kein doppelter Tip: tries+1;
if (underscores==0 || mistakes>=6) {
System.out.println(" ("+myword+")");
System.out.println("Anzahl Versuche: "+tries+" davon falsch: "+mistakes);
System.out.println("Getippte Buchstaben: "+new String(probed));
System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
}
if (underscores==0) mistakes=-1; // wenn keine fehlenden Zeichen im Lösungswort ...
if (mistakes>=6) mistakes=6; // wenn mehr als 5 Fehler gemacht wurden
repaint(); // Grafikfenster neuzeichnen
}
}
private static void initializeNewWindow(){
JFrame frame= new JFrame(); // neues Fenster
frame.addWindowListener(new WindowAdapter() { // WindowListener hinzufügen
public void windowClosing(WindowEvent e) { // wenn auf X geklickt:
System.out.println();
System.exit(0); // Programm beenden.
}
});
frame.setLayout(new BorderLayout());
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
buttonPanel.setBackground(Color.black);
final JFrame f = frame;
Button button1 = new Button("Nochmal");
button1.setPreferredSize(new Dimension(80,20));
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.print("Nochmal...");
f.dispose();
initializeNewWindow();
}
});
Button button2 = new Button("Beenden");
button2.setPreferredSize(new Dimension(80,20));
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.print("Bis zum nächsten mal...");
System.exit(0);
}
});
Hangman Jpanel = new Hangman();
frame.add(Jpanel,BorderLayout.CENTER);
frame.setTitle(".:Hangman:."); // Titel setzen
frame.setSize(WND_B, WND_H); // Größe setzen
frame.setBackground(Color.black);
frame.setVisible(true); // auf den Bildschirm
Jpanel.requestFocusInWindow();
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == Spielregeln) {
System.out.println("Mach Was");
}
else if (evt.getSource() == Beenden) {
System.exit(0);
}
else if (evt.getSource() == Nochmal) {
System.out.println("Programm erstellt von mir");
}
}
public static void main(String args[]) {
Hangman test = new Hangman();
test.pack();
test.setVisible(true);
initializeNewWindow();
}
private void pack() {
// TODO Auto-generated method stub
}
}
Zuletzt bearbeitet: