-
Notifications
You must be signed in to change notification settings - Fork 0
/
Talker.java
122 lines (107 loc) · 2.79 KB
/
Talker.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
import java.util.Scanner;
/**
* Used for all input, output and logging functions. Also includes gameStrings
* for parsing output. Contains methods for input/output, and variables (int[])
* for logging past moves. Can be extended to include file support for inputs
* and outputs.
*
* @author Pranav Shrestha ps2958
*
*/
public class Talker {
private static Scanner inptr = new Scanner(System.in);
private String[] moveNames = { "Scissor", "Paper", "Rock", "Lizard", "Spock" };
private String[] winNames = { "cuts", "covers", "crushes", "poisons", "smashes", "decapitates", "disproves", "eats",
"vaporizes" };
private int[] log;
private int logSize = 0;
/**
* @param numRounds
* -Initializes log with an initial size
*/
Talker(int numRounds) {
log = new int[numRounds];
}
/**
* Method for getting user-input, including basic input-validation
*
* @return move - user input move as an int (1-5) or exit(0)
*/
public int userInput() {
int value;
String input;
while (true) {
System.out.print("Enter your choice r/p/s/l/k/z: ");
input = inptr.nextLine();
if (input.length() != 1)
continue;
value = "zsprlkZSPRLK".indexOf(input.charAt(0));
if (value > -1)
break;
}
return value % 6;
}
/**
* prints out the string specified. Meant to be extended for file output
*
* @param s
* - String to output
*/
public void log(String s) {
System.out.println(s);
}
/**
* Adds the human's move to the game log, and calls output function for
* displaying game state (moves chosen by both players).
*
* @param move1
* -Human's move. To be added to the game log
* @param move2
* -Computer's move.
*/
public void log(int move1, int move2) {
if (logSize == log.length)
expand();
log[logSize] = move1;
logSize++;
log("You played " + moveNames[move1 - 1] + ". The computer played " + moveNames[move2 - 1]);
}
/**
* Formats the game round, explaining how move1 wins.For instance, Rock
* "crushes" Scissor
*
* @param move1
* @param move2
* @param verb
*/
public void log(int move1, int move2, int verb) {
log(moveNames[move1 - 1] + " " + winNames[verb - 1] + " " + moveNames[move2 - 1]);
}
/**
* Getter method for the logSize;
*
* @return logSize - Number of human moves in history
*/
public int getLogSize() {
return logSize;
}
/**
* Getter method for the log
*
* @param i
* - index of log to access
* @return the (i)th move played by the human
*/
public int getLog(int i) {
return (i < 0) ? log[logSize + i] : log[i];
}
/**
* Increases the size of the log when needed (like an ArrayList)
*/
public void expand() {
int[] tmp = new int[(int) (log.length * 1.5)];
for (int i = 0; i < logSize; i++)
tmp[i] = log[i];
log = tmp;
}
}