Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package jpp.infinityloop.basics;
- import java.util.ArrayList;
- import java.util.HashMap;
- public class PossibleRotationFinder2 {
- private Tile[][] tileArr;
- public PossibleRotationFinder2(Tile [][] tileArr){
- this.tileArr = tileArr;
- }
- public ArrayList<Tile> getPossibleRotations(Tile tile, int row, int col){
- ArrayList<Tile> tileList = new ArrayList<Tile>();
- if(row == 0){
- if(isEdges(row,col,tileArr.length-1,tileArr[0].length-1)){
- return getPossibleRotationsOnEdgesFirstLine(tile, tileArr,row, col);
- }
- if(isCorner(row,col,tileArr.length-1,tileArr[0].length-1)){
- return getPossibleRotationsOnCornerFirstLine(tile, tileArr,row, col);
- }
- }else if(row > 0 && row < tileArr.length-1){
- if(isEdges(row,col,tileArr.length-1,tileArr[0].length-1)){
- return getPossibleRotationsOnEdgesMiddleLines(tile, tileArr,row, col);
- }
- if(isCenter(row,col,tileArr.length-1,tileArr[0].length-1)){
- return getPossibleRotationsOnCenterMiddleLines(tile, tileArr,row, col);
- }
- }else{
- if(isEdges(row,col,tileArr.length-1,tileArr[0].length-1)){
- return getPossibleRotationsOnEdgesLastLine(tile, tileArr,row, col);
- }
- if(isCorner(row,col,tileArr.length-1,tileArr[0].length-1)){
- return getPossibleRotationsOnCornerLastLine(tile, tileArr,row, col);
- }
- }
- return tileList;
- }
- public ArrayList<Tile> getPossibleRotationsOnCornerLastLine(Tile tile, Tile [][] tileArr, int row, int col){
- ArrayList<Tile> tileList = new ArrayList<Tile>();
- BlobCoder coder = new BlobCoder();
- Tile firstRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),tile.getRotatedTile().getOrientation());
- Tile secondRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),firstRotated.getRotatedTile().getOrientation());
- Tile thirdRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),secondRotated.getRotatedTile().getOrientation());
- if(col == 0){
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("2")
- || coder.getHexaDecimal(tile).equals("4") || coder.getHexaDecimal(tile).equals("6")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("2")
- || coder.getHexaDecimal(firstRotated).equals("4") || coder.getHexaDecimal(firstRotated).equals("6")){
- tileList.add(firstRotated);
- }
- if(!secondRotated .getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated ).equals("0") || coder.getHexaDecimal(secondRotated ).equals("2")
- || coder.getHexaDecimal(secondRotated ).equals("4") || coder.getHexaDecimal(secondRotated ).equals("6")){
- tileList.add(secondRotated );
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("2")
- || coder.getHexaDecimal(thirdRotated).equals("4") || coder.getHexaDecimal(thirdRotated).equals("6")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }else{
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("4")
- || coder.getHexaDecimal(tile).equals("8") || coder.getHexaDecimal(tile).equals("C")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("4")
- || coder.getHexaDecimal(firstRotated).equals("8") || coder.getHexaDecimal(firstRotated).equals("C")){
- tileList.add(firstRotated);
- }
- if(!secondRotated .getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated ).equals("0") || coder.getHexaDecimal(secondRotated ).equals("4")
- || coder.getHexaDecimal(secondRotated ).equals("8") || coder.getHexaDecimal(secondRotated ).equals("C")){
- tileList.add(secondRotated );
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("4")
- || coder.getHexaDecimal(thirdRotated).equals("8") || coder.getHexaDecimal(thirdRotated).equals("C")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }
- }
- public ArrayList<Tile> getPossibleRotationsOnEdgesLastLine(Tile tile, Tile [][] tileArr, int row, int col){
- ArrayList<Tile> tileList = new ArrayList<Tile>();
- BlobCoder coder = new BlobCoder();
- Tile firstRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),tile.getRotatedTile().getOrientation());
- Tile secondRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),firstRotated.getRotatedTile().getOrientation());
- Tile thirdRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),secondRotated.getRotatedTile().getOrientation());
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("2")
- || coder.getHexaDecimal(tile).equals("4") || coder.getHexaDecimal(tile).equals("6")
- || coder.getHexaDecimal(tile).equals("8") || coder.getHexaDecimal(tile).equals("A")
- || coder.getHexaDecimal(tile).equals("C") || coder.getHexaDecimal(tile).equals("E")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("2")
- ||coder.getHexaDecimal(firstRotated).equals("4") || coder.getHexaDecimal(firstRotated).equals("6")
- ||coder.getHexaDecimal(firstRotated).equals("8") || coder.getHexaDecimal(firstRotated).equals("A")
- || coder.getHexaDecimal(firstRotated).equals("C") || coder.getHexaDecimal(firstRotated).equals("E")){
- tileList.add(firstRotated);
- }
- if(!secondRotated.getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated).equals("0") || coder.getHexaDecimal(secondRotated).equals("2")
- ||coder.getHexaDecimal(secondRotated).equals("4") || coder.getHexaDecimal(secondRotated).equals("6")
- ||coder.getHexaDecimal(secondRotated).equals("8") || coder.getHexaDecimal(secondRotated).equals("A")
- ||coder.getHexaDecimal(secondRotated).equals("C") || coder.getHexaDecimal(secondRotated).equals("E")){
- tileList.add(secondRotated);
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("2")
- || coder.getHexaDecimal(thirdRotated).equals("4") || coder.getHexaDecimal(thirdRotated).equals("6")
- || coder.getHexaDecimal(thirdRotated).equals("8") || coder.getHexaDecimal(thirdRotated).equals("A")
- ||coder.getHexaDecimal(thirdRotated).equals("C") || coder.getHexaDecimal(thirdRotated).equals("E")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }
- public ArrayList<Tile> getPossibleRotationsOnCornerFirstLine(Tile tile, Tile [][] tileArr, int row, int col){
- ArrayList<Tile> tileList = new ArrayList<Tile>();
- BlobCoder coder = new BlobCoder();
- Tile firstRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),tile.getRotatedTile().getOrientation());
- Tile secondRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),firstRotated.getRotatedTile().getOrientation());
- Tile thirdRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),secondRotated.getRotatedTile().getOrientation());
- if(col == 0){
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("1")
- || coder.getHexaDecimal(tile).equals("2") || coder.getHexaDecimal(tile).equals("3")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("1")
- || coder.getHexaDecimal(firstRotated).equals("2") || coder.getHexaDecimal(firstRotated).equals("3")){
- tileList.add(firstRotated);
- }
- if(!secondRotated.getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated).equals("0") || coder.getHexaDecimal(secondRotated).equals("1")
- || coder.getHexaDecimal(secondRotated).equals("2") || coder.getHexaDecimal(secondRotated).equals("3")){
- tileList.add(secondRotated);
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("1")
- || coder.getHexaDecimal(thirdRotated).equals("2") || coder.getHexaDecimal(thirdRotated).equals("3")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }else{
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("1")
- || coder.getHexaDecimal(tile).equals("8") || coder.getHexaDecimal(tile).equals("9")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("1")
- || coder.getHexaDecimal(firstRotated).equals("8") || coder.getHexaDecimal(firstRotated).equals("9")){
- tileList.add(firstRotated);
- }
- if(!secondRotated.getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated).equals("0") || coder.getHexaDecimal(secondRotated).equals("1")
- || coder.getHexaDecimal(secondRotated).equals("8") || coder.getHexaDecimal(secondRotated).equals("9")){
- tileList.add(secondRotated);
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("1")
- || coder.getHexaDecimal(thirdRotated).equals("8") || coder.getHexaDecimal(thirdRotated).equals("9")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }
- }
- public ArrayList<Tile> getPossibleRotationsOnEdgesFirstLine(Tile tile, Tile [][] tileArr, int row, int col){
- ArrayList<Tile> tileList = new ArrayList<Tile>();
- BlobCoder coder = new BlobCoder();
- Tile firstRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),tile.getRotatedTile().getOrientation());
- Tile secondRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),firstRotated.getRotatedTile().getOrientation());
- Tile thirdRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),secondRotated.getRotatedTile().getOrientation());
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("1")
- || coder.getHexaDecimal(tile).equals("2") || coder.getHexaDecimal(tile).equals("3")
- || coder.getHexaDecimal(tile).equals("8") || coder.getHexaDecimal(tile).equals("9")
- || coder.getHexaDecimal(tile).equals("A") || coder.getHexaDecimal(tile).equals("B")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("1")
- ||coder.getHexaDecimal(firstRotated).equals("2") || coder.getHexaDecimal(firstRotated).equals("3")
- ||coder.getHexaDecimal(firstRotated).equals("8") || coder.getHexaDecimal(firstRotated).equals("9")
- || coder.getHexaDecimal(firstRotated).equals("A") || coder.getHexaDecimal(firstRotated).equals("B")){
- tileList.add(firstRotated);
- }
- if(!secondRotated.getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated).equals("0") || coder.getHexaDecimal(secondRotated).equals("1")
- ||coder.getHexaDecimal(secondRotated).equals("2") || coder.getHexaDecimal(secondRotated).equals("3")
- ||coder.getHexaDecimal(secondRotated).equals("8") || coder.getHexaDecimal(secondRotated).equals("9")
- ||coder.getHexaDecimal(secondRotated).equals("A") || coder.getHexaDecimal(secondRotated).equals("B")){
- tileList.add(secondRotated);
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("1")
- || coder.getHexaDecimal(thirdRotated).equals("2") || coder.getHexaDecimal(thirdRotated).equals("3")
- || coder.getHexaDecimal(thirdRotated).equals("8") || coder.getHexaDecimal(thirdRotated).equals("9")
- ||coder.getHexaDecimal(thirdRotated).equals("A") || coder.getHexaDecimal(thirdRotated).equals("B")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }
- public ArrayList<Tile> getPossibleRotationsOnEdgesMiddleLines(Tile tile, Tile [][]tileArr, int row, int col){
- ArrayList<Tile> tileList = new ArrayList<Tile>();
- BlobCoder coder = new BlobCoder();
- Tile firstRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),tile.getRotatedTile().getOrientation());
- Tile secondRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),firstRotated.getRotatedTile().getOrientation());
- Tile thirdRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),secondRotated.getRotatedTile().getOrientation());
- if(col == 0){
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("1")
- || coder.getHexaDecimal(tile).equals("2") || coder.getHexaDecimal(tile).equals("3")
- || coder.getHexaDecimal(tile).equals("4") || coder.getHexaDecimal(tile).equals("5")
- || coder.getHexaDecimal(tile).equals("6") || coder.getHexaDecimal(tile).equals("7")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("1")
- ||coder.getHexaDecimal(firstRotated).equals("2") || coder.getHexaDecimal(firstRotated).equals("3")
- ||coder.getHexaDecimal(firstRotated).equals("4") || coder.getHexaDecimal(firstRotated).equals("5")
- || coder.getHexaDecimal(firstRotated).equals("6") || coder.getHexaDecimal(firstRotated).equals("7")){
- tileList.add(firstRotated);
- }
- if(!secondRotated.getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated).equals("0") || coder.getHexaDecimal(secondRotated).equals("1")
- ||coder.getHexaDecimal(secondRotated).equals("2") || coder.getHexaDecimal(secondRotated).equals("3")
- ||coder.getHexaDecimal(secondRotated).equals("4") || coder.getHexaDecimal(secondRotated).equals("5")
- ||coder.getHexaDecimal(secondRotated).equals("6") || coder.getHexaDecimal(secondRotated).equals("7")){
- tileList.add(secondRotated);
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("1")
- || coder.getHexaDecimal(thirdRotated).equals("2") || coder.getHexaDecimal(thirdRotated).equals("3")
- || coder.getHexaDecimal(thirdRotated).equals("4") || coder.getHexaDecimal(thirdRotated).equals("5")
- ||coder.getHexaDecimal(thirdRotated).equals("6") || coder.getHexaDecimal(thirdRotated).equals("7")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }else{
- if(coder.getHexaDecimal(tile).equals("0") || coder.getHexaDecimal(tile).equals("1")
- || coder.getHexaDecimal(tile).equals("4") || coder.getHexaDecimal(tile).equals("5")
- || coder.getHexaDecimal(tile).equals("8") || coder.getHexaDecimal(tile).equals("9")
- || coder.getHexaDecimal(tile).equals("C") || coder.getHexaDecimal(tile).equals("D")){
- tileList.add(tile);
- }
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- if(coder.getHexaDecimal(firstRotated).equals("0") || coder.getHexaDecimal(firstRotated).equals("1")
- ||coder.getHexaDecimal(firstRotated).equals("4") || coder.getHexaDecimal(firstRotated).equals("5")
- ||coder.getHexaDecimal(firstRotated).equals("8") || coder.getHexaDecimal(firstRotated).equals("9")
- || coder.getHexaDecimal(firstRotated).equals("C") || coder.getHexaDecimal(firstRotated).equals("D")){
- tileList.add(firstRotated);
- }
- if(!secondRotated.getType().equals(TileType.STRAIGHT)){
- if(coder.getHexaDecimal(secondRotated).equals("0") || coder.getHexaDecimal(secondRotated).equals("1")
- ||coder.getHexaDecimal(secondRotated).equals("4") || coder.getHexaDecimal(secondRotated).equals("5")
- ||coder.getHexaDecimal(secondRotated).equals("8") || coder.getHexaDecimal(secondRotated).equals("9")
- ||coder.getHexaDecimal(secondRotated).equals("C") || coder.getHexaDecimal(secondRotated).equals("D")){
- tileList.add(secondRotated);
- }
- if(coder.getHexaDecimal(thirdRotated).equals("0") || coder.getHexaDecimal(thirdRotated).equals("1")
- || coder.getHexaDecimal(thirdRotated).equals("4") || coder.getHexaDecimal(thirdRotated).equals("5")
- || coder.getHexaDecimal(thirdRotated).equals("8") || coder.getHexaDecimal(thirdRotated).equals("9")
- ||coder.getHexaDecimal(thirdRotated).equals("C") || coder.getHexaDecimal(thirdRotated).equals("D")){
- tileList.add(thirdRotated);
- }
- }
- }
- return tileList;
- }
- }
- public ArrayList<Tile> getPossibleRotationsOnCenterMiddleLines(Tile tile, Tile [][] tileArr, int row, int col){
- ArrayList<Tile> tileList = new ArrayList<Tile>();
- Tile firstRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),tile.getRotatedTile().getOrientation());
- Tile secondRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),firstRotated.getRotatedTile().getOrientation());
- Tile thirdRotated = new Tile(new CoordinatesOfTile(row,col),tile.getType(),secondRotated.getRotatedTile().getOrientation());
- tileList.add(tile);
- if(!firstRotated.getType().equals(TileType.EMPTY) && !firstRotated.getType().equals(TileType.CROSS)){
- tileList.add(firstRotated);
- if(!secondRotated.getType().equals(TileType.STRAIGHT)){
- tileList.add(secondRotated);
- tileList.add(thirdRotated);
- }
- }
- return tileList;
- }
- public boolean isCorner(int i, int j, int height, int width){
- if(i == 0 || i == height){
- if(j == 0 || j == width){
- return true;
- }else{
- return false;
- }
- }else{
- return false;
- }
- }
- public boolean isEdges(int i, int j, int height, int width){
- if(i == 0 || i == height){
- if(j!= 0 && j!= width){
- return true;
- }else{
- return false;
- }
- }else{
- if(j == 0 || j == width){
- return true;
- }else{
- return false;
- }
- }
- }
- public boolean isCenter(int i, int j, int width, int height){
- if(isEdges(i, j, width, height) == false && isCorner(i, j, width, height) == false){
- return true;
- }else{
- return false;
- }
- }
- public ArrayList<Tile> rotationByNeighbourhood(Tile[][] field, int x, int y, int neighbourhood){
- boolean left = false, up = false, right = false, down = false;
- boolean leftN = false, upN = false, rightN = false, downN = false;
- if(neighbourhood-8 >= 0){
- leftN = true;
- neighbourhood -= 8;
- }
- if(neighbourhood-4 >= 0){
- upN = true;
- neighbourhood -= 4;
- }
- if(neighbourhood-2 >= 0){
- rightN = true;
- neighbourhood -= 2;
- }
- if(neighbourhood-1 >= 0){
- downN = true;
- }
- ArrayList<Tile> returningList = new ArrayList<>();
- if(leftN){
- left=field[x][y-1].hasConnectionTo(Orientation.LEFT);
- }
- if(upN){
- up=field[x-1][y].hasConnectionTo(Orientation.UP);
- }
- if(rightN){
- right=field[x][y+1].hasConnectionTo(Orientation.RIGHT);
- }
- if(downN){
- down=field[x+1][y].hasConnectionTo(Orientation.DOWN);
- }
- TileType type = field[x][y].getType();
- if((left && up && right && down && type != TileType.CROSS) ||
- (!left && up && right && down && type == TileType.CROSS) ||
- (left && !up && right && down && type == TileType.CROSS) ||
- (left && up && !right && down && type == TileType.CROSS) ||
- (left && up && right && !down && type == TileType.CROSS)){
- return returningList;
- } else if(type == TileType.CROSS){
- Orientation[] or = {Orientation.DOWN, Orientation.LEFT, Orientation.UP, Orientation.RIGHT};
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.CROSS, or));
- return returningList;
- }
- if(type == TileType.DEAD_END){
- // Wenn mindestens zwei Nachbarn eine Verbindung haben, funktioniert das Feld so nicht.
- if(!((left && up) || (left && right) || (left && down) || (up && down) || (up && right) || (down && right))){
- Orientation[] or = new Orientation[1];
- if(left){
- or[0] = Orientation.LEFT;
- }
- if(up){
- or[0] = Orientation.UP;
- }
- if(right){
- or[0] = Orientation.RIGHT;
- }
- if(down){
- or[0] = Orientation.DOWN;
- }
- if(or[0] != null){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.DEAD_END, or));
- }else{
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.DEAD_END, Orientation.DOWN));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.DEAD_END, Orientation.UP));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.DEAD_END, Orientation.LEFT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.DEAD_END, Orientation.RIGHT));
- }
- }
- return returningList;
- }
- if(type == TileType.BEND){
- int connection = 0 + (left?1:0) + (up?1:0) + (right?1:0) + (down?1:0);
- switch(connection){
- case 0:
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.DOWN));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.UP));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.LEFT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.RIGHT));
- return returningList;
- case 1:
- if(left){
- if(!down)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.LEFT));
- if(!up)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.DOWN));
- return returningList;
- }else if(up){
- if(!left)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.UP));
- if(!right)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.LEFT));
- return returningList;
- }else if(down){
- if(!right)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.DOWN));
- if(!left)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.RIGHT));
- return returningList;
- }else{
- if(!down)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.UP));
- if(!left)
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.RIGHT));
- return returningList;
- }
- case 2:
- if(left && up){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.LEFT));
- }
- if(right && up){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.UP));
- }
- if(left && down){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.DOWN));
- }
- if(right && down){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.BEND, Orientation.RIGHT));
- }
- return returningList;
- default:
- return returningList;
- }
- }
- if(type == TileType.STRAIGHT){
- Orientation[] or = new Orientation[2];
- if((left && right && !up && !down) || (right && !up && !down) ||
- (left && !up && !down) || (left && right && !up) ||
- (left && right && !down) || (left && right) || (left && !up) ||
- (right && !up) || (left && !down) || (right && !down) || (!up && !down)){
- or[0] = Orientation.LEFT;
- or[1] = Orientation.RIGHT;
- returningList.add(new Tile(new CoordinatesOfTile(x,y), TileType.STRAIGHT, or));
- }
- if((!left && !right && up && down) || (!right && up && down) ||
- (!left && up && down) || (!left && !right && up) ||
- (!left && !right && down)|| (!left && !right) || (!left && up) ||
- (!right && up) || (!left && down) || (!right && down) || (up && down)){
- or[0] = Orientation.UP;
- or[1] = Orientation.DOWN;
- returningList.add(new Tile(new CoordinatesOfTile(x,y), TileType.STRAIGHT, or));
- }
- return returningList;
- }
- if(type == TileType.TEE){
- int connection = 0 + (left?1:0) + (up?1:0) + (right?1:0) + (down?1:0);
- int known = 0 + (leftN?1:0) + (upN?1:0) + (rightN?1:0) + (downN?1:0);
- if(known >= connection + 2) return returningList;
- switch(connection){
- case 3:
- if(left && up && right){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.LEFT));
- }
- if(down && up && right){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.UP));
- }
- if(left && down && right){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.RIGHT));
- }
- if(left && down && up){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.DOWN));
- }
- return returningList;
- case 2:
- if(left && up){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.LEFT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.DOWN));
- }
- if(left && down){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.DOWN));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.RIGHT));
- }
- if(up && right){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.UP));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.LEFT));
- }
- if(down && right){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.RIGHT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.UP));
- }
- if(left && right){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.RIGHT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.LEFT));
- }
- if(up && down){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.DOWN));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.UP));
- }
- return returningList;
- case 1:
- if(left){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.RIGHT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.LEFT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.DOWN));
- }
- if(right){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.RIGHT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.LEFT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.UP));
- }
- if(up){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.LEFT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.DOWN));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.UP));
- }
- if(down){
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.RIGHT));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.DOWN));
- returningList.add(new Tile(new CoordinatesOfTile(x, y), TileType.TEE, Orientation.UP));
- }
- default:
- return returningList;
- }
- }
- return returningList;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement