Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- class mapGen{
- private static final int mapX = 5;
- private static final int mapY = 4;
- private static final int maxChecks = 1000;
- public static int[][][] map = new int[6][11][16];
- public static int[][][] exits = new int[20][4][2];
- public static Set<Integer> usedRooms = new HashSet<Integer>();
- public static void genMap(){
- boolean impossible = false;
- int checks = 0;
- for(int i = 0; i < mapY; i++){
- for(int j = 0; j < mapX; j++){
- map[i][j][0] = 15;
- }
- }
- for(int i = 0; i < mapY; i++){
- for(int j = 0; j < mapX; j++){
- impossible = true;
- checks = 0;
- usedRooms.clear();
- while(impossible){
- checks += 1;
- map[i][j][0] = (int) (Math.random() * 14);
- while(true){
- if(usedRooms.contains(map[i][j][0]) && usedRooms.size() != 14){
- System.out.println("tryed to input" + map[i][j][0]);
- System.out.println("already inputted: " + usedRooms.toString());
- map[i][j][0] = (int) (Math.random() * 14);
- } else {
- break;
- }
- }
- System.out.println(checks + "/" + maxChecks);
- if(checks >= maxChecks){
- map[i][j][0] = 15;
- impossible = false;
- }
- switch(map[i][j][0]){
- case 0:
- if(doors.getExit(getNorth(i, j), "south")){
- map[i][j][0] = 0;
- impossible = false;
- }
- break;
- case 1:
- if(doors.getExit(getEast(i, j), "west")){
- map[i][j][0] = 1;
- impossible = false;
- }
- break;
- case 2:
- if(doors.getExit(getSouth(i, j), "north")){
- map[i][j][0] = 2;
- impossible = false;
- }
- break;
- case 3:
- if(doors.getExit(getWest(i, j), "east")){
- map[i][j][0] = 3;
- impossible = false;
- }
- break;
- case 4:
- if(doors.getExit(getNorth(i, j), "south")){
- if(doors.getExit(getEast(i, j), "west")){
- map[i][j][0] = 4;
- impossible = false;
- }
- }
- break;
- case 5:
- if(doors.getExit(getSouth(i, j), "north")){
- if(doors.getExit(getEast(i, j), "west")){
- map[i][j][0] = 5;
- impossible = false;
- }
- }
- break;
- case 6:
- if(doors.getExit(getNorth(i, j), "south")){
- if(doors.getExit(getWest(i, j), "east")){
- map[i][j][0] = 6;
- impossible = false;
- }
- }
- break;
- case 7:
- if(doors.getExit(getSouth(i, j), "north")){
- if(doors.getExit(getWest(i, j), "east")){
- map[i][j][0] = 7;
- impossible = false;
- }
- }
- break;
- case 8:
- if(doors.getExit(getNorth(i, j), "south")){
- if(doors.getExit(getSouth(i, j), "north")){
- map[i][j][0] = 8;
- impossible = false;
- }
- }
- break;
- case 9:
- if(doors.getExit(getEast(i, j), "west")){
- if(doors.getExit(getWest(i, j), "east")){
- map[i][j][0] = 9;
- impossible = false;
- }
- }
- break;
- case 10:
- if(doors.getExit(getNorth(i, j), "south")){
- if(doors.getExit(getEast(i, j), "west")){
- if(doors.getExit(getSouth(i, j), "north")){
- map[i][j][0] = 10;
- impossible = false;
- }
- }
- }
- break;
- case 11:
- if(doors.getExit(getNorth(i, j), "south")){
- if(doors.getExit(getWest(i, j), "east")){
- if(doors.getExit(getSouth(i, j), "north")){
- map[i][j][0] = 11;
- impossible = false;
- }
- }
- }
- break;
- case 12:
- if(doors.getExit(getSouth(i, j), "north")){
- if(doors.getExit(getEast(i, j), "west")){
- if(doors.getExit(getWest(i, j), "east")){
- map[i][j][0] = 12;
- impossible = false;
- }
- }
- }
- break;
- case 13:
- if(doors.getExit(getNorth(i, j), "south")){
- if(doors.getExit(getEast(i, j), "west")){
- if(doors.getExit(getWest(i, j), "east")){
- map[i][j][0] = 13;
- impossible = false;
- }
- }
- }
- break;
- case 14:
- if(doors.getExit(getNorth(i, j), "south")){
- if(doors.getExit(getEast(i, j), "west")){
- if(doors.getExit(getSouth(i, j), "north")){
- if(doors.getExit(getWest(i, j), "east")){
- map[i][j][0] = 14;
- impossible = false;
- }
- }
- }
- }
- break;
- }
- usedRooms.add(map[i][j][0]);
- }
- }
- }
- }
- private static int getNorth(int y, int x) {
- if (y < 14) {
- return map[y+1][x][0];
- } else {
- return 15;
- }
- }
- private static int getEast(int y, int x) {
- // if (x < 14) {
- if(Math.random() * 2 == 1){
- return 14;
- } else {
- return 15;
- }
- // return map[y][x+1][0];
- // } else {
- // return 15;
- // }
- }
- private static int getSouth(int y, int x) {
- // if (y > 0) {
- if(Math.random() * 2 == 1){
- return 14;
- } else {
- return 15;
- }
- // return 14;
- // } else {
- // return 15;
- // }
- }
- private static int getWest(int y, int x){
- if (x > 0) {
- return map[y][x-1][0];
- } else {
- return 15;
- }
- }
- public static void printFullMap(){
- for(int i = 0; i < mapY; i++){
- for(int j = 0; j < mapX; j++){
- switch(map[i][j][0]){
- case 0:
- System.out.print("⬆");
- break;
- case 1:
- System.out.print("➡");
- break;
- case 2:
- System.out.print("⬇");
- break;
- case 3:
- System.out.print("⬅");
- break;
- case 4:
- System.out.print("L");
- break;
- case 5:
- System.out.print("ㄴ");
- break;
- case 6:
- System.out.print("」");
- break;
- case 7:
- System.out.print("フ");
- break;
- case 8:
- System.out.print("|");
- break;
- case 9:
- System.out.print("-");
- break;
- case 10:
- System.out.print("ㅓ");
- break;
- case 11:
- System.out.print("⊦");
- break;
- case 12:
- System.out.print("ㅜ");
- break;
- case 13:
- System.out.print("ㅗ");
- break;
- case 14:
- System.out.print("+");
- break;
- case 15:
- System.out.print("▧");
- break;
- }
- }
- System.out.println();
- }
- }
- }
- enum doors{
- north(0, true, false, false, false),
- east(1, false, true, false, false),
- south(2, false, false, true, false),
- west(3, false, false, false, true),
- northEast(4, true, true, false, false),
- southEast(5, false, true, true, false),
- northWest(6, true, false, false, true),
- southWest(7, false, false, true, true),
- northSouth(8, true, false, true, false),
- eastWest(9, false, true, false, true),
- northEastSouth(10, true, true, true, false),
- northWestSouth(11, true, false, true, true),
- eastWestSouth(12, false, true, true, true),
- eastWestNorth(13, true, true, false, true),
- northEastSouthWest(14, true, true, true, true),
- noExits(15, false, false, false, false);
- private final int id;
- private final boolean northExit;
- private final boolean eastExit;
- private final boolean southExit;
- private final boolean westExit;
- private doors(int id, boolean north, boolean east, boolean south, boolean west){
- this.id = id;
- this.northExit = north;
- this.eastExit = east;
- this.southExit = south;
- this.westExit = west;
- }
- public static doors getDoor(int id){
- for(doors door : doors.values()){
- if(door.id == id){
- return door;
- }
- }
- return null;
- }
- public static boolean getExit(int id, String exit) {
- for(doors e : values()) {
- switch(exit){
- case "north":
- if(e.id == id && e.northExit) return true;
- break;
- case "east":
- if(e.id == id && e.eastExit) return true;
- break;
- case "south":
- if(e.id == id && e.southExit) return true;
- break;
- case "west":
- if(e.id == id && e.westExit) return true;
- break;
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment