Highscore-liste erstellen

was für Fehler zeigt der denn bei dir alles an? wäre nett wenn du mir das mal sagen könntest damit ich versuchen kann die bei mir zu beheben!

mfg moe_joe
 
Versuch es einfach mal mit dieser Klasse, da hab ich diese Fehler behoben. Also es funktioniert noch nicht richtig, aber die Syntaxfehler sind weg.

Java:
package de.tutorials.tmp;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.AbstractAction;
import javax.swing.JButton;
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 javax.swing.JTextField;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;

public class Hangman extends JPanel{

	private static final long serialVersionUID = 1L;
	// 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
	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];
		}
	}// Ende Public Hangman () Hauptroutine


	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);
			showHighscoreDialog();
			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);
			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
				// 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 class KL
	
	public static void main(String[] args) // Main
	{
		Hangman Jpanel = new Hangman(); // Neuer Panel
		final JFrame frame = new JFrame("JFrame"); // Frame vereinbaren
		Jpanel.setFocusable(true);
		Jpanel.requestFocusInWindow(); // Focus in Panel setzen
		frame.setTitle(".:Hangman:."); // Titel setzen
		frame.add(Jpanel, BorderLayout.CENTER); // Frame den Panel zuweisen
		frame.setSize(425, 360); // Größe setzen
		frame.setResizable(false);
		frame.setBackground(Color.white); // Hintergrund schwarz
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Beim Klicken
		JMenuBar menuBar = new JMenuBar();// Menübar erstellen
		frame.setJMenuBar(menuBar);// Menü dem Frame zuweisen
		JMenu datei = new JMenu("Datei");// Menüpunkt "Datei" Vereinbaren
		menuBar.add(datei);// Menüpunkt "Datei" der Menübar hinzufügen
		JMenu hilfe = new JMenu("Hilfe");// Menüpunkt "Hilfe" vereinbaren
		menuBar.add(hilfe);// Menüpunkt "Hilfe" der Menübar hinzufügen
		datei.add(new AbstractAction("Nochmal") {
			public void actionPerformed(ActionEvent arg0) {
				System.out.print("Nochmal...");
				frame.dispose();
                initializeNewWindow();
			}

			private void initializeNewWindow() {
				// TODO Auto-generated method stub
				
			}
		});

		datei.add(new AbstractAction("Beenden") {
			public void actionPerformed(ActionEvent e) {
				System.out.println("Beenden...");
				System.exit(0);
			}
		});
		hilfe.add(new AbstractAction("Spielregeln") {
			public void actionPerformed(ActionEvent e){
				System.out.println("Spielregeln...");
				JDialog d = new JDialog(); 
				JTextArea ta = new JTextArea();
				ta.setEditable(false);
				ta.setLineWrap(true);
				ta.setBackground(Color.black);
				ta.setWrapStyleWord(true);
				ta.setForeground(Color.white);
				ta.setText("                          .:Hangman:. Spielregeln" +
						"                              " +
						"Wenn das spiel startet erscheint eine Kette von Strichen, " +
						"die so viele Elemente enthält wie das zu erratene Wort lang ist. " +
						"Nun geben Sie einen beliebigen Buchstaben des Alphabets ein (A-Z, ü, ä, ö, ß). " +
						"Falls der Buchstabe vorkommt, wird er über jeden Strich geschrieben, " +
						"der an einer Position steht, an der der Buchstabe im Wort verwendet wird. " +
						"Falls der Buchstabe nicht vorkommt, wird ein Galgen mit einem Strichmännchen " +
						"um ein weiteres von insgesamt 6 Elementen vervollständigt. Im unteren teil " +
						"des Fensters sehen Sie die von ihnen schon getippten Buchstaben. Wurde das " +
						"Wort erraten, bevor der Galgen komplett gezeichnet werden konnte, ist das S" +
						"piel gewonnen. Andernfalls ist das spiel beendet und der Computer hat Gewonnen." +
						"                 Viel Spaß!");
				d.add(ta);
				d.setTitle(".:Hangman:. - Spielregeln");
				d.setSize( 300, 450 ); 
				d.setResizable(false);
				d.setLocation (450, 0);
				d.setVisible( true );
			}});
			
			hilfe.add(new AbstractAction("Highscore") {
				public void actionPerformed(ActionEvent e){
					System.out.println("Highscore...");
					
				}});

	frame.setVisible(true);// Frame sichtbar machen	
	}// Ende Main
	
	private void showHighscoreDialog(){
		JDialog hsd = new JDialog(); 	
    	JTextField tf = new JTextField();
    	JTextArea ta = new JTextArea();
		JButton hsbutton = new JButton("Hinzufügen");
		hsd.add(hsbutton);
		hsd.add(tf);
		hsd.add(ta);
		ta.setEditable(false);
		ta.setSize(300, 400);
		String hscString = ta.getText();
		hsd.setTitle(".:Hangman:. - Highscore");
		hsd.setSize( 300, 450 ); 
		hsd.setResizable(false);
		hsd.setLocation (450, 0);
		hsd.setBackground(Color.black); // Hintergrund schwarz
		hsbutton.setLocation (450, 0);
		tf.setLocation (450, 0);
		hsd.setVisible(true);
		tf.setVisible(true);
		ActionListener hsb = new ActionListener() {
		      public void actionPerformed( ActionEvent e ) {
		        System.exit( 0 );
		      }
		 };
		hsbutton.addActionListener(hsb);

        //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.txt");

        //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
        Arrays.sort(highscore);

        //Ausgabe der Liste
        for (int i = 0; i < highscore.length; i++) {
        	ta.append(highscore[i].toString());
        }

        //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();
        }

    
	}
	
