-
Notifications
You must be signed in to change notification settings - Fork 0
/
CompleteHangMan.java
130 lines (115 loc) · 4.96 KB
/
CompleteHangMan.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import java.util.Arrays;
import java.util.Scanner;
public class CompleteHangMan {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
displayMessage("Nu ska du få spela ett spel som kallas för Hänga gubben.");
displayMessage("Du har 7 försök på dig att gissa rätt bokstäver till det hemliga ordet.");
displayMessage("Nu börjar spelet!\nLycka till!\n");
String[] words = getWordList();
String randomWord = selectRandomWord(words).toLowerCase();
playHangmanGame(randomWord, scanner);
scanner.close();
}
public static void playHangmanGame(String randomWord, Scanner scanner) {
char[] wordInUnderscore = initialiseWordInUnderscore(randomWord.length());
int attempts = 7;
boolean gameWin = false;
String correctGuessedLetters = "";
String incorrectGuessedLetters = "";
while (attempts > 0 && !gameWin) {
displayGameState(wordInUnderscore, attempts, correctGuessedLetters, incorrectGuessedLetters);
char guess = getValidGuess(scanner, correctGuessedLetters, incorrectGuessedLetters);
boolean letterGuessed = false;
for (int i = 0; i < randomWord.length(); i++) {
if (randomWord.charAt(i) == guess) {
wordInUnderscore[i] = guess;
letterGuessed = true;
}
}
if (!letterGuessed) {
attempts--;
incorrectGuessedLetters += guess;
displayMessage("\nFelaktig gissning. Försök igen.");
} else {
correctGuessedLetters += guess;
}
if (isGameWon(wordInUnderscore, randomWord)) {
gameWin = true;
}
}
if (gameWin) {
displayMessage("Grattis! Du gissade rätt! Ordet är: " + randomWord);
} else {
displayMessage("Tyvärr så har du inga försök kvar. Ordet var: " + randomWord);
}
}
public static String[] getWordList() {
return new String[] {"trädgårdsarbete",
"arborist",
"datavetenskap",
"undervattenssim",
"hushållsost",
"färgkritor",
"tangentbord",
"urmakare",
"statsvetare",
"lördagsgodis",
"chokladmuffins",
"kastanjer",
"tyranusarusrex",
"guppfotografi",
"gurkmeja",
"födelsedagsfest",
"mirakel",
"stjärnfall",
"anakonda",
"bergskjedja",
"atmosfären",
"citronmaräng",
"zebraränder",
"encyklopedi",
"organisation"};
}
public static String selectRandomWord(String[] words) {
int randomIndex = (int) (Math.random() * words.length);
return words[randomIndex];
}
public static void displayMessage(String message) {
System.out.println(message);
}
public static char[] initialiseWordInUnderscore(int wordLength) {
char[] wordInUnderscore = new char[wordLength];
Arrays.fill(wordInUnderscore, '_');
return wordInUnderscore;
}
public static void displayGameState(char[] wordInUnderscore, int attempts, String correctGuessedLetters, String incorrectGuessedLetters) {
displayMessage("Gissa ordet: " + new String(wordInUnderscore));
displayMessage("Försök kvar: " + attempts);
displayMessage("Bokstäver du har gissat på: " + correctGuessedLetters + incorrectGuessedLetters);
}
public static boolean isGameWon(char[] wordInUnderscore, String secretWord) {
return Arrays.equals(wordInUnderscore, secretWord.toCharArray());
}
public static char getValidGuess(Scanner scanner, String correctGuessedLetters, String incorrectGuessedLetters) {
char guess;
while (true) {
displayMessage("Gissa på en bokstav:");
String guessInput = scanner.next().toLowerCase();
if (guessInput.length() == 1 && Character.isLetter(guessInput.charAt(0))) {
guess = guessInput.charAt(0);
if (!correctGuessedLetters.contains(String.valueOf(guess))
&& !incorrectGuessedLetters.contains(String.valueOf(guess))) {
break;
} else {
displayMessage("Du har redan gissat på denna bokstav.");
}
} else if (guessInput.length() == 1) {
displayMessage("OBS! Endast bokstäver, inga siffror eller specialtecken.");
} else {
displayMessage("OBS! Endast 1 bokstav åt gången.");
}
}
return guess;
}
}