public static int getHousePieceFrom(int p) { // given a piece with a house on it, get the corresponding house piece. // Returns the failure piece if no house is on it. if (Pieces.houseNumber(p) == 0) { return(createFailurePiece()); } return(createHousePiece(Pieces.houseNumber(p))); }
public Coordinates locateHouse(int houseNumber) { for (int i = 0; i < this.height; i++) { for (int j = 0; j < this.width; j++) { if (Pieces.houseNumber(this.board[i, j]) == houseNumber) { return(new Coordinates(j, i, false)); } } } return(new Coordinates(0, 0, true)); }
public static int combinePieces(int p1, int p2) { // Combines a piece that is a person or house, with a regular piece. Order is unimportant. // Returns the failure piece if neither piece is a plain person or house. if (Pieces.isTile(p1)) { int t = p1; p1 = p2; p2 = t; } if (Pieces.isPerson(p1) && Pieces.isTile(p2)) { return(Pieces.setPersonNumber(p2, Pieces.personNumber(p1))); } if (Pieces.isHouse(p1) && Pieces.isTile(p2)) { return(Pieces.setHouseNumber(p2, Pieces.houseNumber(p1))); } return(Pieces.createFailurePiece()); }
public int distanceToPartner(int p, Coordinates c) { // Given a person or house piece, and proposed coordinates for placing it, compute // the distance to its corresponding partner. Returns Integer.MAX_VALUE if the // partner is not found or the input is not a pure person/house piece. if (Pieces.isPerson(p)) { return(this.distance(this.locateHouse(Pieces.personNumber(p)), c)); } else if (Pieces.isHouse(p)) { return(this.distance(this.locatePerson(Pieces.houseNumber(p)), c)); } else { return(int.MaxValue); } }
public static bool isHouse(int p) { // true if the piece is JUST a house piece (all the rest zero) return(((p & 0b1111000111111111111111) == 0) && Pieces.houseNumber(p) > 0); }