/************************************************************************\ * ----------------------------- * * Introduction to Programming * * ----------------------------- * * Name: Thomas Zaki * * Last Modified: 05/12/08 * * Title: Board.java * * Description: Board Object * * * \************************************************************************/ import javax.swing.*; import java.awt.geom.*; import java.util.*; public class Board extends JComponent { private String board; private String divider; private ArrayList<Wall> walls; private ArrayList<Player> players; public Board(ArrayList<Player> p) { //initializes the ArrayList of Players and Walls walls = new ArrayList<Wall>(); players = new ArrayList<Player>(); //begins the string with a header that takes care of some of the top of the board board = new String(" 0 1 2 3 4 5 6 7 8 9\n" + "0+-+-+-+-+-+-+-+-+-+\n"); //nested for loop to draw board // (uses other inner for loops to cycle // through players or walls where necessary) for(int i = 0; i < p.size(); i++) { players.add(p.get(i)); } for(int i = 0; i < 9; i++) { board += " |"; for(int j = 0; j < 9; j++) { boolean isOccupied = false; //checks to see if space is occupied by a player for(int k = 0; k < players.size(); k++) { if(players.get(k).getX() == j && players.get(k).getY() == i) { isOccupied = true; board += players.get(k).getMarker() + "|"; break; } } if(!isOccupied) board += " |"; isOccupied = false; }//end for board += "\n" + (i + 1) + "+-+-+-+-+-+-+-+-+-+\n"; }//end for } public String reDraw()//Player p1, Player p2) { //initializes the ArrayList of Players and Walls board = new String(" 0 1 2 3 4 5 6 7 8 9\n" + "0+-+-+-+-+-+-+-+-+-+\n"); divider = new String(); //booleans to keep track of useful properties boolean isOccupied = false; boolean isWall = false; //nested for loop to draw board // (uses other inner for loops to cycle // through players or walls where necessary) for(int i = 0; i < 9; i++) { board += " |"; divider = "+"; //this inner loop edits the row that contains the players for(int j = 0; j < 9; j++) { //player cycle for(int k = 0; k < players.size(); k++) { if(players.get(k).getX() == j && players.get(k).getY() == i) { board += players.get(k).getMarker(); isOccupied = true; break; } } if(!isOccupied) { board += " "; } //wall cycle for(int k = 0; k < walls.size(); k++) { if(walls.get(k).ptSegDist(j + 1, i + .5) == 0) { board += "#"; isWall = true; break; } } if(!isWall) { board += "|"; } isOccupied = false; isWall = false; } //this second inner loop edits the row that // divides each player containing row (I call // it the "divider") for(double j = 0; j < 9; j++) { boolean isSideWall = false; for(int k = 0; k < walls.size(); k++) { if(walls.get(k).ptSegDist(j + .5, i + 1) == 0) { divider += "#"; isSideWall = true; break; } } if(!isSideWall) { divider += "-"; } isSideWall = false; for(int k = 0; k < walls.size(); k++) { //old debugging tests.... //System.out.println(walls.get(k).getMidpoint()); //System.out.println(new Point2D.Double(j + 1, i + 1)); if(walls.get(k).getMidpoint().equals(new Point2D.Double(j + 1, i + 1))) { divider += "#"; isSideWall = true; break; } } if(!isSideWall) { divider += "+"; } } board += "\n" + (i + 1) + divider + "\n"; //adds the divider to the board, begins a new row. } return board; } //GET AND SET METHODS public void addWall(Wall w) { walls.add(w); } public void addWall(int i, Wall w) { walls.add(i, w); } public Wall getWall(int i) { return walls.get(i); } public int getNumWalls() { return walls.size(); } public Player getPlayer(int i) { return players.get(i); } public int getNumPlayers() { return players.size(); } public String getWalls() { String w = new String(); for(int i = 0; i < walls.size(); i++) w += walls.get(i) + "; "; if(w.equals(null)) w = "<null>"; return w; } public String toString() { return new String(board); } }//Board class