Commit 96d73cd9 authored by Trisha Gee's avatar Trisha Gee
Browse files

[Ch6] StartupBust code, initial.

parent 0c3655d5
Loading
Loading
Loading
Loading
+89 −0
Changes for src/main/java/ch6/GameHelper.java: 89 added lines, 0 removed lines.
Original line number Diff line number Diff line
package ch6;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public 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;
  }
}
 No newline at end of file
+8 −4
Changes for src/main/java/ch6/Startup.java: 8 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -4,11 +4,14 @@ import java.util.ArrayList;

public 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) {
@@ -18,6 +21,7 @@ public class Startup {
      locationCells.remove(index);
      if (locationCells.isEmpty()) {
        result = "kill";
        System.out.println("Ouch! You sunk " + name + "   : ( ");
      } else {
        result = "hit";
      } // end if
+83 −0
Changes for src/main/java/ch6/StartupBust.java: 83 added lines, 0 removed lines.
Original line number Diff line number Diff line
package ch6;

import java.util.ArrayList;

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();
  }
}
 No newline at end of file