/************************************************************************\ * ----------------------------- * * Introduction to Programming * * ----------------------------- * * Name: Thomas Zaki * * Last Modified: 05/12/08 * * Title: Player.java * * Description: Player Object * * * \************************************************************************/ import java.awt.*; import java.awt.geom.*; public class Player { private int x, y, number; private int numWalls; private String name, marker; private Line2D.Double win; private Color color; public static final Line2D.Double UP = new Line2D.Double(0, 0, 9, 0); public static final Line2D.Double DOWN = new Line2D.Double(0, 9, 9, 9); public static final Line2D.Double DOWN_G = new Line2D.Double(0, 8, 8, 8); public static final Line2D.Double LEFT = new Line2D.Double(0, 0, 0, 9); public static final Line2D.Double RIGHT = new Line2D.Double(9, 0, 9, 9); public static final Line2D.Double RIGHT_G = new Line2D.Double(8, 0, 8, 8); public Player() { x = 0; y = 0; numWalls = 10; name = new String("Player 1"); } public Player(int x_pos, int y_pos) { x = x_pos; y = y_pos; numWalls = 10; name = new String("Player 1"); } public Player(int x_pos, int y_pos, int nb) { x = x_pos; y = y_pos; numWalls = 10; name = new String("Player " + Integer.toString(nb)); } public Player(int x_pos, int y_pos, Line2D.Double l, String nm, String mrk, int n, int w, Color c) { x = x_pos; y = y_pos; numWalls = w; name = nm; number = n; marker = mrk; color = c; win = l; } public Player(Player p) { x = p.getX(); y = p.getY(); numWalls = p.getNumWalls(); name = p.getName(); } public boolean movePiece(String dir, Board b) { boolean wasMoved = true; boolean isBlocked = false; boolean isOccupied = false; Line2D.Double l = new Line2D.Double(); if(dir.equalsIgnoreCase("UP")) { l.setLine(x + .5, y + .5, x + .5, y - .5); for(int i = 0; i < b.getNumWalls(); i++) { //whenever this if statement appears, it is checking to see // if the potential path of movement for the player intersects a wall if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == (y - 1)) { isOccupied = true; wasMoved = false; } } if(!isBlocked && !isOccupied) { y--; if (y < 0) { y++; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else if(dir.equalsIgnoreCase("DOWN")) { l.setLine(x + .5, y + .5, x + .5, y + 1.5); for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; //if (!wasMoved) //System.out.println("Error A"); } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == (y + 1)) { isOccupied = true; wasMoved = false; //if (!wasMoved) //System.out.println("Error B"); } } if(!isBlocked && !isOccupied) { y++; if (y > 8) { y--; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else if(dir.equalsIgnoreCase("LEFT")) { l.setLine(x + .5, y + .5, x - .5, y + .5); for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == (x - 1) && b.getPlayer(i).getY() == y) { isOccupied = true; wasMoved = false; } } if(!isBlocked && !isOccupied) { x--; if (x < 0) { x++; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else if(dir.equalsIgnoreCase("RIGHT")) { l.setLine(x + .5, y + .5, x + 1.5, y + .5); for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == (x + 1) && b.getPlayer(i).getY() == y) { isOccupied = true; wasMoved = false; } } if(!isBlocked && !isOccupied) { x++; if (x > 8) { x--; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else { wasMoved = false; } //System.out.println("isBlocked: " + isBlocked + // "\nisOccupied: " + isOccupied + // "\nwasMoved: " + wasMoved); return wasMoved; } public boolean movePiece(String dir, BoardComponent b) { boolean wasMoved = true; boolean isBlocked = false; boolean isOccupied = false; Line2D.Double l = new Line2D.Double(); if(dir.equalsIgnoreCase("UP")) { l.setLine(x + .5, y + .5, x + .5, y - .5); for(int i = 0; i < b.getNumWalls(); i++) { //whenever this if statement appears, it is checking to see // if the potential path of movement for the player intersects a wall if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == (y - 1)) { isOccupied = true; wasMoved = false; } } if(!isBlocked && !isOccupied) { y--; if (y < 0) { y++; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else if(dir.equalsIgnoreCase("DOWN")) { l.setLine(x + .5, y + .5, x + .5, y + 1.5); for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; //if (!wasMoved) //System.out.println("Error A"); } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == (y + 1)) { isOccupied = true; wasMoved = false; //if (!wasMoved) //System.out.println("Error B"); } } if(!isBlocked && !isOccupied) { y++; if (y > 8) { y--; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else if(dir.equalsIgnoreCase("LEFT")) { l.setLine(x + .5, y + .5, x - .5, y + .5); for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == (x - 1) && b.getPlayer(i).getY() == y) { isOccupied = true; wasMoved = false; } } if(!isBlocked && !isOccupied) { x--; if (x < 0) { x++; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else if(dir.equalsIgnoreCase("RIGHT")) { l.setLine(x + .5, y + .5, x + 1.5, y + .5); for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == (x + 1) && b.getPlayer(i).getY() == y) { isOccupied = true; wasMoved = false; } } if(!isBlocked && !isOccupied) { x++; if (x > 8) { x--; wasMoved = false; } } else if(isOccupied) { wasMoved = jump(dir, b); } } else { wasMoved = false; } //System.out.println("isBlocked: " + isBlocked + // "\nisOccupied: " + isOccupied + // "\nwasMoved: " + wasMoved); return wasMoved; } public boolean placeWall(Wall w, Board b) { boolean wasPlaced = true; //Wall is more than 2 spaces long if (Math.sqrt(Math.pow(w.getEndPt1().getX() - w.getEndPt2().getX(), 2) + Math.pow(w.getEndPt1().getY() - w.getEndPt2().getY(), 2) ) != 2) { wasPlaced = false; } //Wall extends over board (Left) else if(w.getEndPt1().getX() < 0 || w.getEndPt2().getX() < 0) { wasPlaced = false; } //Wall extends over board (Top) else if (w.getEndPt1().getY() < 0 || w.getEndPt2().getY() < 0) { wasPlaced = false; } //Wall extends over board (Right) else if(w.getEndPt1().getX() > 9 || w.getEndPt2().getX() > 9) { wasPlaced = false; } //Wall extends over board (Bottom) else if (w.getEndPt1().getY() > 9 || w.getEndPt2().getY() > 9) { wasPlaced = false; } //Wall endpoint #1 in corner else if (w.getEndPt1().getX() == 0 && w.getEndPt1().getY() == 0 || w.getEndPt1().getX() == 0 && w.getEndPt1().getY() == 9 || w.getEndPt1().getX() == 9 && w.getEndPt1().getY() == 0 || w.getEndPt1().getX() == 9 && w.getEndPt1().getY() == 9) { wasPlaced = false; } //Wall endpoint #2 in corner else if (w.getEndPt2().getX() == 0 && w.getEndPt2().getY() == 0 || w.getEndPt2().getX() == 0 && w.getEndPt2().getY() == 9 || w.getEndPt2().getX() == 9 && w.getEndPt2().getY() == 0 || w.getEndPt2().getX() == 9 && w.getEndPt2().getY() == 9) { wasPlaced = false; } //Wall is on board's edge else if (w.getEndPt1().getX() == 0 && w.getEndPt2().getX() == 0 || w.getEndPt1().getX() == 9 && w.getEndPt2().getX() == 9 || w.getEndPt1().getY() == 0 && w.getEndPt2().getY() == 0 || w.getEndPt1().getY() == 9 && w.getEndPt2().getY() == 9) { wasPlaced = false; } //Player has no walls left else if(numWalls == 0) wasPlaced = false; //Wall crosses existing wall for(int i = 0; i < b.getNumWalls(); i++) { if(w.getMidpoint().equals((b.getWall(i).getMidpoint()))) wasPlaced = false; } /*Wall overlaps existing wall * >uses a complicated-looking test that determines * overlap by finding the midpoint between the endpoint * of the wall and the midpoint of the wall * (I call it the "quarter-way" point) and seeing if * that intersects the "quarter-way" point of any of * the existing walls * * Example Below: * * <----+----|----+----> * ^ ^ * | | * "quarter-way" points * * Overlaping walls that are beeing checked for: * * ___one wall___ * | | * | | * <----+----<---->----+----> * | | * |___one wall___| * */ for(int i = 0; i < b.getNumWalls(); i++) { if((new Point2D.Double((w.getMidpoint().getX() + w.getEndPt1().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt1().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) || (new Point2D.Double((w.getMidpoint().getX() + w.getEndPt1().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt1().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) || (new Point2D.Double((w.getMidpoint().getX() + w.getEndPt2().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt2().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) || (new Point2D.Double((w.getMidpoint().getX() + w.getEndPt2().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt2().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2))) { wasPlaced = false; } } if(wasPlaced) { b.addWall(w); numWalls--; //System.out.println("Wall Added"); } return wasPlaced; } public boolean placeWall(Wall w, BoardComponent b) { boolean wasPlaced = true; //Wall is more than 2 spaces long if (Math.sqrt(Math.pow(w.getEndPt1().getX() - w.getEndPt2().getX(), 2) + Math.pow(w.getEndPt1().getY() - w.getEndPt2().getY(), 2) ) != 2) { wasPlaced = false; } //Wall extends over board (Left) else if(w.getEndPt1().getX() < 0 || w.getEndPt2().getX() < 0) { wasPlaced = false; } //Wall extends over board (Top) else if (w.getEndPt1().getY() < 0 || w.getEndPt2().getY() < 0) { wasPlaced = false; } //Wall extends over board (Right) else if(w.getEndPt1().getX() > 9 || w.getEndPt2().getX() > 9) { wasPlaced = false; } //Wall extends over board (Bottom) else if (w.getEndPt1().getY() > 9 || w.getEndPt2().getY() > 9) { wasPlaced = false; } //Wall endpoint #1 in corner else if (w.getEndPt1().getX() == 0 && w.getEndPt1().getY() == 0 || w.getEndPt1().getX() == 0 && w.getEndPt1().getY() == 9 || w.getEndPt1().getX() == 9 && w.getEndPt1().getY() == 0 || w.getEndPt1().getX() == 9 && w.getEndPt1().getY() == 9) { wasPlaced = false; } //Wall endpoint #2 in corner else if (w.getEndPt2().getX() == 0 && w.getEndPt2().getY() == 0 || w.getEndPt2().getX() == 0 && w.getEndPt2().getY() == 9 || w.getEndPt2().getX() == 9 && w.getEndPt2().getY() == 0 || w.getEndPt2().getX() == 9 && w.getEndPt2().getY() == 9) { wasPlaced = false; } //Wall is on board's edge else if (w.getEndPt1().getX() == 0 && w.getEndPt2().getX() == 0 || w.getEndPt1().getX() == 9 && w.getEndPt2().getX() == 9 || w.getEndPt1().getY() == 0 && w.getEndPt2().getY() == 0 || w.getEndPt1().getY() == 9 && w.getEndPt2().getY() == 9) { wasPlaced = false; } //Player has no walls left else if(numWalls == 0) wasPlaced = false; //Wall crosses existing wall for(int i = 0; i < b.getNumWalls(); i++) { if(w.getMidpoint().equals((b.getWall(i).getMidpoint()))) wasPlaced = false; } /*Wall overlaps existing wall * >uses a complicated-looking test that determines * overlap by finding the midpoint between the endpoint * of the wall and the midpoint of the wall * (I call it the "quarter-way" point) and seeing if * that intersects the "quarter-way" point of any of * the existing walls * * Example Below: * * <----+----|----+----> * ^ ^ * | | * "quarter-way" points * * Overlaping walls that are beeing checked for: * * ___one wall___ * | | * | | * <----+----<---->----+----> * | | * |___one wall___| * */ for(int i = 0; i < b.getNumWalls(); i++) { if((new Point2D.Double((w.getMidpoint().getX() + w.getEndPt1().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt1().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) || (new Point2D.Double((w.getMidpoint().getX() + w.getEndPt1().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt1().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) || (new Point2D.Double((w.getMidpoint().getX() + w.getEndPt2().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt2().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) || (new Point2D.Double((w.getMidpoint().getX() + w.getEndPt2().getX()) / 2, (w.getMidpoint().getY() + w.getEndPt2().getY()) / 2)).equals (new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2))) { wasPlaced = false; } } if(wasPlaced) { b.addWall(w); numWalls--; //System.out.println("Wall Added"); } return wasPlaced; } //this is called when there is a player impeding public boolean jump(String dir, Board b) { boolean wasMoved = true; boolean isBlocked = false; boolean isOccupied = false; Line2D.Double l = new Line2D.Double(); if(dir.equalsIgnoreCase("UP")) { l.setLine(x + .5, y + .5, x + .5, y - 1.5); y -= 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; } } if(isBlocked || isOccupied) y += 2; } else if(dir.equalsIgnoreCase("DOWN")) { l.setLine(x + .5, y + .5, x + .5, y + 2.5); y += 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; //if (!wasMoved) //System.out.println("Error C"); } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; //if (!wasMoved) //System.out.println("Error D"); } } if(isBlocked || isOccupied) y -= 2; } else if(dir.equalsIgnoreCase("LEFT")) { l.setLine(x + .5, y + .5, x - 1.5, y + .5); x -= 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; } } if(isBlocked || isOccupied) x += 2; } else if(dir.equalsIgnoreCase("RIGHT")) { l.setLine(x + .5, y + .5, x + 2.5, y - .5); x += 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; } } if(isBlocked || isOccupied) x -= 2; } else { wasMoved = false; } return wasMoved; } //this is called when there is a player impeding the current players path public boolean jump(String dir, BoardComponent b) { boolean wasMoved = true; boolean isBlocked = false; boolean isOccupied = false; Line2D.Double l = new Line2D.Double(); if(dir.equalsIgnoreCase("UP")) { l.setLine(x + .5, y + .5, x + .5, y - 1.5); y -= 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; } } if(isBlocked || isOccupied) { y += 2; } else if (y < 0) { y += 2; wasMoved = false; } } else if(dir.equalsIgnoreCase("DOWN")) { l.setLine(x + .5, y + .5, x + .5, y + 2.5); y += 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; //if (!wasMoved) //System.out.println("Error C"); } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; //if (!wasMoved) //System.out.println("Error D"); } } if(isBlocked || isOccupied) { y -= 2; } else if (y > 8) { y -= 2; wasMoved = false; } } else if(dir.equalsIgnoreCase("LEFT")) { l.setLine(x + .5, y + .5, x - 1.5, y + .5); x -= 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; } } if(isBlocked || isOccupied) { x += 2; } else if (x < 0) { x += 2; wasMoved = false; } } else if(dir.equalsIgnoreCase("RIGHT")) { l.setLine(x + .5, y + .5, x + 2.5, y - .5); x += 2; for(int i = 0; i < b.getNumWalls(); i++) { if(l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt1().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt1().getY()) / 2)) == 0 || l.ptSegDist(new Point2D.Double((b.getWall(i).getMidpoint().getX() + b.getWall(i).getEndPt2().getX()) / 2, (b.getWall(i).getMidpoint().getY() + b.getWall(i).getEndPt2().getY()) / 2)) == 0) { wasMoved = false; isBlocked = true; } } for(int i = 0; i < b.getNumPlayers(); i++) { if(b.getPlayer(i).getX() == x && b.getPlayer(i).getY() == y && !b.getPlayer(i).equals(this)) { wasMoved = false; isOccupied = true; } } if(isBlocked || isOccupied) { x -= 2; } else if (x > 8) { x -= 2; wasMoved = false; } } else { wasMoved = false; } return wasMoved; } public void setNumWalls(int n) { numWalls = n; } public void addWall() { numWalls++; } public int getNumWalls() { return numWalls; } public String getName() { return name; } public void setName(String n) { name = n; } public void setMarker(String mrk) { marker = mrk; } public String getMarker() { return marker; } public void setNumber(int n) { number = n; } public int getNumber() { return number; } public void setColor(Color c) { color = c; } public Color getColor() { return color; } public int getX() { return x; } public int getY() { return y; } public void setX(int newX) { x = newX; } public void setY(int newY) { y = newY; } public void setPos(int newX, int newY) { x = newX; y = newY; } public boolean checkWin() { //System.out.println("winChecking..."); //System.out.println(win.ptLineDist(new Point2D.Double(x, y))); boolean isWin = false; if(win.ptLineDist(new Point2D.Double(x, y)) == 0) isWin = true; return isWin; } public String toString() { return new String("[Name: " + name + "; Location: (x=" + x + ",y=" + y +"); Walls Left: " + numWalls + "]"); } }