mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-13 16:10:58 -08:00
68 lines
2.4 KiB
Java
68 lines
2.4 KiB
Java
import java.io.BufferedReader;
|
|
import java.io.InputStreamReader;
|
|
import java.io.IOException;
|
|
import java.text.NumberFormat;
|
|
|
|
// This class handles reading input from the player
|
|
// Each input is an x and y coordinate
|
|
// e.g. 5,3
|
|
public class Input {
|
|
private BufferedReader reader;
|
|
private NumberFormat parser;
|
|
private int scale; // size of the sea, needed to validate input
|
|
private boolean isQuit; // whether the input has ended
|
|
private int[] coords; // the last coordinates read
|
|
|
|
public Input(int seaSize) {
|
|
scale = seaSize;
|
|
reader = new BufferedReader(new InputStreamReader(System.in));
|
|
parser = NumberFormat.getIntegerInstance();
|
|
}
|
|
|
|
public boolean readCoordinates() throws IOException {
|
|
while (true) {
|
|
// Write a prompt
|
|
System.out.print("\nTarget x,y\n> ");
|
|
String inputLine = reader.readLine();
|
|
if (inputLine == null) {
|
|
// If the input stream is ended, there is no way to continue the game
|
|
System.out.println("\nGame quit\n");
|
|
isQuit = true;
|
|
return false;
|
|
}
|
|
|
|
// split the input into two fields
|
|
String[] fields = inputLine.split(",");
|
|
if (fields.length != 2) {
|
|
// has to be exactly two
|
|
System.out.println("Need two coordinates separated by ','");
|
|
continue;
|
|
}
|
|
|
|
coords = new int[2];
|
|
boolean error = false;
|
|
// each field should contain an integer from 1 to the size of the sea
|
|
try {
|
|
for (int c = 0 ; c < 2; ++c ) {
|
|
int val = Integer.parseInt(fields[c].strip());
|
|
if ((val < 1) || (val > scale)) {
|
|
System.out.println("Coordinates must be from 1 to " + scale);
|
|
error = true;
|
|
} else {
|
|
coords[c] = val;
|
|
}
|
|
}
|
|
}
|
|
catch (NumberFormatException ne) {
|
|
// this happens if the field is not a valid number
|
|
System.out.println("Coordinates must be numbers");
|
|
error = true;
|
|
}
|
|
if (!error) return true;
|
|
}
|
|
}
|
|
|
|
public int x() { return coords[0]; }
|
|
public int y() { return coords[1]; }
|
|
}
|