//	In Objekten dieser inneren Klasse werden die einzelnen
    //Highscore-einträge abgelegt
    private class HighscoreEintrag implements Comparable {

        //Speichert den Namen
        private String name;

        //Speichert die Punkte
        private double punkte;

        //Erzeugt einen neuen HighscoreEintrag
        public HighscoreEintrag(String name, double punkte) {
            this.name = name;
            this.punkte = punkte;
        }

        //Vergleichsfunktio
        public int compareTo(Object o) {
            HighscoreEintrag hE = (HighscoreEintrag) o;
            if (this.punkte > hE.getPunkte()) {
                return 1;
            } else if (this.punkte < hE.getPunkte()) {
                return -1;
            }
            return 0;
        }

        //Es folgen drei Funktionen, um die Werte auszulesen
        public String getName() { 
//        	String eingabe = tf.getText(); 
            return name;
        }

        public double getPunkte() {
        	String trefferquote = "Trefferquote: "
        	+ (((tries - mistakes) * 100) / tries) + "%";
            return punkte;
        }

        public String toString() {
            return this.name + ": " + this.punkte;
        }
    }//Ende der inneren Klasse
	
	
}// Ende public class Hangman

Sichere aber deine Klasse.

MFG

zEriX
 
Ersmal vielen Dank für die ganze mühe! habs bei mir mal eingefügt und compilieren lassen. Also bei mir startet das programm wie bis her. Er zeigt mir 8 Warnings an, wobei 4 stück auch vorher schon da waren( The serializable class does not declare a static final serialVersionUID field of type long line 287).

[UPDATE]: Desweiteren gibts da nen problem beim spielablauf. Wenn man die wörter errät und dann den letzen buchstaben eintippt, erscheint sofort die highscore liste und es wird nicht mehr der Text Gewonnen, das gesuchte wort war.... ausgegeben. vorher klappte das
 
Zuletzt bearbeitet:
ne, das ist mir ja auch schon aufgefallen, wenn man die methode Hangman Highscore im -1 Case nach dem "Gewonnen" aufruft beendet er das spiel nicht ordentlich und öffnet den dialog aus der hioghscore methode
 
noch jemand da?^^ bin mit meinem problem immernoch nicht wirklich weiter.... probier hier ewig rum, aber es will einfach nicht. is denn keiner mehr da der einem ein bischen helfen könnte?
 
