-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCelebrityGame.java
197 lines (181 loc) · 4.64 KB
/
CelebrityGame.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
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
import java.util.ArrayList;
import java.util.Scanner;
/**
* The framework for the Celebrity Game project
*
* @author cody.henrichsen
* @version 2.3 25/09/2018 refactored the prepareGame and play methods
*/
public class CelebrityGame
{
/**
* A reference to a Celebrity or subclass instance.
*/
private Celebrity currentCeleb;
/**
* The ArrayList of Celebrity values that make up the game
*/
private ArrayList<Celebrity> allCelebs;
/**
* Scanner to get input from users
*/
private Scanner scanner;
/**
* To keep score of correct guesses
*/
private int points;
// constructor
public CelebrityGame()
{
allCelebs = new ArrayList<Celebrity>();
currentCeleb = null;
scanner = new Scanner(System.in);
points = 0;
}
/**
* Prepares the game by initializing the celebrities list.
*/
public void prepareGame()
{
int numOfCelebs = 0;
do
{
String message = "Player 1, please input Celebrity names and hints.";
printMessage(message);
message = "Type the celebrity name: ";
printMessage(message);
String name = scanner.nextLine();
if (!validateCelebrity(name))
{
System.out.println("Name is too short");
while (!validateCelebrity(name))
{
printMessage(message);
name = scanner.nextLine();
}
}
message = "Type hint for celebrity: ";
printMessage(message);
String hint = scanner.nextLine();
if (!validateClue(hint,""))
{
System.out.println("Hint is too short");
while (!validateClue(hint,""))
{
printMessage(message);
hint = scanner.nextLine();
}
}
addCelebrity(name,hint);
numOfCelebs++;
}
while(numOfCelebs < 5);
//System.out.println(allCelebs);
play();
restart();
}
/**
* Determines if the supplied guess is correct.
*
* @param guess
* The supplied String
* @return Whether it matches regardless of case or extraneous external
* spaces.
*/
/** Index used in for loop to get celebrity **/
public boolean processGuess(String guess, int index)
{
if (guess.equals(allCelebs.get(index).getName())){
System.out.println("That is Correct!");
points++;
System.out.println(points);
return true;
}
System.out.println("Incorrect");
return false;
}
/**
* Asserts that the list is initialized and contains at least one Celebrity.
* Sets the current celebrity as the first item in the list. Opens the game
* play screen.
*/
public void play()
{
System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
for (int i = 0; i < allCelebs.size(); i++)
{
System.out.println("Guess the celebrity based on this hint:");
System.out.println(allCelebs.get(i).getHint());
processGuess(scanner.nextLine(),i);
}
}
/**
* Adds a Celebrity of specified type to the game list
*
* @param name
* The name of the celebrity
* @param guess
* The clue(s) for the celebrity
* @param type
* What type of celebrity
*/
public void addCelebrity(String name, String guess /**String type**/)
{
allCelebs.add(new Celebrity(name,guess));
}
/**
* Validates the name of the celebrity. It must have at least 4 characters.
* @param name The name of the Celebrity
* @return If the supplied Celebrity is valid
*/
public boolean validateCelebrity(String name)
{
name = name.trim();
if (name.length() >= 4)
{
return true;
}
return false;
}
/**
* Checks that the supplied clue has at least 10 characters or is a series of clues
* This method would be expanded based on your subclass of Celebrity.
* @param clue The text of the clue(s)
* @param type Supports a subclass of Celebrity
* @return If the clue is valid.
*/
public boolean validateClue(String clue, String type)
{
clue = clue.trim();
if (clue.length() >= 10)
{
return true;
}
return false;
}
/**
* Method to get input from user from console.
*/
public void getUserInput()
{
String guess = scanner.nextLine();
}
/**
* Method to display message to user to console.
*/
public void printMessage(String message)
{
System.out.println(message);
}
public void restart()
{
System.out.println("Do you want to play again?");
if(scanner.nextLine().equals("yes")){
System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
prepareGame();
}
else{
System.out.println("Thanks for playing");
}
}
}