Hi ich sollte hangman programmieren hier mal die angabe dazu:
Implementieren Sie das Ratespiel Hangman. In diesem Spiel muss ein Ratespieler ein Wort erraten.
Der Ratespieler soll dabei in beliebiger Reihenfolge nacheinander einzelne Buchstaben des
Alphabets eingeben. Falls einer dieser Buchstaben im Wort vorkommt, soll das Wort mit den
genannten Buchstaben ausgegeben werden. Die Buchstaben, die bisher noch nicht eingegeben
wurden, sollen mit einem Unterstrich (_) gekennzeichnet werden. So ergibt sich nach und nach das
gesuchte Wort. Kommt ein genannter Buchstabe im Wort jedoch nicht vor, so beginnt das
Programm einen Galgen mit einem Gehängten zu zeichnen. Dies geschieht in mehreren Etappen
(bei jedem Fehlversuch kommt ein Teilstrich dazu), so dass der Spieler 8 Fehlversuche hat. Hat er
dann das Wort noch nicht herausgefunden, so hat er verloren und hängt symbolisch am Galgen.
Schnittstelle der Klasse Hangman:
Beispiel einer Programmausgabe:
HANGMAN:
Word to guess: _ _ _ _ _ _ _ _ _ _ _
# misses left = 8
guess> e
Word to guess: _ _ _ e _ _ _ _ e _ _
# misses left = 8
guess> i
|
/ \
Word to guess: _ _ _ e _ _ _ _ e _ _
# misses left = 7
guess> a
|
|
|
|
/ \
Word to guess: _ _ _ e _ _ _ _ e _ _
# misses left = 6
guess> n
Word to guess: _ _ _ e n _ _ _ e n _
# misses left = 6
guess> h
Word to guess: _ _ _ e n _ _ h e n _
# misses left = 6
guess> g
Word to guess: _ _ _ e n g _ h e n _
# misses left = 6
guess> s
Word to guess: s _ _ e n g _ h e n s
# misses left = 6
guess> l
|
|
|
|
|
|
|
/ \
Word to guess: s _ _ e n g _ h e n s
# misses left = 5
guess> c
|---
|
|
|
|
|
|
/ \
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> h
h was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> c
c was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> l
l was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> i
i was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> p
|-----
| |
|
|
|
|
|
/ \
Word to guess: s _ _ e n g _ h e n s
# misses left = 3
guess> r
Word to guess: s _ r e n g _ h e n s
# misses left = 3
guess> o
|-----
| |
| O
|
|
|
|
/ \
Word to guess: s _ r e n g _ h e n s
# misses left = 2
guess> v
|-----
| |
| O
| \|/
|
|
|
/ \
Word to guess: s _ r e n g _ h e n s
# misses left = 1
guess> m
|-----
| |
| O
| \|/
| |
| |
| / \
/ \
you lose!!!
Weiters ist ein Testprogramm zu schreiben, welches beide Konstruktoren verwendet und die
Funktionalität der Klasse Hangman überprüft.
Hinweise:
Die Eingabe eines Buchstabens zum 2ten Mal durch den Benutzer trägt nicht dazu bei, dass der
Galgen weiter aufgebaut wird. Falls dieser Fall eintrifft, soll eine entsprechende Meldung
ausgegeben werden.
Ihre Programmausgabe soll der gezeigten beispielhaften Programmausgabe entsprechen.
Sie können selbstverständlich noch weitere Methoden für die Klasse Hangman definieren.
so jetzt der code mal :
main.java:
hangman.java:
so meine probs sind: irgendwie funktioniert die showhangman methode nicht weil immer nur das erste aufgerufen wird egal wieviele misses es sind. Und dass der hangman nur gezeigt wird wenn ein miss runterzählt
Dann es wird nur immer das gleiche wort genommen irgendwie funktioniert die math.random nicht...
Was ich noch nicht habe ist dass wenn ein gleicher buchstabe nocheinmal aufgerufen wird dass er ausgibt dass der schon aufgerufen wurde hat da jemand ne idee?
Implementieren Sie das Ratespiel Hangman. In diesem Spiel muss ein Ratespieler ein Wort erraten.
Der Ratespieler soll dabei in beliebiger Reihenfolge nacheinander einzelne Buchstaben des
Alphabets eingeben. Falls einer dieser Buchstaben im Wort vorkommt, soll das Wort mit den
genannten Buchstaben ausgegeben werden. Die Buchstaben, die bisher noch nicht eingegeben
wurden, sollen mit einem Unterstrich (_) gekennzeichnet werden. So ergibt sich nach und nach das
gesuchte Wort. Kommt ein genannter Buchstabe im Wort jedoch nicht vor, so beginnt das
Programm einen Galgen mit einem Gehängten zu zeichnen. Dies geschieht in mehreren Etappen
(bei jedem Fehlversuch kommt ein Teilstrich dazu), so dass der Spieler 8 Fehlversuche hat. Hat er
dann das Wort noch nicht herausgefunden, so hat er verloren und hängt symbolisch am Galgen.
Schnittstelle der Klasse Hangman:
Code:
public class Hangman {
//Deklaration von globalen Variablen und Konstanten.
//Leerer Konstruktor:
//Ein Wort soll per Zufall aus einem Array mit Woertern fuer das Spiel
//ausgewaehlt werden.
public Hangman() { ... }
//Konstruktor mit einem Parameter (dem zu erratenden Wort)
public Hangman(String word) { ... }
//Methode, mit der ein Spiel gestartet wird.
public void play() { ... }
//Methode welche das zu erratende Wort dem Spieler praesentiert. Die bisher noch
//nicht erratenen Zeichen sollen mit einem Unterstrich ausgegeben werden.
private void showWord() { ... }
//Methode, welche den Galgen zeichnet. Diese wird aufgerufen wenn der Spieler kein
//neues Zeichen erraten konnte und dieses Zeichen auch noch nie geraten wurde.
private void showHangman() { ... }
}
Beispiel einer Programmausgabe:
HANGMAN:
Word to guess: _ _ _ _ _ _ _ _ _ _ _
# misses left = 8
guess> e
Word to guess: _ _ _ e _ _ _ _ e _ _
# misses left = 8
guess> i
|
/ \
Word to guess: _ _ _ e _ _ _ _ e _ _
# misses left = 7
guess> a
|
|
|
|
/ \
Word to guess: _ _ _ e _ _ _ _ e _ _
# misses left = 6
guess> n
Word to guess: _ _ _ e n _ _ _ e n _
# misses left = 6
guess> h
Word to guess: _ _ _ e n _ _ h e n _
# misses left = 6
guess> g
Word to guess: _ _ _ e n g _ h e n _
# misses left = 6
guess> s
Word to guess: s _ _ e n g _ h e n s
# misses left = 6
guess> l
|
|
|
|
|
|
|
/ \
Word to guess: s _ _ e n g _ h e n s
# misses left = 5
guess> c
|---
|
|
|
|
|
|
/ \
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> h
h was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> c
c was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> l
l was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> i
i was already entered previously!
Word to guess: s _ _ e n g _ h e n s
# misses left = 4
guess> p
|-----
| |
|
|
|
|
|
/ \
Word to guess: s _ _ e n g _ h e n s
# misses left = 3
guess> r
Word to guess: s _ r e n g _ h e n s
# misses left = 3
guess> o
|-----
| |
| O
|
|
|
|
/ \
Word to guess: s _ r e n g _ h e n s
# misses left = 2
guess> v
|-----
| |
| O
| \|/
|
|
|
/ \
Word to guess: s _ r e n g _ h e n s
# misses left = 1
guess> m
|-----
| |
| O
| \|/
| |
| |
| / \
/ \
you lose!!!
Weiters ist ein Testprogramm zu schreiben, welches beide Konstruktoren verwendet und die
Funktionalität der Klasse Hangman überprüft.
Hinweise:
Die Eingabe eines Buchstabens zum 2ten Mal durch den Benutzer trägt nicht dazu bei, dass der
Galgen weiter aufgebaut wird. Falls dieser Fall eintrifft, soll eine entsprechende Meldung
ausgegeben werden.
Ihre Programmausgabe soll der gezeigten beispielhaften Programmausgabe entsprechen.
Sie können selbstverständlich noch weitere Methoden für die Klasse Hangman definieren.
so jetzt der code mal :
main.java:
Code:
public class Main {
public static void main(String[] args) {
Hangman hangman = new Hangman();
hangman.play();
}
}
hangman.java:
Code:
import java.util.Vector;
public class Hangman {
String[] words = {"scheisdanix", "tues", "ella", "kaneaftokanedo"};
int trys = 0;
int missesLeft = 8;
String word = "";
boolean ende = false;
boolean erraten = false;
Vector guesses = new Vector();
//Deklaration von globalen Variablen und Konstanten.
//Leerer Konstruktor:
//Ein Wort soll per Zufall aus einem Array mit Woertern fuer das Spiel
//ausgewaehlt werden.
public Hangman() {
word = words[(int) (Math.random() * 4)];
}
//Konstruktor mit einem Parameter (dem zu erratenden Wort)
public Hangman(String word) {
this.word = word;
}
//Methode, mit der ein Spiel gestartet wird.
public void play() {
String guess;
IO.writeLn("HANGMAN:");
while (!this.ende) {
this.showWord();
IO.write("guess> ");
guess = IO.readWord();
this.addGuess(guess.charAt(0));
if (this.missesLeft < 8) {
this.showHangman();
}
if (this.missesLeft == 0) {
IO.writeLn("you lose!!!");
this.ende = true;
} else if (this.istWortErraten()) {
IO.writeLn("you win!!!");
this.showWord();
this.ende = true;
}
}
}
private void addGuess(char guess) {
if (!guesses.contains(guess)) {
this.guesses.add(guess);
CharSequence charSequence = Character.toString(guess);
if (!word.contains(charSequence)) {
this.missesLeft--;
}
this.trys++;
}
}
private boolean istWortErraten() {
for (int i = 0; i < word.length(); i++) {
if (!guesses.contains(word.charAt(i))) {
return false;
}
}
return true;
}
//Methode welche das zu erratende Wort dem Spieler praesentiert. Die bisher noch
//nicht erratenen Zeichen sollen mit einem Unterstrich ausgegeben werden.
private void showWord() {
//Methode, welche den Galgen zeichnet. Diese wird aufgerufen wenn der Spieler kein
//neues Zeichen erraten konnte und dieses Zeichen auch noch nie geraten wurde.
IO.write("Word to guess: ");
for (int i = 0; i < this.word.length(); i++) {
if (this.guesses.contains(this.word.charAt(i))) {
IO.write(" " + this.word.charAt(i));
} else {
IO.write(" _");
}
}
IO.writeLn();
IO.writeLn("# misses left: " + this.missesLeft);
}
private void showHangman() {
switch (missesLeft) {
case 0:
IO.writeLn(" |-----");
IO.writeLn(" | |");
IO.writeLn(" | 0");
IO.writeLn(" | \\|/");
IO.writeLn(" | |");
IO.writeLn(" | |");
IO.writeLn(" | / \\ ");
IO.writeLn("/ \\ ");
break;
case 1:
IO.writeLn(" |-----");
IO.writeLn(" | |");
IO.writeLn(" | 0");
IO.writeLn(" | \\|/");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn("/ \\ ");
break;
case 2:
IO.writeLn(" |-----");
IO.writeLn(" | |");
IO.writeLn(" | 0");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn("/ \\ ");
break;
case 3:
IO.writeLn(" |-----");
IO.writeLn(" | |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn("/ \\ ");
break;
case 4:
IO.writeLn(" |---");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn("/ \\ ");
break;
case 5:
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn("/ \\ ");
break;
case 6:
IO.writeLn(" ");
IO.writeLn(" ");
IO.writeLn(" ");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn(" |");
IO.writeLn("/ \\ ");
break;
case 7:
IO.writeLn(" ");
IO.writeLn(" ");
IO.writeLn(" ");
IO.writeLn(" ");
IO.writeLn(" ");
IO.writeLn(" ");
IO.writeLn(" |");
IO.writeLn("/ \\ ");
break;
}
}
}
so meine probs sind: irgendwie funktioniert die showhangman methode nicht weil immer nur das erste aufgerufen wird egal wieviele misses es sind. Und dass der hangman nur gezeigt wird wenn ein miss runterzählt
Dann es wird nur immer das gleiche wort genommen irgendwie funktioniert die math.random nicht...
Was ich noch nicht habe ist dass wenn ein gleicher buchstabe nocheinmal aufgerufen wird dass er ausgibt dass der schon aufgerufen wurde hat da jemand ne idee?