JAVA零基础小白自学日志——第十五天
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class StartupBust {
private GameHelper helper = new GameHelper();
private ArrayList<Startup> StartupsList = new ArrayList<Startup>();
private int numOfGuesses = 0;
private void setUpGame() {
// first make some Startups and give them locations
Startup one = new Startup();
one.setName("poniez");
Startup two = new Startup();
two.setName("hacqi");
Startup three = new Startup();
three.setName("cabista");
StartupsList.add(one);
StartupsList.add(two);
StartupsList.add(three);
System.out.println("Your goal is to sink three Startups.");
System.out.println("poniez, hacqi, cabista");
System.out.println("Try to sink them all in the fewest number of guesses");
for (Startup StartupToSet : StartupsList) {
ArrayList<String> newLocation = helper.placeStartup(3);
StartupToSet.setLocationCells(newLocation);
} // close for loop
} // close setUpGame method
private void startPlaying() {
while (!StartupsList.isEmpty()) {
String userGuess = helper.getUserInput("Enter a guess");
checkUserGuess(userGuess);
} // close while
finishGame();
} // close startPlaying method
private void checkUserGuess(String userGuess) {
numOfGuesses++;
String result = "miss"; // assume a miss until told otherwise
for (int i = 0; i < StartupsList.size(); i++) {
Startup StartupToTest = (Startup) StartupsList.get(i);
result = StartupToTest.checkYourself(userGuess);
if (result.equals("hit")) {
break;
}
if (result.equals("kill")) {
StartupsList.remove(i); // he's gone
break;
}
} // close for
System.out.println(result);
}
private void finishGame() {
System.out.println("All Startups are dead! Your stock is now worthless");
if (numOfGuesses <= 9) {
System.out.println("It only took you " + numOfGuesses + " guesses. You get the Enron award!");
} else {
System.out.println("Took you long enough. " + numOfGuesses + " guesses.");
System.out.println("Too bad you didn't get out before your options sank.");
}
}
public static void main(String[] args) {
StartupBust game = new StartupBust();
game.setUpGame();
game.startPlaying();
}
}
class Startup {
private ArrayList<String> locationCells;
// private int numOfHits = 0;
// don't need to track this now
private String name;
//public void setLocationCells(ArrayList<String> locs) {
// locationCells = locs;
// }
public void setLocationCells(ArrayList<String> loc) {
locationCells = loc;
}
public void setName(String n) {
name = n;
}
public String checkYourself(String userInput) {
String result = "miss";
int index = locationCells.indexOf(userInput);
if (index >= 0) {
locationCells.remove(index);
if (locationCells.isEmpty()) {
result = "kill";
System.out.println("Ouch! You sunk " + name + " : ( ");
} else {
result = "hit";
} // end if
} // end outer if
return result;
} // end method
} // close class
class GameHelper {
private static final String alphabet = "abcdefg";
private int gridLength = 7;
private int gridSize = 49;
private int[] grid = new int[gridSize];
private int comCount = 0;
public String getUserInput(String prompt) {
String inputLine = null;
System.out.print(prompt + " ");
try {
BufferedReader is = new BufferedReader(
new InputStreamReader(System.in));
inputLine = is.readLine();
if (inputLine.length() == 0) {
return null;
}
} catch (IOException e) {
System.out.println("IOException: " + e);
}
return inputLine.toLowerCase();
}
public ArrayList<String> placeStartup(int comSize) {
ArrayList<String> alphaCells = new ArrayList<String>();
// holds ‘f6' type coords
String temp = null; // temporary String for concat
int[] coords = new int[comSize]; // current candidate coords
int attempts = 0; // current attempts counter
boolean success = false; // flag = found a good location ?
int location = 0; // current starting location
comCount++; // nth Startup to place
int incr = 1; // set horizontal increment
if ((comCount % 2) == 1) { // if odd Startup (place vertically)
incr = gridLength; // set vertical increment
}
while (!success & attempts++ < 200) { // main search loop (32)
location = (int) (Math.random() * gridSize); // get random starting point
//System.out.print(" try " + location);
int x = 0; // nth position in Startup to place
success = true; // assume success
while (success && x < comSize) { // look for adjacent unused spots
if (grid[location] == 0) { // if not already used
coords[x++] = location; // save location
location += incr; // try ‘next' adjacent
if (location >= gridSize) { // out of bounds - ‘bottom'
success = false; // failure
}
if (x > 0 && (location % gridLength == 0)) { // out of bounds - right edge
success = false; // failure
}
} else { // found already used location
// System.out.print(" used " + location);
success = false; // failure
}
}
} // end while
int x = 0; // turn location into alpha coords
int row = 0;
int column = 0;
// System.out.println("\n");
while (x < comSize) {
grid[coords[x]] = 1; // mark master grid pts. as ‘used'
row = (int) (coords[x] / gridLength); // get row value
column = coords[x] % gridLength; // get numeric column value
temp = String.valueOf(alphabet.charAt(column)); // convert to alpha
alphaCells.add(temp.concat(Integer.toString(row)));
x++;
// System.out.print(" coord "+x+" = " + alphaCells.get(x-1));
}
// System.out.println("\n");
return alphaCells;
}
}