"Rigel" design

 //this is the “node” or “vertex” class that represents a node in the graph (which is the overall maze)


 class MazeCell {

int name;  // this will be the unique name for the node, based on its location in the maze array used by the gui – for example, in a 5 by 5 2D array, the name of the cell in the second row and third column could be 2003, the name of the cell in the 5th row, 8th column could be 5008, etc. 


 boolean wasVisited;

//for searching methods, flag that lets the method know this node was already visited during that particular search
 boolean hasRobot; //true is this current node contains the robot
 boolean hasBeeper; //true if this current node contains a beeper

 boolean Nwall, Swall, Ewall, Wwall;

//true if this node has a wall in any of these directions (Nwall = north wall, etc)

 

public MazeCell(int row, int column){} //MazeCell constructor

// sets booleans to false, sets wall booleans to true, and names the cell by passing in the row and column number and using the “setName(int, int) method below
 
public void setWasVisited(boolean bool) \\ wasVisted = bool
public boolean getWasVisited()
 
public void setHasRobot(boolean bool)
\\ hasRobot = bool
public boolean getHasRobot()
 
public void setHasBeeper(boolean bool)
\\ hasBeeper = bool
public boolean getHasBeeper()
 

public voidSetWalls(boolean N, boolean S, boolean E, boolean W){

  // this method used for setting the “presence” of walls around a give cell

 

public void setName(int rowNumber, int columnNumber){}

// this one sets the name of this given node –if row is 4 and column is 12, then this node’s name would be set to 4012

 

public int getName(){}

// returns this node’s name. 


 }//end MazeCell class
 
 class Maze{
 

 Vector arrayPieces[] //holds the beeper objects

 int gameBoardMaze[][] //just a simple 2D array used for making the “visual” maze
 private MazeCell mazeCellList[] // a list of MazeCells
 private int mazeAdjMatrix[][] //adjacency matrix keeping track of edges

 int allAdjMatricies[] // holds all the small maze mazeAdjMatrix[][]’s

 Maze allSmallMazes[] // holds all the small mazes
 private int numCells //the current number of MazeCells
 private Queue mazeQueue
 
 public Maze() { //constructor for Maze

  make new gameBoardMaze[][]
  make new mazeCellList of how many nodes (cells) we have
  make a corresponding adjancey matrix
  make a new instance of the queue
 }
 
 public void addMazeCell(int row, int column){}

 // make a new maze cell, at this particular time, just pass in the spot in the “gameboard or sub-maze” array you are at.  This node will then have a unique name and will not be connected to any other node

 
 public void addEdge(MazeCell start, MazeCell end){}
 updates the adjacency matrix to reflect an edge between any two mazeCells
 
 public MazeCell getAdjacentCell(object o){}
 returns a MazeCell (that is not visited yet) that is adjacent to the cell that
 is using this method.  important for search!!!
 
 public void makeSmallMaze(int rows, int columns){}
 makes a small maze by adding a bunch of mazeCells together - so, first it
 creates the right amount of cells; if 5 and 5 are given as arguments, it will
 make 25 cells and add them to the list of mazeCells.
 

then, using the gameboard array, it will build a standard maze (using the maze building frontier methods Dave taught in class)– when a frontier cell is chosen, the corresponding node (by name) is updated according to what wall it will lose, and the adjacency matrix is also updated to reflect the new edge created between these two nodes. 

 

Then, add this small Maze – which is a spanning tree because of the way it was built, to an array of small standard mazes.  Likewise, add the adjacency matrix to an array (or vector) of adjacency matricies.

  }
 
 public void makeBigMaze(MazeCell subMazes[], int allAdjacencyMatrices []) {
 
 now, take two submazes at a time (so, you'll just get all the related
 mazeCells - and take their corresponding adjacency matrix, and just update a
 few edges between the two sub-mazes to connect them!  

 

When merging the smaller mazes, some of the “nodes” or MazeCells will need updated names – another way to handle this it to create another position in the MazeCell int name that holds which submaze it belongs to – this way, all submazes can have cells numbered 1000 to 5005 – or whatever naming scheme we decide on, but then another number can be added to designate what submaze it belongs to like 101000 and 105005 would belong to submaze 1, 201000 and 205005 would belong to submaze 2, etc.

 
 }//end Maze class
 
 
 //to enable the breadth first search of the main maze
 class Queue {
 private object[] queArray;
 private int front;
 private int rear;
 
 public Queue(int size) { //constructor for queue
   queArray = new int[size]
   front = 0
   rear = -1

 
 public void insert(object o){}

 //puts an object at rear of queue
 
 public object remove(){}

 //takes an object from the front of queue
 
 public boolean isEmpty(){}
 //returns true if queue is empty
 
 }that's all for queue

 

// Creates an Object placed to place on Maze

public class Piece extends Observable{
    private Maze maze;
    private Vertex vertex;
    
      
    // Constructor. Creates an Object on a Maze (graph)
    // which is on of it vertices
    public Piece(Maze maze, Vertex vertex) {
        this.maze = maze;
        this.vertex = vertex;
    }
      
    // Set the position of Object on the Maze
    public place (Vertex vtr) {
    }
    
    // Remove Object from Maze vertex
    public remove (Vertex vrt) {
    }
}



    
// Creates object Robot. Searches for

// a beeper Object on  Maze. Computes

// a distance to beeper

 

public class Robot extends Piece {

    private Maze maze;

    private Vertex vertex;

   

    

    // Constructor.    

    Robot(Maze maze, Vertex vertex) {

        super(maze, vertex);

        this.maze = maze;

        this.vertex = vertex;

       

    }

        

    // Use Breadth First Search algorithm

    // to search for a MazeCell that contains a Beeper

    // Computes steps nessesary to reach the Beeper

    // returns Vector of vetices that represent direction to

    // a beeper

 

    public Vector computePath (Object mylocation, Object beeper) {

    }

   

    // if distance longer then lifetime of the Beeper

    // return true, false otherwise

    public boolean  decideToMove(int distance) {

    }

   

    // Moves Robot on the Maze (graph) by resetting Robots

    // position on a specific vertex

    public void moveRobot () {

    }

   

}

 

 

Public class Beeper extends Piece{

            vertex Location; //the x, y location in the maze

            Maze maze;

            Int timeCount;

            Int lifetime; //maximum lifetime (number of steps) of beeper

 

Public beeper(Maze maze);

Initializes the location of the beeper at a random place in the maze and initializes time count to zero.

 

public incrementTimeCount()

 

public getTimeCount()

 

public remove();

// removes the beeper from the maze

 

public setLocation()

 

public getLocation()

 

}

 

 

 

Public class BeeperHunt extends Frame {

 

Board board;

Maze maze;

Button quitButton;

 

 

Public static void main(String[] args){

            new BeeperHunt().run();

 

// Sets all necessary GUI components

     public void setUp (){

     }

 

 

Void run:

// creates a Maze and board, adds the board to this frame, makes a robot and initial beepers, and begins the game

 

}