diff --git a/LightsOutGame.java b/LightsOutGame.java
index a1935da..410163f 100644
--- a/LightsOutGame.java
+++ b/LightsOutGame.java
@@ -1,30 +1,227 @@
import java.util.Optional;
+import java.io.PrintStream;
+import java.io.InputStream;
+import java.util.Random;
/**
* A logic puzzle where each cell on a grid can be either "on" or "off".
* Selecting a cell toggles it and its immediate neighbors.
* The goal is to turn all the lights off in as few moves as possible.
- *
+ *
* Consider a model using a grid of booleans.
* Implement toggling logic on that grid.
- *
+ *
* @version 1
*/
-class LightsOutGame implements Game {
+
+public class LightsOutGame implements Game {
+ /** Input source (injected for testing). */
+ private final InputStream in;
+
+ /** Output sink (defaults to System.out). */
+ private final PrintStream out;
+
+ /** Current board state. */
+ private final LightsOutBoard board;
+
+ /** Copy of original board used for restart. */
+ private final LightsOutBoard boardCopy;
+
+ /** Pseudo-random generator for board creation. */
+ private final Random rng = new Random();
+
+ /** Default number of rows for the board. */
+ private static final int DEFAULT_ROWS = 5;
+
+ /** Default number of columns for the board. */
+ private static final int DEFAULT_COLS = 5;
+
+ /**
+ * No-argument constructor that delegates to the InputStream constructor.
+ */
+ public LightsOutGame() {
+ //Stub: Write constructor
+ }
+
+ /**
+ * Constructor that accepts an InputStream
+ * for testability and uses a default board size.
+ * @param inputStream the input stream to read commands from
+ * (must not be null)
+ */
+ public LightsOutGame(final InputStream inputStream) {
+ //Stub:Write constructor
+ }
+ /**
+ * Full constructor that accepts an input
+ * stream and a pre-constructed board.
+ * This constructor supports deterministic tests
+ * by allowing an injected board.
+ * @param inputStream the input stream to read
+ * commands from (must not be null)
+ * @param initialBoard the initial board to use
+ * for the game (must not be null)
+ */
+ public LightsOutGame(final InputStream inputStream,
+ final LightsOutBoard initialBoard) {
+ //Stub: Write constructor
+ }
+ /**
+ * {@inheritDoc}
+ */
@Override
public String getName() {
return "Lights Out";
}
+ /**
+ * Entry point for playing the game. This stub prints
+ * the welcome text and returns empty.
+ *
+ * @return an Optional containing the number of moves
+ * if the player solved the board; empty otherwise
+ */
@Override
public Optional play() {
- System.out.println("Welcome to Lights Out!");
- System.out.println("The tiles have an 'on' or 'off' function.");
- System.out.println("Selecting a tile will change its state.");
- System.out.println("Tiles also change the state of neighboring tiles.");
- System.out.println("Turning them 'off' or 'on' as well.");
- System.out.println("Grid must be lit in as few turns as possible.");
- System.out.println("Good luck!");
+ out.println("Welcome to Lights Out!");
+ out.println("The tiles have an 'on' or 'off' function.");
+ out.println("Selecting a tile will change its state.");
+ out.println("Tiles also change the state of neighboring tiles.");
+ out.println("Turning them 'off' or 'on' as well.");
+ out.println("Grid must be lit in as few turns as possible.");
+ out.println("Good luck!");
return Optional.empty();
}
+ /**
+ * Parse a player's move from free-form input
+ * such as "2,3", "2 3", or "(2, 3)".
+ *
+ * @param input the raw input string from the player
+ * @return an Optional containing a two-element int
+ * array [row, col] when parsing succeeds; empty otherwise
+ */
+ private Optional parseMove(final String input) {
+ return Optional.empty();
+ }
+ /**
+ * Internal representation of the lights-out board.
+ */
+ static class LightsOutBoard {
+ /** Grid of cells; true means "on", false means "off". */
+ private final boolean[][] grid;
+
+ /** Number of rows in the grid. */
+ private final int rows;
+
+ /** Number of columns in the grid. */
+ private final int cols;
+
+ /**
+ * Create a board with default dimensions (5x5).
+ */
+ LightsOutBoard() {
+ //Stub: Write constructor
+ }
+ /**
+ * Create a board with the specified number of rows and columns.
+ *
+ * @param numRows the number of rows
+ * @param numColumns the number of columns
+ */
+ LightsOutBoard(final int numRows, final int numColumns) {
+ //Stub: Write constructor
+ }
+ /**
+ * Copy constructor.
+ *
+ * @param other the board to copy
+ */
+ LightsOutBoard(final LightsOutBoard other) {
+ //Stub: Write constructor
+ }
+ /**
+ * Toggle the specified cell and its immediate orthogonal neighbors.
+ * Boundary cells only toggle neighbors that exist.
+ *
+ * @param row the row index to toggle
+ * @param column the column index to toggle
+ * @return true if the board is fully off after the toggle;
+ * false otherwise
+ */
+ public boolean toggle(final int row, final int column) {
+ return false;
+ }
+ /**
+ * Produce a labeled ASCII representation of the board.
+ *
+ * @return a multi-line string containing the board display
+ */
+ public String display() {
+ return "";
+ }
+
+ /**
+ * Retrieve the state of a cell.
+ *
+ * @param row the row index
+ * @param column the column index
+ * @return true if the cell is on; false if it is off
+ */
+ boolean getCell(final int row, final int column) {
+ return false;
+ }
+
+ /**
+ * Set the state of a cell.
+ *
+ * @param row the row index
+ * @param column the column index
+ * @param value true to set the cell on; false for off
+ */
+ void setCell(final int row, final int column, final boolean value) {
+ //Stub: Write cell setter
+ }
+ /**
+ * Check whether all lights on the board are off.
+ *
+ * @return true when all cells are false; false otherwise
+ */
+ public boolean isSolved() {
+ return false;
+ }
+
+ /**
+ * Helper that produces solvable boards (stubbed).
+ */
+ static class BoardGenerator {
+ /**
+ * Generate a board that is guaranteed
+ * solvable (stubbed implementation).
+ *
+ * @param rows the number of rows
+ * @param cols the number of columns
+ * @param rng the random generator to use
+ * @return a solvable LightsOutBoard (currently a fresh empty board)
+ */
+ public LightsOutBoard generateSolvable(final int rows,
+ final int cols, final Random rng);
+ }
+
+ /**
+ * Solver implementation (stubbed).
+ */
+ static class LightsOutSolver {
+ /**
+ * Determine whether the provided board
+ * has a solution (stubbed implementation).
+ *
+ * @param board the board to analyze
+ * @return true if the board is solvable, otherwise false
+ */
+ public boolean isSolvable(final LightsOutBoard board) {
+ //Stub: implement solver
+ return true;
+ }
+ }
+ }
}
diff --git a/build/jar/ConsoleGameHub.jar b/build/jar/ConsoleGameHub.jar
new file mode 100644
index 0000000..098b62e
Binary files /dev/null and b/build/jar/ConsoleGameHub.jar differ