-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathGame.java
More file actions
159 lines (122 loc) · 4.42 KB
/
Game.java
File metadata and controls
159 lines (122 loc) · 4.42 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
import java.util.ArrayList;
public class Game {
private Printer printer = new Printer();
private String word; // The word to find
private int lettersRemaining;
private String[] letters;
private ArrayList<String> enteredLetters;
private ArrayList<String> foundLetters;
private ArrayList<String> wrongLetters;
private int lives;
Game(String word_) {
word = word_;
lettersRemaining = word.length(); // Initialized as the total length of the word
letters = new String[lettersRemaining]; // Will contain the letters of the word, each letter will be one element
enteredLetters = new ArrayList<String>();
foundLetters = new ArrayList<String>();
wrongLetters = new ArrayList<String>();
lives = 6;
}
// Puts each letter of the word into an array
private void createLettersArray() {
for (int i = 0; i < letters.length; i++) {
letters[i] = Character.toString(word.charAt(i));
}
}
// Check if input is letter
private boolean checkIfLetter(String letter) {
boolean isLetter = false;
if (letter.matches("[a-zA-Z]+")) {
isLetter = true;
}
return isLetter;
}
// Checks if letter has been entered before
private boolean checkIfEntered(String letter, ArrayList<String> enteredLetters) {
boolean entered = false;
for (String let : enteredLetters) {
if (let.equals(letter)) {
entered = true;
break;
}
}
return entered;
}
// Checks if letter input is present in word
private boolean checkLetter(String letter, String[] letters) {
boolean found = false;
for (String let : letters) {
if (let.equals(letter)) {
found = true;
break;
}
}
return found;
}
// Checks how many times a correct letter appears in the word
private int checkTimesFound(String letter, String[] letters) {
int times = 0;
for (String let : letters) {
if (let.equals(letter)) {
times += 1;
}
}
return times;
}
// Adds letter to arraylist
private void addLetter(String letter, ArrayList<String> letters) {
letters.add(letter);
}
// One round
boolean play() {
createLettersArray();
printer.printWord(foundLetters, word);
printer.print("Letters to Find: " + lettersRemaining);
printer.printEmptyLine();
printer.printHanging(lives);
while (lives > 0) {
printer.print("Enter letter:");
LetterInput letterInput = new LetterInput();
String letter = letterInput.input().toLowerCase();
// Check if input is letter
if (checkIfLetter(letter) == false) {
printer.print("This was not a letter!");
continue;
}
// Check if letter has been entered before
if (checkIfEntered(letter, enteredLetters) == true) {
printer.print("You have already entered " + letter + "!");
continue;
}
enteredLetters.add(letter);
boolean result = checkLetter(letter, letters);
printer.printIsLetterPresent(letter, result);
if (result == true) {
int timesFound = checkTimesFound(letter, letters);
lettersRemaining -= timesFound;
addLetter(letter, foundLetters);
printer.printLetterLists(foundLetters, wrongLetters);
}
if (result == false) {
lives -= 1;
addLetter(letter, wrongLetters);
printer.printLetterLists(foundLetters, wrongLetters);
}
// Winning condition
if (lettersRemaining == 0 && lives > 0) {
printer.printHappyMan();
printer.printWord(foundLetters, word);
printer.print("You win!");
return true;
}
printer.print("Letters remaining: " + lettersRemaining);
printer.printEmptyLine();
printer.printHanging(lives);
printer.printWord(foundLetters, word);
printer.printEmptyLine();
}
printer.print("You lose!");
printer.printFullWord(word);
return false;
}
}