Hej Anders,
Den kode der er ikke lige til at få til at virke, og der er mere end et par grunde til det...
--- meget små ting ---
a. System.out.print(Gætord.toLowerCase() + " " ); - Du har ikke forandret arrayet, der er ingen grund til at det skal lowercases endnu (lille ting).
b.boolean Stop; Stop = false; - forkort det nu til boolean Stop = false;
c. String Word; Word = ""; - forkort det nu til String Word = "";
d. Konverter gæt og ord til lowercase begge, så slipper brugeren for at skulle gætte store og små bogstaver.
e. Benyt en try-catch til at fange dine fejl så du selv kan beslutte hvad der skal ske.
f. de mange if sætninger kan optimeres på med enten en switch-case eller en elseif.
--- / meget små ting ---
1. String[] Hemmeligtord - Lav enten en String eller et char[]
1.5. String[] Gætord - Lav enten en String eller et char[]
2. (Word.equals(Hemmeligtord)) - Hemmeligtord er et String Array, det er sjældent en bruger indtaster det. Denne sammenligning er den største fejl.
2.5. if (Gætord.equals(Hemmeligtord)) - igen sammenligninger der blander String og String Array. Der er ingen grund til de der string arrays.
3. System.out.print("\\n" + "Gæt igen" + "\\n"); Word = keyboard.readLine(); - AVS! Det var 2. readLine i samme løkke som kun laver eet check på input.
Så, copyrighted til mig selv ...
Main.java
package hangman;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
public Main() {
}
public static void main(String[] args) {
hangman game;
String guess;
if(args.length < 1)
game = new hangman();
else
game = new hangman(args[0]);
while(!game.done()) {
System.out.println("Guess the word or a letter, you have " + game.getNrGuesses() + " guesses.");
game.showLetters();
try{
guess = keyboard.readLine();
if(game.guessLetter(guess))
System.out.println("Right Guess");
else {
System.out.println("Wrong Guess");
game.wrongGuess();
}
} catch(Exception e) {
//System.err.println("Error in game logic, please start a new game.");
System.err.println(e);
break;
}
}
if(game.won()) {
System.out.println("Well done. You guessed the word.");
game.showLetters();
}
else
System.out.println("Sorry, you lost.");
}
}
hangman.java
package hangman;
public class hangman {
String secretword;
String testword;
int nrGuesses;
int guessedLetters = 0;
String[] partsArray = {"Robe","head","left arm","right arm","stomach","left leg","right leg"};
String letters = "";
private void makeLetters() {
for(int i = 0; i < secretword.length(); i++) {
letters += "?";
}
}
public void showLetters() {
System.out.println(letters);
}
public int getNrGuesses() {
return nrGuesses;
}
public boolean done() {
if(testword.length() < 1) return true;
if(nrGuesses < 1) return true;
return false;
}
public boolean won() {
if(testword.length() < 1) return true;
return false;
}
public void wrongGuess() {
for(int i = 7; i > nrGuesses; i--) {
if(i < nrGuesses + 2 && i != 7)
System.out.print("and ");
System.out.print(partsArray[7-i]);
if(i - nrGuesses > 2)
System.out.print(", ");
else
System.out.print(" ");
}
System.out.println("");
}
public void replace(String ch, int last) {
int pos = secretword.indexOf(ch, last+1);
if(pos > 0) {
letters = letters.substring(0, pos)
+ ch + letters.substring(pos+ch.length(), letters.length());
}
else {
letters = ch + letters.substring(pos+ch.length(), letters.length());
}
}
public boolean guessLetter(String ch) {
if(testword.indexOf(ch) > -1) {
int lastIndex = -1;
while(secretword.indexOf(ch, lastIndex+1) > -1) {
this.replace(ch, lastIndex);
lastIndex = secretword.indexOf(ch, lastIndex+1);
}
testword = testword.replaceAll("" + ch, "");
return true;
} else {
nrGuesses--;
return false;
}
}
public hangman(String secretword, int nrGuesses) {
this.secretword = secretword.toLowerCase();
this.testword = this.secretword;
this.nrGuesses = nrGuesses;
this.makeLetters();
}
public hangman(String secretword) {
this(secretword, 7);
}
public hangman() {
this("ieet");
}
}
Held og lykke med at få det til at virke, men jeg vil anbefale dig at overveje at gøre bedre brug af at java er objektorienteret og at du kan opdele i metoder. Som tommelfinger regel bør en metode opdeles, hvis den er længre end en skærmhøjde.
Med venlig hilsen
Ieet
Ps. Skift ordet rune ud med Anna eller Inkognito når du tester, så vil du se et tydeligt problem mere.
Indlæg senest redigeret d. 12.02.2008 05:30 af Bruger #12836