import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.AbstractAction;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JMenuBar;import javax.swing.JMenu;import javax.swing.JPanel;import javax.swing.JTextArea;import java.io.IOException;import java.util.Arrays;public class Hangman extends JPanel implements ActionListener { private static final long serialVersionUID = -1844350059334672767L; // Globale Variablen final static int WND_B = 425, 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 double runde = 0; static int ende = 0; KL control; char c; String ename = new String(); 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 suche ien wort ist... myword = stmp; // setze myword auf gerade gelesenen break;// String } } } f.close(); // Datei wieder schließen }// Ende von try catch (IOException ioe){ // Falls ein Fehler auftreten sollte System.out.println("IOException: " + ioe.toString()); // Fehlermeldungausgeben System.out.println(" Fehler 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]; } }// Ende Public Hangman () Hauptroutine 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); 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 grafikdateien 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); if (mistakes<6){ runde++; } new SortArray(); 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); int i; boolean status = false; boolean check = false; for (i = 0; i < alphab.length; i++) { if (c == alphab[i]) { 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 mistakes++; // schon einmal 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 mistakes = -1;// Lösungswort sind if (mistakes >= 6)// wenn mehr als 5 Fehler gemacht wurden mistakes = 6; repaint(); // Grafikfenster neuzeichnen } }// Ende class KL public class highscoreliste{ public void highscore(){ File hsfile = new File("highscore.dat"); if (hsfile.exists()) {//prüfen, ob die Datei existiert try { JDialog highscored = new JDialog(); JTextArea highscoreta = new JTextArea(); highscoreta.setEditable(false); highscoreta.setLineWrap(true); highscoreta.setBackground(Color.black); highscoreta.setWrapStyleWord(true); highscoreta.setForeground(Color.white); highscored.add(highscoreta); highscored.setTitle(".:Hangman:. - Highscore"); highscored.setSize( 300, 450 ); highscored.setResizable(false); highscored.setLocation (450, 0); FileReader hsfileR = new FileReader(hsfile); //FileReader liest ein array of char und keinen String char[] c = new char[(int) hsfile.length()]; hsfileR.read(c); //und in das erstellte char-array einlesen String s = new String(c);//aus dem char-array einen string erzeugen highscoreta.setText(s); highscored.setVisible( true ); highscoreta.setVisible( true ); hsfileR.close(); //den FileReader wieder schließen } catch (FileNotFoundException e) { //falls Fehler beim e.printStackTrace(); //Einlesen auftreten, } catch (IOException e) { //diese ausgeben e.printStackTrace(); } } else { } }; }; public class SortArray { //In Objekten dieser inneren Klasse werden die einzelnen //Highscore-einträge (Paare aus Spieler und Punkten) abgelegt private class HighscoreEintrag implements Comparable<Object> { private String name; //Speichert den Namen private double punkte; //Speichert die Punkte //Erzeugt einen neuen HighscoreEintrag public HighscoreEintrag(String name, double punkte) { this.name = name; this.punkte = punkte; } public int compareTo(Object o) { //Vergleich des eigenen HighscoreEintrag hE = (HighscoreEintrag) o;//Objekts mit dem übergebenen if (this.punkte > hE.getPunkte()) { return 1; } else if (this.punkte < hE.getPunkte()) { return -1; } return 0; } public String getName() { //Es folgen drei Funktionen, um die Werte auszulesen name=ename; return name; } public double getPunkte() { punkte=runde; return punkte; } public String toString() { return this.name + ": " + this.punkte; } }//Ende der inneren Klasse //Der Konstruktor, hier geht es richtig los public SortArray() { //Ein Array mit 10 einträgen vom Type HighScoreEintrag wird erstellt //In diesem Array werden die einzenen Paare aus Spieler und Punktestand //gespeichert HighscoreEintrag[] highscore = new HighscoreEintrag[10]; //Ein neue "Dateiverbindung" erstellen File f = new File("highscore.dat"); //prüfen, ob die Datei existiert if (f.exists()) { try { //Wenn sie existiert werden wir sie mit dem FileReader auslesen FileReader fR = new FileReader(f); //FileReader liest ein array of char und keinen String char[] c = new char[(int) f.length()]; //und in das erstellte char-array einlesen fR.read(c); //aus dem char-array einen string erzeugen, der dann den //Dateinhalt enthält String s = new String(c); //Den String bei Zeilenumbruch teilen und die einzelnen //Teile (=Zeilen) in ein array of string schreiben String[] entrys = s.split("\n"); ////jede Zeile der Datei abarbeiten for (int i = 0; i < entrys.length; i++) { //Jede einzelene Zeile bei : trennen //dieser wurde als Trennzeichen zwischen Spieler und //Punktestand gewählt if (i < 10) { String[] entry = entrys[i].split(":"); //einen neuen Highscoreeintrag mit den eingelesenen //Erzeugen, an der entsprechenden stelle im oben //defineirten Array highscore[i] = new HighscoreEintrag(entry[0], Double.parseDouble(entry[1])); } } //den FileReader wieder schließen fR.close(); } catch (FileNotFoundException e) { //falls Fehler beim e.printStackTrace(); //Einlesen auftreten, } catch (IOException e) { //diese ausgeben e.printStackTrace(); } } else { //Wenn die Datei nicht existiert werden Beispieleinträge angelegt highscore[0] = new HighscoreEintrag("a", 10); highscore[1] = new HighscoreEintrag("b", 90); highscore[2] = new HighscoreEintrag("c", 55); highscore[3] = new HighscoreEintrag("d", 5); highscore[4] = new HighscoreEintrag("e", 20); highscore[5] = new HighscoreEintrag("f", 50); highscore[6] = new HighscoreEintrag("g", 40); highscore[7] = new HighscoreEintrag("h", 80); highscore[8] = new HighscoreEintrag("i", 30); highscore[9] = new HighscoreEintrag("j", 70); } //Das Array wird sortiert! //Dabei wird die in dem HighscoreEintrag implementierte //Vergleichsfunktion verwendet (ohne dass Du es merkst) Arrays.sort(highscore); //Ausgabe der Liste for (int i = 0; i < highscore.length; i++) { System.out.println(highscore[i]); } //Der FileWriter ist analog zum FileReader try { FileWriter fW = new FileWriter(f); for (int i = 0; i < highscore.length; i++) { if (i < highscore.length - 1) { fW.write(highscore[i].toString() + "\n"); } else { fW.write(highscore[i].toString()); } } fW.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } @Override public void actionPerformed(ActionEvent arg0) { } public static void main(String[] args){ // Main Hangman Jpanel = new Hangman(); // Neuer Panel Jpanel.setLayout(null); final JFrame f = new JFrame("JFrame"); // Frame vereinbaren Button endeb = new Button("Ende"); endeb.setBounds(320,175,80,20); Jpanel.setFocusable(true); Jpanel.requestFocusInWindow(); // Focus in Panel setzen Jpanel.add(endeb); ActionListener al = new ActionListener() { public void actionPerformed( ActionEvent e ) { ende=1; System.out.println(ende); Auf diesen Beitrag antworten Neuen Beitrag verfassen