diff --git a/core/assets/tileset_floor_1.png b/core/assets/tileset_floor_1.png index 50a7897..6b62fac 100644 Binary files a/core/assets/tileset_floor_1.png and b/core/assets/tileset_floor_1.png differ diff --git a/core/src/com/dungeoncrawler/model/DungeonGenerator.java b/core/src/com/dungeoncrawler/model/DungeonGenerator.java index 64bf530..38ffa29 100644 --- a/core/src/com/dungeoncrawler/model/DungeonGenerator.java +++ b/core/src/com/dungeoncrawler/model/DungeonGenerator.java @@ -86,48 +86,54 @@ public class DungeonGenerator { } // Exit wird generiert - boolean istFertig = false; - do{ - // Zufallszahl für die Richtung wird generiert, Oben: 0, Rechts: 1, Unten: 2, Links: 3 - int direction = (int) (Math.random() * 4); + if(lvl >= 7){ + tempLevel.setExit(-1, 0); + tempLevel.setExit(-1, 1); + } + else{ + boolean istFertig = false; + do{ + // Zufallszahl für die Richtung wird generiert, Oben: 0, Rechts: 1, Unten: 2, Links: 3 + int direction = (int) (Math.random() * 4); - switch (direction) { - // Oben - case 0: - if(yPos != roomAmount - 1){ - yPos += 1; - } - break; - // Rechts - case 1: - if(xPos != roomAmount - 1){ - xPos += 1; - } - break; - // Unten - case 2: - if(yPos != 0){ - yPos -= 1; - } - break; - // Links - case 3: - if(xPos != 0){ - xPos -= 1; - } - break; - } + switch (direction) { + // Oben + case 0: + if(yPos != roomAmount - 1){ + yPos += 1; + } + break; + // Rechts + case 1: + if(xPos != roomAmount - 1){ + xPos += 1; + } + break; + // Unten + case 2: + if(yPos != 0){ + yPos -= 1; + } + break; + // Links + case 3: + if(xPos != 0){ + xPos -= 1; + } + break; + } - // An der neuen Stelle vom Cursor gibt es noch keinen Raum - if(tempLevel.getRooms()[xPos][yPos] == null){ - tempLevel.setRoom(generateRoom(sizeX, sizeY, tileSize, lvl), xPos, yPos); - - tempLevel.setExit(xPos, 0); - tempLevel.setExit(yPos, 1); - - istFertig = true; - } - } while(!istFertig); + // An der neuen Stelle vom Cursor gibt es noch keinen Raum + if(tempLevel.getRooms()[xPos][yPos] == null){ + tempLevel.setRoom(generateRoom(sizeX, sizeY, tileSize, lvl), xPos, yPos); + + tempLevel.setExit(xPos, 0); + tempLevel.setExit(yPos, 1); + + istFertig = true; + } + } while(!istFertig); + } return tempLevel; } diff --git a/core/src/com/dungeoncrawler/view/MapGenerator.java b/core/src/com/dungeoncrawler/view/MapGenerator.java index 56bdac9..5142b50 100644 --- a/core/src/com/dungeoncrawler/view/MapGenerator.java +++ b/core/src/com/dungeoncrawler/view/MapGenerator.java @@ -78,12 +78,24 @@ public class MapGenerator { // Ausgang oben if(y < l.getRooms()[0].length - 1 && l.getRooms()[x][y + 1] != null){ - // X: Exakte Mitte der Gesamtlänge, Y: Gesamtlänge - staticLayer.getCell((tempX / 2) + 1, tempY).setTile(new StaticTiledMapTile(splitTiles[0][3])); //oben1 - staticLayer.getCell((tempX / 2) + 1, tempY + 1).setTile(new StaticTiledMapTile(splitTiles[1][1])); //oben2 - staticLayer.getCell((tempX / 2) + 1, tempY + 2).setTile(new StaticTiledMapTile(splitTiles[0][1])); //oben3 - collisionLayer.getObjects().remove(top); + if(x == l.getExit()[0] && y+1 == l.getExit()[1]){ + staticLayer.getCell((tempX / 2) + 1, tempY + 1).setTile(new StaticTiledMapTile(splitTiles[1][5])); //oben1 + staticLayer.getCell((tempX / 2) + 1, tempY + 2).setTile(new StaticTiledMapTile(splitTiles[0][5])); //oben2 + staticLayer.getCell((tempX / 2) + 1, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[4][3])); //oben3 + staticLayer.getCell((tempX / 2) + 0, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[3][5])); //oben3-1 + staticLayer.getCell((tempX / 2) + 2, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[2][5])); //oben3+1 + } + else{ + // X: Exakte Mitte der Gesamtlänge, Y: Gesamtlänge + staticLayer.getCell((tempX / 2) + 1, tempY + 1).setTile(new StaticTiledMapTile(splitTiles[0][0])); //oben1 + staticLayer.getCell((tempX / 2) + 1, tempY + 2).setTile(new StaticTiledMapTile(splitTiles[0][0])); //oben2 + staticLayer.getCell((tempX / 2) + 1, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[0][0])); //oben3 + staticLayer.getCell((tempX / 2) + 0, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[3][5])); //oben3-1 + staticLayer.getCell((tempX / 2) + 2, tempY + 3).setTile(new StaticTiledMapTile(splitTiles[2][5])); //oben3+1 + } + collisionLayer.getObjects().remove(top); + RectangleMapObject tempLeft = new RectangleMapObject(0, mapDimensionY*48 - 48, (mapDimensionX / 2) * 48, 48); RectangleMapObject tempRight = new RectangleMapObject(((mapDimensionX / 2) + 1) * 48, mapDimensionY*48 - 48, (mapDimensionX / 2) * 48, 48); @@ -94,8 +106,17 @@ public class MapGenerator { // Ausgang rechts if(x < l.getRooms().length - 1 && l.getRooms()[x + 1][y] != null){ - // X: Gesamtlänge, Y: Exakte Mitte der Gesamtlänge - staticLayer.getCell(tempX, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[1][3])); //rechts + if(x+1 == l.getExit()[0] && y == l.getExit()[1]){ + staticLayer.getCell(tempX + 1, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[0][6])); //rechts + } + else{ + // X: Gesamtlänge, Y: Exakte Mitte der Gesamtlänge + staticLayer.getCell(tempX + 1, (tempY / 2) + 0).setTile(new StaticTiledMapTile(splitTiles[4][4])); //rechts-1 + staticLayer.getCell(tempX + 1, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[0][0])); //rechts1 + staticLayer.getCell(tempX + 1, (tempY / 2) + 2).setTile(new StaticTiledMapTile(splitTiles[3][1])); //rechts2 + staticLayer.getCell(tempX + 1, (tempY / 2) + 3).setTile(new StaticTiledMapTile(splitTiles[2][1])); //rechts3 + staticLayer.getCell(tempX + 1, (tempY / 2) + 4).setTile(new StaticTiledMapTile(splitTiles[2][5])); //rechts4 + } collisionLayer.getObjects().remove(right); @@ -109,8 +130,15 @@ public class MapGenerator { // Ausgang unten if(y > 0 && l.getRooms()[x][y - 1] != null){ - // X: Exakte Mitte der Gesamtlänge, Y: 0 - staticLayer.getCell((tempX / 2) + 1, 1).setTile(new StaticTiledMapTile(splitTiles[2][3])); //unten + if(x == l.getExit()[0] && y-1 == l.getExit()[1]){ + staticLayer.getCell((tempX / 2) + 1, 0).setTile(new StaticTiledMapTile(splitTiles[1][6])); //unten + } + else{ + // X: Exakte Mitte der Gesamtlänge, Y: 0 + staticLayer.getCell((tempX / 2) + 0, 0).setTile(new StaticTiledMapTile(splitTiles[4][5])); //unten-1 + staticLayer.getCell((tempX / 2) + 1, 0).setTile(new StaticTiledMapTile(splitTiles[0][0])); //unten1 + staticLayer.getCell((tempX / 2) + 2, 0).setTile(new StaticTiledMapTile(splitTiles[4][4])); //unten2 + } collisionLayer.getObjects().remove(bottom); @@ -124,8 +152,17 @@ public class MapGenerator { // Ausgang links if(x > 0 && l.getRooms()[x - 1][y] != null){ - // X: 0, Y: Exakte Mitte der Gesamtlänge - staticLayer.getCell(1, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[3][3])); //links + if(x-1 == l.getExit()[0] && y == l.getExit()[1]){ + staticLayer.getCell(0, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[2][6])); //links + } + else{ + // X: 0, Y: Exakte Mitte der Gesamtlänge + staticLayer.getCell(0, (tempY / 2) + 0).setTile(new StaticTiledMapTile(splitTiles[4][5])); //links-1 + staticLayer.getCell(0, (tempY / 2) + 1).setTile(new StaticTiledMapTile(splitTiles[0][0])); //links1 + staticLayer.getCell(0, (tempY / 2) + 2).setTile(new StaticTiledMapTile(splitTiles[3][1])); //links2 + staticLayer.getCell(0, (tempY / 2) + 3).setTile(new StaticTiledMapTile(splitTiles[2][1])); //links3 + staticLayer.getCell(0, (tempY / 2) + 4).setTile(new StaticTiledMapTile(splitTiles[3][5])); //links4 + } collisionLayer.getObjects().remove(left); @@ -198,7 +235,7 @@ public class MapGenerator { // links if(x == 0){ - cell.setTile(new StaticTiledMapTile(splitTiles[4][0])); + cell.setTile(new StaticTiledMapTile(splitTiles[4][2])); } // unten else if(y == 0){ @@ -206,19 +243,29 @@ public class MapGenerator { } // rechts else if(x == mapDimensionX - 1){ - cell.setTile(new StaticTiledMapTile(splitTiles[4][2])); + cell.setTile(new StaticTiledMapTile(splitTiles[4][0])); } // oben1 else if(y == mapDimensionY - 1){ - cell.setTile(new StaticTiledMapTile(splitTiles[3][1])); + if(x == roomDimensionX / 2 - 1 || x == roomDimensionX / 2 + 3){ + cell.setTile(new StaticTiledMapTile(splitTiles[3][1])); + } + else{ + cell.setTile(new StaticTiledMapTile(splitTiles[1][1])); + } } // oben2 else if(y == mapDimensionY){ - cell.setTile(new StaticTiledMapTile(splitTiles[2][1])); + if(x == roomDimensionX / 2 - 1 || x == roomDimensionX / 2 + 3){ + cell.setTile(new StaticTiledMapTile(splitTiles[2][1])); + } + else{ + cell.setTile(new StaticTiledMapTile(splitTiles[0][1])); + } } // oben3 else if(y == mapDimensionY + 1){ - cell.setTile(new StaticTiledMapTile(splitTiles[2][5])); + cell.setTile(new StaticTiledMapTile(splitTiles[4][3])); } else{ cell.setTile(new StaticTiledMapTile(splitTiles[bodenX][bodenY]));