moe_joe hat gesagt.:Murray hat gesagt.:Code:catch ( Exception e) { //--- besser: genau angeben, welche Art von Exception man catchen will wie meisnt du das jetzt genau? komm grad nich hinterher }
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
public class Hangman extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
// Globale Variablen
final static int WND_B=435, WND_H=360;
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;
private JMenu bar = null;
private JMenu datei = null;
private JMenu info = null;
private JMenuItem nochmal = null;
private JMenuItem beenden = null;
private JMenuItem spielregeln = null;
private JLabel text = null;
public Hangman() { // Hauptroutine
String stmp=new String();
try {
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
// solange das, was wir
// lesen, noch sichtbar ist
while ((stmp=f.readLine())!=null) {
// und wenn kein '#' am anfang steht
if (stmp.charAt(0) != '#') {
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) {
// hol' Dir einen Integer-Wert
wordseek=(int)(Math.random()*wordcount)+1;
}
System.out.print("Ausgewaehltes Wort: #"+wordseek); // Statusbericht
f.seek(0); // Position auf Dateianfang setzen
wordcount=0; // Wieder auf NULL
// und das ganze von vorne
while ((stmp=f.readLine())!=null) {
if (stmp.charAt(0) != '#') {
wordcount++;
if (wordcount==wordseek) {
// setze myword auf gerade gelesenen String
myword=stmp;
break;
}
}
}
f.close(); // Datei wieder schließen
} // alex0801: Ende des äußeren Whiles ergänzt...
// alex0801: Ein try brauch auch ein entsprechendes catch
}catch (IOException e){
e.printStackTrace();
}
bar = new JMenu();
datei = new JMenu("Datei");
info = new JMenu("Info");
nochmal = new JMenuItem("Neu starten");
beenden = new JMenuItem("Beenden");
spielregeln = new JMenuItem("Hilfe");
text = new JLabel("Diese Anwendung demonstriert die Verwendung von Menüs");
// alex0801: Hab ich mal eingefügt.. Solltest "bar" in
// "menu" umbenennen....!
JMenuBar menubar = new JMenuBar();
menubar.add(bar);
setJMenuBar(menubar); // alex0801: Statt "jmenu" muss hier ein "jmenubar" rein
bar.add(datei);
bar.add(info);
datei.add(nochmal);
datei.add(beenden);
info.add(spielregeln);
getContentPane().add(text);
beenden.addActionListener(this);
nochmal.addActionListener(this);
spielregeln.addActionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// alex0801: verschoben: ich glaub das gehört hier rein, und nicht dort unten (siehe unten)
KeyListener control=new KL();
addKeyListener(control);
xyword=new char[myword.length()]; // array erstellen
// array initialisieren
for (int i=0;i<myword.length();i++) {
xyword[i]='_';
}
// array erstellen
probed=new char[alphab.length];
notprobed=new char[alphab.length];
// array initialisieren
for (int i=0;i<alphab.length;i++) {
probed[i]='-';
notprobed[i]=alphab[i];
}
// Ende des verschobenen teils
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == nochmal) {
System.out.println("Neu starten");
} else if (evt.getSource() == beenden) {
System.exit(0);
} else if (evt.getSource() == spielregeln) {
System.out.println("Spielregeln");
}
}
public static void main(String[] args) {
Hangman test = new Hangman();
test.pack();
test.setVisible(true);
}
// alex0801: Das hier sollte wohl weiter oben stehen? Try-Catch-Blöcke lassen sich nicht Methodenübergreifend nutzen
// 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);
// }
// alex0801: und das gehört wohl weiter oben hin, siehe oben...
// KeyListener control=new KL();
// addKeyListener(control); // hinzufügen <-----Damit hat der
// // nen Problem!!!!
// 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);
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 ...
// und der noch nicht vorher getippt wurde, dann ...
// u.s.w.
if (probed[i]!=c)
probed[i]=c;
else
check=true;
if (notprobed[i]==c)
notprobed[i]='-';
}
}
// Integer für Anzahl der "_" im bisherigen Wort
int underscores=0;
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++;
}
// wenn der Buchstabe Falsch ist und nicht schon einmal
// getippt wurde mistakes+1
if (!status && !check)
mistakes++;
// solange kein doppelter Tip:
// tries+1;
if (!check)
tries++;
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)+"%");
}
// wenn keine fehlenden Zeichen im Lösungswort ...
if (underscores==0)
mistakes=-1;
// wenn mehr als 5 Fehler gemacht wurden
if (mistakes>=6)
mistakes=6;
repaint(); // Grafikfenster neuzeichnen
}
}
}
hallo
welt
#
Woerter in Datendatei: 1
Ausgewaehltes Wort: #1java.io.IOException: Read error
at java.io.RandomAccessFile.read(Native Method)
at java.io.RandomAccessFile.readLine(Unknown Source)
at Hangman.<init>(Hangman.java:47)
at Hangman.main(Hangman.java:151)
moe_joe hat gesagt.:Allerdings wird die menüleiste nicht angezeigt und das fenster ist beliebig in der größe veränderbar...
wird dir niemand helfen können, geschweige denn wollen.Allerdings wird die menüleiste nicht angezeigt und das fenster ist beliebig in der größe veränderbar...
moe_joe hat gesagt.::roll: das tutorial hab ich auch hier aufm rechner als pdf. wenn ich nen problem hab guck ich da auch ersmal nach und probiere es hinzukriegen. wenn das aber nich klappt.... dann frag ich hier halt. is das denn so schlimm?! is doch das "Anfängerforum".wozu is das denn da? sonst könnt man ja im gleich im forum einen beitrag schreiben in dem steh"siehe java ist eine insel" das ham mir jetzt schon zig leute gesagt. ich verstehe die sachen besser in dem ich learning by doing mache und nich learning by lese java ist eine insel
ms hat gesagt.:Deine öffentliche Bekenntnis, keine Bücher lesen zu wollen runden das Bild ab.
Dein Betrag betrifft die absoluten Basics
ms
private void initializeNewWindow()
{
final JFrame frame = new JFrame("Hangman");
frame.setTitle(".:Hangman:."); // Titel setzen
frame.setSize(435,360); // Größe setzen
frame.setBackground(Color.black);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setLayout(new GridLayout());
JPanel panel = new JPanel(new GridLayout());
panel.requestFocusInWindow();
final JMenuBar hauptMenue = new JMenuBar();
panel.add(hauptMenue);
getContentPane().add(panel);
frame.setVisible(true);
bar = new JMenu();
datei = new JMenu("Datei");
info = new JMenu("Info");
nochmal = new JMenuItem("Neu starten");
beenden = new JMenuItem("Beenden");
spielregeln = new JMenuItem("Hilfe");
hauptMenue.add(bar);
bar.add(datei);
bar.add(info);
datei.add(nochmal);
datei.add(beenden);
info.add(spielregeln);
beenden.addActionListener(null);
nochmal.addActionListener(null);
spielregeln.addActionListener(null);
}
moe_joe hat gesagt.:da sagt mir der compiler jetzt "The method initializeNewWindow() from the type Hangman is never used locally"
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Hangman extends JPanel implements ActionListener
{
private static final long serialVersionUID = 1L;
// Globale Variablen
final static int WND_B=435, WND_H=360;
private static final int EXIT_ON_CLOSE = 0;
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;
private static JMenu bar = null;
private static JMenu datei = null;
private static JMenu info = null;
private static JMenuItem nochmal = null;
private static JMenuItem beenden = null;
private static JMenuItem spielregeln = null;
public Hangman() // Hauptroutine
{
String stmp=new String();
try
{
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
while ((stmp=f.readLine())!=null) //Einlesen der Datensätze
{
wordcount++;
if (wordcount==0) //Wenn kein Wort gefunden wurde, Fehlermeldung ausgeben
{
System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden!");
}
System.out.println("Woerter in Datendatei: "+wordcount); // Statusbericht über Anzahl der Wörter
}
if (wordseek==0)
{
wordseek=(int)(Math.random()*wordcount)+1;// Bestimmt zufälliges Wort aus den Eingelesenen Wörtern
}
System.out.print("Ausgewaehltes Wort: #"+wordseek); // Gibt Statusbericht über ausgewähltes Wort
wordcount=0; // Setzt anzahl der Wörter wieder auf NULL
while ((stmp=f.readLine())!=null)
{
wordcount++;
if (wordcount==wordseek)
{
myword=stmp;
break;
}
}
}//Ende von try
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);//Beenden
}
KeyListener control=new KL();
addKeyListener(control);
xyword=new char[myword.length()]; // array erstellen
for (int i=0;i<myword.length();i++) // array initialisieren
{
xyword[i]='_';
}
// array erstellen
probed=new char[alphab.length];
notprobed=new char[alphab.length];
// array initialisieren
for (int i=0;i<alphab.length;i++)
{
probed[i]='-';
notprobed[i]=alphab[i];
}
}//Ende der Hauptroutine
private static void initializeNewWindow()
{
final JFrame frame = new JFrame("Hangman");
frame.setTitle(".:Hangman:."); // Titel setzen
frame.setSize(435,360); // Größe setzen
frame.setBackground(Color.black);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
Hangman Jpanel = new Hangman();
frame.add(Jpanel,BorderLayout.CENTER);
Jpanel.requestFocusInWindow();
final JMenuBar hauptMenue = new JMenuBar();
Jpanel.add(hauptMenue);
getContentPane().add(Jpanel);
frame.setVisible(true);
bar = new JMenu();
datei = new JMenu("Datei");
info = new JMenu("Info");
nochmal = new JMenuItem("Neu starten");
beenden = new JMenuItem("Beenden");
spielregeln = new JMenuItem("Hilfe");
hauptMenue.add(bar);
bar.add(datei);
bar.add(info);
datei.add(nochmal);
datei.add(beenden);
info.add(spielregeln);
beenden.addActionListener(null);
nochmal.addActionListener(null);
spielregeln.addActionListener(null);
initializeNewWindow();
}
private static Container getContentPane()
{
// TODO Auto-generated method stub
return null;
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == nochmal)
{
System.out.println("Neu starten");
}
else if (evt.getSource() == beenden)
{
System.exit(0);
}
else if (evt.getSource() == spielregeln)
{
System.out.println("Spielregeln");
}
}
public static void main(String[] args)
{
Hangman test = new Hangman();
test.setVisible(true);
initializeNewWindow();
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g) // die Grafiken
{
Toolkit tk=Toolkit.getDefaultToolkit();
g.setColor(Color.black); // Setzt Farbe auf Schwarz
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) //Verschiedenen Fälle für Fehlermeldungen
{
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);
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);
removeKeyListener(CONTROL);
break;
}//Ende Switch
}//Ende public void UpdateHangMan
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;
if (notprobed[i]==c)
notprobed[i]='-';
}
}
int underscores=0; // Integer für Anzahl der "_" im bisherigen Wort
for (i=0;i<myword.length();i++) //"Verschlüsseln" des Ratewortes
{
if (c==Character.toUpperCase(myword.charAt(i)))
{
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_')
underscores++;
}
if (!status && !check)// wenn der Buchstabe Falsch ist und nicht schon einmal
mistakes++; //Getippt wurde Fehler +1
if (!check)
tries++;
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) // wenn keine fehlenden Zeichen im Lösungswort sind
mistakes=-1;
if (mistakes>=6)// wenn mehr als 5 Fehler gemacht wurden
mistakes=6;
repaint(); // Grafikfenster neuzeichnen
}//Ende public void keyTyped(KeyEvent e)
}// Ende class KL
}//Ende public class Hangman
at Hangman.<init>(Hangman.java:89)
at Hangman.main(Hangman.java:166)
xyword=new char[myword.length()]; // array erstellen
while (wordseek==0)
{
wordseek=(int)(Math.random()*wordcount)+1;// Bestimmt zufälliges Wort
}
Der Wert ist größer oder gleich 0.0 und kleiner als 1.0moe_joe hat gesagt.:math.random gibt ja einen double zufallswert zwischen 0,1 und 1,0 aus,
Es wird nicht gerundet, sondern abgeschnitten.moe_joe hat gesagt.:da es aber nen integer wert sein muss wird das denk ich mal auf 5 gerundet (stimmt das so? ich hab mal geraten)
Der Rest des StackTrace würde dir die Zeilennummer angeben, in der der Fehler auftaucht.moe_joe hat gesagt.:hab nochmal ein bischen rumgebastelt und krieg nun die fehlermeldung: String index out of range: 0 at java.lang.String.charAt(Unknown Source)
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Hangman extends JPanel implements ActionListener
{
private static final long serialVersionUID = 1L;
// Globale Variablen
final static int WND_B=435, WND_H=360;
final static int EXIT_ON_CLOSE = 0;
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();
try
{
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
while ((stmp=f.readLine())!=null)
{
wordcount++;
}
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
}//Ende von try
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);//Beenden
}
KeyListener control=new KL(); // neuer KeyListener: CONTROL
addKeyListener(control); // hinzufügen
xyword=new char[myword.length()]; // array erstellen
for (int i=0;i<myword.length();i++)
{
xyword[i]='_';
}
probed=new char[alphab.length]; // array erstellen
notprobed=new char[alphab.length];
for (int i=0;i<alphab.length;i++)
{
probed[i]='-';
notprobed[i]=alphab[i];
}
}
public void update(Graphics g)
{
paint(g);
} //Ergänzung : Flackern beim Zeichen des Grafikbildschirms verhindern
//was nun noch flackert, ist das Überzeichnen des Bildes bzw. Einlesen der Bilddatei
public void paint(Graphics g) // die Grafiken
{
Toolkit tk=Toolkit.getDefaultToolkit();
g.setColor(Color.black); // Setzt Farbe auf Schwarz
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
}//Ende pain(Graphics g)
public void UpdateHangMan(Graphics g)
{
Toolkit tk=Toolkit.getDefaultToolkit(); // Toolkit (für
// Grafikdatei-Support)
// zuweisen
switch(mistakes) //Verschiedenen Fälle für Fehlermeldungen
{
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);
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);
removeKeyListener(control);
break;
}//Ende Switch
}//Ende UpdateHangMan (Graphics g)
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.
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;
if (notprobed[i]==c)
notprobed[i]='-';
}
}
int underscores=0; // Integer für Anzahl der "_" im bisherigen Wort
for (i=0;i<myword.length();i++) //"Verschlüsseln" des Ratewortes
{
if (c==Character.toUpperCase(myword.charAt(i)))
{
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_')
underscores++;
}
if (!status && !check)// wenn der Buchstabe Falsch ist und nicht schon einmal
mistakes++; //Getippt wurde Fehler +1
if (!check)
tries++;
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) // wenn keine fehlenden Zeichen im Lösungswort sind
mistakes=-1;
if (mistakes>=6)// wenn mehr als 5 Fehler gemacht wurden
mistakes=6;
repaint(); // Grafikfenster neuzeichnen
}//Ende public void keyTyped(KeyEvent e)
}// Ende class KL
public static void main(String[] args)
{
Hangman Jpanel = new Hangman();
Jpanel.requestFocusInWindow();
JFrame frame = new JFrame("JFrame");
frame.setTitle(".:Hangman:."); // Titel setzen
frame.add(Jpanel,BorderLayout.CENTER);
frame.setSize(435,360); // Größe setzen
frame.setBackground(Color.black);
frame.add(Jpanel,BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu datei = new JMenu("Datei");
menuBar.add(datei);
datei.add(new JMenuItem("Nochmal"));
datei.add(new JMenuItem("Beenden"));
JMenu hilfe = new JMenu("Hilfe");
menuBar.add(hilfe);
hilfe.add(new JMenuItem("Spielregeln"));
frame.setVisible(true);
}//Ende Main
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
}
}//Ende public class Hangman
CONTROL=new KL()
KL CONTROL;
KL CONTROL = null;