Hi, ich versuche mich momentan ein bischen in java. Ich habe schon ein paar
vorkentnisse in C++ aber komm momentan nicht weiter. Hab hier hangman als
code und will dort nun am programmende einen "Beenden" und "Nochmal" button
einfügen (egal ob das spiel gewonnen oder verloren wurde). habe schon viel
gesucht und probiert aber mit den classen usw komm ich nicht klar.
wäre nett wen mir da mal jemand helfen könnte.
mfg moe_joe
vorkentnisse in C++ aber komm momentan nicht weiter. Hab hier hangman als
code und will dort nun am programmende einen "Beenden" und "Nochmal" button
einfügen (egal ob das spiel gewonnen oder verloren wurde). habe schon viel
gesucht und probiert aber mit den classen usw komm ich nicht klar.
wäre nett wen mir da mal jemand helfen könnte.
Code:
import java.awt.*;
import java.awt.event.*;
import java.math.*; // für die Zufallszahl
import java.io.*; // für Dateioperationen
public class hangman extends Frame {
// Globale Variablen
final static int WND_B=425, WND_H=350;
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) { // 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
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.white); // Farbe auf Weiß
g.fillRect(0,0,WND_B,WND_H); // Fenster Weiß machen
g.setColor(Color.black); // Farbe auf Schwaz setzen
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 ...
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++) {
if (c==Character.toUpperCase(myword.charAt(i))) {
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_') underscores++;
}
if (!status && !check) mistakes++;
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
}
}
public static void main(String args[]) {
Frame frame=new hangman(); // 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.setTitle(".:Hangman:."); // Titel setzen
frame.setSize(WND_B, WND_H); // Größe setzen
frame.show(); // auf den Bildschirm
/* Pictures
Image pic;
pic=Toolkit.getDefaultToolkit().getImage("image.jpg");
g.drawImage(pic,0,0,this);
*/
}
}
mfg moe_joe