Zuletzt bearbeitet:
1.
Bitte achte auf eine korrekte Grammatik und Rechtschreibung (inkl. Groß-/ Kleinschreibung) und eine sinnvolle, klare Fragestellung bzw. Antwort. Mehr dazu findest Du in unserer Netiquette.

2. Es wurde dir geholfen. Du musst aber auch ein wenig mehr Eigeninitiative zeigen
 
noch jemand da?^^ bin mit meinem problem immernoch nicht wirklich weiter.... probier hier ewig rum, aber es will einfach nicht. is denn keiner mehr da der einem ein bischen helfen könnte?

@moe_joe: Bitte halte dich in deinen Themen an die Netiquette (!)

Nr.12 hat gesagt.:
Bitte erstelle keine Doppel-/Mehrfach-/Pushpostings. Dazu zählen insbesondere das Erstellen identischer Themen in mehreren unterschiedlichen Unterforen, das mehrfache oder erneute Einstellen eines bereits vorhandenen Themas, und das Posten von Beiträgen, die einzig und allein dem Zweck dienen, das entsprechende Thema in der Themenauflistung wieder weiter oben zu platzieren (sog. „Thread Pushing“). Derartige Beiträge werden restlos gelöscht. Sollte der Eindruck bei unseren Moderatoren entstehen, dass wissentlich gegen diesen Punkt verstoßen wurde, hat dies die unbegrenzte Sperrung des Accounts zur Folge.
Zwei deiner letzten Threadpusher wurden von mir schon aus diesem Thema entfernt.

Nr.15 hat gesagt.:
Unser Forum ist kein Chatroom. Kurz-Beiträge ("Ein-Zeilen Postings"), die einfach so ins Forum "geklatscht" werden, werden ohne Vorwarnung von einem Moderator oder Administrator gelöscht. Das gleiche gilt insbesondere für Beiträge, die in Rechtschreibung, Satzbau und Verständlichkeit nicht ein vernünftiges, allgemein übliches und altersgruppen-übergreifendes Niveau erfüllen. Jugendsprache, regional verbreitete Dialekte und durchgehend kleingeschriebene Beiträge sind ebenfalls unerwünscht. Mit anderen Worten: wer erfolgreich die im Deutsch-Unterricht erlernten Kenntnisse praxisnah auf unserem Forum anwenden kann, wird nicht mit dieser Regel in Konflikt kommen. "Wiederholungstäter" werden, nachdem sie zuvor von einem Moderator auf die Mängel hingewiesen wurden, ggf. unbefristet gesperrt.
Bitte achte in deinen Beiträgen auf die Groß- und Kleinschreibung.
 
Also, erstmal ist das garnicht so einfach immer alles alleine zu finden. Als ob ich hier vorm rechner sitze und wenn ich ein Problem habe NUR in diesem Forum schreibe und selbst kein stückchen mich darum kümmer was zu finden... aber das hatten wir in diesem thread ja schon des öfteren diese Dioskussion.. Es wurde mir geholfen?! also das Gefühl hab ich nicht! Für mich war dann die "hilfe" nicht sehr hilfreich! Vielleicht denk ihr mal aus meiner Sicht. Ganz ehrlich was würdet ihr an emienr stelle tun? bin eigentlich immenroch bei meinem problem, das die Highscoreliste nicht funktioniert und das programm nicht neu startet, das einzige was ich weis ist das mein programm unendliche viele fehler haben soll (laut zerix) mir aber der compiler keine ausgibt. was für fehler, wie und wo hat mir bis jetzt auch noch niemand gesagt wie soll ich mich da also selber bemühen die zu finden? Wenn das Programm schon jede Menge Fehler hat dann können ja beim einbauen von neuen Componenten nur Folgefehler entstehen....

Vielleicht denkt ihr mal aus meiner Sicht, ich will euch doch nichts böses, euch nich ärgen oder sonst was mit meinen posts, ich hätte einfach nur gerne produktive Hilfe bei meinem Problem!

mfg moe_joe
 

Neue Beiträge

Zurück