Guest User

mapgen

a guest
Jan 16th, 2024
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.79 KB | Help | 0 0
  1. import java.util.*;
  2. class mapGen{
  3.   private static final int mapX = 5;
  4.   private static final int mapY = 4;
  5.   private static final int maxChecks = 1000;
  6.   public static int[][][] map = new int[6][11][16];
  7.   public static int[][][] exits = new int[20][4][2];
  8.   public static Set<Integer> usedRooms = new HashSet<Integer>();
  9.   public static void genMap(){
  10.     boolean impossible = false;
  11.     int checks = 0;
  12.     for(int i = 0; i < mapY; i++){
  13.       for(int j = 0; j < mapX; j++){
  14.         map[i][j][0] = 15;
  15.       }
  16.     }
  17.        
  18.     for(int i = 0; i < mapY; i++){
  19.       for(int j = 0; j < mapX; j++){
  20.         impossible = true;
  21.         checks = 0;
  22.         usedRooms.clear();
  23.         while(impossible){
  24.           checks += 1;
  25.           map[i][j][0] = (int) (Math.random() * 14);
  26.           while(true){
  27.             if(usedRooms.contains(map[i][j][0]) && usedRooms.size() != 14){
  28.               System.out.println("tryed to input" + map[i][j][0]);
  29.               System.out.println("already inputted: " + usedRooms.toString());
  30.               map[i][j][0] = (int) (Math.random() * 14);
  31.             } else {
  32.               break;
  33.             }
  34.           }
  35.           System.out.println(checks + "/" + maxChecks);
  36.           if(checks >= maxChecks){
  37.             map[i][j][0] = 15;
  38.             impossible = false;
  39.           }
  40.           switch(map[i][j][0]){
  41.             case 0:
  42.                 if(doors.getExit(getNorth(i, j), "south")){
  43.                   map[i][j][0] = 0;
  44.                   impossible = false;
  45.                 }
  46.                 break;
  47.             case 1:
  48.               if(doors.getExit(getEast(i, j), "west")){
  49.                 map[i][j][0] = 1;
  50.                 impossible = false;
  51.               }
  52.               break;
  53.             case 2:
  54.               if(doors.getExit(getSouth(i, j), "north")){
  55.                 map[i][j][0] = 2;
  56.                 impossible = false;
  57.               }
  58.               break;
  59.             case 3:
  60.               if(doors.getExit(getWest(i, j), "east")){
  61.                 map[i][j][0] = 3;
  62.                 impossible = false;
  63.               }
  64.               break;
  65.             case 4:
  66.               if(doors.getExit(getNorth(i, j), "south")){
  67.                 if(doors.getExit(getEast(i, j), "west")){
  68.                   map[i][j][0] = 4;
  69.                   impossible = false;
  70.                 }
  71.               }
  72.               break;
  73.             case 5:
  74.               if(doors.getExit(getSouth(i, j), "north")){
  75.                 if(doors.getExit(getEast(i, j), "west")){
  76.                   map[i][j][0] = 5;
  77.                   impossible = false;
  78.                 }
  79.               }
  80.               break;
  81.             case 6:
  82.               if(doors.getExit(getNorth(i, j), "south")){
  83.                 if(doors.getExit(getWest(i, j), "east")){
  84.                   map[i][j][0] = 6;
  85.                   impossible = false;
  86.                 }
  87.               }
  88.               break;
  89.             case 7:
  90.               if(doors.getExit(getSouth(i, j), "north")){
  91.                 if(doors.getExit(getWest(i, j), "east")){
  92.                   map[i][j][0] = 7;
  93.                   impossible = false;
  94.                 }
  95.               }
  96.               break;
  97.             case 8:
  98.               if(doors.getExit(getNorth(i, j), "south")){
  99.                 if(doors.getExit(getSouth(i, j), "north")){
  100.                   map[i][j][0] = 8;
  101.                   impossible = false;
  102.                 }
  103.               }
  104.               break;
  105.             case 9:
  106.               if(doors.getExit(getEast(i, j), "west")){
  107.                 if(doors.getExit(getWest(i, j), "east")){
  108.                   map[i][j][0] = 9;
  109.                   impossible = false;
  110.                 }
  111.               }
  112.               break;
  113.             case 10:
  114.               if(doors.getExit(getNorth(i, j), "south")){
  115.                 if(doors.getExit(getEast(i, j), "west")){
  116.                   if(doors.getExit(getSouth(i, j), "north")){
  117.                     map[i][j][0] = 10;
  118.                     impossible = false;
  119.                   }
  120.                 }
  121.               }
  122.               break;
  123.             case 11:
  124.               if(doors.getExit(getNorth(i, j), "south")){
  125.                 if(doors.getExit(getWest(i, j), "east")){
  126.                   if(doors.getExit(getSouth(i, j), "north")){
  127.                     map[i][j][0] = 11;
  128.                     impossible = false;
  129.                   }
  130.                 }
  131.               }
  132.               break;
  133.             case 12:
  134.               if(doors.getExit(getSouth(i, j), "north")){
  135.                 if(doors.getExit(getEast(i, j), "west")){
  136.                   if(doors.getExit(getWest(i, j), "east")){
  137.                     map[i][j][0] = 12;
  138.                     impossible = false;
  139.                   }
  140.                 }
  141.               }
  142.               break;
  143.              case 13:
  144.               if(doors.getExit(getNorth(i, j), "south")){
  145.                 if(doors.getExit(getEast(i, j), "west")){
  146.                   if(doors.getExit(getWest(i, j), "east")){
  147.                     map[i][j][0] = 13;
  148.                     impossible = false;
  149.                   }
  150.                 }
  151.               }
  152.               break;
  153.             case 14:
  154.               if(doors.getExit(getNorth(i, j), "south")){
  155.                 if(doors.getExit(getEast(i, j), "west")){
  156.                   if(doors.getExit(getSouth(i, j), "north")){
  157.                     if(doors.getExit(getWest(i, j), "east")){
  158.                       map[i][j][0] = 14;
  159.                       impossible = false;
  160.                     }
  161.                   }
  162.                 }
  163.               }
  164.               break;
  165.            
  166.           }
  167.           usedRooms.add(map[i][j][0]);
  168.         }
  169.       }
  170.     }
  171.   }
  172.   private static int getNorth(int y, int x) {
  173.     if (y < 14) {
  174.             return map[y+1][x][0];
  175.         } else {
  176.             return 15;
  177.         }
  178.     }
  179.   private static int getEast(int y, int x) {
  180.       // if (x < 14) {
  181.         if(Math.random() * 2 == 1){
  182.           return 14;
  183.         } else {
  184.           return 15;
  185.         }
  186.         //   return map[y][x+1][0];
  187.       // } else {
  188.           // return 15;
  189.       // }
  190.   }
  191.   private static int getSouth(int y, int x) {
  192.       // if (y > 0) {
  193.         if(Math.random() * 2 == 1){
  194.           return 14;
  195.         } else {
  196.           return 15;
  197.         }
  198.           // return 14;
  199.       // } else {
  200.       //     return 15;
  201.       // }
  202.   }
  203.   private static int getWest(int y, int x){
  204.     if (x > 0) {
  205.       return map[y][x-1][0];
  206.         } else {
  207.             return 15;
  208.         }
  209.     }
  210.  
  211.   public static void printFullMap(){
  212.     for(int i = 0; i < mapY; i++){
  213.       for(int j = 0; j < mapX; j++){
  214.           switch(map[i][j][0]){
  215.             case 0:
  216.               System.out.print("⬆");
  217.               break;
  218.             case 1:
  219.               System.out.print("➡");
  220.               break;
  221.             case 2:
  222.               System.out.print("⬇");
  223.               break;
  224.             case 3:
  225.               System.out.print("⬅");
  226.               break;
  227.             case 4:
  228.               System.out.print("L");
  229.               break;
  230.             case 5:
  231.               System.out.print("ㄴ");
  232.               break;
  233.             case 6:
  234.               System.out.print("」");
  235.               break;
  236.             case 7:
  237.               System.out.print("フ");
  238.               break;
  239.             case 8:
  240.               System.out.print("|");
  241.               break;
  242.             case 9:
  243.               System.out.print("-");
  244.               break;
  245.             case 10:
  246.               System.out.print("ㅓ");
  247.               break;
  248.             case 11:
  249.               System.out.print("⊦");
  250.               break;
  251.             case 12:
  252.               System.out.print("ㅜ");
  253.               break;
  254.             case 13:
  255.               System.out.print("ㅗ");
  256.               break;
  257.             case 14:
  258.               System.out.print("+");
  259.               break;
  260.             case 15:
  261.               System.out.print("▧");
  262.               break;
  263.           }
  264.       }
  265.       System.out.println();
  266.     }
  267.   }
  268. }
  269. enum doors{
  270.   north(0, true, false, false, false),
  271.   east(1, false, true, false, false),
  272.   south(2, false, false, true, false),
  273.   west(3, false, false, false, true),
  274.   northEast(4, true, true, false, false),
  275.   southEast(5, false, true, true, false),
  276.   northWest(6, true, false, false, true),
  277.   southWest(7, false, false, true, true),
  278.   northSouth(8, true, false, true, false),
  279.   eastWest(9, false, true, false, true),
  280.   northEastSouth(10, true, true, true, false),
  281.   northWestSouth(11, true, false, true, true),
  282.   eastWestSouth(12, false, true, true, true),
  283.   eastWestNorth(13, true, true, false, true),
  284.   northEastSouthWest(14, true, true, true, true),
  285.   noExits(15, false, false, false, false);
  286.  
  287.   private final int id;
  288.   private final boolean northExit;
  289.   private final boolean eastExit;
  290.   private final boolean southExit;
  291.   private final boolean westExit;
  292.  
  293.   private doors(int id, boolean north, boolean east, boolean south, boolean west){
  294.     this.id = id;
  295.     this.northExit = north;
  296.     this.eastExit = east;
  297.     this.southExit = south;
  298.     this.westExit = west;
  299.   }
  300.   public static doors getDoor(int id){
  301.     for(doors door : doors.values()){
  302.       if(door.id == id){
  303.         return door;
  304.       }
  305.     }
  306.     return null;
  307.   }
  308.   public static boolean getExit(int id, String exit) {
  309.       for(doors e : values()) {
  310.         switch(exit){
  311.           case "north":
  312.             if(e.id == id && e.northExit) return true;
  313.             break;
  314.           case "east":
  315.             if(e.id == id && e.eastExit) return true;
  316.             break;
  317.           case "south":
  318.             if(e.id == id && e.southExit) return true;
  319.             break;
  320.           case "west":
  321.             if(e.id == id && e.westExit) return true;
  322.             break;
  323.         }
  324.       }
  325.       return false;
  326.   }
  327. }
Advertisement
Add Comment
Please, Sign In to add comment