Hjælp til hangman prog.

Tags:    java


Jeg skal lave et hangman spil, bruger netbeans og jeg er næsten færdig. Jeg har dog problemer med at få det til at virke ordentligt, er der nogen som kan se nogen helt basale fejl som jeg har overset?

package miniprojekt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class hangman {

static BufferedReader keyboard = new BufferedReader(new
InputStreamReader(System.in));

public static void main(String[] args) throws IOException {
String[] Hemmeligtord = {"r", "u", "n", "e"};
String[] Gætord = {"_", "_", "_", "_"};
int antalforkerte = 0;
boolean forkertgæt = false;

System.out.print("Gæt ordet, du har 7 gæt:" + "\\n" + "\\n");
for (int i = 0; i < Gætord.length; i++) {
System.out.print(Gætord.toLowerCase() + " " );
}
System.out.print("\\n" + "\\n");
boolean Stop;
Stop = false;
String Word;
Word = "";
do
{
System.out.print("\\n" + "Indtast et bokstav! ");
System.out.flush();
Word = keyboard.readLine();

forkertgæt = true;
for (int i = 0; i < Hemmeligtord.length; i++) {
if (Word.equals(Hemmeligtord)) {
Gætord = Word;
forkertgæt = false;
System.out.print(Gætord.toLowerCase() + " ");
}
else
{
System.out.print("\\n" + "Gæt igen" + "\\n");
System.out.flush();
Word = keyboard.readLine();
}

}
if(forkertgæt == true)
{
antalforkerte++;
}

if(antalforkerte == 1)
{
System.out.println("Rebet tegnet");
}
if(antalforkerte == 2)
{
System.out.println("Rebet og hovedet tegnet");
}
if(antalforkerte == 3)
{
System.out.println("Rebet, hovedet og arm1 tegnet");
}
if(antalforkerte == 4)
{
System.out.println("Rebet, hovedet, arm1 og arm2 tegnet");
}
if(antalforkerte == 5)
{
System.out.println("Rebet, hovedet, arm1, arm2 og mave tegnet");
}
if(antalforkerte == 6)
{
System.out.println("Rebet, hovedet, arm1, arm2, mave og ben1 tegnet");
}
if(antalforkerte == 7)
{
System.out.println("Rebet, hovedet, arm1, arm2, mave, ben1 og ben2 tegnet" + "\\n");
System.out.println("Manden er hængt du har tabt");
}
if (Word.equals("rune")) {
Stop = true;
}

if (Gætord.equals(Hemmeligtord)) {
Stop = true;
}

}
while (Stop != true);
}

}




3 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Nu ville det være lidt nemmere at hjælpe, hvis du ville skrive hvori problemet består. Det ser dog ud som om, du prøver at sammenligne en string og et string array (Word.equals(Hemmeligtord)). Derefter sætter du en en string over i et string array (Gætord = Word). Man kan derudover ikke kalde en toLowerCase metode på et array.

Derudover er der en masse småting, hvis man nu skal fluekneppe lidt. Variabler skrives altid med småt, og klasser altid med stort. Hvis man bruger en række if statements, hvor der kun er én logisk mulighed, bør man altid bruge else, således at alle de efterfølgende if statements ikke skal afprøves, hvis den første er gyldig. Alternativt kan man bruge switch case, den er lidt mere overskuelig. If (forkertgæt == true) er det samme som if (forkertgæt).

Undskyld, nu kom jeg vidst for godt i gang. :S



Indlæg senest redigeret d. 10.02.2008 21:56 af Bruger #13106

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
Fold kodeboks ind/udKode 



hangman.java
Fold kodeboks ind/udKode 


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
hehe måske et underligt spørgsmål, men går du på datamatiker uddannelsen? :)



t